#property copyright "Copyright © 2009,Aliaksandr Mikhailouski" #property link "" extern string StepChangeIf = "(1.12340)SteptoStart=200,SteptoCover=1000,SteptoRecover=1200"; extern string MartM = "-------------Martingale Management"; extern string SS = "--------------------------Settings to start"; extern int SteptoStart = 20; extern double FirstLot = 0.1; extern string STL = "----------------Settings to cover loses"; extern int SteptoCover = 100; extern double CoverLot = 0.3; extern double IncLot = 0.0; extern string TP = "-------------Target Profit for all open order"; extern double MinProfit = 5.0; extern int slippage = 6; extern string RL = "When to use extra mechanism to cover floating losses"; extern double RecoverLosses$ = 100.0; extern int SteptoRecover = 120; extern string StochSt = "---------------Stochastic Settings"; extern int Kperiod = 5; extern int Dperiod = 3; extern int Slowing = 3; extern double Value_of_up_level = 85.0; extern double Value_of_down_level = 15.0; extern int Magic = 2008; double g_ord_lots_220 = 0.0; double g_ord_lots_228 = 0.0; double gd_236; double gd_244; bool gi_252 = FALSE; int init() { Comment("DEMO ACCOUNT USE ONLY!!!!", "\n", "If you want to trade on real account, you need to buy a full version. Thank you.", "\n", "Account #", AccountNumber(), "\n", "\n", "Leverage = ", AccountLeverage()); GlobalVariableSet("OldBalance", AccountBalance()); return (0); } int deinit() { Comment(""); return (0); } int start() { if (AccountEquity() >= GlobalVariableGet("OldBalance") + MinProfit) { DeletePendingOrders(Magic); CloseOrders(Magic); GlobalVariableSet("OldBalance", 0); } StopLoss(); GlobalVariableSet("OldBalance", AccountBalance()); if (IsDemo() && MyOrdersTotal(Magic) == 0) { Comment("DEMO ACCOUNT USE ONLY!!!!", "\n", "If you want to trade on real account, you need to buy a full version. Thank you.", "\n", "Leverage = ", AccountLeverage(), "\n", "---------------------------", "\n", "Start to trade"); OrderSend(Symbol(), OP_SELLLIMIT, FirstLot, Bid + SteptoStart * Point, 6, 0, 0, "", Magic, 0, Red); OrderSend(Symbol(), OP_BUYLIMIT, FirstLot, Ask - SteptoStart * Point, 6, 0, 0, "", Magic, 0, Blue); } gd_236 = GetLastSellPrice(Magic); gd_244 = GetLastBuyPrice(Magic); if (gd_236 - Bid <= 5.0 * Point) { Comment("DEMO ACCOUNT USE ONLY!!!!", "\n", "If you want to trade on real account, you need to buy a full version. Thank you.", "\n", "Account #", AccountNumber(), "\n", "\n", "Leverage = ", AccountLeverage(), "\n", "---------------------------", "\n", "Covering SELLs orders"); OrderSend(Symbol(), OP_SELLLIMIT, g_ord_lots_220 + IncLot, gd_236 + SteptoCover * Point, 6, 0, 0, "", Magic, 0, Yellow); } if (Ask - gd_244 <= 5.0 * Point) { Comment("DEMO ACCOUNT USE ONLY!!!!", "\n", "If you want to trade on real account, you need to buy a full version. Thank you.", "\n", "Account #", AccountNumber(), "\n", "\n", "Leverage = ", AccountLeverage(), "\n", "---------------------------", "\n", "Covering BUYs orders"); OrderSend(Symbol(), OP_BUYLIMIT, g_ord_lots_228 + IncLot, gd_244 - SteptoCover * Point, 6, 0, 0, "", Magic, 0, Black); } return (0); } int DeletePendingOrders(int a_magic_0) { int l_ord_total_4 = OrdersTotal(); for (int l_pos_8 = l_ord_total_4 - 1; l_pos_8 >= 0; l_pos_8--) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() != OP_BUY || OrderType() != OP_SELL) { OrderDelete(OrderTicket()); gi_252 = FALSE; } } return (0); } int CloseOrders(int a_magic_0) { int l_ord_total_4 = OrdersTotal(); for (int l_pos_8 = l_ord_total_4 - 1; l_pos_8 >= 0; l_pos_8--) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol()) { if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 6, White); if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 6, White); } } return (0); } int MyOrdersTotal(int a_magic_0) { int l_count_4 = 0; int l_ord_total_8 = OrdersTotal(); for (int l_pos_12 = 0; l_pos_12 < l_ord_total_8; l_pos_12++) { OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol()) l_count_4++; } return (l_count_4); } double GetLastBuyPrice(int a_magic_0) { int li_4 = OrdersTotal() - 1; for (int l_pos_8 = li_4; l_pos_8 >= 0; l_pos_8--) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() == OP_BUYLIMIT || OrderType() == OP_BUY) { g_ord_lots_228 = OrderLots(); return (OrderOpenPrice()); } } return (0); } double GetLastSellPrice(int a_magic_0) { int li_4 = OrdersTotal() - 1; for (int l_pos_8 = li_4; l_pos_8 >= 0; l_pos_8--) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0 && OrderSymbol() == Symbol() && OrderType() == OP_SELLLIMIT || OrderType() == OP_SELL) { g_ord_lots_220 = OrderLots(); return (OrderOpenPrice()); } } return (10000); } int StopLoss() { if (OrdersTotal() >= 4 || OrdersTotal() <= 6 && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && AccountEquity() <= GlobalVariableGet("OldBalance") - RecoverLosses$) { Comment("DEMO ACCOUNT USE ONLY!!!!", "\n", "If you want to trade on real account, you need to buy a full version. Thank you.", "\n", "Account #", AccountNumber(), "\n", "\n", "Leverage = ", AccountLeverage(), "\n", " recovering floating losses = ", 4, "\n"); if (!gi_252) { if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() != OP_BUY && iStochastic(NULL, 0, Kperiod, Dperiod, Slowing, MODE_SMA, 0, MODE_MAIN, 0) <= Value_of_down_level) { OrderSend(Symbol(), OP_BUYLIMIT, CoverLot, gd_244 - SteptoRecover * Point, 6, 0, 0, "", Magic, 0, Black); gi_252 = TRUE; } if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() != OP_SELL && iStochastic(NULL, 0, Kperiod, Dperiod, Slowing, MODE_SMA, 0, MODE_MAIN, 0) >= Value_of_up_level) { OrderSend(Symbol(), OP_SELLLIMIT, CoverLot, gd_236 + SteptoRecover * Point, 6, 0, 0, "", Magic, 0, Yellow); gi_252 = TRUE; } } } return (0); }