//+------------------------------------------------------------------+ //| EMA_6_12.mq4 | //| Coders Guru | //| http://www.forex-tsd.com | //+------------------------------------------------------------------+ #property copyright "Coders Guru" #property link "http://www.forex-tsd.com" //---- Includes #include //---- Trades limits extern double TrailingStop = 40; extern double TakeProfit = 1000; //any big number extern double Lots = 1; extern int Slippage = 5; //--- External options extern int CurrentBar = 1; extern bool UseClose = true; //--- Indicators settings extern int MaMode = 1; /* MODE_SMA 0 MODE_EMA 1 MODE_SMMA 2 MODE_LWMA 3 */ extern int ShortEma = 6; extern int LongEma = 12; //--- Global variables int MagicNumber = 123430; string ExpertComment = "EMA_6_12"; bool LimitPairs = false; bool LimitFrame = false; int TimeFrame = 60; string LP[] = {"EURUSD","USDJPY","AUDUSD","USDCAD"}; // add/remove the paris you want to limit. bool Optimize = false; int NumberOfTries = 5; //+------------------------------------------------------------------ int init() { return(0); } int deinit() { return(0); } //+------------------------------------------------------------------ bool isNewSymbol(string current_symbol) { //loop through all the opened order and compare the symbols int total = OrdersTotal(); for(int cnt = 0 ; cnt < total ; cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); string selected_symbol = OrderSymbol(); if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber) return (False); } return (True); } //+------------------------------------------------------------------ int Crossed() { double EmaLongPrevious = iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar+1); double EmaLongCurrent = iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar); double EmaShortPrevious = iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar+1); double EmaShortCurrent = iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar); if (EmaShortPreviousEmaLongCurrent ) return (1); //up trend if (EmaShortPrevious>EmaLongPrevious && EmaShortCurrent0) { if(OrderMagicNumber() == MagicNumber) { if(type==OP_BUY) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); } } } } } } void CheckError(int ticket, string Type) { if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(Type + " order opened : ",OrderOpenPrice()); } else Print("Error opening " + Type + " order : ", ErrorDescription(GetLastError())); } bool AllowedPair(string pair) { bool result=false; for (int n = 0 ; n < ArraySize(LP); n++) { if(Symbol() == LP[n]) { result = true; } } return (result); }