//+------------------------------------------------------------------+ //| NewChatGPT2ndStrategy.mq5 | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Include | //+------------------------------------------------------------------+ #include //--- available signals #include #include #include //--- available trailing #include //--- available money management #include //+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="NewChatGPT2ndStrategy"; // Document name ulong Expert_MagicNumber =31089; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_EMA21 =21; // 21-period EMA length input int Signal_EMA50 =50; // 50-period EMA length input int Signal_EMA200 =200; // 200-period EMA length input int Signal_RSI_PeriodRSI =14; // Relative Strength Index(14,...) Period of calculation input ENUM_APPLIED_PRICE Signal_RSI_Applied =PRICE_CLOSE; // Relative Strength Index(14,...) Prices series input double Signal_RSI_HighLevel =70.0; // RSI high level input double Signal_RSI_LowLevel =-70.0; // RSI low level input double Signal_RSI_MidLevel =50.0; // RSI mid level input double Signal_RSI_Weight =1.0; // Relative Strength Index(14,...) Weight [0...1.0] input int Signal_FraMA_PeriodMA =8; // Fractal Adaptive Moving Average Period of averaging input int Signal_FraMA_Shift =0; // Fractal Adaptive Moving Average Time shift input ENUM_APPLIED_PRICE Signal_FraMA_Applied =PRICE_CLOSE; // Fractal Adaptive Moving Average Prices series input double Signal_FraMA_Weight =1.0; // Fractal Adaptive Moving Average Weight [0...1.0] //--- inputs for money input double Money_FixRisk_Percent =10.0; // Risk percentage //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; //+---------------------------------------------------------------- //| Initialization function of the expert | //+------------------------------------------------------------------+ //--- Creating filter CSignalFrAMA CSignalFrAMA *filter4=new CSignalFrAMA; if(filter4==NULL) { //--- failed printf(FUNCTION+": error creating filter4"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.AddFilter(filter4); //--- Set filter parameters filter4.PeriodMA(Signal_FraMA_PeriodMA); filter4.Shift(Signal_FraMA_Shift); filter4.Applied(Signal_FraMA_Applied); filter4.Weight(Signal_FraMA_Weight); filter4.SetID("FrAMA"); filter4.DrawStyle(DRAW_LINE); filter4.Color(Yellow); filter4.Width(2); //--- Creating trailing CTrailingNone CTrailingNone *trailing=new CTrailingNone; if(trailing==NULL) { //--- failed printf(FUNCTION+": error creating trailing"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.SetTrailing(trailing); //--- Creating money management CMoneyFixedRisk CMoneyFixedRisk *money=new CMoneyFixedRisk; if(money==NULL) { //--- failed printf(FUNCTION+": error creating money"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.SetMoney(money); //--- Set money management parameters money.SetPercent(Money_FixRisk_Percent); //--- Adding signal to expert ExtExpert.AddSignal(signal); //--- Exit return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- Deinitializing expert ExtExpert.Deinit(); //--- Exit } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- Processing new ticks ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| Expert new bar function | //+------------------------------------------------------------------+ void OnNewBar() { //--- Processing new bars ExtExpert.OnNewBar(); } //+------------------------------------------------------------------+ //| Expert trade function | //+------------------------------------------------------------------+ void OnTrade() { //--- Processing trade events ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| Expert chart event function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Processing chart events ExtExpert.OnChartEvent(id,lparam,dparam,sparam); } //--- Creating filter CSignalFrAMA CSignalFrAMA *filter4=new CSignalFrAMA; if(filter4==NULL) { //--- failed printf(FUNCTION+": error creating filter4"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.AddFilter(filter4); //--- Set filter parameters filter4.PeriodMA(Signal_FraMA_PeriodMA); filter4.Shift(Signal_FraMA_Shift); filter4.Applied(Signal_FraMA_Applied); filter4.Weight(Signal_FraMA_Weight); filter4.SetID("FrAMA"); filter4.DrawStyle(DRAW_LINE); filter4.Color(Lime); filter4.Width(2); //--- Creating trailing CTrailingNone CTrailingNone *trailing=new CTrailingNone; if(trailing==NULL) { //--- failed printf(FUNCTION+": error creating trailing"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- Creating money management CMoneyFixedRisk CMoneyFixedRisk *money=new CMoneyFixedRisk; if(money==NULL) { //--- failed printf(FUNCTION+": error creating money"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- Set money parameters money.FixRiskPercent(Money_FixRisk_Percent); money.SetID("FixedRisk"); //--- Initializing expert ExtExpert.InitMoney(money); ExtExpert.InitTrailing(trailing); //--- Initializing expert ExtExpert.InitInfo(Expert_Title); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- deinitializing expert ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- tick processing ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| Expert timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- timer processing ExtExpert.OnTimer(); } //+------------------------------------------------------------------+ //| Expert trade function | //+------------------------------------------------------------------+ void OnTrade() { //--- trade processing ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| Expert position function | //+------------------------------------------------------------------+ void OnPosition() { //--- position processing ExtExpert.OnPosition(); } //+------------------------------------------------------------------+ //| Expert graphical interface function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- graphical interface event processing ExtExpert.OnChartEvent(id,lparam,dparam,sparam); }