//+------------------------------------------------------------------+ //| Exp_2pbIdealMA.mq5 | //| Copyright © 2012, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012, Nikolay Kositsin" #property link "farria@mail.redcom.ru" #property version "1.00" //+-----------------------------------------------+ //| Expert Advisor indicator input parameters | //+-----------------------------------------------+ input double MM=-0.1; // Share of a deposit in a deal, negative values - lot size input int StopLoss_=1000; //stop loss in points input int TakeProfit_=2000; //take profit in points input int Deviation_=10; //max. price deviation in points input bool BuyPosOpen=true; // Permission to buy input bool SellPosOpen=true; // Permission to sell input bool BuyPosClose=true; // Permission to exit long positions input bool SellPosClose=true; // Permission to exit short positions //+-----------------------------------------------+ //| 2pbIdealMA indicators input parameters | //+-----------------------------------------------+ input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_H4; //indicator time frame input uint SignalBar=1;//bar index for getting an entry signal //+-----------------------------------------------+ //| 2pbIdeal1MA indicators input parameters | //+-----------------------------------------------+ input int Period1 = 10; //rough smoothing input int Period2 = 10; //adjusting smoothing //+-----------------------------------------------+ //| 2pbIdeal3MA indicators input parameters | //+-----------------------------------------------+ input int PeriodX1 = 10; //first rough smoothing input int PeriodX2 = 10; //first adjusting smoothing input int PeriodY1 = 10; //second rough smoothing input int PeriodY2 = 10; //second adjusting smoothing input int PeriodZ1 = 10; //third rough smoothing input int PeriodZ2 = 10; //third adjusting smoothing //+----------------------------------------------+ //---- Declaration of integer variables for storing a chart period in seconds int TimeShiftSec; //---- declaration of integer variables for the indicators handles int InpInd1_Handle,InpInd2_Handle; //---- declaration of the integer variables for the start of data calculation int min_rates_total; //+------------------------------------------------------------------+ // Trading algorithms | //+------------------------------------------------------------------+ #include //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- getting handle of the 2pbIdeal1MA indicator InpInd1_Handle=iCustom(Symbol(),InpInd_Timeframe,"2pbIdeal1MA",Period1,Period2,0); if(InpInd1_Handle==INVALID_HANDLE) Print("Failed to get handle of the 2pbIdeal1MA indicator"); //---- getting handle of the 2pbIdeal3MA indicator InpInd2_Handle=iCustom(Symbol(),InpInd_Timeframe,"2pbIdeal3MA",PeriodX1,PeriodX2,PeriodY1,PeriodY2,PeriodZ1,PeriodZ2,0); if(InpInd2_Handle==INVALID_HANDLE) Print("Failed to get handle of the 2pbIdeal3MA indicator"); //---- initialization of a variable for storing a chart period in seconds TimeShiftSec=PeriodSeconds(InpInd_Timeframe); //---- Initialization of variables of the start of data calculation min_rates_total=int(1+2+SignalBar); //---- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- GlobalVariableDel_(Symbol()); //---- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //---- checking the number of bars to be enough for calculation if(BarsCalculated(InpInd1_Handle)Ma2[1]) { if(BuyPosOpen && Ma1[0]Ma2[0]) SELL_Open=true; if(BuyPosClose) BUY_Close=true; DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec; } } //+----------------------------------------------+ //| Performing deals | //+----------------------------------------------+ //---- Closing a long position BuyPositionClose(BUY_Close,Symbol(),Deviation_); //---- Closing a short position SellPositionClose(SELL_Close,Symbol(),Deviation_); //---- Buying BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,0,Deviation_,StopLoss_,TakeProfit_); //---- Selling SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,0,Deviation_,StopLoss_,TakeProfit_); //---- } //+------------------------------------------------------------------+