exp_trendmagic

Author: Copyright © 2014, Nikolay Kositsin
0 Views
0 Downloads
0 Favorites
exp_trendmagic
ÿþ//+------------------------------------------------------------------+

//|                                               Exp_TrendMagic.mq5 |

//|                               Copyright © 2014, Nikolay Kositsin | 

//|                              Khabarovsk,   farria@mail.redcom.ru | 

//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, Nikolay Kositsin"

#property link      "farria@mail.redcom.ru"

#property version   "1.00"

//+----------------------------------------------+

//| Trading algorithms                           |

//+----------------------------------------------+

#include <TradeAlgorithms.mqh>

//+----------------------------------------------+

//| Enumeration for lot calculation options      |

//+----------------------------------------------+

/*enum MarginMode  - enumeration is declared in TradeAlgorithms.mqh

  {

   FREEMARGIN=0,     //MM considering account free funds

   BALANCE,          //MM considering account balance

   LOSSFREEMARGIN,   //MM for losses share from an account free funds

   LOSSBALANCE,      //MM for losses share from an account balance

   LOT               //Lot should be unchanged

  }; */

//+----------------------------------------------+

//| Input parameters of the EA indicator         |

//+----------------------------------------------+

input double MM=0.1;               // Share of a deposit in a deal

input MarginMode MMMode=LOT;       // Lot value calculation method

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

//+----------------------------------------------+

//| Indicator input parameters                   |

//+----------------------------------------------+

input ENUM_TIMEFRAMES InpInd_Timeframe=PERIOD_H4; // Indicator timeframe

input uint CCI_Period=50;                         // CCI period

input ENUM_APPLIED_PRICE   CCIPrice=PRICE_MEDIAN; // CCI price

input uint ATR_Period=5;                          // ATR period

input uint SignalBar=1;                           // Bar number for getting an entry signal

//+----------------------------------------------+

//--- Declaration of integer variables for storing the chart period in seconds 

int TimeShiftSec;

//--- declaration of integer variables for the indicators handles

int InpInd_Handle;

//--- declaration of integer variables for the start of data calculation

int min_rates_total;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

//--- getting the handle of the TrendMagic indicator

   InpInd_Handle=iCustom(Symbol(),InpInd_Timeframe,"TrendMagic",CCI_Period,CCIPrice,ATR_Period,0,0);

   if(InpInd_Handle==INVALID_HANDLE)

     {

      Print(" Failed to get the handle of the TrendMagic indicator");

      return(INIT_FAILED);

     }

//--- initialization of a variable for storing the chart period in seconds  

   TimeShiftSec=PeriodSeconds(InpInd_Timeframe);

//--- initialization of variables of the start of data calculation

   min_rates_total=int(MathMax(CCI_Period,ATR_Period));

   min_rates_total+=int(3+SignalBar);

//--- initialization end

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   GlobalVariableDel_(Symbol());

//---

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//--- checking if the number of bars is enough for the calculation

   if(BarsCalculated(InpInd_Handle)<min_rates_total) return;

//--- uploading history for IsNewBar() and SeriesInfoInteger() functions normal operation  

   LoadHistory(TimeCurrent()-PeriodSeconds(InpInd_Timeframe)-1,Symbol(),InpInd_Timeframe);

//--- declaration of local variables

   double iCol[2];

//--- declaration of static variables

   static bool Recount=true;

   static bool BUY_Open=false,BUY_Close=false;

   static bool SELL_Open=false,SELL_Close=false;

   static datetime UpSignalTime,DnSignalTime;

   static CIsNewBar NB;

//--- determining signals for deals

   if(!SignalBar || NB.IsNewBar(Symbol(),InpInd_Timeframe) || Recount) // checking for a new bar

     {

      //--- zeroing out trading signals

      BUY_Open=false;

      SELL_Open=false;

      BUY_Close=false;

      SELL_Close=false;

      Recount=false;

      //--- copy newly appeared data in the arrays

      if(CopyBuffer(InpInd_Handle,1,SignalBar,2,iCol)<=0) {Recount=true; return;}

      //--- getting buy signals

      if(iCol[1]==0)

        {

         if(BuyPosOpen && iCol[0]==1) BUY_Open=true;

         if(SellPosClose) SELL_Close=true;

         UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;

        }

      //--- Getting sell signals

      if(iCol[1]==1)

        {

         if(SellPosOpen && iCol[0]==0) SELL_Open=true;

         if(BuyPosClose) BUY_Close=true;

         DnSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;

        }

     }

//--- trading

//--- closing a long position

   BuyPositionClose(BUY_Close,Symbol(),Deviation_);

//--- closing a short position   

   SellPositionClose(SELL_Close,Symbol(),Deviation_);

//--- opening a long position

   BuyPositionOpen(BUY_Open,Symbol(),UpSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);

//--- opening a short position

   SellPositionOpen(SELL_Open,Symbol(),DnSignalTime,MM,MMMode,Deviation_,StopLoss_,TakeProfit_);

//---

  }

//+------------------------------------------------------------------+

Comments