#property copyright "Copyright © 2009, Forex Millionaire Code" #property link "http://www.forexmillionairecode.com" double gd_76 = 200.0; extern int StopLoss = 60; extern int TakeProfit = 52; extern int SpreadThreshold = 15; int gi_96; extern int PleaseEnterYourSerialNumberHere = 0; bool gi_104 = TRUE; int gi_108 = 0; int gi_112 = 1; int gi_116 = 0; extern int MagicNumber = 0; int gi_124 = 3; int gi_128 = 5; bool gi_132 = FALSE; bool gi_136 = TRUE; string gs_fmr_140 = "FMR"; extern int Slippage = 3; int gi_152 = -1; extern double Risk = 1.0; int gi_164 = 0; int g_datetime_168 = 0; double gd_172 = 0.0; double gd_180 = 0.0; int gi_188 = 0; double gd_192 = 300.0; string gs_unused_200 = "---------- Indicator Setting"; bool gi_unused_208 = FALSE; int gi_unused_212 = 0; int gi_unused_216 = 5; int gi_unused_220 = 3; int gi_unused_224 = 1; int gi_unused_228 = 5; bool gi_unused_232 = TRUE; bool gi_unused_236 = FALSE; bool gi_unused_240 = FALSE; bool gi_unused_244 = TRUE; bool gi_unused_248 = FALSE; bool gi_unused_252 = TRUE; int gi_unused_256 = 65535; int gi_unused_260 = 16776960; int gi_unused_264 = 1485; bool gi_268; int gi_272 = 5; int gi_276 = 1; double gd_280 = 0.0; int gi_288 = 7; int gi_unused_292 = 0; string gs_unused_296 = "alert.wav"; double g_iwpr_304 = 0.0; double g_iwpr_312 = 0.0; double g_iwpr_320 = 0.0; double g_iwpr_328 = 0.0; int g_spread_336 = 0; string g_name_340 = ""; int g_time_348 = 0; int init() { double ld_0 = PleaseEnterYourSerialNumberHere; double ld_8 = 3; gi_96 = AccountNumber(); gi_96 = (ld_0 - 2931.0) / ld_8; if (gi_96 == (ld_0 - 2931.0) / ld_8) { Alert("Welcome to Forex Meta Robot!"); gi_268 = TRUE; } else { Alert("You Entered an Incorrect Serial Number - The EA Will now be disabled"); gi_268 = FALSE; } gi_164 = gi_124; return (0); } int deinit() { return (0); } int start() { int l_pos_0; double ld_4; double ld_12; int l_pos_20; int l_count_24; bool li_28; bool li_32; bool li_36; bool li_40; double ld_unused_44; double ld_unused_52; double ld_unused_60; bool li_68; bool li_72; bool li_76; bool li_80; double ld_84; double ld_92; int li_100; if (gi_268 == TRUE) { g_spread_336 = MarketInfo(Symbol(), MODE_SPREAD); if (g_spread_336 < SpreadThreshold) { if (gi_104) gi_188 = 1; else gi_188 = 0; g_name_340 = Symbol() + gs_fmr_140 + "-" + Month() + "-" + Day() + ".log"; l_pos_0 = 0; ld_4 = 0; ld_12 = 0; ld_4 = 0; ld_12 = 0; if (CntOrd(OP_BUY, MagicNumber) > 0) gi_unused_292 = 1; if (CntOrd(OP_SELL, MagicNumber) > 0) gi_unused_292 = -1; g_iwpr_304 = iWPR(NULL, 0, 26, 0); g_iwpr_312 = iWPR(NULL, 0, 27, 0); g_iwpr_320 = iWPR(NULL, 0, 29, 0); g_iwpr_328 = iWPR(NULL, 0, 30, 0); if (g_iwpr_304 < -99.99 && g_iwpr_312 < -99.99 && g_iwpr_320 < -99.99 && g_iwpr_328 < -99.99) ld_4 = 1; if (g_iwpr_304 > -0.01 && g_iwpr_312 > -0.01 && g_iwpr_320 > -0.01 && g_iwpr_328 > -0.01) ld_12 = 1; l_pos_20 = 0; l_count_24 = 0; li_28 = FALSE; li_32 = FALSE; li_36 = FALSE; li_40 = FALSE; ld_unused_44 = 0; ld_unused_52 = 0; ld_unused_60 = 0; li_68 = FALSE; li_72 = TRUE; if (li_72 == TRUE) { li_72 = FALSE; g_time_348 = Time[0]; } if (g_time_348 == Time[0] && TimeCurrent() - g_time_348 > gd_192) li_68 = FALSE; else { g_time_348 = Time[0]; li_68 = TRUE; } li_76 = FALSE; li_80 = FALSE; if (TimeCurrent() >= Time[0] + 60 * Period() - gd_172) li_76 = TRUE; else li_76 = FALSE; if (TimeCurrent() >= Time[0] + 60 * Period() - gd_180) li_80 = TRUE; else li_80 = FALSE; if (gd_172 == 0.0) li_76 = TRUE; if (gd_180 == 0.0) li_80 = TRUE; gd_280 = gd_76; if (gi_152 < 0) { gd_280 = MathCeil(AccountFreeMargin() * Risk / 715.0) / 10.0 - 0.1; if (gd_280 < 0.1) gd_280 = 0.1; } if (gi_152 > 0) { gd_280 = MathCeil(AccountEquity() * Risk / 100.0) / 10.0 - 1.0; if (gd_280 > 1.0) gd_280 = MathCeil(gd_280); if (gd_280 < 1.0) gd_280 = 1; } if (gd_280 > 5.0) gd_280 = 5; l_count_24 = 0; for (l_pos_20 = 0; l_pos_20 < OrdersTotal(); l_pos_20++) { OrderSelect(l_pos_20, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_SELL || OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) l_count_24++; } if (l_count_24 >= 1) { li_28 = FALSE; li_32 = FALSE; } li_32 = FALSE; li_28 = FALSE; li_40 = FALSE; li_36 = FALSE; if (ld_12 > 0.0) { li_28 = TRUE; li_32 = FALSE; } if (ld_4 > 0.0) { li_32 = TRUE; li_28 = FALSE; } if (ld_12 > 0.0) li_40 = TRUE; if (ld_4 > 0.0) li_36 = TRUE; subPrintDetails(); for (l_pos_20 = 0; l_pos_20 < OrdersTotal(); l_pos_20++) { OrderSelect(l_pos_20, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) { if (li_40 == TRUE && li_80 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "CloseBuy" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Bid, Slippage, Red); Alerts(0, 0, li_40, li_36, Bid, 0, 0, OrderTicket()); return (0); } if (gi_188 == 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "CloseBuy" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Bid, Slippage, Red); Alerts(0, 0, li_40, li_36, Bid, 0, 0, OrderTicket()); return (0); } } } if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) { if (li_36 == TRUE && li_80 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], High[0] - 0.3 * gi_288 * Point, "CloseSell" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Ask, Slippage, Red); Alerts(0, 0, li_40, li_36, Ask, 0, 0, OrderTicket()); return (0); } if (gi_188 == 0) { SetText(Time[0], High[0] - 0.3 * gi_288 * Point, "CloseSell" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Ask, Slippage, Red); Alerts(0, 0, li_40, li_36, Ask, 0, 0, OrderTicket()); return (0); } } } } ld_84 = 0; ld_92 = 0; li_100 = 0; if (l_count_24 <= 2) { if (li_28 == TRUE && li_76 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "Sell" + DoubleToStr(Time[0], 0), CharToStr(234), 255); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Bid - TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Bid + StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 1, gd_280, Bid, Slippage, ld_84, ld_92, "", MagicNumber, 0, Red); Alerts(li_32, li_28, 0, 0, Bid, ld_84, ld_92, li_100); li_28 = FALSE; return (0); } if (gi_188 == 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "Sell" + DoubleToStr(Time[0], 0), CharToStr(234), 255); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Bid - TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Bid + StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 1, gd_280, Bid, Slippage, ld_84, ld_92, "", MagicNumber, 0, Red); Alerts(li_32, li_28, 0, 0, Bid, ld_84, ld_92, li_100); li_28 = FALSE; return (0); } } if (li_32 == TRUE && li_76 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], Low[0] - 0.3 * gi_288 * Point, "Buy" + DoubleToStr(Time[0], 0), CharToStr(233), 65280); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Ask + TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Ask - StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 0, gd_280, Ask, Slippage, ld_84, ld_92, "", MagicNumber, 0, Lime); Alerts(li_32, li_28, 0, 0, Ask, ld_84, ld_92, li_100); li_32 = FALSE; return (0); } if (gi_188 == 0) { SetText(Time[0], Low[0] - 0.3 * gi_288 * Point, "Buy" + DoubleToStr(Time[0], 0), CharToStr(233), 65280); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Ask + TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Ask - StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 0, gd_280, Ask, Slippage, ld_84, ld_92, "", MagicNumber, 0, Lime); Alerts(li_32, li_28, 0, 0, Ask, ld_84, ld_92, li_100); li_32 = FALSE; return (0); } } } for (l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) { if (OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) TrailingPositions(); } Alerts(0, 0, 0, 0, 0, 0, 0, 0); subPrintDetails(); return (0); } Comment("The Spread is to Wide for Forex Meta Robot to Trade"); if (gi_104) gi_188 = 1; else gi_188 = 0; g_name_340 = Symbol() + gs_fmr_140 + "-" + Month() + "-" + Day() + ".log"; l_pos_0 = 0; ld_4 = 0; ld_12 = 0; ld_4 = 0; ld_12 = 0; if (CntOrd(OP_BUY, MagicNumber) > 0) gi_unused_292 = 1; if (CntOrd(OP_SELL, MagicNumber) > 0) gi_unused_292 = -1; g_iwpr_304 = iWPR(NULL, 0, 26, 0); g_iwpr_312 = iWPR(NULL, 0, 27, 0); g_iwpr_320 = iWPR(NULL, 0, 29, 0); g_iwpr_328 = iWPR(NULL, 0, 30, 0); if (g_iwpr_304 < -99.99 && g_iwpr_312 < -99.99 && g_iwpr_320 < -99.99 && g_iwpr_328 < -99.99) ld_4 = 1; if (g_iwpr_304 > -0.01 && g_iwpr_312 > -0.01 && g_iwpr_320 > -0.01 && g_iwpr_328 > -0.01) ld_12 = 1; l_pos_20 = 0; l_count_24 = 0; li_28 = FALSE; li_32 = FALSE; li_36 = FALSE; li_40 = FALSE; ld_unused_44 = 0; ld_unused_52 = 0; ld_unused_60 = 0; g_time_348 = 0; li_68 = FALSE; li_72 = TRUE; if (li_72 == TRUE) { li_72 = FALSE; g_time_348 = Time[0]; } if (g_time_348 == Time[0] && TimeCurrent() - g_time_348 > gd_192) li_68 = FALSE; else { g_time_348 = Time[0]; li_68 = TRUE; } li_76 = FALSE; li_80 = FALSE; if (TimeCurrent() >= Time[0] + 60 * Period() - gd_172) li_76 = TRUE; else li_76 = FALSE; if (TimeCurrent() >= Time[0] + 60 * Period() - gd_180) li_80 = TRUE; else li_80 = FALSE; if (gd_172 == 0.0) li_76 = TRUE; if (gd_180 == 0.0) li_80 = TRUE; gd_280 = gd_76; if (gi_152 < 0) { gd_280 = MathCeil(AccountFreeMargin() * Risk / 715.0) / 10.0 - 0.1; if (gd_280 < 0.1) gd_280 = 0.1; } if (gi_152 > 0) { gd_280 = MathCeil(AccountEquity() * Risk / 100.0) / 10.0 - 1.0; if (gd_280 > 1.0) gd_280 = MathCeil(gd_280); if (gd_280 < 1.0) gd_280 = 1; } if (gd_280 > 5.0) gd_280 = 5; l_count_24 = 0; for (l_pos_20 = 0; l_pos_20 < OrdersTotal(); l_pos_20++) { OrderSelect(l_pos_20, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_SELL || OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) l_count_24++; } if (l_count_24 >= 1) { li_28 = FALSE; li_32 = FALSE; } li_32 = FALSE; li_28 = FALSE; li_40 = FALSE; li_36 = FALSE; if (ld_12 > 0.0) li_40 = TRUE; if (ld_4 > 0.0) li_36 = TRUE; for (l_pos_20 = 0; l_pos_20 < OrdersTotal(); l_pos_20++) { OrderSelect(l_pos_20, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) { if (li_40 == TRUE && li_80 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "CloseBuy" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Bid, Slippage, Red); Alerts(0, 0, li_40, li_36, Bid, 0, 0, OrderTicket()); return (0); } if (gi_188 == 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "CloseBuy" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Bid, Slippage, Red); Alerts(0, 0, li_40, li_36, Bid, 0, 0, OrderTicket()); return (0); } } } if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) { if (li_36 == TRUE && li_80 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], High[0] - 0.3 * gi_288 * Point, "CloseSell" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Ask, Slippage, Red); Alerts(0, 0, li_40, li_36, Ask, 0, 0, OrderTicket()); return (0); } if (gi_188 == 0) { SetText(Time[0], High[0] - 0.3 * gi_288 * Point, "CloseSell" + DoubleToStr(Time[0], 0), CharToStr(251), 16711935); PlaySound("alert.wav"); OrdClose(OrderTicket(), OrderLots(), Ask, Slippage, Red); Alerts(0, 0, li_40, li_36, Ask, 0, 0, OrderTicket()); return (0); } } } } ld_84 = 0; ld_92 = 0; li_100 = 0; if (l_count_24 <= 2) { if (li_28 == TRUE && li_76 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "Sell" + DoubleToStr(Time[0], 0), CharToStr(234), 255); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Bid - TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Bid + StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 1, gd_280, Bid, Slippage, ld_84, ld_92, "", MagicNumber, 0, Red); Alerts(li_32, li_28, 0, 0, Bid, ld_84, ld_92, li_100); li_28 = FALSE; return (0); } if (gi_188 == 0) { SetText(Time[0], High[0] + 1 * gi_288 * Point, "Sell" + DoubleToStr(Time[0], 0), CharToStr(234), 255); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Bid - TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Bid + StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 1, gd_280, Bid, Slippage, ld_84, ld_92, "", MagicNumber, 0, Red); Alerts(li_32, li_28, 0, 0, Bid, ld_84, ld_92, li_100); li_28 = FALSE; return (0); } } if (li_32 == TRUE && li_76 == TRUE) { if (li_68 == TRUE && gi_188 > 0) { SetText(Time[0], Low[0] - 0.3 * gi_288 * Point, "Buy" + DoubleToStr(Time[0], 0), CharToStr(233), 65280); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Ask + TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Ask - StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 0, gd_280, Ask, Slippage, ld_84, ld_92, "", MagicNumber, 0, Lime); Alerts(li_32, li_28, 0, 0, Ask, ld_84, ld_92, li_100); li_32 = FALSE; return (0); } if (gi_188 == 0) { SetText(Time[0], Low[0] - 0.3 * gi_288 * Point, "Buy" + DoubleToStr(Time[0], 0), CharToStr(233), 65280); if (TakeProfit == 0) ld_92 = 0; else ld_92 = Ask + TakeProfit * Point; if (StopLoss == 0) ld_84 = 0; else ld_84 = Ask - StopLoss * Point; PlaySound("alert.wav"); li_100 = OrdSend(Symbol(), 0, gd_280, Ask, Slippage, ld_84, ld_92, "", MagicNumber, 0, Lime); Alerts(li_32, li_28, 0, 0, Ask, ld_84, ld_92, li_100); li_32 = FALSE; return (0); } } } for (l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) { if (OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber || MagicNumber == 0) TrailingPositions(); } Alerts(0, 0, 0, 0, 0, 0, 0, 0); return (0); } return (0); } void SetText(int ai_unused_0, double ad_unused_4, string as_unused_12, string as_unused_20, int ai_unused_28) { } void Alerts(int ai_0, int ai_4, int ai_8, int ai_12, double ad_16, double ad_24, double ad_32, int ai_40) { string ls_44 = ""; ls_44 = ""; string l_time2str_52 = ""; l_time2str_52 = TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES); if (gi_132) { if (ai_0 == 1) { if (gi_164 == gi_124) g_datetime_168 = 0; if (gi_164 > 0 && TimeCurrent() - g_datetime_168 > gi_128) { if (ai_0 == 1) { ls_44 = ls_44 + "Buy @ " + DoubleToStr(ad_16, Digits) + "; SL: " + DoubleToStr(ad_24, Digits) + "; TP: " + DoubleToStr(ad_32, Digits) + " at " + l_time2str_52 + " Order:" + DoubleToStr(ai_40, 0) + "."; Alert(Symbol(), " ", Period(), ": ", ls_44); if (gi_136) SendMail(Symbol() + " " + Period() + ": ", Symbol() + " " + Period() + ": " + ls_44); gi_164--; g_datetime_168 = TimeCurrent(); } } } if (ai_4 == 1) { if (gi_164 == gi_124) g_datetime_168 = 0; if (gi_164 > 0 && TimeCurrent() - g_datetime_168 > gi_128) { if (ai_4 == 1) { ls_44 = ls_44 + "Sell @ " + DoubleToStr(ad_16, Digits) + "; SL: " + DoubleToStr(ad_24, Digits) + "; TP: " + DoubleToStr(ad_32, Digits) + " at " + l_time2str_52 + " Order:" + DoubleToStr(ai_40, 0) + "."; Alert(Symbol(), " ", Period(), ": ", ls_44); if (gi_136) SendMail(Symbol() + " " + Period() + ": ", Symbol() + " " + Period() + ": " + ls_44); gi_164--; g_datetime_168 = TimeCurrent(); } } } if (ai_12 == 1) { if (gi_164 == gi_124) g_datetime_168 = 0; if (gi_164 > 0 && TimeCurrent() - g_datetime_168 > gi_128) { if (ai_12 == 1) { ls_44 = ls_44 + " Close Sell @ " + DoubleToStr(ad_16, Digits) + " at " + l_time2str_52 + " Order:" + DoubleToStr(ai_40, 0) + "."; Alert(Symbol(), " ", Period(), ": ", ls_44); if (gi_136) SendMail(Symbol() + " " + Period() + ": ", Symbol() + " " + Period() + ": " + ls_44); gi_164--; g_datetime_168 = TimeCurrent(); } } } if (ai_8 == 1) { if (gi_164 == gi_124) g_datetime_168 = 0; if (gi_164 > 0 && TimeCurrent() - g_datetime_168 > gi_128) { if (ai_8 == 1) { ls_44 = ls_44 + " Close Buy @ " + DoubleToStr(ad_16, Digits) + " at " + l_time2str_52 + " Order:" + DoubleToStr(ai_40, 0) + "."; Alert(Symbol(), " ", Period(), ": ", ls_44); if (gi_136) SendMail(Symbol() + " " + Period() + ": ", Symbol() + " " + Period() + ": " + ls_44); gi_164--; g_datetime_168 = TimeCurrent(); } } } if (ai_8 == 0 && ai_12 == 0 && ai_0 == 0 && ai_4 == 0) { gi_164 = gi_124; g_datetime_168 = 0; } } } void subPrintDetails() { string ls_0; string ls_8 = ""; string ls_16 = "----------------------------------------\n"; string ls_24 = "\n"; string ls_unused_32 = ""; ls_8 = "Forex Meta Robot" + ls_24; ls_8 = ls_8 + "TakeProfit=" + DoubleToStr(TakeProfit, 0) + " | "; ls_8 = ls_8 + "Spread: " + g_spread_336 + ls_24; ls_8 = ls_8 + ls_16; ls_8 = ls_8 + "Lots=" + DoubleToStr(gd_280, 2) + " | "; ls_8 = ls_8 + ls_0 + ls_24; Comment(ls_8); } int CntOrd(int a_cmd_0, int a_magic_4) { int l_count_8 = 0; for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++) { OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) if (OrderType() == a_cmd_0 && OrderMagicNumber() == a_magic_4 || a_magic_4 == 0) l_count_8++; } return (l_count_8); } string ErrorDescription(int ai_0) { string ls_ret_4; switch (ai_0) { case 0: case 1: ls_ret_4 = "no error"; break; case 2: ls_ret_4 = "common error"; break; case 3: ls_ret_4 = "invalid trade parameters"; break; case 4: ls_ret_4 = "trade server is busy"; break; case 5: ls_ret_4 = "old version of the client terminal"; break; case 6: ls_ret_4 = "no connection with trade server"; break; case 7: ls_ret_4 = "not enough rights"; break; case 8: ls_ret_4 = "too frequent requests"; break; case 9: ls_ret_4 = "malfunctional trade operation"; break; case 64: ls_ret_4 = "account disabled"; break; case 65: ls_ret_4 = "invalid account"; break; case 128: ls_ret_4 = "trade timeout"; break; case 129: ls_ret_4 = "invalid price"; break; case 130: ls_ret_4 = "invalid stops"; break; case 131: ls_ret_4 = "invalid trade volume"; break; case 132: ls_ret_4 = "market is closed"; break; case 133: ls_ret_4 = "trade is disabled"; break; case 134: ls_ret_4 = "not enough money"; break; case 135: ls_ret_4 = "price changed"; break; case 136: ls_ret_4 = "off quotes"; break; case 137: ls_ret_4 = "broker is busy"; break; case 138: ls_ret_4 = "requote"; break; case 139: ls_ret_4 = "order is locked"; break; case 140: ls_ret_4 = "long positions only allowed"; break; case 141: ls_ret_4 = "too many requests"; break; case 145: ls_ret_4 = "modification denied because order too close to market"; break; case 146: ls_ret_4 = "trade context is busy"; break; case 4000: ls_ret_4 = "no error"; break; case 4001: ls_ret_4 = "wrong function pointer"; break; case 4002: ls_ret_4 = "array index is out of range"; break; case 4003: ls_ret_4 = "no memory for function call stack"; break; case 4004: ls_ret_4 = "recursive stack overflow"; break; case 4005: ls_ret_4 = "not enough stack for parameter"; break; case 4006: ls_ret_4 = "no memory for parameter string"; break; case 4007: ls_ret_4 = "no memory for temp string"; break; case 4008: ls_ret_4 = "not initialized string"; break; case 4009: ls_ret_4 = "not initialized string in array"; break; case 4010: ls_ret_4 = "no memory for array\' string"; break; case 4011: ls_ret_4 = "too long string"; break; case 4012: ls_ret_4 = "remainder from zero divide"; break; case 4013: ls_ret_4 = "zero divide"; break; case 4014: ls_ret_4 = "unknown command"; break; case 4015: ls_ret_4 = "wrong jump (never generated error)"; break; case 4016: ls_ret_4 = "not initialized array"; break; case 4017: ls_ret_4 = "dll calls are not allowed"; break; case 4018: ls_ret_4 = "cannot load library"; break; case 4019: ls_ret_4 = "cannot call function"; break; case 4020: ls_ret_4 = "expert function calls are not allowed"; break; case 4021: ls_ret_4 = "not enough memory for temp string returned from function"; break; case 4022: ls_ret_4 = "system is busy (never generated error)"; break; case 4050: ls_ret_4 = "invalid function parameters count"; break; case 4051: ls_ret_4 = "invalid function parameter value"; break; case 4052: ls_ret_4 = "string function internal error"; break; case 4053: ls_ret_4 = "some array error"; break; case 4054: ls_ret_4 = "incorrect series array using"; break; case 4055: ls_ret_4 = "custom indicator error"; break; case 4056: ls_ret_4 = "arrays are incompatible"; break; case 4057: ls_ret_4 = "global variables processing error"; break; case 4058: ls_ret_4 = "global variable not found"; break; case 4059: ls_ret_4 = "function is not allowed in testing mode"; break; case 4060: ls_ret_4 = "function is not confirmed"; break; case 4061: ls_ret_4 = "send mail error"; break; case 4062: ls_ret_4 = "string parameter expected"; break; case 4063: ls_ret_4 = "integer parameter expected"; break; case 4064: ls_ret_4 = "double parameter expected"; break; case 4065: ls_ret_4 = "array as parameter expected"; break; case 4066: ls_ret_4 = "requested history data in update state"; break; case 4099: ls_ret_4 = "end of file"; break; case 4100: ls_ret_4 = "some file error"; break; case 4101: ls_ret_4 = "wrong file name"; break; case 4102: ls_ret_4 = "too many opened files"; break; case 4103: ls_ret_4 = "cannot open file"; break; case 4104: ls_ret_4 = "incompatible access to a file"; break; case 4105: ls_ret_4 = "no order selected"; break; case 4106: ls_ret_4 = "unknown symbol"; break; case 4107: ls_ret_4 = "invalid price parameter for trade function"; break; case 4108: ls_ret_4 = "invalid ticket"; break; case 4109: ls_ret_4 = "trade is not allowed"; break; case 4110: ls_ret_4 = "longs are not allowed"; break; case 4111: ls_ret_4 = "shorts are not allowed"; break; case 4200: ls_ret_4 = "object is already exist"; break; case 4201: ls_ret_4 = "unknown object property"; break; case 4202: ls_ret_4 = "object is not exist"; break; case 4203: ls_ret_4 = "unknown object type"; break; case 4204: ls_ret_4 = "no object name"; break; case 4205: ls_ret_4 = "object coordinates error"; break; case 4206: ls_ret_4 = "no specified subwindow"; break; default: ls_ret_4 = "unknown error"; } return (ls_ret_4); } int Write(string as_0) { int l_file_8 = FileOpen(g_name_340, FILE_CSV|FILE_WRITE|FILE_READ, "/t"); FileSeek(l_file_8, 0, SEEK_END); FileWrite(l_file_8, " Time " + TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS) + ": " + as_0); FileClose(l_file_8); Print(as_0); return (0); } int OrdSend(string a_symbol_0, int ai_8, double a_lots_12, double ad_20, int a_slippage_28, double ad_32, double ad_40, string a_comment_48 = "", int a_magic_56 = 0, int a_datetime_60 = 0, color a_color_64 = -1) { int l_ticket_68; int l_ticket_72; int l_stoplevel_76 = MarketInfo(a_symbol_0, MODE_STOPLEVEL); double ld_80 = 0; int l_count_88 = 0; switch (ai_8) { case 0: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_88 < gi_272) { RefreshRates(); l_ticket_68 = OrderSend(a_symbol_0, OP_BUY, a_lots_12, Ask, a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Buy @ " + Ask + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_88++; } else { l_count_88 = gi_272; Write("Order opened : " + Symbol() + " Buy @ " + Ask + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_276); } } l_ticket_72 = l_ticket_68; break; case 1: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_88 < gi_272) { RefreshRates(); l_ticket_68 = OrderSend(a_symbol_0, OP_SELL, a_lots_12, Bid, a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Sell @ " + Bid + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_88++; } else { l_count_88 = gi_272; Write("Order opened : " + Symbol() + " Sell @ " + Bid + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_276); } } l_ticket_72 = l_ticket_68; break; case 4: while (l_count_88 < gi_272) { RefreshRates(); if (ad_20 - Ask < l_stoplevel_76 * Point) ld_80 = Ask + l_stoplevel_76 * Point; else ld_80 = ad_20; l_ticket_68 = OrderSend(a_symbol_0, OP_BUYSTOP, a_lots_12, NormalizeDouble(ld_80, Digits), a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Buy Stop @ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_88++; } else { l_count_88 = gi_272; Write("Order opened : " + Symbol() + " Buy Stop@ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_276); } l_ticket_72 = l_ticket_68; break; case 5: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_88 < gi_272) { RefreshRates(); if (Bid - ad_20 < l_stoplevel_76 * Point) ld_80 = Bid - l_stoplevel_76 * Point; else ld_80 = ad_20; l_ticket_68 = OrderSend(a_symbol_0, OP_SELLSTOP, a_lots_12, NormalizeDouble(ld_80, Digits), a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Sell Stop @ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_88++; } else { l_count_88 = gi_272; Write("Order opened : " + Symbol() + " Sell Stop @ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_276); } } l_ticket_72 = l_ticket_68; break; case 2: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_88 < gi_272) { RefreshRates(); if (Ask - ad_20 < l_stoplevel_76 * Point) ld_80 = Ask - l_stoplevel_76 * Point; else ld_80 = ad_20; l_ticket_68 = OrderSend(a_symbol_0, OP_BUYLIMIT, a_lots_12, NormalizeDouble(ld_80, Digits), a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Buy Limit @ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_88++; } else { l_count_88 = gi_272; Write("Order opened : " + Symbol() + " Buy Limit @ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_276); } } l_ticket_72 = l_ticket_68; break; case 3: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_88 < gi_272) { RefreshRates(); if (ad_20 - Bid < l_stoplevel_76 * Point) ld_80 = Bid + l_stoplevel_76 * Point; else ld_80 = ad_20; l_ticket_68 = OrderSend(a_symbol_0, OP_BUYLIMIT, a_lots_12, NormalizeDouble(ld_80, Digits), a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Sell Limit @ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_88++; } else { l_count_88 = gi_272; Write("Order opened : " + Symbol() + " Sell Limit @ " + ld_80 + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000 * gi_276); } l_ticket_72 = l_ticket_68; } break; default: Write("No valid type of order found"); l_ticket_72 = -1; } return (l_ticket_72); } int OrdClose(int a_ticket_0, double a_lots_4, double ad_12, int a_slippage_20, color a_color_24 = -1) { int l_ord_close_28; double ld_unused_32 = 0; int l_count_40 = 0; if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_40 < gi_272) { RefreshRates(); l_ord_close_28 = OrderClose(a_ticket_0, a_lots_4, NormalizeDouble(ad_12, Digits), a_slippage_20, a_color_24); if (l_ord_close_28 == 0) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Close @ " + ad_12 + " ticket =" + a_ticket_0); l_count_40++; } else { l_count_40 = gi_272; Write("Order closed : " + Symbol() + " Close @ " + ad_12 + " ticket =" + a_ticket_0); } Sleep(1000 * gi_276); } } int l_ord_close_44 = l_ord_close_28; return (l_ord_close_44); } int OrdModify(int a_ticket_0, double ad_4, double ad_12, double ad_20, int a_datetime_28, color a_color_32 = -1) { bool l_bool_36; double ld_unused_40 = 0; int l_count_48 = 0; if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_48 < gi_272) { RefreshRates(); l_bool_36 = OrderModify(a_ticket_0, NormalizeDouble(ad_4, Digits), NormalizeDouble(ad_12, Digits), NormalizeDouble(ad_20, Digits), a_datetime_28, a_color_32); if (l_bool_36 == FALSE) { Write("Error Occured : " + ErrorDescription(GetLastError())); Write(Symbol() + " Modify @ " + ad_4 + " SL @ " + ad_12 + " TP @" + ad_20 + " ticket =" + a_ticket_0); l_count_48++; } else { l_count_48 = gi_272; Write("Order modified : " + Symbol() + " Modify @ " + ad_4 + " SL @ " + ad_12 + " TP @" + ad_20 + " ticket =" + a_ticket_0); } Sleep(1000 * gi_276); } } int l_bool_52 = l_bool_36; return (l_bool_52); } void TrailingPositions() { double l_bid_0; double l_ask_8; double l_point_16 = MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType() == OP_BUY) { l_bid_0 = MarketInfo(OrderSymbol(), MODE_BID); if (gi_116 > 0) { if (l_bid_0 - OrderOpenPrice() > gi_116 * l_point_16) if (OrderStopLoss() - OrderOpenPrice() < 0.0) ModifyStopLoss(OrderOpenPrice() + 0.0 * l_point_16); } if (gi_108 > 0) { if (l_bid_0 - OrderOpenPrice() > gi_108 * l_point_16) { if (OrderStopLoss() < l_bid_0 - (gi_108 + gi_112 - 1) * l_point_16) { ModifyStopLoss(l_bid_0 - gi_108 * l_point_16); return; } } } } if (OrderType() == OP_SELL) { l_ask_8 = MarketInfo(OrderSymbol(), MODE_ASK); if (gi_116 > 0) { if (OrderOpenPrice() - l_ask_8 > gi_116 * l_point_16) if (OrderOpenPrice() - OrderStopLoss() < 0.0) ModifyStopLoss(OrderOpenPrice() - 0.0 * l_point_16); } if (gi_108 > 0) { if (OrderOpenPrice() - l_ask_8 > gi_108 * l_point_16) if (OrderStopLoss() > l_ask_8 + (gi_108 + gi_112 - 1) * l_point_16 || OrderStopLoss() == 0.0) ModifyStopLoss(l_ask_8 + gi_108 * l_point_16); } } } void ModifyStopLoss(double ad_0) { PlaySound("alert.wav"); int li_8 = OrdModify(OrderTicket(), OrderOpenPrice(), ad_0, OrderTakeProfit(), 0, CLR_NONE); }