#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 = 263111; extern int MinTakeProfit_1 = 35; extern int TrailingStop_1 = 0; extern int MinStopLoss_1 = 860; extern int LBuy_1 = 75; extern int IndPeriod_1 = 24; extern int ReserveTake_1 = 35; extern int ReserveStop_1 = 860; bool gi_156 = TRUE; bool gi_160 = FALSE; extern int MagicNumber_2 = 263112; extern int MinTakeProfit_2 = 25; extern int TrailingStop_2 = 0; extern int MinStopLoss_2 = 600; extern int LSell_2 = 25; extern int IndPeriod_2 = 4; extern int ReserveTake_2 = 25; extern int ReserveStop_2 = 600; bool gi_196 = TRUE; bool gi_200 = FALSE; extern int MagicNumber_3 = 263113; extern int MinTakeProfit_3 = 15; extern int TrailingStop_3 = 0; extern int MinStopLoss_3 = 480; extern double IndPeriod_3 = 19.0; extern double LBuy_3 = 30.0; extern double LSell_3 = 80.0; extern int ReserveTake_3 = 15; extern int ReserveStop_3 = 480; double g_lots_252 = 1.0; int g_bars_260; int g_bars_264; int g_bars_268; int gi_272; bool gi_276 = FALSE; bool gi_280 = FALSE; bool gi_284 = FALSE; int init() { g_bars_260 = Bars; g_bars_264 = Bars; g_bars_268 = Bars; if (gi_120) gi_272 = 0; else gi_272 = 1; if (gi_160) gi_272 = 0; else gi_272 = 1; if (gi_200) gi_272 = 0; else gi_272 = 1; return (0); } int deinit() { return (0); } int start() { int l_ticket_16; double l_price_20; double l_price_28; int li_260; int li_272; int li_284; 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_252 = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 50000.0, 1); if (g_lots_252 > MaxLots) g_lots_252 = MaxLots; if (gi_120 && Bars != g_bars_260) gi_276 = FALSE; if (gi_160 && Bars != g_bars_264) gi_280 = FALSE; if (gi_200 && Bars != g_bars_268) gi_284 = FALSE; int l_ord_total_12 = OrdersTotal(); li_8 = 0; double l_iclose_36 = iClose(NULL, PERIOD_M30, gi_272 + 0); double l_isar_44 = iSAR(NULL, PERIOD_M30, 0.02, 0.2, gi_272 + 0); double l_iclose_52 = iClose(NULL, PERIOD_H4, gi_272 + 0); double l_isar_60 = iSAR(NULL, PERIOD_H4, 0.02, 0.2, gi_272 + 0); double l_imfi_68 = iMFI(NULL, 0, IndPeriod_1, 0); double ld_76 = LBuy_1; double l_imfi_84 = iMFI(NULL, 0, IndPeriod_1, 0); double l_imfi_92 = iMFI(NULL, 0, IndPeriod_1, 1); double l_iclose_100 = iClose(NULL, PERIOD_M30, gi_272 + 0); double l_isar_108 = iSAR(NULL, PERIOD_M30, 0.02, 0.2, gi_272 + 0); double l_iclose_116 = iClose(NULL, PERIOD_H4, gi_272 + 0); double l_isar_124 = iSAR(NULL, PERIOD_H4, 0.02, 0.2, gi_272 + 0); double l_imfi_132 = iMFI(NULL, 0, IndPeriod_2, 0); double ld_140 = LSell_2; double l_imfi_148 = iMFI(NULL, 0, IndPeriod_2, 0); double l_imfi_156 = iMFI(NULL, 0, IndPeriod_2, 1); double l_istochastic_164 = iStochastic(NULL, PERIOD_H1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, gi_272 + 0); double l_istochastic_172 = iStochastic(NULL, PERIOD_H1, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, gi_272 + 0); double l_istochastic_180 = iStochastic(NULL, PERIOD_M5, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, gi_272 + 0); double l_istochastic_188 = iStochastic(NULL, PERIOD_M5, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, gi_272 + 0); double l_imfi_196 = iMFI(NULL, PERIOD_M30, IndPeriod_3, gi_272 + 0); double ld_204 = LBuy_3; double l_istochastic_212 = iStochastic(NULL, PERIOD_H1, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, gi_272 + 0); double l_istochastic_220 = iStochastic(NULL, PERIOD_H1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, gi_272 + 0); double l_istochastic_228 = iStochastic(NULL, PERIOD_M5, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, gi_272 + 0); double l_istochastic_236 = iStochastic(NULL, PERIOD_M5, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, gi_272 + 0); double l_imfi_244 = iMFI(NULL, PERIOD_M30, IndPeriod_3, gi_272 + 0); double ld_252 = LSell_3; bool li_264 = FALSE; for (int l_pos_268 = l_ord_total_12 - 1; l_pos_268 >= 0; l_pos_268--) { if (OrderSelect(l_pos_268, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == MagicNumber_1) li_260++; } if (li_260 > 0) li_264 = TRUE; bool li_276 = FALSE; for (int l_pos_280 = l_ord_total_12 - 1; l_pos_280 >= 0; l_pos_280--) { if (OrderSelect(l_pos_280, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == MagicNumber_2) li_272++; } if (li_272 > 0) li_276 = TRUE; bool li_288 = FALSE; for (int l_pos_292 = l_ord_total_12 - 1; l_pos_292 >= 0; l_pos_292--) { if (OrderSelect(l_pos_292, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == MagicNumber_3) li_284++; } if (li_284 > 0) li_288 = TRUE; int li_unused_296 = 0; for (int l_pos_300 = 0; l_pos_300 < l_ord_total_12; l_pos_300++) { OrderSelect(l_pos_300, SELECT_BY_POS, MODE_TRADES); if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_1) { li_unused_296 = 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_296 = 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_260 = 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_296 = 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_260 = Bars; } } } } } } } int li_unused_304 = 0; for (int l_pos_308 = 0; l_pos_308 < l_ord_total_12; l_pos_308++) { OrderSelect(l_pos_308, SELECT_BY_POS, MODE_TRADES); if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_2) { li_unused_304 = 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_304 = 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_160) g_bars_264 = 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_304 = 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_160) g_bars_264 = Bars; } } } } } } } int li_unused_312 = 0; for (int l_pos_316 = 0; l_pos_316 < l_ord_total_12; l_pos_316++) { OrderSelect(l_pos_316, SELECT_BY_POS, MODE_TRADES); if (OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3) { li_unused_312 = 1; if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() >= Point * MinTakeProfit_3 || OrderOpenPrice() - Bid >= Point * MinStopLoss_3) li_8 = 11; if (li_8 == 11) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy"); li_unused_312 = 0; } else { if (TrailingStop_3 > 0) { if (Bid - OrderOpenPrice() > Point * TrailingStop_3) { if (OrderStopLoss() < Bid - Point * TrailingStop_3) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop_3, OrderTakeProfit(), 0, MediumSeaGreen); if (!gi_200) g_bars_268 = Bars; } } } } } else { if (OrderOpenPrice() - Ask >= Point * MinTakeProfit_3 || Ask - OrderOpenPrice() >= Point * MinStopLoss_3) li_8 = 12; if (li_8 == 12) { OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell"); li_unused_312 = 0; } else { if (TrailingStop_3 > 0) { if (OrderOpenPrice() - Ask > Point * TrailingStop_3) { if (OrderStopLoss() > Ask + Point * TrailingStop_3 || OrderStopLoss() == 0.0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop_3, OrderTakeProfit(), 0, DarkOrange); if (!gi_200) g_bars_268 = Bars; } } } } } } } if (l_iclose_36 > l_isar_44 && l_iclose_52 > l_isar_60 && l_imfi_68 < ld_76 && l_imfi_84 > l_imfi_92) li_8 = 1; if (li_8 == 1 && gi_116 == TRUE && (gi_120 && !gi_276) || (!gi_120 && Bars != g_bars_260)) { if (!li_264) { if (AccountFreeMargin() < 1000.0 * g_lots_252) { 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_252, 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_276 = TRUE; if (!gi_120) g_bars_260 = Bars; return (0); } } if (li_8 == 2 && gi_116 == TRUE && (gi_120 && !gi_276) || (!gi_120 && Bars != g_bars_260)) { if (!li_264) { if (AccountFreeMargin() < 1000.0 * g_lots_252) { 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_252, 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_276 = TRUE; if (!gi_120) g_bars_260 = Bars; return (0); } } if (l_iclose_100 < l_isar_108 && l_iclose_116 < l_isar_124 && l_imfi_132 > ld_140 && l_imfi_148 < l_imfi_156) li_8 = 6; if (li_8 == 5 && gi_156 == TRUE && (gi_160 && !gi_280) || (!gi_160 && Bars != g_bars_264)) { if (!li_276) { if (AccountFreeMargin() < 1000.0 * g_lots_252) { 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_252, 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_160) gi_280 = TRUE; if (!gi_160) g_bars_264 = Bars; return (0); } } if (li_8 == 6 && gi_156 == TRUE && (gi_160 && !gi_280) || (!gi_160 && Bars != g_bars_264)) { if (!li_276) { if (AccountFreeMargin() < 1000.0 * g_lots_252) { 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_252, 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_160) gi_280 = TRUE; if (!gi_160) g_bars_264 = Bars; return (0); } } if (l_istochastic_164 > l_istochastic_172 && l_istochastic_180 > l_istochastic_188 && l_imfi_196 < ld_204) li_8 = 9; if (l_istochastic_212 > l_istochastic_220 && l_istochastic_228 > l_istochastic_236 && l_imfi_244 > ld_252) li_8 = 10; if (li_8 == 9 && gi_196 == TRUE && (gi_200 && !gi_284) || (!gi_200 && Bars != g_bars_268)) { if (!li_288) { if (AccountFreeMargin() < 1000.0 * g_lots_252) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return (0); } if (ReserveStop_3 > 0) l_price_20 = Ask - ReserveStop_3 * Point; else l_price_20 = 0.0; if (ReserveTake_3 > 0) l_price_28 = Ask + ReserveTake_3 * Point; else l_price_28 = 0.0; l_ticket_16 = OrderSend(Symbol(), OP_BUY, g_lots_252, Ask, Slippage, l_price_20, l_price_28, "Buy(#" + MagicNumber_3 + ")", MagicNumber_3, 0, DodgerBlue); if (l_ticket_16 > 0) { if (OrderSelect(l_ticket_16, SELECT_BY_TICKET, MODE_TRADES)) { Print("BUY order opened (Strategy_3): ", MagicNumber_3); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy"); } else Print("Error opening BUY order (Strategy_3): ", GetLastError()); } if (gi_200) gi_284 = TRUE; if (!gi_200) g_bars_268 = Bars; return (0); } } if (li_8 == 10 && gi_196 == TRUE && (gi_200 && !gi_284) || (!gi_200 && Bars != g_bars_268)) { if (!li_288) { if (AccountFreeMargin() < 1000.0 * g_lots_252) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return (0); } if (ReserveStop_3 > 0) l_price_20 = Bid + ReserveStop_3 * Point; else l_price_20 = 0.0; if (ReserveTake_3 > 0) l_price_28 = Bid - ReserveTake_3 * Point; else l_price_28 = 0.0; l_ticket_16 = OrderSend(Symbol(), OP_SELL, g_lots_252, Bid, Slippage, l_price_20, l_price_28, "Sell(#" + MagicNumber_3 + ")", MagicNumber_3, 0, DeepPink); if (l_ticket_16 > 0) { if (OrderSelect(l_ticket_16, SELECT_BY_TICKET, MODE_TRADES)) { Print("SELL order opened (Strategy_3): ", MagicNumber_3); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell"); } else Print("Error opening SELL order (Strategy_3): ", GetLastError()); } if (gi_200) gi_284 = TRUE; if (!gi_200) g_bars_268 = Bars; return (0); } } if (!gi_120) g_bars_260 = Bars; if (!gi_160) g_bars_264 = Bars; if (!gi_200) g_bars_268 = Bars; return (0); }