//+------------------------------------------------------------------+ //| Sample.mq5 | //| Thorsten Fischer Copyright 2020 | //| https://mql5.tfsystem.de | //+------------------------------------------------------------------+ #property copyright "Thorsten Fischer Copyright 2020" #property link "https://mql5.tfsystem.de" #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 ="Sample"; // Document name ulong Expert_MagicNumber =17414; // 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_0_MA_PeriodMA =31; // Moving Average(31,0,...) Period of averaging input int Signal_0_MA_Shift =0; // Moving Average(31,0,...) Time shift input ENUM_MA_METHOD Signal_0_MA_Method =MODE_EMA; // Moving Average(31,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_0_MA_Applied =PRICE_CLOSE; // Moving Average(31,0,...) Prices series input double Signal_0_MA_Weight =1.0; // Moving Average(31,0,...) Weight [0...1.0] input int Signal_0_Stoch_PeriodK =8; // Stochastic(8,3,3,...) K-period input int Signal_0_Stoch_PeriodD =3; // Stochastic(8,3,3,...) D-period input int Signal_0_Stoch_PeriodSlow=3; // Stochastic(8,3,3,...) Period of slowing input ENUM_STO_PRICE Signal_0_Stoch_Applied =STO_LOWHIGH; // Stochastic(8,3,3,...) Prices to apply to input double Signal_0_Stoch_Weight =1.0; // Stochastic(8,3,3,...) Weight [0...1.0] input int Signal_1_MA_PeriodMA =24; // Moving Average(24,0,...) H1 Period of averaging input int Signal_1_MA_Shift =0; // Moving Average(24,0,...) H1 Time shift input ENUM_MA_METHOD Signal_1_MA_Method =MODE_SMA; // Moving Average(24,0,...) H1 Method of averaging input ENUM_APPLIED_PRICE Signal_1_MA_Applied =PRICE_CLOSE; // Moving Average(24,0,...) H1 Prices series input double Signal_1_MA_Weight =1.0; // Moving Average(24,0,...) H1 Weight [0...1.0] input int Signal_1_Stoch_PeriodK =8; // Stochastic(8,3,3,...) H4 K-period input int Signal_1_Stoch_PeriodD =3; // Stochastic(8,3,3,...) H4 D-period input int Signal_1_Stoch_PeriodSlow=3; // Stochastic(8,3,3,...) H4 Period of slowing input ENUM_STO_PRICE Signal_1_Stoch_Applied =STO_LOWHIGH; // Stochastic(8,3,3,...) H4 Prices to apply to input double Signal_1_Stoch_Weight =1.0; // Stochastic(8,3,3,...) H4 Weight [0...1.0] input int Signal_ITF_GoodHourOfDay =-1; // IntradayTimeFilter(-1,0,-1,...) Good hour input int Signal_ITF_BadHoursOfDay =0; // IntradayTimeFilter(-1,0,-1,...) Bad hours (bit-map) input int Signal_ITF_GoodDayOfWeek =-1; // IntradayTimeFilter(-1,0,-1,...) Good day of week input int Signal_ITF_BadDaysOfWeek =0; // IntradayTimeFilter(-1,0,-1,...) Bad days of week (bit-map) input double Signal_ITF_Weight =1.0; // IntradayTimeFilter(-1,0,-1,...) Weight [0...1.0] //--- inputs for money input double Money_FixLot_Lots =0.1; // Fixed volume //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; //+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Initializing expert if(!ExtExpert.Init("EURUSDc", PERIOD_M10, Expert_EveryTick, Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_0_MA_PeriodMA); filter0.Shift(Signal_0_MA_Shift); filter0.Method(Signal_0_MA_Method); filter0.Applied(Signal_0_MA_Applied); filter0.Weight(Signal_0_MA_Weight); //--- Creating filter CSignalStoch CSignalStoch *filter1=new CSignalStoch; if(filter1==NULL) { //--- failed printf(__FUNCTION__+": error creating filter1"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.AddFilter(filter1); //--- Set filter parameters filter1.PeriodK(Signal_0_Stoch_PeriodK); filter1.PeriodD(Signal_0_Stoch_PeriodD); filter1.PeriodSlow(Signal_0_Stoch_PeriodSlow); filter1.Applied(Signal_0_Stoch_Applied); filter1.Weight(Signal_0_Stoch_Weight); //--- Creating filter CSignalMA CSignalMA *filter2=new CSignalMA; if(filter2==NULL) { //--- failed printf(__FUNCTION__+": error creating filter2"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.AddFilter(filter2); //--- Set filter parameters filter2.Period(PERIOD_H1); filter2.PeriodMA(Signal_1_MA_PeriodMA); filter2.Shift(Signal_1_MA_Shift); filter2.Method(Signal_1_MA_Method); filter2.Applied(Signal_1_MA_Applied); filter2.Weight(Signal_1_MA_Weight); //--- Creating filter CSignalStoch CSignalStoch *filter3=new CSignalStoch; if(filter3==NULL) { //--- failed printf(__FUNCTION__+": error creating filter3"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.AddFilter(filter3); //--- Set filter parameters filter3.Period(PERIOD_H4); filter3.PeriodK(Signal_1_Stoch_PeriodK); filter3.PeriodD(Signal_1_Stoch_PeriodD); filter3.PeriodSlow(Signal_1_Stoch_PeriodSlow); filter3.Applied(Signal_1_Stoch_Applied); filter3.Weight(Signal_1_Stoch_Weight); //--- Creating filter CSignalITF CSignalITF *filter4=new CSignalITF; if(filter4==NULL) { //--- failed printf(__FUNCTION__+": error creating filter4"); ExtExpert.Deinit(); return(INIT_FAILED); } signal.AddFilter(filter4); //--- Set filter parameters filter4.GoodHourOfDay(Signal_ITF_GoodHourOfDay); filter4.BadHoursOfDay(Signal_ITF_BadHoursOfDay); filter4.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek); filter4.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek); filter4.Weight(Signal_ITF_Weight); //--- Creation of trailing object CTrailingNone *trailing=new CTrailingNone; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- Set trailing parameters //--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- Set money parameters money.Lots(Money_FixLot_Lots); //--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(INIT_FAILED); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(INIT_FAILED); } //--- ok return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| "Tick" event handler function | //+------------------------------------------------------------------+ void OnTick() { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| "Trade" event handler function | //+------------------------------------------------------------------+ void OnTrade() { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| "Timer" event handler function | //+------------------------------------------------------------------+ void OnTimer() { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+