#property copyright "Copyright © 2006-2009, VICTORIOUS GROUP" #property link "www.victorious-forex.com" #include extern bool CanOpenNew = TRUE; extern int TimeFrame = 60; extern bool Send_EMail = FALSE; extern bool Show_Alerts = TRUE; extern int Magic_N = 555; extern int OrdersCount = 10; extern string s1 = "=== Order 1 ==="; extern double Ord_1_Lots = 0.1; extern int Ord_1_StopLoss = 100; extern int Ord_1_TakeProfit = 100; extern int Slippage = 3; extern string s2 = "=== Order 2 ==="; extern double Ord_2_Level = 100.0; extern double Ord_2_Lots = 0.2; extern int Ord_2_StopLoss = 100; extern int Ord_2_TakeProfit = 100; extern string s3 = "=== Order 3 ==="; extern double Ord_3_Level = 100.0; extern double Ord_3_Lots = 0.4; extern int Ord_3_StopLoss = 100; extern int Ord_3_TakeProfit = 100; extern string s4 = "=== Order 4 ==="; extern double Ord_4_Level = 100.0; extern double Ord_4_Lots = 0.8; extern int Ord_4_StopLoss = 100; extern int Ord_4_TakeProfit = 100; extern string s5 = "=== Order 5 ==="; extern double Ord_5_Level = 100.0; extern double Ord_5_Lots = 1.6; extern int Ord_5_StopLoss = 100; extern int Ord_5_TakeProfit = 100; extern string s6 = "=== Order 6 ==="; extern double Ord_6_Level = 100.0; extern double Ord_6_Lots = 3.2; extern int Ord_6_StopLoss = 100; extern int Ord_6_TakeProfit = 100; extern string s7 = "=== Order 7 ==="; extern double Ord_7_Level = 100.0; extern double Ord_7_Lots = 6.4; extern int Ord_7_StopLoss = 100; extern int Ord_7_TakeProfit = 100; extern string s8 = "=== Order 8 ==="; extern double Ord_8_Level = 100.0; extern double Ord_8_Lots = 10.0; extern int Ord_8_StopLoss = 100; extern int Ord_8_TakeProfit = 100; extern string s9 = "=== Order 9 ==="; extern double Ord_9_Level = 100.0; extern double Ord_9_Lots = 10.0; extern int Ord_9_StopLoss = 100; extern int Ord_9_TakeProfit = 100; extern string s10 = "=== Order 10 ==="; extern double Ord_10_Level = 100.0; extern double Ord_10_Lots = 10.0; extern int Ord_10_StopLoss = 100; extern int Ord_10_TakeProfit = 100; extern bool InfoOn = TRUE; extern color InfoColor = Yellow; extern bool MW_Mode = FALSE; int gia_428[] = {11111, 11111111}; string gs_432 = "2009.07.04"; int gi_440 = 16748574; string gs_444 = "Capital v040ru"; int gi_452 = 24; int gi_456 = 150; bool gi_460 = TRUE; int g_ticket_464; int g_error_468; double g_price_476; double g_price_484; double g_price_492; string g_comment_500; int gi_508; bool gba_512[10]; bool gba_516[10]; bool gba_520[10]; bool gba_524[10]; bool gba_528[10]; bool gba_532[10]; bool gba_536[10]; bool gba_540[10]; double gda_544[10]; double gda_548[10]; int gia_552[10]; double gda_556[10]; int gia_560[10]; int gia_564[10]; double gd_568; double gd_576; double gd_584; double gd_592; double gd_600; string gs_608; string gs_616 = "AccInfSymbInf_Lbl_"; int init() { bool li_0; gs_444 = "Capital v040ru" + " (" + Symbol() + "," + TimeFrameName(TimeFrame) + "," + Magic_N + "): "; gia_552[0] = 0; gia_552[1] = Ord_2_Level; gia_552[2] = Ord_3_Level; gia_552[3] = Ord_4_Level; gia_552[4] = Ord_5_Level; gia_552[5] = Ord_6_Level; gia_552[6] = Ord_7_Level; gia_552[7] = Ord_8_Level; gia_552[8] = Ord_9_Level; gia_552[9] = Ord_10_Level; gda_556[0] = Ord_1_Lots; gda_556[1] = Ord_2_Lots; gda_556[2] = Ord_3_Lots; gda_556[3] = Ord_4_Lots; gda_556[4] = Ord_5_Lots; gda_556[5] = Ord_6_Lots; gda_556[6] = Ord_7_Lots; gda_556[7] = Ord_8_Lots; gda_556[8] = Ord_9_Lots; gda_556[9] = Ord_10_Lots; gia_560[0] = Ord_1_StopLoss; gia_560[1] = Ord_2_StopLoss; gia_560[2] = Ord_3_StopLoss; gia_560[3] = Ord_4_StopLoss; gia_560[4] = Ord_5_StopLoss; gia_560[5] = Ord_6_StopLoss; gia_560[6] = Ord_7_StopLoss; gia_560[7] = Ord_8_StopLoss; gia_560[8] = Ord_9_StopLoss; gia_560[9] = Ord_10_StopLoss; gia_564[0] = Ord_1_TakeProfit; gia_564[1] = Ord_2_TakeProfit; gia_564[2] = Ord_3_TakeProfit; gia_564[3] = Ord_4_TakeProfit; gia_564[4] = Ord_5_TakeProfit; gia_564[5] = Ord_6_TakeProfit; gia_564[6] = Ord_7_TakeProfit; gia_564[7] = Ord_8_TakeProfit; gia_564[8] = Ord_9_TakeProfit; gia_564[9] = Ord_10_TakeProfit; gs_608 = "Capital v040ru" + "_" + Symbol() + "_" + Period() + "_" + Magic_N + "_"; if (IsDemo()) gs_608 = gs_608 + "d_"; if (!IsTesting()) if (GlobalVariableCheck(gs_608 + "LTT")) gi_508 = GlobalVariableGet(gs_608 + "LTT"); if (!IsTesting() && !IsDemo()) { li_0 = FALSE; for (int l_index_4 = 0; l_index_4 < ArraySize(gia_428); l_index_4++) { if (gia_428[l_index_4] == AccountNumber()) { li_0 = TRUE; break; } } if (!li_0) Alert("Эксперт Capital v040ru - неверный номер счета!"); } if (TimeCurrent() > StrToTime(gs_432)) Alert("Эксперт Capital v040ru - время работы закончилось!"); return (0); } int deinit() { fObjDeleteByPrefix(gs_616); return (0); } int start() { bool li_0; bool li_52; int l_count_56; double l_price_60; double l_price_68; int li_76; if (!IsTesting() && !IsDemo()) { li_0 = FALSE; for (int l_pos_4 = 0; l_pos_4 < ArraySize(gia_428); l_pos_4++) { if (gia_428[l_pos_4] == AccountNumber()) { li_0 = TRUE; break; } } if (!li_0) { Alert("Эксперт Capital v040ru - неверный номер счета!"); return (0); } } if (TimeCurrent() > StrToTime(gs_432)) { Alert("Эксперт Capital v040ru - время работы закончилось!"); return (0); } if (InfoOn) AccountAndSymbolLbls(); fObjLabel("Capital v040ru_Obj_Lbl", 4, 1, "“VICTORIOUS GROUP”", 2, gi_440, 8, 0, "Arial", FALSE); if (MW_Mode) WH_SLTP(); int li_8 = 60 * gi_452 / Period(); double l_high_12 = High[iHighest(NULL, 0, MODE_HIGH, li_8, 0)]; double l_low_20 = Low[iLowest(NULL, 0, MODE_LOW, li_8, 0)]; bool li_28 = FALSE; bool li_32 = FALSE; if (ND(Close[0]) <= ND(l_high_12 - Point * gi_456)) li_28 = TRUE; if (ND(Close[0]) >= ND(l_low_20 + Point * gi_456)) li_32 = TRUE; bool li_36 = FALSE; bool li_40 = FALSE; bool li_44 = FALSE; bool li_48 = FALSE; for (l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) { if (OrderType() == OP_BUY) li_36 = TRUE; if (OrderType() == OP_SELL) li_40 = TRUE; if (OrderType() == OP_BUYLIMIT) li_44 = TRUE; if (OrderType() == OP_SELLLIMIT) li_48 = TRUE; } } else return (0); } if ((!li_36 && li_44) || (!li_40 && li_48)) { li_52 = FALSE; for (l_pos_4 = OrdersTotal() - 1; l_pos_4 >= 0; l_pos_4--) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) { if (OrderType() == OP_BUYLIMIT && !li_36) { OrderDelete(OrderTicket()); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not delete BUYLIMIT " + OrderTicket() + ". Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ")"); li_52 = TRUE; } else if (gi_460) Print(gs_444 + "Order BUYLIMIT " + OrderTicket() + " deleted"); } if (OrderType() == OP_SELLLIMIT && !li_40) { OrderDelete(OrderTicket()); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not delete SELLLIMIT " + OrderTicket() + ". Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ")"); li_52 = TRUE; } else if (gi_460) Print(gs_444 + "Order SELLLIMIT " + OrderTicket() + " deleted"); } } } else return (0); } if (li_52) return (0); } if (li_28 || li_32 && CanOpenNew) { l_count_56 = 0; for (l_pos_4 = OrdersTotal() - 1; l_pos_4 >= 0; l_pos_4--) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) l_count_56++; } else return (0); } if (l_count_56 == 0) { if (li_28 && iTime(NULL, TimeFrame, 0) > gi_508) { RefreshRates(); l_price_60 = ND(Ask - Point * Ord_1_StopLoss); l_price_68 = ND(Ask + Point * Ord_1_TakeProfit); if (MW_Mode) { l_price_60 = 0; l_price_68 = 0; } g_ticket_464 = OrderSend(Symbol(), OP_BUY, Ord_1_Lots, ND(Ask), Slippage, l_price_60, l_price_68, "Ord_1_", Magic_N, 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not open BUY. Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ") (1)"); return (0); } if (gi_460) Print(gs_444 + "Order BUY " + g_ticket_464 + " opened (1)"); gi_508 = TimeCurrent(); GlobalVariableSet(gs_608 + "LTT", gi_508); gd_600 = Ask; if (OrderSelect(g_ticket_464, SELECT_BY_TICKET, MODE_TRADES)) gd_600 = OrderOpenPrice(); Alarm(g_ticket_464, 0, 1, gd_600, Ord_1_Lots); if (MW_Mode) WH_SLTP(); } if (li_32 && iTime(NULL, TimeFrame, 0) > gi_508) { RefreshRates(); l_price_60 = ND(Bid + Point * Ord_1_StopLoss); l_price_68 = ND(Bid - Point * Ord_1_TakeProfit); if (MW_Mode) { l_price_60 = 0; l_price_68 = 0; } g_ticket_464 = OrderSend(Symbol(), OP_SELL, Ord_1_Lots, ND(Bid), Slippage, l_price_60, l_price_68, "Ord_1_", Magic_N, 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not open SELL. Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ") (1)"); return (0); } if (gi_460) Print(gs_444 + "Order SELL " + g_ticket_464 + " opened (1)"); gi_508 = TimeCurrent(); GlobalVariableSet(gs_608 + "LTT", gi_508); gd_600 = Bid; if (OrderSelect(g_ticket_464, SELECT_BY_TICKET, MODE_TRADES)) gd_600 = OrderOpenPrice(); Alarm(g_ticket_464, 1, 1, gd_600, Ord_1_Lots); if (MW_Mode) WH_SLTP(); } } } for (l_pos_4 = 0; l_pos_4 < OrdersCount; l_pos_4++) { gba_528[l_pos_4] = 0; gba_536[l_pos_4] = 0; gba_532[l_pos_4] = 0; gba_540[l_pos_4] = 0; } gd_568 = 99999999; gd_576 = 99999999; gd_584 = 0; gd_592 = 0; for (l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) { li_76 = OrderIndex(OrderComment()); if (li_76 != -1) { if (OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT) { if (OrderType() == OP_BUY) { gba_528[li_76] = 1; gd_568 = MathMin(ND(gd_568), ND(OrderTakeProfit())); } if (OrderType() == OP_BUYLIMIT) gba_532[li_76] = 1; gda_544[li_76] = OrderOpenPrice(); gd_576 = MathMin(ND(gd_576), ND(OrderStopLoss())); } if (OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT) { if (OrderType() == OP_SELL) { gba_536[li_76] = 1; gd_592 = MathMax(ND(gd_592), ND(OrderTakeProfit())); } if (OrderType() == OP_SELLLIMIT) gba_540[li_76] = 1; gda_548[li_76] = OrderOpenPrice(); gd_584 = MathMax(ND(gd_584), ND(OrderStopLoss())); } } } } else return (0); } for (l_pos_4 = 1; l_pos_4 < OrdersCount; l_pos_4++) { if (!gba_528[l_pos_4] && !gba_532[l_pos_4] && gba_528[l_pos_4 - 1]) { g_price_476 = ND(ND(gda_544[l_pos_4 - 1]) - ND(Point * gia_552[l_pos_4])); g_price_484 = ND(g_price_476 - ND(Point * gia_560[l_pos_4])); g_price_492 = ND(g_price_476 + ND(Point * gia_564[l_pos_4])); g_comment_500 = "Ord_" + ((l_pos_4 + 1)) + "_"; g_ticket_464 = OrderSend(Symbol(), OP_BUYLIMIT, gda_556[l_pos_4], g_price_476, Slippage, g_price_484, g_price_492, g_comment_500, Magic_N, 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not set BUYLIMIT. Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ") (№ " + ((l_pos_4 + 1)) + ")"); } else if (gi_460) Print(gs_444 + "Order BUYLIMIT " + g_ticket_464 + " set (№ " + ((l_pos_4 + 1)) + ")"); return (0); } if (!gba_536[l_pos_4] && !gba_540[l_pos_4] && gba_536[l_pos_4 - 1]) { g_price_476 = ND(ND(gda_548[l_pos_4 - 1]) + ND(Point * gia_552[l_pos_4])); g_price_484 = ND(g_price_476 + ND(Point * gia_560[l_pos_4])); g_price_492 = ND(g_price_476 - ND(Point * gia_564[l_pos_4])); g_comment_500 = "Ord_" + ((l_pos_4 + 1)) + "_"; g_ticket_464 = OrderSend(Symbol(), OP_SELLLIMIT, gda_556[l_pos_4], g_price_476, Slippage, g_price_484, g_price_492, g_comment_500, Magic_N, 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not set SELLLIMIT. Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ") (№ " + ((l_pos_4 + 1)) + ")"); } else if (gi_460) Print(gs_444 + "Order SELLLIMIT " + g_ticket_464 + " set (№ " + ((l_pos_4 + 1)) + ")"); return (0); } } for (l_pos_4 = 2; l_pos_4 < OrdersCount; l_pos_4++) { if (!gba_528[l_pos_4] && !gba_532[l_pos_4] && gba_528[l_pos_4 - 2] && gba_532[l_pos_4 - 1]) { g_price_476 = ND(ND(gda_544[l_pos_4 - 1]) - ND(Point * gia_552[l_pos_4])); g_price_484 = ND(g_price_476 - ND(Point * gia_560[l_pos_4])); g_price_492 = ND(g_price_476 + ND(Point * gia_564[l_pos_4])); g_comment_500 = "Ord_" + ((l_pos_4 + 1)) + "_"; g_ticket_464 = OrderSend(Symbol(), OP_BUYLIMIT, gda_556[l_pos_4], g_price_476, Slippage, g_price_484, g_price_492, g_comment_500, Magic_N, 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not set BUYLIMIT (" + ((l_pos_4 + 1)) + "). Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ") (№ " + ((l_pos_4 + 1)) + ")"); return (0); } if (gi_460) Print(gs_444 + "Order BUYLIMIT " + g_ticket_464 + " (" + ((l_pos_4 + 1)) + ") set (№ " + ((l_pos_4 + 1)) + ")"); return (0); } if (!gba_536[l_pos_4] && !gba_540[l_pos_4] && gba_536[l_pos_4 - 2] && gba_540[l_pos_4 - 1]) { g_price_476 = ND(ND(gda_548[l_pos_4 - 1]) + ND(Point * gia_552[l_pos_4])); g_price_484 = ND(g_price_476 + ND(Point * gia_560[l_pos_4])); g_price_492 = ND(g_price_476 - ND(Point * gia_564[l_pos_4])); g_comment_500 = "Ord_" + ((l_pos_4 + 1)) + "_"; g_ticket_464 = OrderSend(Symbol(), OP_SELLLIMIT, gda_556[l_pos_4], g_price_476, Slippage, g_price_484, g_price_492, g_comment_500, Magic_N, 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not set SELLLIMIT (" + ((l_pos_4 + 1)) + "). Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ") (№ " + ((l_pos_4 + 1)) + ")"); } else if (gi_460) Print(gs_444 + "Order SELLLIMIT " + g_ticket_464 + " (" + ((l_pos_4 + 1)) + ") set (№ " + ((l_pos_4 + 1)) + ")"); return (0); } } for (l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) { if (OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT) { if (gd_576 != 99999999.0 || gd_568 != 99999999.0) { g_price_484 = OrderStopLoss(); if (gd_576 != 99999999.0) g_price_484 = gd_576; g_price_492 = OrderTakeProfit(); if (OrderType() == OP_BUY) if (gd_568 != 99999999.0) g_price_492 = gd_568; if (ND(OrderStopLoss()) != ND(g_price_484) || ND(OrderTakeProfit()) != ND(g_price_492)) { OrderModify(OrderTicket(), OrderOpenPrice(), ND(g_price_484), ND(g_price_492), 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not modify the order" + OrderTicket() + ". Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ")"); } else if (gi_460) Print(gs_444 + "Order modified"); } } } if (OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT) { if (gd_584 != 0.0 || gd_592 != 0.0) { g_price_484 = OrderStopLoss(); if (gd_584 != 0.0) g_price_484 = gd_584; g_price_492 = OrderTakeProfit(); if (OrderType() == OP_SELL) if (gd_592 != 0.0) g_price_492 = gd_592; if (ND(OrderStopLoss()) != ND(g_price_484) || ND(OrderTakeProfit()) != ND(g_price_492)) { OrderModify(OrderTicket(), OrderOpenPrice(), ND(g_price_484), ND(g_price_492), 0, CLR_NONE); g_error_468 = GetLastError(); if (g_error_468 != 0/* NO_ERROR */) { if (gi_460) Print(gs_444 + "Can not modify the order" + OrderTicket() + ". Mistake №: ", g_error_468, " (", ErrorDescription(g_error_468), ")"); } else if (gi_460) Print(gs_444 + "Order modified"); } } } } } else return (0); } for (l_pos_4 = 0; l_pos_4 < 10; l_pos_4++) gba_520[l_pos_4] = 0; for (l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) { li_76 = OrderIndex(OrderComment()); if (li_76 != -1) { if (OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT) gba_512[li_76] = 1; if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if (gba_512[li_76]) { Alarm(OrderTicket(), OrderType(), li_76 + 1, OrderOpenPrice(), OrderLots()); gba_512[li_76] = 0; } gba_516[li_76] = 1; gba_524[li_76] = OrderTicket(); gba_520[li_76] = 1; } } } } else return (0); } for (l_pos_4 = 0; l_pos_4 < 10; l_pos_4++) { if (gba_516[l_pos_4] && !gba_520[l_pos_4]) { if (OrderSelect(gba_524[l_pos_4], SELECT_BY_TICKET, MODE_HISTORY)) Alarm2(gba_524[l_pos_4], OrderType(), l_pos_4 + 1, OrderProfit() + OrderSwap() + OrderCommission(), OrderLots()); gba_516[l_pos_4] = 0; } } return (0); } void WH_SLTP() { double ld_12; double ld_20; double ld_28; double ld_36; bool l_bool_44; int l_error_48; int li_0 = Ord_1_StopLoss; int li_4 = Ord_1_TakeProfit; for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) { if (OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) { RefreshRates(); if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if (StringFind(OrderComment(), "Ord_1_", 0) == 0) { if ((ND(OrderStopLoss()) == 0.0 && li_0 != 0) || (ND(OrderTakeProfit()) == 0.0 && li_4 != 0)) { if (OrderType() == OP_BUY) { ld_12 = ND(OrderStopLoss()); if (ld_12 == 0.0) { if (li_0 == 0) ld_12 = 0; else { ld_12 = ND(OrderOpenPrice() - Point * li_0); ld_20 = ND(Bid - Point * MarketInfo(Symbol(), MODE_STOPLEVEL) - Point); ld_12 = MathMin(ld_12, ld_20); } } ld_28 = ND(OrderTakeProfit()); if (ld_28 == 0.0) { if (li_4 == 0) ld_28 = 0; else { ld_28 = ND(OrderOpenPrice() + Point * li_4); ld_36 = ND(Bid + Point * MarketInfo(Symbol(), MODE_STOPLEVEL) + Point); ld_28 = MathMax(ld_28, ld_36); } } } if (OrderType() == OP_SELL) { ld_12 = ND(OrderStopLoss()); if (ld_12 == 0.0) { if (li_0 == 0) ld_12 = 0; else { ld_12 = ND(OrderOpenPrice() + Point * li_0); ld_20 = ND(Ask + Point * MarketInfo(Symbol(), MODE_STOPLEVEL) + Point); ld_12 = MathMax(ld_12, ld_20); } } ld_28 = ND(OrderTakeProfit()); if (ld_28 == 0.0) { if (li_4 == 0) ld_28 = 0; else { ld_28 = ND(OrderOpenPrice() - Point * li_4); ld_36 = ND(Ask - Point * MarketInfo(Symbol(), MODE_STOPLEVEL) - Point); ld_28 = MathMin(ld_28, ld_36); } } } if (OrderStopLoss() != ld_12 || OrderTakeProfit() != ld_28) { l_bool_44 = OrderModify(OrderTicket(), OrderOpenPrice(), ld_12, ld_28, 0, CLR_NONE); l_error_48 = GetLastError(); if (l_bool_44) Print("SL/TP для ордера " + OrderTicket() + " установлен"); else Print("Не удалось установить SL/TP для ордера " + OrderTicket() + ". " + fMyErDesc(l_error_48)); } } } } } } } } void Alarm(int ai_0, int ai_4, int ai_8, double ad_12, double ad_20) { if (ai_8 == 1) { if (Show_Alerts) { if (ai_4 == 0) Alert(gs_444 + "Opened BUY " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " по " + DoubleToStr(ad_12, Digits) + ")"); if (ai_4 == 1) Alert(gs_444 + "Opened SELL " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " по " + DoubleToStr(ad_12, Digits) + ")"); } if (Send_EMail) { if (ai_4 == 0) SendMail(gs_444, "BUY " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " at " + DoubleToStr(ad_12, Digits) + ")"); if (ai_4 == 1) SendMail(gs_444, "SELL " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " at " + DoubleToStr(ad_12, Digits) + ")"); } } else { if (Show_Alerts) { if (ai_4 == 0) Alert(gs_444 + "Opened BUYLIMIT " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " по " + DoubleToStr(ad_12, Digits) + ")"); if (ai_4 == 1) Alert(gs_444 + "Opened SELLLIMIT " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " по " + DoubleToStr(ad_12, Digits) + ")"); } if (Send_EMail) { if (ai_4 == 0) SendMail(gs_444, "BUYLIMIT -> BUY " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " at " + DoubleToStr(ad_12, Digits) + ")"); if (ai_4 == 1) SendMail(gs_444, "SELLLIMIT -> SELL " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " at " + DoubleToStr(ad_12, Digits) + ")"); } } } void Alarm2(int ai_0, int ai_4, int ai_8, double ad_12, double ad_20) { if (Show_Alerts) { if (ai_4 == 0) Alert(TimeToStr(TimeCurrent()) + " " + gs_444 + "Closed BUY " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " profit: " + DoubleToStr(ad_12, 2) + ")"); if (ai_4 == 1) Alert(TimeToStr(TimeCurrent()) + " " + gs_444 + "Closed SELL " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " profit: " + DoubleToStr(ad_12, 2) + ")"); } if (Send_EMail) { if (ai_4 == 0) SendMail(TimeToStr(TimeCurrent()) + " " + gs_444, "Closed BUY " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " profit: " + DoubleToStr(ad_12, 2) + ")"); if (ai_4 == 1) SendMail(TimeToStr(TimeCurrent()) + " " + gs_444, "Closed SELL " + ai_0 + " (№ " + ai_8 + " " + DoubleToStr(ad_20, 2) + " profit: " + DoubleToStr(ad_12, 2) + ")"); } } double ND(double ad_0) { return (NormalizeDouble(ad_0, Digits)); } string TimeFrameName(int ai_0) { int l_timeframe_4; if (ai_0 == 0) l_timeframe_4 = Period(); else l_timeframe_4 = ai_0; switch (l_timeframe_4) { case 0: return ("0"); case PERIOD_M1: return ("M1"); case PERIOD_M5: return ("M5"); case PERIOD_M15: return ("M15"); case PERIOD_M30: return ("M30"); case PERIOD_H1: return ("H1"); case PERIOD_H4: return ("H4"); case PERIOD_D1: return ("D1"); case PERIOD_W1: return ("W1"); case PERIOD_MN1: return ("MN1"); } return ("Wrong TimeFrame"); } int OrderIndex(string as_0) { if (StringFind(as_0, "Ord_1_", 0) == 0) return (0); if (StringFind(as_0, "Ord_2_", 0) == 0) return (1); if (StringFind(as_0, "Ord_3_", 0) == 0) return (2); if (StringFind(as_0, "Ord_4_", 0) == 0) return (3); if (StringFind(as_0, "Ord_5_", 0) == 0) return (4); if (StringFind(as_0, "Ord_6_", 0) == 0) return (5); if (StringFind(as_0, "Ord_7_", 0) == 0) return (6); if (StringFind(as_0, "Ord_8_", 0) == 0) return (7); if (StringFind(as_0, "Ord_9_", 0) == 0) return (8); if (StringFind(as_0, "Ord_10_", 0) == 0) return (9); return (-1); } void AccountAndSymbolLbls() { string lsa_192[13]; string ls_0 = Symbol(); string ls_8 = MarketType(ls_0); string ls_16 = AccountCurrency(); string ls_24 = ls_0; if (ls_8 == "Forex") ls_24 = StringSubstr(ls_0, 0, 3); double l_free_magrin_32 = AccountFreeMargin(); double l_lotsize_40 = MarketInfo(ls_0, MODE_LOTSIZE); double ld_48 = 0; double ld_56 = 0; double ld_64 = 0; double l_ask_72 = MarketInfo(ls_0, MODE_ASK); double l_bid_80 = MarketInfo(ls_0, MODE_BID); if (ls_8 == "Forex") { if (ls_24 == ls_16) { l_ask_72 = 1; l_bid_80 = 1; } else { l_ask_72 = MarketInfo(ls_24 + ls_16, MODE_ASK); l_bid_80 = MarketInfo(ls_24 + ls_16, MODE_BID); } } double l_leverage_88 = 0; if (ls_8 == "Forex") l_leverage_88 = AccountLeverage(); if (ls_8 == "Metalls") l_leverage_88 = 10; if (ls_8 == "CFD") l_leverage_88 = 10; if (l_leverage_88 > 0.0) ld_48 = l_lotsize_40 / l_leverage_88; ld_56 = ld_48 * l_ask_72; ld_64 = ld_48 * l_bid_80; if (ls_8 == "Futures") { ld_48 = FuturesLotMargin(ls_0); ld_56 = ld_48; ld_64 = ld_48; } string ls_96 = DoubleToStr(ld_56, 2) + " " + ls_16; string ls_104 = DoubleToStr(ld_64, 2) + " " + ls_16; if (ls_8 == "Forex" && ls_24 != ls_16) { ls_96 = ls_96 + " (" + DoubleToStr(ld_48, 2) + " " + ls_24 + ")"; ls_104 = ls_104 + " (" + DoubleToStr(ld_48, 2) + " " + ls_24 + ")"; } double ld_112 = 0; double ld_120 = 0; if (ld_56 > 0.0 && l_free_magrin_32 > 0.0) ld_112 = l_free_magrin_32 / ld_56; if (ld_64 > 0.0 && l_free_magrin_32 > 0.0) ld_120 = l_free_magrin_32 / ld_64; double l_minlot_128 = MarketInfo(ls_0, MODE_MINLOT); bool li_136 = FALSE; if (l_minlot_128 > 0.0) li_136 = ld_112 / l_minlot_128; bool li_140 = FALSE; if (l_minlot_128 > 0.0) li_140 = ld_120 / l_minlot_128; ld_112 = l_minlot_128 * li_136; ld_120 = l_minlot_128 * li_140; double l_tickvalue_144 = MarketInfo(ls_0, MODE_TICKVALUE); double ld_152 = 0; if (l_minlot_128 > 0.0) ld_152 = MarketInfo(ls_0, MODE_SWAPLONG) / l_minlot_128; double ld_160 = 0; if (l_minlot_128 > 0.0) ld_160 = MarketInfo(ls_0, MODE_SWAPSHORT) / l_minlot_128; double ld_168 = 0; if (l_tickvalue_144 > 0.0) ld_168 = ld_152 / l_tickvalue_144; double ld_176 = 0; if (l_tickvalue_144 > 0.0) ld_176 = ld_160 / l_tickvalue_144; string ls_184 = "Реал"; if (IsDemo()) ls_184 = "Демо"; lsa_192[0] = "Тип счета: " + ls_184; lsa_192[1] = "Номер счета: " + AccountNumber(); lsa_192[2] = "Плечо: " + AccountLeverage(); lsa_192[3] = "Баланс: " + DoubleToStr(AccountBalance(), 2) + " " + ls_16; lsa_192[4] = "Средства: " + DoubleToStr(AccountEquity(), 2) + " " + ls_16; lsa_192[5] = "Залог: " + DoubleToStr(AccountMargin(), 2) + " " + ls_16; lsa_192[6] = "Символ: " + ls_0; lsa_192[7] = "Свободно лотов для BUY: " + DoubleToStr(ld_112, 1); lsa_192[8] = "Свободно лотов для SELL: " + DoubleToStr(ld_120, 1); lsa_192[9] = "Залог за лот для BUY: " + ls_96; lsa_192[10] = "Залог за лот для SELL: " + ls_104; lsa_192[11] = "Спред: " + DoubleToStr(MarketInfo(ls_0, MODE_SPREAD), 0); lsa_192[12] = "Точность: " + DoubleToStr(MarketInfo(ls_0, MODE_DIGITS), 0); int li_196 = 4; int li_200 = 22; for (int l_index_204 = 0; l_index_204 < 13; l_index_204++) fObjLabel(gs_616 + l_index_204, li_196, li_200 + 10 * l_index_204, lsa_192[l_index_204], 0, InfoColor, 8, 0, "Arial", FALSE); ObjectsRedraw(); } string MarketType(string as_0) { string ls_12; int l_str_len_8 = StringLen(as_0); if (StringSubstr(as_0, 0, 1) == "_") return ("Indexes"); if (StringSubstr(as_0, 0, 1) == "#") { ls_12 = StringSubstr(as_0, l_str_len_8 - 1, 1); if (ls_12 == "0") return ("Futures"); if (ls_12 == "1") return ("Futures"); if (ls_12 == "2") return ("Futures"); if (ls_12 == "3") return ("Futures"); if (ls_12 == "4") return ("Futures"); if (ls_12 == "5") return ("Futures"); if (ls_12 == "6") return ("Futures"); if (ls_12 == "7") return ("Futures"); if (ls_12 == "8") return ("Futures"); if (ls_12 == "9") return ("Futures"); return ("CFD"); } if (as_0 == "GOLD") return ("Metalls"); if (as_0 == "SILVER") return ("Metalls"); if (l_str_len_8 == 6) { ls_12 = StringSubstr(as_0, 0, 3); if (ls_12 == "AUD") return ("Forex"); if (ls_12 == "CAD") return ("Forex"); if (ls_12 == "CHF") return ("Forex"); if (ls_12 == "EUR") return ("Forex"); if (ls_12 == "GBP") return ("Forex"); if (ls_12 == "LFX") return ("Forex"); if (ls_12 == "NZD") return ("Forex"); if (ls_12 == "SGD") return ("Forex"); if (ls_12 == "USD") return ("Forex"); } return (""); } double FuturesLotMargin(string as_0) { double ld_ret_8 = 0; string ls_16 = AccountCurrency(); double l_bid_24 = 1; if (ls_16 != "USD") l_bid_24 = MarketInfo(ls_16 + "USD", MODE_BID); int l_str_len_32 = StringLen(as_0); string ls_36 = StringSubstr(as_0, 0, l_str_len_32 - 2); if (ls_36 == "#ENQ") ld_ret_8 = 3750.0 * l_bid_24; if (ls_36 == "#EP") ld_ret_8 = 3938.0 * l_bid_24; if (ls_36 == "#SLV") ld_ret_8 = 5063.0 * l_bid_24; if (ls_36 == "#GOLD") ld_ret_8 = 2363.0 * l_bid_24; if (ls_36 == "#CL") ld_ret_8 = 4725.0 * l_bid_24; if (ls_36 == "#NG") ld_ret_8 = 8100.0 * l_bid_24; if (ls_36 == "#W") ld_ret_8 = 608.0 * l_bid_24; if (ls_36 == "#S") ld_ret_8 = 1148.0 * l_bid_24; if (ls_36 == "#C") ld_ret_8 = 473.0 * l_bid_24; return (ld_ret_8); } void fObjDeleteByPrefix(string as_0) { for (int li_8 = ObjectsTotal() - 1; li_8 >= 0; li_8--) if (StringFind(ObjectName(li_8), as_0, 0) == 0) ObjectDelete(ObjectName(li_8)); } void fObjLabel(string a_name_0, int a_x_8, int a_y_12, string a_text_16, int a_corner_24 = 0, color a_color_28 = 255, int a_fontsize_32 = 9, int a_window_36 = 0, string a_fontname_40 = "Arial", bool a_bool_48 = FALSE) { if (ObjectFind(a_name_0) != a_window_36) ObjectCreate(a_name_0, OBJ_LABEL, a_window_36, 0, 0); ObjectSet(a_name_0, OBJPROP_XDISTANCE, a_x_8); ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_12); ObjectSetText(a_name_0, a_text_16, a_fontsize_32, a_fontname_40, a_color_28); ObjectSet(a_name_0, OBJPROP_BACK, a_bool_48); ObjectSet(a_name_0, OBJPROP_CORNER, a_corner_24); } string fMyErDesc(int ai_0) { string ls_4 = "Err Num: " + ai_0 + " - "; switch (ai_0) { case 0: return (ls_4 + "NO ERROR"); case 1: return (ls_4 + "NO RESULT"); case 2: return (ls_4 + "COMMON ERROR"); case 3: return (ls_4 + "INVALID TRADE PARAMETERS"); case 4: return (ls_4 + "SERVER BUSY"); case 5: return (ls_4 + "OLD VERSION"); case 6: return (ls_4 + "NO CONNECTION"); case 7: return (ls_4 + "NOT ENOUGH RIGHTS"); case 8: return (ls_4 + "TOO FREQUENT REQUESTS"); case 9: return (ls_4 + "MALFUNCTIONAL TRADE"); case 64: return (ls_4 + "ACCOUNT DISABLED"); case 65: return (ls_4 + "INVALID ACCOUNT"); case 128: return (ls_4 + "TRADE TIMEOUT"); case 129: return (ls_4 + "INVALID PRICE"); case 130: return (ls_4 + "INVALID STOPS"); case 131: return (ls_4 + "INVALID TRADE VOLUME"); case 132: return (ls_4 + "MARKET CLOSED"); case 133: return (ls_4 + "TRADE DISABLED"); case 134: return (ls_4 + "NOT ENOUGH MONEY"); case 135: return (ls_4 + "PRICE CHANGED"); case 136: return (ls_4 + "OFF QUOTES"); case 137: return (ls_4 + "BROKER BUSY"); case 138: return (ls_4 + "REQUOTE"); case 139: return (ls_4 + "ORDER LOCKED"); case 140: return (ls_4 + "LONG POSITIONS ONLY ALLOWED"); case 141: return (ls_4 + "TOO MANY REQUESTS"); case 145: return (ls_4 + "TRADE MODIFY DENIED"); case 146: return (ls_4 + "TRADE CONTEXT BUSY"); case 147: return (ls_4 + "TRADE EXPIRATION DENIED"); case 148: return (ls_4 + "TRADE TOO MANY ORDERS"); case 4000: return (ls_4 + "NO MQLERROR"); case 4001: return (ls_4 + "WRONG FUNCTION POINTER"); case 4002: return (ls_4 + "ARRAY INDEX OUT OF RANGE"); case 4003: return (ls_4 + "NO MEMORY FOR FUNCTION CALL STACK"); case 4004: return (ls_4 + "RECURSIVE STACK OVERFLOW"); case 4005: return (ls_4 + "NOT ENOUGH STACK FOR PARAMETER"); case 4006: return (ls_4 + "NO MEMORY FOR PARAMETER STRING"); case 4007: return (ls_4 + "NO MEMORY FOR TEMP STRING"); case 4008: return (ls_4 + "NOT INITIALIZED STRING"); case 4009: return (ls_4 + "NOT INITIALIZED ARRAYSTRING"); case 4010: return (ls_4 + "NO MEMORY FOR ARRAYSTRING"); case 4011: return (ls_4 + "TOO LONG STRING"); case 4012: return (ls_4 + "REMAINDER FROM ZERO DIVIDE"); case 4013: return (ls_4 + "ZERO DIVIDE"); case 4014: return (ls_4 + "UNKNOWN COMMAND"); case 4015: return (ls_4 + "WRONG JUMP"); case 4016: return (ls_4 + "NOT INITIALIZED ARRAY"); case 4017: return (ls_4 + "DLL CALLS NOT ALLOWED"); case 4018: return (ls_4 + "CANNOT LOAD LIBRARY"); case 4019: return (ls_4 + "CANNOT CALL FUNCTION"); case 4020: return (ls_4 + "EXTERNAL EXPERT CALLS NOT ALLOWED"); case 4021: return (ls_4 + "NOT ENOUGH MEMORY FOR RETURNED STRING"); case 4022: return (ls_4 + "SYSTEM BUSY"); case 4050: return (ls_4 + "INVALID FUNCTION PARAMETERS COUNT"); case 4051: return (ls_4 + "INVALID FUNCTION PARAMETER VALUE"); case 4052: return (ls_4 + "STRING FUNCTION INTERNAL ERROR"); case 4053: return (ls_4 + "SOME ARRAY ERROR"); case 4054: return (ls_4 + "INCORRECT SERIES ARRAY USING"); case 4055: return (ls_4 + "CUSTOM INDICATOR ERROR"); case 4056: return (ls_4 + "INCOMPATIBLE ARRAYS"); case 4057: return (ls_4 + "GLOBAL VARIABLES PROCESSING ERROR"); case 4058: return (ls_4 + "GLOBAL VARIABLE NOT FOUND"); case 4059: return (ls_4 + "FUNCTION NOT ALLOWED IN TESTING MODE"); case 4060: return (ls_4 + "FUNCTION NOT CONFIRMED"); case 4061: return (ls_4 + "SEND MAIL ERROR"); case 4062: return (ls_4 + "STRING PARAMETER EXPECTED"); case 4063: return (ls_4 + "INTEGER PARAMETER EXPECTED"); case 4064: return (ls_4 + "DOUBLE PARAMETER EXPECTED"); case 4065: return (ls_4 + "ARRAY AS PARAMETER EXPECTED"); case 4066: return (ls_4 + "HISTORY WILL UPDATED"); case 4067: return (ls_4 + "TRADE ERROR"); case 4099: return (ls_4 + "END OF FILE"); case 4100: return (ls_4 + "SOME FILE ERROR"); case 4101: return (ls_4 + "WRONG FILE NAME"); case 4102: return (ls_4 + "TOO MANY OPENED FILES"); case 4103: return (ls_4 + "CANNOT OPEN FILE"); case 4104: return (ls_4 + "INCOMPATIBLE ACCESS TO FILE"); case 4105: return (ls_4 + "NO ORDER SELECTED"); case 4106: return (ls_4 + "UNKNOWN SYMBOL"); case 4107: return (ls_4 + "INVALID PRICE PARAM"); case 4108: return (ls_4 + "INVALID TICKET"); case 4109: return (ls_4 + "TRADE NOT ALLOWED"); case 4110: return (ls_4 + "LONGS NOT ALLOWED"); case 4111: return (ls_4 + "SHORTS NOT ALLOWED"); case 4200: return (ls_4 + "OBJECT ALREADY EXISTS"); case 4201: return (ls_4 + "UNKNOWN OBJECT PROPERTY"); case 4202: return (ls_4 + "OBJECT DOES NOT EXIST"); case 4203: return (ls_4 + "UNKNOWN OBJECT TYPE"); case 4204: return (ls_4 + "NO OBJECT NAME"); case 4205: return (ls_4 + "OBJECT COORDINATES ERROR"); case 4206: return (ls_4 + "NO SPECIFIED SUBWINDOW"); case 4207: return (ls_4 + "SOME OBJECT ERROR"); } return (ls_4 + "WRONG ERR NUM"); }