#property copyright "Copyright 2008 Mobiletechnology Inc." #property link "http://www.forextradingedgesoftware.com" #include string gs_76 = "FXDirectDealer"; string gs_84 = "ANONYMOUS USER"; int gi_92 = 999999; string gs_96 = "2098.04.31"; extern bool TestMode = FALSE; extern int MagicNumber = 541360970; extern bool MoneyManagement = TRUE; extern double RiskLevel = 0.5; extern double MaxLots = 100.0; extern double FixedLots = 0.1; extern int StopLoss = 35; extern int TakeProfit = 8; double gd_148 = 1.0; bool gi_156 = TRUE; int gi_160 = 3; int g_slippage_164 = 8; int gi_168 = 11; int gi_172 = 1; bool gi_176 = FALSE; bool gi_180 = TRUE; int gi_184 = 16711680; int gi_188 = 255; int g_shift_192 = 0; int gi_unused_196 = 0; double g_imacd_200; double g_imacd_208; double g_istochastic_216; double g_isar_224; double g_isar_232; double g_imomentum_240; double g_imomentum_248; int gi_256; extern bool Stoch1_On_Off = TRUE; extern int Stoch1_1 = 2; extern int Stoch1_2 = 3; extern int Stoch1_3 = 4; extern bool Stoch2_On_Off = TRUE; extern int Stoch2_1 = 3; extern int Stoch2_2 = 3; extern int Stoch2_3 = 1; extern bool PSar1_On_Off = TRUE; extern double PSar1_1 = 0.02; extern double PSar1_2 = 0.2; extern double PSar1_3 = 0.03; extern double PSar1_4 = 0.3; extern bool PSar2_On_Off = FALSE; extern double PSar2_1 = 0.05; extern double PSar2_2 = 0.3; extern double PSar2_3 = 0.04; extern double PSar2_4 = 0.2; extern bool Macd_On_Off = FALSE; extern int Macd_1 = 12; extern int Macd_2 = 26; extern int Macd_3 = 9; extern bool Momentum_On_Off = FALSE; extern int Momentum_Period = 14; extern bool Adx_On_Off = FALSE; extern int ADXPeriod = 14; double g_iadx_396; extern double Adx_Level = 30.0; extern int Stoch_Applied_Price = 0; extern int Macd_Applied_Price = 0; extern int Momentum_Applied_Price = 0; extern int Adx_Applied_Price = 0; int g_ma_method_428 = MODE_SMA; int init() { watermark(); if (IsTradeContextBusy() == TRUE) Alert("REVOLUTION >> TRADE CONTEXT BUSY"); if (g_slippage_164 > 11) Alert("REVOLUTION >> MAX SLIPPAGE TO HIGH"); if (g_slippage_164 < 2) Alert("REVOLUTION >> MAX SLIPPAGE TO LITTLE"); if (IsStopped() == TRUE) Alert("REVOLUTION >> AUTO TRADING STOPPED BY BROKERSERVER"); if (Period() != PERIOD_M30) Alert("REVOLUTION >> PLEASE PUT ON THE 30 MIN EURUSD CHART"); if (Bars < 1000) Alert("REVOLUTION >> REVOLUTION NEED 1000 CANDLESTICK IN THE CHART"); if (StringSubstr(Symbol(), 0, 6) != "EURUSD" && StringSubstr(Symbol(), 0, 6) != "EURUSDm") Alert("REVOLUTION >> PLEASE PUT ON THE 30 MIN EURUSD CHART"); return (0); } int deinit() { return (0); } bool CheckExitCondition(string as_unused_0) { bool li_ret_8 = FALSE; return (li_ret_8); } bool CheckEntryConditionBUY() { if (Macd_On_Off) { g_imacd_200 = iMACD(NULL, PERIOD_M30, Macd_1, Macd_2, Macd_3, Macd_Applied_Price, MODE_MAIN, g_shift_192); g_imacd_208 = iMACD(NULL, PERIOD_M30, Macd_1, Macd_2, Macd_3, Macd_Applied_Price, MODE_SIGNAL, g_shift_192); if (g_imacd_200 >= g_imacd_208) return (FALSE); } if (Stoch1_On_Off) { g_istochastic_216 = iStochastic(NULL, PERIOD_M30, Stoch1_1, Stoch1_2, Stoch1_3, g_ma_method_428, Stoch_Applied_Price, MODE_MAIN, g_shift_192); if (g_istochastic_216 >= 22.0) return (FALSE); } if (Stoch2_On_Off) { g_istochastic_216 = iStochastic(NULL, PERIOD_M30, Stoch2_1, Stoch2_2, Stoch2_3, g_ma_method_428, Stoch_Applied_Price, MODE_MAIN, g_shift_192); if (g_istochastic_216 >= 50.0) return (FALSE); } if (PSar1_On_Off) { g_isar_224 = iSAR(NULL, PERIOD_M30, PSar1_1, PSar1_2, g_shift_192); if (g_isar_224 > Ask) return (FALSE); g_isar_232 = iSAR(NULL, PERIOD_M30, PSar1_3, PSar1_4, g_shift_192); if (g_isar_232 < g_isar_224) return (FALSE); } if (PSar2_On_Off) { g_isar_224 = iSAR(NULL, PERIOD_M30, PSar2_1, PSar2_2, g_shift_192); if (g_isar_224 < Bid) return (FALSE); g_isar_232 = iSAR(NULL, PERIOD_M30, PSar2_3, PSar2_4, g_shift_192 + 1); if (g_isar_232 >= g_isar_224) return (FALSE); } if (Momentum_On_Off) { g_imomentum_240 = iMomentum(NULL, PERIOD_M30, Momentum_Period, Momentum_Applied_Price, g_shift_192); g_imomentum_248 = iMomentum(NULL, PERIOD_M30, Momentum_Period, Momentum_Applied_Price, g_shift_192 + 1); if (g_imomentum_240 >= 100.0) return (FALSE); } if (Adx_On_Off) { g_iadx_396 = iADX(NULL, PERIOD_M30, ADXPeriod, Adx_Applied_Price, MODE_MAIN, 0); if (g_iadx_396 >= Adx_Level) return (FALSE); } return (TRUE); } bool CheckEntryConditionSELL() { if (Macd_On_Off) { g_imacd_200 = iMACD(NULL, PERIOD_M30, 12, 26, 9, Macd_Applied_Price, MODE_MAIN, g_shift_192); g_imacd_208 = iMACD(NULL, PERIOD_M30, 12, 26, 9, Macd_Applied_Price, MODE_SIGNAL, g_shift_192); if (g_imacd_200 <= g_imacd_208) return (FALSE); } if (Stoch1_On_Off) { g_istochastic_216 = iStochastic(NULL, PERIOD_M30, Stoch2_1, Stoch2_2, Stoch2_3, g_ma_method_428, Stoch_Applied_Price, MODE_MAIN, g_shift_192); if (g_istochastic_216 <= 78.0) return (FALSE); } if (Stoch2_On_Off) { g_istochastic_216 = iStochastic(NULL, PERIOD_M30, Stoch1_1, Stoch1_2, Stoch1_3, g_ma_method_428, Stoch_Applied_Price, MODE_MAIN, g_shift_192); if (g_istochastic_216 <= 25.0) return (FALSE); } if (PSar1_On_Off) { g_isar_224 = iSAR(NULL, PERIOD_M30, PSar2_1, PSar2_2, g_shift_192); if (g_isar_224 < Bid) return (FALSE); g_isar_232 = iSAR(NULL, PERIOD_M30, PSar2_3, PSar2_4, g_shift_192 + 1); if (g_isar_232 >= g_isar_224) return (FALSE); } if (PSar2_On_Off) { g_isar_224 = iSAR(NULL, PERIOD_M30, PSar1_1, PSar1_2, g_shift_192); if (g_isar_224 > Ask) return (FALSE); g_isar_232 = iSAR(NULL, PERIOD_M30, PSar1_3, PSar1_4, g_shift_192); if (g_isar_232 < g_isar_224) return (FALSE); } if (Momentum_On_Off) { g_imomentum_240 = iMomentum(NULL, PERIOD_M30, Momentum_Period, Momentum_Applied_Price, g_shift_192); g_imomentum_248 = iMomentum(NULL, PERIOD_M30, Momentum_Period, Momentum_Applied_Price, g_shift_192 + 1); if (g_imomentum_240 <= 100.0) return (FALSE); } if (Adx_On_Off) { g_iadx_396 = iADX(NULL, PERIOD_M30, ADXPeriod, Adx_Applied_Price, MODE_MAIN, 0); if (g_iadx_396 >= Adx_Level) return (FALSE); } return (TRUE); } int start() { string ls_0; int l_str2time_8 = StrToTime(gs_96); if (Symbol() != "EURUSD" && Symbol() != "EURUSDm") return; if (TimeCurrent() >= l_str2time_8) { Alert("REVOLUTION >> VERSION EXPIRED! PLEASE CONTACT: support@forextradingedgesoftware.com "); return (0); } if (AccountCompany() != gs_76) { Alert("REVOLUTION >> FXDD BROKER ONLY! PLEASE CONTACT: support@forextradingedgesoftware.com "); return (0); } if (TestMode != TRUE) { ls_0 = "" + "\n" + " REVOLUTION" + "\n" + "" + "\n" + " REGISTERED NAME " + gs_84 + "\n" + " REGISTERED ACCOUNT " + DoubleToStr(gi_92, 0) + "\n" + " BROKER COMPANY " + AccountCompany() + "\n" + " BROKER SERVER " + AccountServer() + "\n" + " ACCOUNT NAME " + AccountName() + "\n" + " ACCOUNT NUMBER " + AccountNumber() + "\n" + " ACCOUNT LEVERAGE " + DoubleToStr(AccountLeverage(), 0) + "\n" + " ACCOUNT BALANCE " + DoubleToStr(AccountBalance(), 2) + "\n" + " ACCOUNT CURRENCY " + AccountCurrency() + "\n" + " ACCOUNT EQUITY " + DoubleToStr(AccountEquity(), 2) + "\n" + " FREE MARGIN " + DoubleToStr(AccountFreeMargin(), 2) + "\n" + " USED MARGIN " + DoubleToStr(AccountMargin(), 2) + "\n" + " SERVER TIME " + TimeToStr(TimeCurrent(), TIME_SECONDS); Comment(ls_0); } if (gi_176) TrailingPositions(); HandleOpenPositions(); gi_256 = openPositions(); if (gi_256 > 0) return (0); if (AccountFreeMargin() < 1000.0 * MoneyManagement()) { Alert("REVOLUTION >> NOT ENOUGH MARGIN!", AccountFreeMargin()); return (0); } if (CheckEntryConditionBUY()) OpenBuyOrder(); if (CheckEntryConditionSELL()) OpenSellOrder(); return (0); } void OpenBuyOrder() { double l_price_0 = 0; double l_price_8 = 0; l_price_0 = 0; if (StopLoss > 0) l_price_0 = Ask - StopLoss * Point; l_price_8 = 0; if (TakeProfit > 0) l_price_8 = Ask + TakeProfit * Point; OrderSend(Symbol(), OP_BUY, MoneyManagement(), Ask, g_slippage_164, l_price_0, l_price_8, "", MagicNumber, 0, Green); prtAlert("REVOLUTION >> BUY @" + DoubleToStr(Ask, 4)); } void OpenSellOrder() { double l_price_0 = 0; double l_price_8 = 0; l_price_0 = 0; if (StopLoss > 0) l_price_0 = Bid + StopLoss * Point; l_price_8 = 0; if (TakeProfit > 0) l_price_8 = Bid - TakeProfit * Point; OrderSend(Symbol(), OP_SELL, MoneyManagement(), Bid, g_slippage_164, l_price_0, l_price_8, "", MagicNumber, 0, Red); prtAlert("REVOLUTION >> SELL @" + DoubleToStr(Bid, 4)); } int openPositions() { int l_count_0 = 0; for (int l_pos_4 = OrdersTotal() - 1; l_pos_4 >= 0; l_pos_4--) { OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == MagicNumber) { if (OrderSymbol() == Symbol()) { if (OrderType() == OP_BUY) l_count_0++; if (OrderType() == OP_SELL) l_count_0++; } } } return (l_count_0); } void prtAlert(string as_0 = "") { Print(Symbol() + " - " + as_0); Alert(Symbol() + " - " + as_0); } void CloseOrder(int a_ticket_0, double a_lots_4, double a_price_12) { int l_error_20; int l_count_24 = 0; while (l_count_24 < 3) { if (OrderClose(a_ticket_0, a_lots_4, a_price_12, g_slippage_164, Violet)) l_count_24 = 3; else { l_error_20 = GetLastError(); Print(l_count_24, " REVOLUTION >> ERROR CLOSING ORDER (", l_error_20, ") " + ErrorDescription(l_error_20)); if (l_error_20 > 0/* NO_ERROR */) l_count_24++; } } } void TrailingPositions() { for (int 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) { if (OrderType() == OP_BUY) { if (!gi_180 || Bid - OrderOpenPrice() > gi_168 * Point) if (OrderStopLoss() < Bid - (gi_168 + gi_172 - 1) * Point) ModifyStopLoss(Bid - gi_168 * Point, gi_184); } if (OrderType() == OP_SELL) { if (!gi_180 || OrderOpenPrice() - Ask > gi_168 * Point) if (OrderStopLoss() > Ask + (gi_168 + gi_172 - 1) * Point || OrderStopLoss() == 0.0) ModifyStopLoss(Ask + gi_168 * Point, gi_188); } } } } } void ModifyStopLoss(double a_price_0, color a_color_8) { double l_ord_open_price_12 = OrderOpenPrice(); double l_ord_takeprofit_20 = OrderTakeProfit(); OrderModify(OrderTicket(), l_ord_open_price_12, a_price_0, l_ord_takeprofit_20, 0, a_color_8); } int HandleOpenPositions() { for (int l_pos_0 = OrdersTotal() - 1; l_pos_0 >= 0; l_pos_0--) { OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { if (OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) if (CheckExitCondition("BUY")) CloseOrder(OrderTicket(), OrderLots(), Bid); } } } if (OrderType() == OP_SELL) if (CheckExitCondition("SELL")) CloseOrder(OrderTicket(), OrderLots(), Ask); return (0); } double MoneyManagement() { double ld_ret_0 = FixedLots; int l_hist_total_8 = OrdersHistoryTotal(); int l_count_12 = 0; ld_ret_0 = NormalizeDouble(AccountFreeMargin() * RiskLevel / 1000.0, 1); if (gi_156 == TRUE) ld_ret_0 = NormalizeDouble(AccountBalance() / gi_160 * RiskLevel / 1000.0, 1); if (gd_148 > 0.0) { for (int l_pos_16 = l_hist_total_8 - 1; l_pos_16 >= 0; l_pos_16--) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_HISTORY) == FALSE) { Print("REVOLUTION >> ERROR IN HISTORY DATA"); break; } if (OrderSymbol() != Symbol() || OrderType() > OP_SELL || OrderMagicNumber() != MagicNumber) continue; if (OrderProfit() > 0.0) break; if (OrderProfit() < 0.0 && OrderMagicNumber() == MagicNumber) l_count_12++; } if (l_count_12 > 1) ld_ret_0 = NormalizeDouble(ld_ret_0 - ld_ret_0 * l_count_12 / gd_148, 1); } if (ld_ret_0 < 0.1) ld_ret_0 = 0.1; if (MoneyManagement == FALSE) ld_ret_0 = FixedLots; if (ld_ret_0 > MaxLots) ld_ret_0 = MaxLots; return (ld_ret_0); } void watermark() { ObjectCreate("Mobiletechnology", OBJ_LABEL, 0, 0, 0); ObjectSetText("Mobiletechnology", " Powered by Mobiletechnology", 8, "Arial", White); ObjectSet("Mobiletechnology", OBJPROP_CORNER, 2); ObjectSet("Mobiletechnology", OBJPROP_XDISTANCE, 4); ObjectSet("Mobiletechnology", OBJPROP_YDISTANCE, 8); }