#property copyright "Copyright © 2009, mercury-9" #property link "mercucry-9@web.de" extern string Copyright = "www.expertfx.strana.de"; extern string Support = "mercury-9@web.de"; extern bool SignalMail = FALSE; extern double MaximumRisk = 3.0; extern double MaxLots = 10.0; extern int Slippage = 5; bool gi_116 = TRUE; bool gi_120 = FALSE; extern int MagicNumber_1 = 777251; extern int MinTakeProfit_1 = 40; extern int TrailingStop_1 = 25; extern int MinStopLoss_1 = 860; extern int APeriod_1 = 19; extern int MPeriod_1 = 19; extern int LBuy_1 = 75; extern int ReserveTake_1 = 40; extern int ReserveStop_1 = 860; bool gi_160 = TRUE; bool gi_164 = FALSE; extern int MagicNumber_2 = 777252; extern int MinTakeProfit_2 = 40; extern int TrailingStop_2 = 0; extern int MinStopLoss_2 = 420; extern int APeriod_2 = 4; extern int MPeriod_2 = 4; extern int LSell_2 = 45; extern int ReserveTake_2 = 40; extern int ReserveStop_2 = 420; double g_lots_204 = 1.0; int g_bars_212; int g_bars_216; int gi_220; bool gi_224 = FALSE; bool gi_228 = FALSE; int init() { g_bars_212 = Bars; g_bars_216 = Bars; if (gi_120) gi_220 = 0; else gi_220 = 1; if (gi_164) gi_220 = 0; else gi_220 = 1; return (0); } int deinit() { return (0); } int start() { int l_ticket_16; double l_price_20; double l_price_28; int li_228; int li_240; Comment("It\'s a DEMO"); int l_day_of_year_4 = DayOfYear(); int l_year_0 = Year(); if ((l_year_0 == 2009 && l_day_of_year_4 >= 176) || l_year_0 > 2009) { Comment("Trade is stopped !"); return (0); } int li_8 = 0; g_lots_204 = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 50000.0, 1); if (g_lots_204 > MaxLots) g_lots_204 = MaxLots; if (gi_120 && Bars != g_bars_212) gi_224 = FALSE; if (gi_164 && Bars != g_bars_216) gi_228 = FALSE; int l_ord_total_12 = OrdersTotal(); li_8 = 0; double l_iadx_36 = iADX(NULL, PERIOD_H1, APeriod_1, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 0); double l_iadx_44 = iADX(NULL, PERIOD_H1, APeriod_1, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 1); double l_iadx_52 = iADX(NULL, PERIOD_H1, APeriod_1, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 0); double l_iadx_60 = iADX(NULL, PERIOD_H1, APeriod_1, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 0); double l_imfi_68 = iMFI(NULL, PERIOD_M30, MPeriod_1, 0); double ld_76 = LBuy_1; double l_imfi_84 = iMFI(NULL, PERIOD_M30, MPeriod_1, 0); double l_imfi_92 = iMFI(NULL, PERIOD_M30, MPeriod_1, 1); double l_iadx_100 = iADX(NULL, PERIOD_M5, APeriod_1, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 0); double l_iadx_108 = iADX(NULL, PERIOD_M5, APeriod_1, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 1); double l_iadx_116 = iADX(NULL, PERIOD_M5, APeriod_1, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 0); double l_iadx_124 = iADX(NULL, PERIOD_M5, APeriod_1, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 0); double l_iadx_132 = iADX(NULL, PERIOD_H1, APeriod_2, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 0); double l_iadx_140 = iADX(NULL, PERIOD_H1, APeriod_2, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 1); double l_iadx_148 = iADX(NULL, PERIOD_H1, APeriod_2, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 0); double l_iadx_156 = iADX(NULL, PERIOD_H1, APeriod_2, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 0); double l_imfi_164 = iMFI(NULL, PERIOD_M30, MPeriod_2, 0); double ld_172 = LSell_2; double l_imfi_180 = iMFI(NULL, PERIOD_M30, MPeriod_2, 0); double l_imfi_188 = iMFI(NULL, PERIOD_M30, MPeriod_2, 1); double l_iadx_196 = iADX(NULL, PERIOD_M5, APeriod_2, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 0); double l_iadx_204 = iADX(NULL, PERIOD_M5, APeriod_2, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 1); double l_iadx_212 = iADX(NULL, PERIOD_M5, APeriod_2, PRICE_CLOSE, MODE_MINUSDI, gi_220 + 0); double l_iadx_220 = iADX(NULL, PERIOD_M5, APeriod_2, PRICE_CLOSE, MODE_PLUSDI, gi_220 + 0); bool li_232 = FALSE; for (int l_pos_236 = l_ord_total_12 - 1; l_pos_236 >= 0; l_pos_236--) { if (OrderSelect(l_pos_236, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == MagicNumber_1) li_228++; } if (li_228 > 0) li_232 = TRUE; bool li_244 = FALSE; for (int l_pos_248 = l_ord_total_12 - 1; l_pos_248 >= 0; l_pos_248--) { if (OrderSelect(l_pos_248, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == MagicNumber_2) li_240++; } if (li_240 > 0) li_244 = TRUE; int li_unused_252 = 0; for (int l_pos_256 = 0; l_pos_256 < l_ord_total_12; l_pos_256++) { OrderSelect(l_pos_256, SELECT_BY_POS, MODE_TRADES); if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_1) { li_unused_252 = 1; if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() >= Point * MinTakeProfit_1 || OrderOpenPrice() - Bid >= Point * MinStopLoss_1) li_8 = 3; if (li_8 == 3) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); li_unused_252 = 0; } else { if (TrailingStop_1 > 0) { if (Bid - OrderOpenPrice() > Point * TrailingStop_1) { if (OrderStopLoss() < Bid - Point * TrailingStop_1) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop_1, OrderTakeProfit(), 0, MediumSeaGreen); if (!gi_120) g_bars_212 = Bars; } } } } } else { if (OrderOpenPrice() - Ask >= Point * MinTakeProfit_1 || Ask - OrderOpenPrice() >= Point * MinStopLoss_1) li_8 = 4; if (li_8 == 4) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); li_unused_252 = 0; } else { if (TrailingStop_1 > 0) { if (OrderOpenPrice() - Ask > Point * TrailingStop_1) { if (OrderStopLoss() > Ask + Point * TrailingStop_1 || OrderStopLoss() == 0.0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop_1, OrderTakeProfit(), 0, DarkOrange); if (!gi_120) g_bars_212 = Bars; } } } } } } } int li_unused_260 = 0; for (int l_pos_264 = 0; l_pos_264 < l_ord_total_12; l_pos_264++) { OrderSelect(l_pos_264, SELECT_BY_POS, MODE_TRADES); if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_2) { li_unused_260 = 1; if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() >= Point * MinTakeProfit_2 || OrderOpenPrice() - Bid >= Point * MinStopLoss_2) li_8 = 7; if (li_8 == 7) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); li_unused_260 = 0; } else { if (TrailingStop_2 > 0) { if (Bid - OrderOpenPrice() > Point * TrailingStop_2) { if (OrderStopLoss() < Bid - Point * TrailingStop_2) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop_2, OrderTakeProfit(), 0, MediumSeaGreen); if (!gi_164) g_bars_216 = Bars; } } } } } else { if (OrderOpenPrice() - Ask >= Point * MinTakeProfit_2 || Ask - OrderOpenPrice() >= Point * MinStopLoss_2) li_8 = 8; if (li_8 == 8) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); li_unused_260 = 0; } else { if (TrailingStop_2 > 0) { if (OrderOpenPrice() - Ask > Point * TrailingStop_2) { if (OrderStopLoss() > Ask + Point * TrailingStop_2 || OrderStopLoss() == 0.0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop_2, OrderTakeProfit(), 0, DarkOrange); if (!gi_164) g_bars_216 = Bars; } } } } } } } if (l_iadx_36 > l_iadx_44 && l_iadx_52 > l_iadx_60 && l_imfi_68 < ld_76 && l_imfi_84 > l_imfi_92 && l_iadx_100 > l_iadx_108 && l_iadx_116 > l_iadx_124) li_8 = 1; if (li_8 == 1 && gi_116 == TRUE && (gi_120 && !gi_224) || (!gi_120 && Bars != g_bars_212)) { if (!li_232) { if (AccountFreeMargin() < 1000.0 * g_lots_204) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return (0); } if (ReserveStop_1 > 0) l_price_20 = Ask - ReserveStop_1 * Point; else l_price_20 = 0.0; if (ReserveTake_1 > 0) l_price_28 = Ask + ReserveTake_1 * Point; else l_price_28 = 0.0; l_ticket_16 = OrderSend(Symbol(), OP_BUY, g_lots_204, Ask, Slippage, l_price_20, l_price_28, "Buy(#" + MagicNumber_1 + ")", MagicNumber_1, 0, DodgerBlue); if (l_ticket_16 > 0) { if (OrderSelect(l_ticket_16, SELECT_BY_TICKET, MODE_TRADES)) { Print("BUY order opened (Strategy_1): ", MagicNumber_1); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy"); } else Print("Error opening BUY order (Strategy_1): ", GetLastError()); } if (gi_120) gi_224 = TRUE; if (!gi_120) g_bars_212 = Bars; return (0); } } if (li_8 == 2 && gi_116 == TRUE && (gi_120 && !gi_224) || (!gi_120 && Bars != g_bars_212)) { if (!li_232) { if (AccountFreeMargin() < 1000.0 * g_lots_204) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return (0); } if (ReserveStop_1 > 0) l_price_20 = Bid + ReserveStop_1 * Point; else l_price_20 = 0.0; if (ReserveTake_1 > 0) l_price_28 = Bid - ReserveTake_1 * Point; else l_price_28 = 0.0; l_ticket_16 = OrderSend(Symbol(), OP_SELL, g_lots_204, Bid, Slippage, l_price_20, l_price_28, "Sell(#" + MagicNumber_1 + ")", MagicNumber_1, 0, DeepPink); if (l_ticket_16 > 0) { if (OrderSelect(l_ticket_16, SELECT_BY_TICKET, MODE_TRADES)) { Print("SELL order opened (Strategy_1): ", MagicNumber_1); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell"); } else Print("Error opening SELL order (Strategy_1): ", GetLastError()); } if (gi_120) gi_224 = TRUE; if (!gi_120) g_bars_212 = Bars; return (0); } } if (l_iadx_132 > l_iadx_140 && l_iadx_148 > l_iadx_156 && l_imfi_164 > ld_172 && l_imfi_180 < l_imfi_188 && l_iadx_196 > l_iadx_204 && l_iadx_212 > l_iadx_220) li_8 = 6; if (li_8 == 5 && gi_160 == TRUE && (gi_164 && !gi_228) || (!gi_164 && Bars != g_bars_216)) { if (!li_244) { if (AccountFreeMargin() < 1000.0 * g_lots_204) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return (0); } if (ReserveStop_2 > 0) l_price_20 = Ask - ReserveStop_2 * Point; else l_price_20 = 0.0; if (ReserveTake_2 > 0) l_price_28 = Ask + ReserveTake_2 * Point; else l_price_28 = 0.0; l_ticket_16 = OrderSend(Symbol(), OP_BUY, g_lots_204, Ask, Slippage, l_price_20, l_price_28, "Buy(#" + MagicNumber_2 + ")", MagicNumber_2, 0, DodgerBlue); if (l_ticket_16 > 0) { if (OrderSelect(l_ticket_16, SELECT_BY_TICKET, MODE_TRADES)) { Print("BUY order opened (Strategy_2): ", MagicNumber_2); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy"); } else Print("Error opening BUY order (Strategy_2): ", GetLastError()); } if (gi_164) gi_228 = TRUE; if (!gi_164) g_bars_216 = Bars; return (0); } } if (li_8 == 6 && gi_160 == TRUE && (gi_164 && !gi_228) || (!gi_164 && Bars != g_bars_216)) { if (!li_244) { if (AccountFreeMargin() < 1000.0 * g_lots_204) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return (0); } if (ReserveStop_2 > 0) l_price_20 = Bid + ReserveStop_2 * Point; else l_price_20 = 0.0; if (ReserveTake_2 > 0) l_price_28 = Bid - ReserveTake_2 * Point; else l_price_28 = 0.0; l_ticket_16 = OrderSend(Symbol(), OP_SELL, g_lots_204, Bid, Slippage, l_price_20, l_price_28, "Sell(#" + MagicNumber_2 + ")", MagicNumber_2, 0, DeepPink); if (l_ticket_16 > 0) { if (OrderSelect(l_ticket_16, SELECT_BY_TICKET, MODE_TRADES)) { Print("SELL order opened (Strategy_2): ", MagicNumber_2); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell"); } else Print("Error opening SELL order (Strategy_2): ", GetLastError()); } if (gi_164) gi_228 = TRUE; if (!gi_164) g_bars_216 = Bars; return (0); } } if (!gi_120) g_bars_212 = Bars; if (!gi_164) g_bars_216 = Bars; return (0); }