#property copyright "4xrobotnoloss.com" #property link "4xrobotnoloss.com" #include int gi_76 = 67890; extern int YourAccountNumber = 12345; bool gi_84 = FALSE; int gi_88 = 10; int gi_92 = 10; int gi_96 = 2009; extern int MagicBase = 10000; extern string cm = "---User Comment---"; extern string UserComment = "No Loss EA"; extern string tf0 = "---TimeFrames---"; extern string tf1 = "1. Month"; extern string tf2 = "2. Week"; extern string tf3 = "3. Day"; extern string tf4 = "4. 4 Hour"; extern string tf5 = "5. 1 Hour"; extern string tf6 = "6. 30 minute"; extern string tf7 = "7. 15 minute"; extern string tf8 = "8. 5 minute"; extern int HigherTF = 3; extern int LowerTF = 8; extern int UpperTF = 1; string gs_unused_204 = "---Trade Confirmation filters---"; string gs_unused_212 = " Use timeframe above HigherTF to confirm trade"; string gs_unused_220 = "Enter 0 for false, 1 for true"; int gi_228 = 1; string gs_unused_232 = "Confirm Higher to Upper Timeframes for change of trend"; string gs_unused_240 = "Enter 0 for false, 1 for true"; int gi_248 = 1; string gs_unused_252 = "Confirm Alert Timeframe for change of trend"; string gs_unused_260 = "Enter 0 for false, 1 for true"; int gi_268 = 1; string gs_unused_272 = "--- Timeframe Entry---"; string gs_unused_280 = "1. Enter on Alerted time frame - 1 unclosed candle"; string gs_unused_288 = "2. Enter on Alerted time frame - 1 closed candle"; int gi_296 = 1; string gs_unused_300 = "Fresh Signal - Enter 0 for false, 1 for true"; int gi_308 = 0; extern int Slippage = 3; extern bool ExitOnUpperTF_ColorChange = FALSE; extern bool ExitOnHigherTF_ColorChange = FALSE; extern string ep = "--- Profit Timeframe Exit---"; extern string ep0 = "0. Do Not Use"; extern string ep2 = "1. Alert Timeframe - 1 closed candle"; extern string ep4 = "2. Alert Timeframe closed candle"; extern string ep5 = "3. Exit at Take Profit"; extern int ExitOnAlertedProfit = 3; bool gi_368 = FALSE; extern string ep6 = " Enter trigger to replace TP"; extern string ep7 = " for alert exit, and Trailing Stop"; extern string ep9 = "UseTrigger - Enter 0 for false, 1 for true"; extern int UseTrigger = 1; extern int ExitTrigger = 25; bool gi_404 = FALSE; extern string hd = " --Delay time after small loss--"; extern int useDelayAfterLoss = 1; extern int LossSizeInPips = 10; extern int MinutesToDelay = 30; extern string ts0 = "---TrailingStopLoss---"; extern string ts1 = " 1. None"; extern string ts2 = " 2. BreakEven at TP or Trigger"; extern int TrailingStopMethod = 2; extern string ts8 = "2. BreakEven at TP/Trigger setting"; extern int BreakEvenLock = 20; extern string tp0 = "---TakeProfit Method---"; extern string tp1 = " 1. Use ATR"; extern string tp2 = " 2. Use Inputs"; extern int TPMethod = 2; extern string tp3 = "ATR inputs"; extern int TPAtrPeriod = 14; extern double TPAtrPercentage = 0.9; extern string tp4 = "TakeProfit inputs"; extern int TakeProfitW1 = 200; extern int TakeProfitD1 = 150; extern int TakeProfitH4 = 100; extern int TakeProfitH1 = 75; extern int TakeProfitM30 = 50; extern int TakeProfitM15 = 25; extern int TakeProfitM5 = 15; extern double SafetyTakeProfitMultiplier = 1.5; int g_global_var_560; extern string tms6 = "Step to move Take Profit"; extern int TP_Step = 20; int g_global_var_576; extern string sl0 = "---StopLoss Method---"; extern string sl1 = " 1. Use ATR"; extern string sl2 = " 2. Use Input"; extern int SLMethod = 2; extern string sl3 = "ATR inputs"; extern int SLAtrPeriod = 14; extern double SLAtrPercentage = 0.9; extern int mStopLoss = 0; extern double SafetyStopLossMultiplier = 1.5; int g_global_var_640; int gi_644; extern string mm = "---Money Management---"; extern double Lots = 0.1; extern bool UseMoneyManagement = TRUE; extern bool BrokerIsIBFX = FALSE; extern string m1 = "Set mini and micro to false for standard account"; extern bool AccountIsMini = FALSE; extern bool AccountIsMicro = TRUE; extern double TradeSizePercent = 1.0; extern bool BrokerPermitsFractionalLots = TRUE; extern string sp0 = "---Large Spread Filter---"; extern bool UseSpreadDetection = TRUE; extern int MaxSpread = 8; extern string ex1 = " Close trades after X Days"; extern string ex2 = "Enter 0 for do not use"; extern int CloseTradeAfterX_Days = 0; string gs_unused_736 = " Close trades at End Of Month"; string gs_unused_744 = "Enter 0 for false, 1 for true"; int gi_752 = 0; int gi_756 = 0; int gi_760 = 5; extern string sm0 = "--Trading Hours Filter--"; extern string sm2 = "UseTradingHours - Enter 0 for false, 1 for true"; extern int UseTradingHours = 0; int gi_784 = 0; extern bool UseDST = TRUE; extern string sm4 = "TradeAsian - Enter 0 for false, 1 for true"; extern int TradeAsianMarket = 1; extern int myAsianStart = 100; extern int myAsianStop = 400; extern string sm5 = "Trade Europe - Enter 0 for false, 1 for true"; extern int TradeEuropeanMarket = 1; extern int myEurStart = 1000; extern int myEurStop = 1200; extern string sm6 = "Trade NY - Enter 0 for false, 1 for true"; extern int TradeNewYorkMarket = 1; extern int myNYStart = 1600; extern int myNYStop = 1800; extern string to = "---Text Object Settings---"; extern int StatusTxtSize = 10; extern color StatusColor = White; extern int CommentTxtSize = 10; extern color CommentColor = White; int gi_876; int gi_880; int gi_884; int gi_888; string gs_892; string gs_900; string gs_908; string gs_916; extern string db = "--- Debug file settings---"; extern bool Debug = FALSE; extern bool Debug_Expert = FALSE; extern bool Debug_LiveTrade = FALSE; extern string Trade_Log = "_MTF_HAS_TradeLog"; extern bool Debug_BackTestTrade = FALSE; extern string BT_Trade_Log = "_MTF_HAS_BTTradeLog"; bool gi_964 = TRUE; bool gi_968 = TRUE; int gi_972; int gi_976; bool gi_unused_980 = FALSE; int g_global_var_984 = 0; int g_global_var_988 = 0; int gi_992 = 0; int gi_996; bool g_global_var_1000; int gi_1004; int gi_1008; int gi_1012; string g_name_1016; string gs_dummy_1024; string gs_1032 = "MTF HAS Status"; double g_icustom_1040; double g_icustom_1048; double gd_1056; double gd_1064; double gd_1072; double gd_1080; int g_ticket_1088; int g_ticket_1092; int gi_1096; int gi_1100; int gi_1104; int gi_1108; int gi_1112; int gi_1116; double gd_1120; int g_magic_1128; string g_var_name_1132; string g_var_name_1140; string g_var_name_1148; string g_var_name_1156; string g_var_name_1164; string g_var_name_1172; string g_var_name_1180; string g_var_name_1188; string g_var_name_1196; string g_var_name_1204; string g_var_name_1212; string gs_dummy_1220; string g_var_name_1228; string g_var_name_1236; string g_var_name_1244; string g_var_name_1252; bool gi_1260 = FALSE; double g_global_var_1264; double gd_1272; int gi_1280 = 5; int gi_1284 = 1000; int gia_1288[9] = {43200, 10080, 1440, 240, 60, 30, 15, 5, 1}; int init() { int li_0; gi_1260 = FALSE; if (IsTesting() == TRUE) { gi_1260 = TRUE; if (Debug_LiveTrade == TRUE) Debug_LiveTrade = FALSE; } if (IsTesting() == FALSE && Debug_BackTestTrade == TRUE) Debug_BackTestTrade = FALSE; if (IsDemo() == TRUE) gi_1260 = TRUE; if (gi_1260 == FALSE) gi_1260 = CheckAccountNumber(); if (gi_1260 == TRUE) { g_magic_1128 = MagicBase + 100 * func_Symbol2Val(Symbol()) + func_TimeFrame_Const2Val(Period()); DeleteExistingLabels(); SetupLabels(); ClearLabels(); CorrectTimeFilterSettings(); gd_1120 = SetPoint(); if (CheckSet() == 1) { gi_964 = TRUE; if (gi_84 == FALSE) OutputStatusToChart(gs_1032 + " INITIALIZED SUCCESSFULLY"); else OutputStatusToChart(gs_1032 + "- Expires on " + gi_88 + "/" + gi_92 + "/" + gi_96); gi_968 = TRUE; if (Debug == TRUE) SetupLogFiles(); gi_992 = FALSE; gi_996 = 0; GetGlobalVars(); li_0 = CalculateCurrentOrders(); if (li_0 == 0) { GetCorrectInputSet(); g_global_var_984 = 0; g_global_var_988 = FALSE; SaveAlertTimeFrame(g_global_var_984); SaveEntryTimeFrame(g_global_var_988); } else GetCorrectInputSet(); gi_1004 = gia_1288[HigherTF - 1]; gi_1008 = gia_1288[LowerTF - 1]; gi_1012 = gia_1288[UpperTF - 1]; start(); } else { gi_964 = FALSE; OutputStatusToChart(gs_1032 + "INITIALIZED UNSUCCESSFULLY"); } } return (0); } int deinit() { if (Debug == TRUE) CloseLogFiles(); ClearLabels(); DeleteExistingLabels(); return (0); } int CheckSet() { if (HigherTF < 1 || HigherTF > 8) { Alert("HigherTF is set to wrong value,please recheck it!"); return (0); } if (LowerTF < 1 || LowerTF > 8) { Alert("LowerTF is set to wrong value,please recheck it!"); return (0); } if (LowerTF <= HigherTF) { Alert("LowerTF must be < HigherTF,please recheck it!"); return (0); } if (ExitOnUpperTF_ColorChange && ExitOnHigherTF_ColorChange) { Alert("ExitOnUpperTF_ColorChange and", " ExitOnHigherTF_ColorChange", "cannot both be true", ",please recheck it!"); return (0); } if (gi_228 == 1) { if (UpperTF > HigherTF) { Alert("UpperTF must be >= HigherTF,please recheck it!"); return (0); } } if (gi_296 < 1 || gi_296 > 2) { Alert("EnterOnAlerted must be 1 or 2,please recheck it!"); return (0); } string ls_4 = CheckForData(); int li_0 = StringFind(ls_4, "NONE", 0); if (li_0 < 0) { OutputComment1ToChart(ls_4); return (0); } return (1); } string CheckForData() { double ld_4; bool li_0 = FALSE; string ls_ret_12 = "Missing data on "; for (int l_index_20 = 0; l_index_20 <= 8; l_index_20++) { ld_4 = getHAS(gia_1288[l_index_20], 1); if (ld_4 < 0.1) { li_0 = TRUE; ls_ret_12 = ls_ret_12 + " - " + tf2txt(gia_1288[l_index_20]); } } if (li_0 == FALSE) ls_ret_12 = "NONE"; return (ls_ret_12); } int start() { int li_0 = 0; int li_4 = 0; if (gi_880 < 10) { SetupLabels(); ClearLabels(); DeleteExistingLabels(); SetupLabels(); } if (IsTesting() == FALSE) { if (IsExpertEnabled() == FALSE) { OutputComment1ToChart("Expert is not enabled"); return (0); } } if (gi_1260 == FALSE) return (0); if (gi_964 == FALSE) return (0); if (IsTradeAllowed() == FALSE) return (0); li_0 = CalculateCurrentOrders(); if (li_0 == 0) { if (useDelayAfterLoss == 1) { gi_976 = LastTradeStoppedOut(); if (TimeCurrent() < gi_976) { OutputComment3ToChart("No Trades Until : " + TimeToStr(gi_976, TIME_DATE|TIME_MINUTES)); return (0); } OutputComment3ToChart("Trading Resumed "); } GetCorrectInputSet(); gi_972 = CheckTradeFilters(); if (gi_972 == 0) { ResetGlobals(); li_4 = ScalplingMethod(); if (li_4 != 0) { ResetGlobals(); OpenTrade(li_4); } } } else { RefreshRates(); TrackPrices(); CheckForClose(); } return (0); } void ResetGlobals() { if (gi_368 == TRUE) { gi_368 = FALSE; SaveFirst_TP_Level(gi_368); } if (gi_404 == TRUE) { gi_404 = FALSE; SaveFirst_Trigger_Level(gi_404); } } int ScalplingMethod() { if (Debug_Expert == TRUE) WriteDash(); int li_0 = getTFColor(gi_1004, 1); if (gi_992 != li_0) gi_968 = TRUE; if (gi_968 == TRUE) { gi_992 = li_0; if (gi_228 == 1) if (CheckUpperTF(gi_992) == 0) return (0); g_global_var_984 = 0; g_global_var_988 = FALSE; SaveAlertTimeFrame(g_global_var_984); SaveEntryTimeFrame(g_global_var_988); gi_968 = FALSE; } int li_4 = GetAlertTimeFrame(gi_992, 1); SetTimeFrames(li_4); if (g_global_var_984 > 0) { gi_996 = getTFColor(g_global_var_988, gi_296 - 1); if (gi_996 == gi_992) { gi_968 = TRUE; if (ConfirmTrade() == 1) { PlaySound("alert.wav"); return (gi_996); } } } return (0); } double getHAS(int a_timeframe_0, int ai_4) { g_icustom_1040 = iCustom(NULL, a_timeframe_0, "Heiken_Ashi_Smoothed", 2, 6, 3, 2, 1, ai_4); return (g_icustom_1040); } int getTFColor(int a_timeframe_0, int ai_4) { g_icustom_1040 = iCustom(NULL, a_timeframe_0, "Heiken_Ashi_Smoothed", 2, 6, 3, 2, 1, ai_4); g_icustom_1048 = iCustom(NULL, a_timeframe_0, "Heiken_Ashi_Smoothed", 2, 6, 3, 2, 0, ai_4); if (g_icustom_1040 < g_icustom_1048) return (-1); return (1); } int GetAlertTimeFrame(int ai_0, int ai_4) { int li_ret_12; int li_16; bool li_8 = FALSE; for (int l_index_20 = 0; l_index_20 <= 9; l_index_20++) { if (gia_1288[l_index_20] < gi_1004) { if (gia_1288[l_index_20] >= gi_1008) { li_16 = getTFColor(gia_1288[l_index_20], ai_4); if (li_16 != ai_0) { li_ret_12 = l_index_20; li_8 = TRUE; break; } } } if (l_index_20 == 9) li_ret_12 = 10; } if (li_8 == FALSE) li_ret_12 = 10; return (li_ret_12); } void SetTimeFrames(int ai_0) { if (ai_0 < 9) { g_global_var_984 = gia_1288[ai_0]; SaveAlertTimeFrame(g_global_var_984); g_global_var_988 = gia_1288[ai_0 + 1]; SaveEntryTimeFrame(g_global_var_988); switch (ExitOnAlertedProfit) { case 1: g_global_var_1000 = g_global_var_988; break; case 2: g_global_var_1000 = g_global_var_984; break; default: g_global_var_1000 = FALSE; } SaveExitTimeFrameProfit(g_global_var_1000); return; } g_global_var_984 = 0; g_global_var_988 = FALSE; g_global_var_1000 = FALSE; SaveAlertTimeFrame(g_global_var_984); SaveEntryTimeFrame(g_global_var_988); SaveExitTimeFrameProfit(g_global_var_1000); } int ConfirmTrade() { int li_0; int li_4; bool li_16; if (gi_248 == 1) { li_0 = CheckAllTF(); if (li_0 < 10) return (0); } int li_8 = getTFColor(gi_1004, 0); int li_12 = getTFColor(g_global_var_984, 0); if (li_8 == gi_992) { li_16 = FALSE; if (gi_268 == 0) li_16 = TRUE; else if (li_12 != gi_996) li_16 = TRUE; if (li_16 != TRUE) return (0); if (gi_308 == 1) { li_4 = getTFColor(g_global_var_988, 2); if (li_4 == gi_996) return (0); } return (1); } return (0); } int CheckAllTF() { int li_ret_4; int li_8; bool li_0 = FALSE; for (int l_index_12 = 0; l_index_12 <= 9; l_index_12++) { if (gia_1288[l_index_12] <= gi_1012) { if (gia_1288[l_index_12] > gi_1004) { li_8 = getTFColor(gia_1288[l_index_12], 0); if (li_8 != gi_992) { li_ret_4 = l_index_12; li_0 = TRUE; break; } } } } if (li_0 == FALSE) li_ret_4 = 10; return (li_ret_4); } int CheckUpperTF(int ai_0) { int li_8; int li_12; bool li_ret_4 = TRUE; for (int li_16 = UpperTF; li_16 < HigherTF; li_16++) { li_12 = gia_1288[li_16 - 1]; li_8 = getTFColor(li_12, 1); if (li_8 != ai_0) { li_ret_4 = FALSE; li_16 = HigherTF; } } return (li_ret_4); } void OpenTrade(int ai_0) { int l_ticket_4; int l_error_8; double ld_20; double ld_28; g_global_var_560 = CalTP(g_global_var_984); SaveInternalTakeProfit(g_global_var_560); g_global_var_576 = g_global_var_560; SaveTP_Level1(g_global_var_576); int li_36 = MathFloor(g_global_var_560 * SafetyTakeProfitMultiplier); g_global_var_640 = CalSL(g_global_var_984); SaveInternalStopLoss(g_global_var_640); gi_644 = 0; if (g_global_var_640 > 0) gi_644 = MathFloor(g_global_var_640 * SafetyStopLossMultiplier); SaveStopLoss(gi_644); RefreshRates(); gd_1056 = Bid; gd_1064 = Bid; gd_1072 = Ask; gd_1080 = Ask; SaveHighBid(gd_1056); SaveLowBid(gd_1064); SaveHighAsk(gd_1072); SaveLowAsk(gd_1080); double l_lots_12 = GetLots(); if (ai_0 == 1) { l_ticket_4 = OrderSend(Symbol(), OP_BUY, l_lots_12, Ask, Slippage, 0, 0, UserComment + " -" + tf2txt(g_global_var_984), g_magic_1128, 0, Blue); if (l_ticket_4 > 0) { g_ticket_1088 = l_ticket_4; OrderSelect(g_ticket_1088, SELECT_BY_TICKET, MODE_TRADES); if (gi_644 != 0 || li_36 != 0) { ld_20 = TakeLong(OrderOpenPrice(), li_36); ld_28 = 0; if (gi_644 > 0) { ld_28 = StopLong(OrderOpenPrice(), gi_644); ld_28 = ValidStopLoss(0, Bid, ld_28); } g_global_var_1264 = TakeLong(OrderOpenPrice(), g_global_var_560); gd_1272 = 0; if (gi_644 > 0) gd_1272 = StopLong(OrderOpenPrice(), g_global_var_640); if (Digits > 0) { ld_28 = NormalizeDouble(ld_28, Digits); ld_20 = NormalizeDouble(ld_20, Digits); gd_1272 = NormalizeDouble(gd_1272, Digits); g_global_var_1264 = NormalizeDouble(g_global_var_1264, Digits); } ModifyOrder(g_ticket_1088, OrderOpenPrice(), ld_28, ld_20, LightGreen); SaveIntSTprice(gd_1272); SaveIntTPprice(g_global_var_1264); } if (Debug == TRUE) { Write_OpenTrade(" " + Symbol() + " #" + g_ticket_1088 + " Trigger : " + tf2txt(g_global_var_984) + " OPEN BUY ORDER " + DoubleToStr(l_lots_12, 2) + " LOTS AT " + DoubleToStr(Ask, 4) + " sl: " + DoubleToStr(ld_28, Digits) + " tp : " + DoubleToStr(ld_20, Digits)); } } } else { if (ai_0 == -1) { l_ticket_4 = OrderSend(Symbol(), OP_SELL, l_lots_12, Bid, Slippage, 0, 0, UserComment + " -" + tf2txt(g_global_var_984), g_magic_1128, 0, Red); if (l_ticket_4 > 0) { g_ticket_1092 = l_ticket_4; OrderSelect(g_ticket_1092, SELECT_BY_TICKET, MODE_TRADES); if (gi_644 != 0 || li_36 != 0) { ld_20 = TakeShort(OrderOpenPrice(), li_36); ld_28 = 0; if (gi_644 > 0) { ld_28 = StopShort(OrderOpenPrice(), gi_644); ld_28 = ValidStopLoss(1, Ask, ld_28); } g_global_var_1264 = TakeShort(OrderOpenPrice(), g_global_var_560); gd_1272 = 0; if (gi_644 > 0) gd_1272 = StopShort(OrderOpenPrice(), g_global_var_640); if (Digits > 0) { ld_28 = NormalizeDouble(ld_28, Digits); ld_20 = NormalizeDouble(ld_20, Digits); gd_1272 = NormalizeDouble(gd_1272, Digits); g_global_var_1264 = NormalizeDouble(g_global_var_1264, Digits); } ModifyOrder(g_ticket_1092, OrderOpenPrice(), ld_28, ld_20, LightGreen); SaveIntSTprice(gd_1272); SaveIntTPprice(g_global_var_1264); } if (Debug == TRUE) { Write_OpenTrade(" " + Symbol() + " #" + g_ticket_1092 + " Trigger : " + tf2txt(g_global_var_984) + " OPEN SELL ORDER " + DoubleToStr(l_lots_12, 2) + " LOTS AT " + DoubleToStr(Bid, Digits) + " sl: " + DoubleToStr(ld_28, Digits) + " tp : " + DoubleToStr(ld_20, Digits)); } } } } if (l_ticket_4 < 0) { l_error_8 = GetLastError(); Print("OrderSend failed with error(" + l_error_8 + ") " + ErrorDescription(l_error_8) + " Lots:" + DoubleToStr(l_lots_12, 2)); if (Debug == TRUE) Write_OpenError("Error opening order : (" + l_error_8 + ") " + ErrorDescription(l_error_8) + " Lots:" + DoubleToStr(l_lots_12, 2)); } } void CheckForClose() { int li_0; int l_ticket_4; double l_ord_lots_8; double l_ord_open_price_16; double l_ord_takeprofit_24; double l_ord_stoploss_32; int l_datetime_40; for (int l_pos_44 = OrdersTotal() - 1; l_pos_44 >= 0; l_pos_44--) { OrderSelect(l_pos_44, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { if (OrderMagicNumber() == g_magic_1128) { l_ticket_4 = OrderTicket(); l_ord_lots_8 = OrderLots(); l_ord_open_price_16 = OrderOpenPrice(); l_ord_takeprofit_24 = OrderTakeProfit(); l_ord_stoploss_32 = OrderStopLoss(); l_datetime_40 = OrderOpenTime(); if (OrderType() == OP_BUY) { if (ExitOnHigherTF_ColorChange) { li_0 = 0; li_0 = CheckHigherTFClose(0, l_ticket_4, l_ord_open_price_16, l_ord_lots_8); if (li_0 == 1) break; } if (ExitOnUpperTF_ColorChange) { li_0 = 0; li_0 = CheckUpperTFClose(0, l_ticket_4, l_ord_open_price_16, l_ord_lots_8); if (li_0 == 1) break; } li_0 = 0; li_0 = CheckCloseAfterX_Days(0, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_datetime_40); if (li_0 == 1) break; li_0 = 0; li_0 = CheckEndOfMonthClose(0, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_datetime_40); if (li_0 == 1) break; li_0 = 0; li_0 = CheckTPClose(0, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_ord_takeprofit_24); if (li_0 == 1) break; if (gi_404 == FALSE) { gi_404 = Get_First_Trigger_Level(0, l_ord_open_price_16); if (gi_404 == TRUE) SaveFirst_Trigger_Level(gi_404); } if (gi_368 == FALSE) { gi_368 = Get_First_TP_Level(0, l_ord_open_price_16); if (gi_368 == TRUE) SaveFirst_TP_Level(gi_368); } li_0 = 0; li_0 = CheckForProfitExit(0, l_ticket_4, l_ord_open_price_16, l_ord_lots_8); if (li_0 == 1) break; li_0 = 0; li_0 = CheckSLClose(0, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_ord_stoploss_32); if (li_0 == 1) break; HandleTrailingStop(0, l_ticket_4, l_ord_open_price_16, l_ord_stoploss_32, l_ord_takeprofit_24); } if (OrderType() == OP_SELL) { if (ExitOnUpperTF_ColorChange) { li_0 = 0; li_0 = CheckUpperTFClose(1, l_ticket_4, l_ord_open_price_16, l_ord_lots_8); if (li_0 == 1) break; } if (ExitOnHigherTF_ColorChange) { li_0 = 0; li_0 = CheckHigherTFClose(1, l_ticket_4, l_ord_open_price_16, l_ord_lots_8); if (li_0 == 1) break; } li_0 = 0; li_0 = CheckCloseAfterX_Days(1, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_datetime_40); if (li_0 == 1) break; li_0 = 0; li_0 = CheckEndOfMonthClose(1, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_datetime_40); if (li_0 == 1) break; li_0 = 0; li_0 = CheckTPClose(1, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_ord_takeprofit_24); if (li_0 == 1) break; if (gi_404 == FALSE) { gi_404 = Get_First_Trigger_Level(1, l_ord_open_price_16); if (gi_404 == TRUE) SaveFirst_Trigger_Level(gi_404); } if (gi_368 == FALSE) { gi_368 = Get_First_TP_Level(1, l_ord_open_price_16); if (gi_368 == TRUE) SaveFirst_TP_Level(gi_368); } li_0 = 0; li_0 = CheckForProfitExit(1, l_ticket_4, l_ord_open_price_16, l_ord_lots_8); if (li_0 == 1) break; li_0 = 0; li_0 = CheckSLClose(1, l_ticket_4, l_ord_open_price_16, l_ord_lots_8, l_ord_stoploss_32); if (li_0 == 1) break; HandleTrailingStop(1, l_ticket_4, l_ord_open_price_16, l_ord_stoploss_32, l_ord_takeprofit_24); } } } } } int CheckForProfitExit(int ai_0, int ai_4, double ad_8, double ad_16) { int li_ret_24 = 0; bool li_28 = FALSE; if (UseTrigger == 1) li_28 = gi_404; else li_28 = gi_368; if (li_28 == TRUE) { switch (ExitOnAlertedProfit) { case 1: li_ret_24 = CheckExit(ai_0, ai_4, ad_16, ad_8, g_global_var_1000, 1); break; case 2: li_ret_24 = CheckExit(ai_0, ai_4, ad_16, ad_8, g_global_var_1000, 1); break; default: li_ret_24 = 0; } } return (li_ret_24); } int Get_First_TP_Level(int ai_0, double ad_4) { switch (ai_0) { case 0: if (Bid >= ad_4 + g_global_var_576 * gd_1120) return (1); return (0); case 1: if (Ask <= ad_4 - g_global_var_576 * gd_1120) return (1); return (0); } return (0); } int Get_First_Trigger_Level(int ai_0, double ad_4) { switch (ai_0) { case 0: if (UseTrigger == 1) if (Bid >= ad_4 + ExitTrigger * gd_1120) return (1); return (0); case 1: if (UseTrigger == 1) if (Ask <= ad_4 - ExitTrigger * gd_1120) return (1); return (0); } return (0); } int CloseOrder(int a_ticket_0, double a_lots_4, int ai_12) { int l_ord_close_20; int l_error_28; double l_price_32; bool li_16 = FALSE; if (ai_12 == 0) l_price_32 = Bid; if (ai_12 == 1) l_price_32 = Ask; if (Digits > 0) l_price_32 = NormalizeDouble(l_price_32, Digits); int l_count_24 = 0; while (!li_16) { if (IsTradeAllowed() == TRUE) { l_ord_close_20 = OrderClose(a_ticket_0, a_lots_4, l_price_32, Slippage, Violet); l_error_28 = GetLastError(); } else l_count_24++; if (l_ord_close_20 == 1) li_16 = TRUE; l_error_28 = GetLastError(); switch (l_error_28) { case 0/* NO_ERROR */: li_16 = TRUE; break; case 4/* SERVER_BUSY */: case 6/* NO_CONNECTION */: case 129/* INVALID_PRICE */: case 136/* OFF_QUOTES */: case 137/* BROKER_BUSY */: case 146/* TRADE_CONTEXT_BUSY */: case 128/* TRADE_TIMEOUT */: l_count_24++; break; case 135/* PRICE_CHANGED */: case 138/* REQUOTE */: RefreshRates(); continue; break; default: li_16 = TRUE; } if (l_count_24 > gi_1280) li_16 = TRUE; if (!li_16) { Sleep(gi_1284); RefreshRates(); } } if (l_ord_close_20 == 1 || l_error_28 == 0/* NO_ERROR */) return (1); Print(" Error closing order : (", l_error_28, ") " + ErrorDescription(l_error_28)); return (0); } int CheckUpperTFClose(int ai_0, int ai_4, double ad_8, double ad_16) { int li_24 = getTFColor(gi_1012, 1); if (ai_0 == 0) { if (li_24 == -1) { if (Debug == TRUE) WriteTradeExit("UpperTF Exit", ai_4, 0, ad_8, ad_16); CloseOrder(ai_4, ad_16, 0); return (1); } return (0); } if (ai_0 == 1) { if (li_24 == 1) { if (Debug == TRUE) WriteTradeExit("UpperTF Exit", ai_4, 1, ad_8, ad_16); CloseOrder(ai_4, ad_16, 1); return (1); } } return (0); } int CheckHigherTFClose(int ai_0, int ai_4, double ad_8, double ad_16) { int li_24 = getTFColor(gi_1004, 1); if (ai_0 == 0) { if (li_24 == -1) { if (Debug == TRUE) WriteTradeExit("HigherTF Exit", ai_4, 0, ad_8, ad_16); CloseOrder(ai_4, ad_16, 0); return (1); } return (0); } if (ai_0 == 1) { if (li_24 == 1) { if (Debug == TRUE) WriteTradeExit("HigherTF Exit", ai_4, 1, ad_8, ad_16); CloseOrder(ai_4, ad_16, 1); return (1); } } return (0); } int CheckCloseAfterX_Days(int ai_0, int ai_4, double ad_8, double ad_16, int ai_24) { int l_year_28; int li_40; int li_44; if (CloseTradeAfterX_Days <= 0) return (0); int l_day_of_year_32 = TimeDayOfYear(ai_24); int l_day_of_year_36 = TimeDayOfYear(TimeCurrent()); if (l_day_of_year_36 < l_day_of_year_32) { l_year_28 = Year(); li_40 = 365; if (l_year_28 == 2008 || l_year_28 == 2012 || l_year_28 == 2016 || l_year_28 == 2020) li_40 = 366; li_44 = li_40 - l_day_of_year_32 + l_day_of_year_36; } else li_44 = l_day_of_year_36 - l_day_of_year_32; if (li_44 >= CloseTradeAfterX_Days) { if (ai_0 == 0) { if (Debug == TRUE) WriteTradeExit("CloseAfterX_Days Exit", ai_4, 0, ad_8, ad_16); CloseOrder(ai_4, ad_16, 0); return (1); } if (ai_0 == 1) { if (Debug == TRUE) WriteTradeExit("CloseAfterX_Days Exit", ai_4, 1, ad_8, ad_16); CloseOrder(ai_4, ad_16, 1); return (1); } } return (0); } int CheckEndOfMonthClose(int ai_0, int ai_4, double ad_8, double ad_16, int ai_24) { int l_month_28; if (gi_752 == 1) { l_month_28 = TimeMonth(ai_24); if (Month() != l_month_28) { if (ai_0 == 0) { if (Debug == TRUE) WriteTradeExit("EndOfMonth Exit", ai_4, 0, ad_8, ad_16); CloseOrder(ai_4, ad_16, 0); return (1); } if (ai_0 == 1) { if (Debug == TRUE) WriteTradeExit("EndOfMonth Exit", ai_4, 1, ad_8, ad_16); CloseOrder(ai_4, ad_16, 1); return (1); } } } return (0); } int CheckSLClose(int ai_0, int ai_4, double ad_8, double ad_16, double ad_unused_24) { if (ai_0 == 0) { if (gd_1272 > 0.1) { if (Bid <= gd_1272) { if (Debug == TRUE) WriteTradeExit("StopLoss Exit", ai_4, 0, ad_8, ad_16); CloseOrder(ai_4, ad_16, 0); return (1); } } return (0); } if (ai_0 == 1) { if (gd_1272 > 0.1) { if (Ask >= gd_1272) { if (Debug == TRUE) WriteTradeExit("StopLoss Exit", ai_4, 1, ad_8, ad_16); CloseOrder(ai_4, ad_16, 1); return (1); } } } return (0); } int CheckTPClose(int ai_0, int ai_4, double ad_8, double ad_16, double ad_unused_24) { if (ExitOnAlertedProfit == 3) { if (ai_0 == 0) { if (Bid >= g_global_var_1264) { if (Debug == TRUE) WriteTradeExit("TakeProfit Exit", ai_4, 0, ad_8, ad_16); CloseOrder(ai_4, ad_16, 0); return (1); } return (0); } if (ai_0 == 1) { if (Ask <= g_global_var_1264) { if (Debug == TRUE) WriteTradeExit("TakeProfit Exit", ai_4, 1, ad_8, ad_16); CloseOrder(ai_4, ad_16, 1); return (1); } } } return (0); } int CheckExit(int ai_0, int ai_4, double ad_8, double ad_16, int ai_24, int ai_28) { int li_32 = 0; li_32 = getTFColor(ai_24, ai_28); if (ai_0 == 0) { if (li_32 == -1) { if (Debug == TRUE) WriteTradeExit("Buy Exit Signal", ai_4, 0, ad_16, ad_8); CloseOrder(ai_4, ad_8, 0); return (1); } return (0); } if (ai_0 == 1) { if (li_32 == 1) { if (Debug == TRUE) WriteTradeExit("Sell Exit Signal", ai_4, 1, ad_16, ad_8); CloseOrder(ai_4, ad_8, 1); return (1); } return (0); } return (0); } double GetLots() { double ld_ret_0; double l_maxlot_8 = MarketInfo(Symbol(), MODE_MAXLOT); if (UseMoneyManagement == FALSE) return (Lots); if (BrokerIsIBFX == TRUE) { ld_ret_0 = Calc_IBFX_Money_Management(); return (ld_ret_0); } ld_ret_0 = NormalizeDouble(AccountEquity() * TradeSizePercent / 10000.0 / 10.0, 2); if (AccountIsMicro == TRUE) { ld_ret_0 = MathFloor(100.0 * ld_ret_0) / 100.0; if (ld_ret_0 < 0.01) ld_ret_0 = 0.01; if (ld_ret_0 > l_maxlot_8) ld_ret_0 = l_maxlot_8; return (ld_ret_0); } if (AccountIsMini == TRUE) { ld_ret_0 = MathFloor(10.0 * ld_ret_0) / 10.0; if (ld_ret_0 < 0.1) ld_ret_0 = 0.1; if (ld_ret_0 > l_maxlot_8) ld_ret_0 = l_maxlot_8; return (ld_ret_0); } if (BrokerPermitsFractionalLots == FALSE) { if (ld_ret_0 >= 1.0) ld_ret_0 = MathFloor(ld_ret_0); else ld_ret_0 = 1.0; } if (ld_ret_0 < 1.0) ld_ret_0 = 1.0; if (ld_ret_0 > l_maxlot_8) ld_ret_0 = l_maxlot_8; return (ld_ret_0); } double Calc_IBFX_Money_Management() { double l_maxlot_8 = MarketInfo(Symbol(), MODE_MAXLOT); double ld_ret_0 = NormalizeDouble(AccountEquity() * TradeSizePercent / 10000.0 / 10.0, 2); if (AccountIsMicro == TRUE) { ld_ret_0 = 10.0 * ld_ret_0; ld_ret_0 = MathFloor(100.0 * ld_ret_0) / 100.0; if (ld_ret_0 < 0.1) ld_ret_0 = 0.1; if (ld_ret_0 > l_maxlot_8) ld_ret_0 = l_maxlot_8; return (ld_ret_0); } if (AccountIsMini == TRUE) { ld_ret_0 = 10.0 * ld_ret_0; ld_ret_0 = MathFloor(10.0 * ld_ret_0) / 10.0; if (ld_ret_0 < 1.0) ld_ret_0 = 1; if (ld_ret_0 > l_maxlot_8) ld_ret_0 = l_maxlot_8; return (ld_ret_0); } if (BrokerPermitsFractionalLots == TRUE) ld_ret_0 = StrToDouble(DoubleToStr(ld_ret_0, 2)); else ld_ret_0 = MathFloor(ld_ret_0); if (ld_ret_0 > l_maxlot_8) ld_ret_0 = l_maxlot_8; return (ld_ret_0); } int SpreadOK() { if (Ask - Bid > MaxSpread * gd_1120) return (0); return (1); } int CheckTradeFilters() { bool li_4; int li_ret_0 = 0; if (gi_84 == TRUE) { li_4 = FALSE; if (Year() > gi_96) li_4 = TRUE; if (li_4 == FALSE) { if (Year() == gi_96 && Month() > gi_88) li_4 = TRUE; if (li_4 == FALSE) if (Year() == gi_96 && Month() == gi_88 && Day() > gi_92) li_4 = TRUE; } if (li_4 == TRUE) OutputComment1ToChart("EA has expired - renew license"); li_ret_0 = li_4; } if (li_ret_0 == 0) { if (UseTradingHours == 1) { li_ret_0 = CheckTradingTimes(); if (li_ret_0 == 1) OutputComment1ToChart("Trading has been stopped - wrong time of day"); else OutputComment1ToChart("Trading has resumed - time is OK"); } else OutputComment1ToChart("Trading Time filter not in use"); } if (li_ret_0 == 0) { if (UseSpreadDetection == TRUE) { if (SpreadOK() == 0) { li_ret_0 = 1; OutputComment2ToChart("Trading has been stopped - Spread too large"); } else OutputComment2ToChart("Trading has resumed - Spread is OK"); } else OutputComment2ToChart("Spread Detection not in use"); } if (li_ret_0 == 0) { if (gi_756 == 1) { if (CheckEndOfMonth() == 1) { li_ret_0 = 1; OutputComment2ToChart("Trading has been stopped - End of Month"); } } } return (li_ret_0); } int CheckEndOfMonth() { int li_0; switch (Month()) { case 1: li_0 = 31 - gi_760; break; case 2: li_0 = 28 - gi_760; break; case 3: li_0 = 31 - gi_760; break; case 4: li_0 = 30 - gi_760; break; case 5: li_0 = 31 - gi_760; break; case 6: li_0 = 30 - gi_760; break; case 7: li_0 = 31 - gi_760; break; case 8: li_0 = 31 - gi_760; break; case 9: li_0 = 30 - gi_760; break; case 10: li_0 = 31 - gi_760; break; case 111: li_0 = 30 - gi_760; break; case 12: li_0 = 31 - gi_760; } if (Day() < li_0) return (0); return (1); } void CorrectTimeFilterSettings() { int li_0 = 100 * gi_784; if (UseDST == TRUE) li_0 -= 100; gi_1096 = myAsianStart + li_0; gi_1100 = myAsianStop + li_0; gi_1104 = myEurStart + li_0; gi_1108 = myEurStop + li_0; gi_1112 = myNYStart + li_0; gi_1116 = myNYStop + li_0; } int IsNotValidTradingTime(int ai_0, int ai_4) { int li_8 = 100 * Hour() + Minute(); if (ai_0 <= ai_4) { if (!(li_8 < ai_0 || li_8 > ai_4)) return (0); return (1); } if (li_8 > ai_4 && li_8 < ai_0) return (1); return (0); } int CheckTradingTimes() { int li_4 = 100 * Hour() + Minute(); int li_ret_0 = 1; if (TradeAsianMarket == 1) li_ret_0 = IsNotValidTradingTime(gi_1096, gi_1100); if (li_ret_0 == 1) if (TradeEuropeanMarket == 1) li_ret_0 = IsNotValidTradingTime(gi_1104, gi_1108); if (li_ret_0 == 1) if (TradeNewYorkMarket == 1) li_ret_0 = IsNotValidTradingTime(gi_1112, gi_1116); return (li_ret_0); } int LastTradeStoppedOut() { bool li_12; double ld_16; double l_ord_open_price_24; int li_ret_8 = 0; int l_hist_total_4 = OrdersHistoryTotal(); for (int l_pos_0 = l_hist_total_4 - 1; l_pos_0 >= 0; l_pos_0--) { OrderSelect(l_pos_0, SELECT_BY_POS, MODE_HISTORY); if (OrderSymbol() == Symbol()) { if (OrderMagicNumber() == g_magic_1128) { if (StringFind(OrderComment(), UserComment) >= 0) { if (TimeCurrent() - OrderOpenTime() <= 60 * MinutesToDelay) { li_12 = FALSE; ld_16 = OrderClosePrice(); l_ord_open_price_24 = OrderOpenPrice(); if (OrderType() == OP_BUY) { if (ld_16 - l_ord_open_price_24 < 0.0 && ld_16 - l_ord_open_price_24 > LossSizeInPips * gd_1120) { if (OrderCloseTime() - OrderOpenTime() < 120) li_12 = TRUE; l_pos_0 = 0; } } if (OrderType() == OP_SELL) { if (l_ord_open_price_24 - ld_16 < 0.0 && l_ord_open_price_24 - ld_16 > (-1.0 * LossSizeInPips) * gd_1120) { if (OrderCloseTime() - OrderOpenTime() < 120) li_12 = TRUE; l_pos_0 = 0; } } } } } } } if (li_12) li_ret_8 = OrderCloseTime() + 60 * MinutesToDelay; return (li_ret_8); } double SetPoint() { double ld_ret_0; if (Digits < 4) ld_ret_0 = 0.01; else ld_ret_0 = 0.0001; return (ld_ret_0); } void GetCorrectInputSet() { gi_1004 = gia_1288[HigherTF - 1]; gi_1008 = gia_1288[LowerTF - 1]; gi_1012 = gia_1288[UpperTF - 1]; } int CheckAccountNumber() { if (YourAccountNumber == AccountNumber() && YourAccountNumber == gi_76) return (1); Alert("AccountNumber entered is incorrect.\n You entered ", YourAccountNumber); return (0); } double StopLong(double ad_0, int ai_8) { if (ai_8 == 0) return (0); return (ad_0 - ai_8 * gd_1120); } double StopShort(double ad_0, int ai_8) { if (ai_8 == 0) return (0); return (ad_0 + ai_8 * gd_1120); } double TakeLong(double ad_0, int ai_8) { if (ai_8 == 0) return (0); return (ad_0 + ai_8 * gd_1120); } double TakeShort(double ad_0, int ai_8) { if (ai_8 == 0) return (0); return (ad_0 - ai_8 * gd_1120); } double ValidStopLoss(int ai_0, double ad_4, double ad_12) { if (ad_12 < 0.1) return (ad_12); double ld_20 = MarketInfo(Symbol(), MODE_STOPLEVEL); if (Digits == 3 || Digits == 5) ld_20 /= 10.0; if (ai_0 == 0) if (ad_4 - ad_12 < ld_20 * gd_1120) ad_12 = ad_4 - ld_20 * gd_1120; if (ai_0 == 1) if (ad_12 - ad_4 < ld_20 * gd_1120) ad_12 = ad_4 + ld_20 * gd_1120; return (ad_12); } int CalculateCurrentOrders() { int l_count_0 = 0; int l_count_4 = 0; int li_ret_8 = 0; for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++) { OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { if (OrderMagicNumber() == g_magic_1128) { if (OrderType() == OP_BUY) l_count_0++; if (OrderType() == OP_SELL) l_count_4++; } } } li_ret_8 = l_count_0 + l_count_4; return (li_ret_8); } int CalTP(int a_timeframe_0) { int li_ret_4 = 0; if (TPMethod == 1) li_ret_4 = MathRound(iATR(Symbol(), a_timeframe_0, TPAtrPeriod, 1) * TPAtrPercentage / gd_1120); else { switch (a_timeframe_0) { case PERIOD_W1: li_ret_4 = TakeProfitW1; break; case PERIOD_D1: li_ret_4 = TakeProfitD1; break; case PERIOD_H4: li_ret_4 = TakeProfitH4; break; case PERIOD_H1: li_ret_4 = TakeProfitH1; break; case PERIOD_M30: li_ret_4 = TakeProfitM30; break; case PERIOD_M15: li_ret_4 = TakeProfitM15; break; case PERIOD_M5: li_ret_4 = TakeProfitM5; break; default: li_ret_4 = 5; } } return (li_ret_4); } int CalSL(int a_timeframe_0) { bool li_ret_4 = FALSE; if (SLMethod == 1) li_ret_4 = MathRound(iATR(Symbol(), a_timeframe_0, SLAtrPeriod, 1) * SLAtrPercentage / gd_1120); else li_ret_4 = mStopLoss; return (li_ret_4); } string tf2txt(int ai_0) { switch (ai_0) { case 1: return ("M1"); case 5: return ("M5"); case 15: return ("M15"); case 30: return ("M30"); case 60: return ("H1"); case 240: return ("H4"); case 1440: return ("D1"); case 10080: return ("W1"); case 43200: return ("MN"); } return ("??"); } void TrackPrices() { if (Bid < gd_1064) { gd_1064 = Bid; SaveLowBid(gd_1064); } if (Bid > gd_1056) { gd_1056 = Bid; SaveHighBid(gd_1056); } if (Ask < gd_1080) { gd_1080 = Ask; SaveLowAsk(gd_1080); } if (Ask > gd_1072) { gd_1072 = Ask; SaveHighAsk(gd_1072); } } int func_Symbol2Val(string as_0) { string ls_8 = StringSubstr(as_0, 0, 6); if (ls_8 == "AUDCAD") return (1); if (ls_8 == "AUDJPY") return (2); if (ls_8 == "AUDNZD") return (3); if (ls_8 == "AUDUSD") return (4); if (ls_8 == "CHFJPY") return (5); if (ls_8 == "EURAUD") return (6); if (ls_8 == "EURCAD") return (7); if (ls_8 == "EURCHF") return (8); if (ls_8 == "EURGBP") return (9); if (ls_8 == "EURJPY") return (10); if (ls_8 == "EURUSD") return (11); if (ls_8 == "GBPCHF") return (12); if (ls_8 == "GBPJPY") return (13); if (ls_8 == "GBPUSD") return (14); if (ls_8 == "NZDJPY") return (15); if (ls_8 == "NZDUSD") return (16); if (ls_8 == "USDCAD") return (17); if (ls_8 == "USDCHF") return (18); if (ls_8 == "USDJPY") return (19); Comment("unexpected Symbol"); return (999); } int func_TimeFrame_Const2Val(int ai_0) { switch (ai_0) { case 1: return (1); case 5: return (2); case 15: return (3); case 30: return (4); case 60: return (5); case 240: return (6); case 1440: return (7); case 10080: return (8); case 43200: return (9); } return (0); } void HandleTrailingStop(int ai_0, int ai_4, double ad_8, double ad_16, double ad_24) { switch (TrailingStopMethod) { case 1: MoveTP(ai_0, ai_4, ad_8, ad_16, ad_24); return; case 2: Trail_TP_BreakEven(ai_0, ai_4, ad_8, ad_16, ad_24); return; } MoveTP(ai_0, ai_4, ad_8, ad_16, ad_24); } void MoveTP(int ai_0, int ai_4, double ad_8, double ad_16, double ad_24) { double ld_32; if (ExitOnAlertedProfit != 3) { if (gi_368 == TRUE) { if (ai_0 == 0) { ld_32 = MathFloor(TP_Step * SafetyTakeProfitMultiplier); ld_32 = TakeLong(Bid, ld_32); ld_32 = NormalizeDouble(ld_32, Digits); if (ad_24 < ld_32) ModifyOrder(ai_4, ad_8, ad_16, ld_32, LightGreen); } if (ai_0 == 1) { ld_32 = MathFloor(TP_Step * SafetyTakeProfitMultiplier); ld_32 = TakeShort(Ask, ld_32); ld_32 = NormalizeDouble(ld_32, Digits); if (ad_24 > ld_32) ModifyOrder(ai_4, ad_8, ad_16, ld_32, DarkOrange); } } } } void Trail_TP_BreakEven(int ai_0, int ai_4, double ad_8, double ad_16, double ad_24) { int li_36; double ld_40; double ld_48; double ld_72; double ld_88; bool li_32 = FALSE; double ld_64 = ad_16; double ld_56 = ad_24; if (UseTrigger == 1) li_36 = gi_404; else li_36 = gi_368; if (ai_0 == 0) { if (li_36 == 1) { ld_72 = ad_8 + g_global_var_560 * gd_1120; if (UseTrigger == 1) ld_88 = ad_8 + ExitTrigger * gd_1120; else ld_88 = ld_72; if (Bid >= ld_88) { if (ad_16 < ad_8) { li_32 = TRUE; ld_48 = ad_8 + BreakEvenLock * gd_1120; gd_1272 = ld_48; SaveIntSTprice(gd_1272); ld_48 = ValidStopLoss(0, Bid, ld_48); ld_48 = NormalizeDouble(ld_48, Digits); ld_64 = ld_48; } } } if (ExitOnAlertedProfit != 3) { if (gi_368 == TRUE) { ld_40 = MathFloor(TP_Step * SafetyTakeProfitMultiplier); ld_40 = TakeLong(Bid, ld_40); ld_40 = NormalizeDouble(ld_40, Digits); if (ad_24 < ld_40) { li_32 = TRUE; ld_56 = ld_40; } } } if (li_32 == TRUE) ModifyOrder(ai_4, ad_8, ld_64, ld_56, LightGreen); } if (ai_0 == 1) { if (li_36 == 1) { ld_72 = ad_8 - g_global_var_560 * gd_1120; if (UseTrigger == 1) ld_88 = ad_8 - ExitTrigger * gd_1120; else ld_88 = ld_72; if (Ask <= ld_88) { if (ad_16 > ad_8 || ad_16 < 0.1) { li_32 = TRUE; ld_48 = ad_8 - BreakEvenLock * gd_1120; gd_1272 = ld_48; SaveIntSTprice(gd_1272); ld_48 = ValidStopLoss(1, Ask, ld_48); ld_48 = NormalizeDouble(ld_48, Digits); ld_64 = ld_48; } } } if (ExitOnAlertedProfit != 3) { if (gi_368 == TRUE) { ld_40 = MathFloor(TP_Step * SafetyTakeProfitMultiplier); ld_40 = TakeShort(Ask, ld_40); ld_40 = NormalizeDouble(ld_40, Digits); if (ad_24 > ld_40) { li_32 = TRUE; ld_56 = ld_40; } } } if (li_32 == TRUE) ModifyOrder(ai_4, ad_8, ld_64, ld_56, DarkOrange); } } int ModifyOrder(int a_ticket_0, double a_price_4, double a_price_12, double a_price_20, color a_color_28) { int l_error_36; int l_count_32 = 0; while (l_count_32 < 3) { if (OrderModify(a_ticket_0, a_price_4, a_price_12, a_price_20, 0, a_color_28)) l_count_32 = 3; else { l_error_36 = GetLastError(); Print(l_count_32, " Error modifying order : (", l_error_36, ") " + ErrorDescription(l_error_36)); if (l_error_36 > 0/* NO_ERROR */) l_count_32++; } } return (0); } void ClearLabels() { string ls_0 = " "; OutputLabelToChart(gs_892, gi_876, StatusTxtSize, StatusColor, ls_0, " "); OutputLabelToChart(gs_900, gi_880, CommentTxtSize, CommentColor, ls_0, " "); OutputLabelToChart(gs_908, gi_884, CommentTxtSize, CommentColor, ls_0, " "); OutputLabelToChart(gs_916, gi_888, CommentTxtSize, CommentColor, ls_0, " "); } void DeleteExistingLabels() { string l_name_4; int l_objs_total_0 = ObjectsTotal(OBJ_LABEL); string ls_12 = "H_" + Symbol() + tf2txt(Period()); if (l_objs_total_0 > 0) { for (int l_objs_total_20 = l_objs_total_0; l_objs_total_20 >= 0; l_objs_total_20--) { l_name_4 = ObjectName(l_objs_total_20); if (StringFind(l_name_4, ls_12 + "Status", 0) >= 0) ObjectDelete(l_name_4); else { if (StringFind(l_name_4, ls_12 + "Comment1", 0) >= 0) ObjectDelete(l_name_4); else { if (StringFind(l_name_4, ls_12 + "Comment2", 0) >= 0) ObjectDelete(l_name_4); else if (StringFind(l_name_4, ls_12 + "Comment3", 0) >= 0) ObjectDelete(l_name_4); } } } } } void SetupLabels() { string ls_0 = "H_" + Symbol() + tf2txt(Period()); gi_876 = 12; gi_880 = gi_876 + StatusTxtSize + 4; gi_884 = gi_880 + CommentTxtSize + 4; gi_888 = gi_884 + CommentTxtSize + 4; gs_892 = ls_0 + "Status"; gs_900 = ls_0 + "Comment1"; gs_908 = ls_0 + "Comment2"; gs_916 = ls_0 + "Comment3"; } void OutputLabelToChart(string a_name_0, int a_y_8, int a_fontsize_12, color a_color_16, string a_text_20, string as_unused_28) { if (ObjectFind(a_name_0) != 0) { ObjectCreate(a_name_0, OBJ_LABEL, 0, 0, 0); ObjectSet(a_name_0, OBJPROP_CORNER, 0); ObjectSet(a_name_0, OBJPROP_XDISTANCE, 20); ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_8); } ObjectSetText(a_name_0, a_text_20, a_fontsize_12, "Arial Bold", a_color_16); if (Debug_Expert == TRUE) WriteComment(a_text_20); } void OutputStatusToChart(string as_0) { OutputLabelToChart(gs_892, gi_876, StatusTxtSize, StatusColor, as_0, "*"); } void OutputComment1ToChart(string as_0) { OutputLabelToChart(gs_900, gi_880, CommentTxtSize, CommentColor, as_0, "*"); } void OutputComment2ToChart(string as_0) { OutputLabelToChart(gs_908, gi_884, CommentTxtSize, CommentColor, as_0, "*"); } void OutputComment3ToChart(string as_0) { OutputLabelToChart(gs_916, gi_888, CommentTxtSize, CommentColor, as_0, "*"); } void CloseLogFiles() { int l_global_var_0; if (Debug_BackTestTrade == TRUE) { if (GlobalVariableCheck("BTMyHandleTrade") == TRUE) { l_global_var_0 = GlobalVariableGet("BTMyHandleTrade"); FileFlush(l_global_var_0); FileClose(l_global_var_0); GlobalVariableDel("BTMyHandleTrade"); } } } void SetupLogFiles() { int l_error_8; int l_file_12; string l_name_0 = Symbol() + " " + BT_Trade_Log + ".txt"; if (Debug_BackTestTrade == TRUE) { GlobalVariableSet("BTMyHandleTrade", 0); if (GlobalVariableCheck("BTMyHandleTrade") == FALSE) { l_error_8 = GetLastError(); Print("Error creating Global Variable BTMyHandleTrade: (" + l_error_8 + ") " + ErrorDescription(l_error_8)); return; } l_file_12 = FileOpen(l_name_0, FILE_CSV|FILE_WRITE, "\t"); GlobalVariableSet("BTMyHandleTrade", l_file_12); } g_name_1016 = AccountNumber() + " " + Symbol() + Trade_Log + "_" + Month() + "-" + Day() + ".txt"; } void WriteDash() { if (Debug_BackTestTrade == TRUE) BTWrite_Trade("-----------------------------------------------------------------"); if (Debug_LiveTrade == TRUE) Write_Trade("-----------------------------------------------------------------"); } void WriteComment(string as_0) { if (Debug_BackTestTrade == TRUE) BTWrite_Trade(" " + as_0); if (Debug_LiveTrade == TRUE) Write_Trade(" " + as_0); } void Write_OpenError(string as_0) { if (Debug_BackTestTrade == TRUE) BTWrite_Trade(as_0); if (Debug_LiveTrade == TRUE) Write_Trade(as_0); } void Write_OpenTrade(string as_0) { if (Debug_BackTestTrade == TRUE) { BTWrite_Trade("****************************************************************"); BTWrite_Trade(as_0); } if (Debug_LiveTrade == TRUE) { Write_Trade("****************************************************************"); Write_Trade(as_0); } } void WriteExit(int ai_0, string as_4, int ai_12, double ad_16) { if (Debug_BackTestTrade == TRUE) { BTWrite_Trade("-----------------------------------------------------------------"); BTWrite_Trade(" " + Symbol() + " #" + ai_0 + " " + as_4); if (ad_16 > 0.1) BTWrite_Prices(ai_12, ad_16); } if (Debug_LiveTrade == TRUE) { Write_Trade("-----------------------------------------------------------------"); Write_Trade(" " + Symbol() + " #" + ai_0 + " " + as_4); if (ad_16 > 0.1) Write_Prices(ai_12, ad_16); } } void Write_Trade(string as_0) { int l_file_8; if (Debug_LiveTrade == TRUE) { l_file_8 = FileOpen(g_name_1016, FILE_CSV|FILE_WRITE|FILE_READ, "/t"); FileSeek(l_file_8, 0, SEEK_END); FileWrite(l_file_8, TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS) + as_0); FileClose(l_file_8); } } void BTWrite_Trade(string as_0) { int l_global_var_8; if (Debug_BackTestTrade == TRUE) { if (GlobalVariableCheck("BTMyHandleTrade")) { l_global_var_8 = GlobalVariableGet("BTMyHandleTrade"); FileWrite(l_global_var_8, TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS) + as_0); } } } void BTWrite_Prices(int ai_0, double ad_4) { double ld_12; double ld_20; if (Debug_BackTestTrade == TRUE) { BTWrite_Trade(" PRICES"); BTWrite_Trade(" Low Ask : " + DoubleToStr(gd_1080, Digits) + " High Ask : " + DoubleToStr(gd_1072, Digits)); BTWrite_Trade(" Low Bid : " + DoubleToStr(gd_1064, Digits) + " High Bid : " + DoubleToStr(gd_1056, Digits)); if (ai_0 == 0) { ld_12 = (gd_1056 - ad_4) / gd_1120; ld_20 = (ad_4 - gd_1064) / gd_1120; } if (ai_0 == 1) { ld_12 = (ad_4 - gd_1080) / gd_1120; ld_20 = (gd_1072 - ad_4) / gd_1120; } BTWrite_Trade(" High Profit : " + DoubleToStr(ld_12, 0)); BTWrite_Trade(" DrawDown : " + DoubleToStr(ld_20, 0)); } } void Write_Prices(int ai_0, double ad_4) { double ld_12; double ld_20; if (Debug_LiveTrade == TRUE) { Write_Trade(" PRICES"); Write_Trade(" Low Ask : " + DoubleToStr(gd_1080, Digits) + " High Ask : " + DoubleToStr(gd_1072, Digits)); Write_Trade(" Low Bid : " + DoubleToStr(gd_1064, Digits) + " High Bid : " + DoubleToStr(gd_1056, Digits)); if (ai_0 == 0) { ld_12 = (gd_1056 - ad_4) / gd_1120; ld_20 = (ad_4 - gd_1064) / gd_1120; } if (ai_0 == 1) { ld_12 = (ad_4 - gd_1080) / gd_1120; ld_20 = (gd_1072 - ad_4) / gd_1120; } Write_Trade(" High Profit : " + DoubleToStr(ld_12, 0)); Write_Trade(" DrawDown : " + DoubleToStr(ld_20, 0)); } } void WriteTradeExit(string as_0, int ai_8, int ai_12, double ad_16, double ad_24) { string l_dbl2str_32 = DoubleToStr(ad_24, 2); string l_dbl2str_40 = DoubleToStr(Bid, Digits); string l_dbl2str_48 = DoubleToStr(Ask, Digits); if (ai_12 == 0) { WriteExit(ai_8, as_0, 0, ad_16); if (Debug_LiveTrade == TRUE) Write_Trade(" " + Symbol() + " #" + ai_8 + " CLOSE BUY ORDER " + l_dbl2str_32 + " LOTS AT " + l_dbl2str_40 + "."); if (Debug_BackTestTrade == TRUE) BTWrite_Trade(" " + Symbol() + " #" + ai_8 + " CLOSE BUY ORDER " + l_dbl2str_32 + " LOTS AT " + l_dbl2str_40 + "."); } if (ai_12 == 1) { WriteExit(ai_8, as_0, 1, ad_16); if (Debug_LiveTrade == TRUE) Write_Trade(" " + Symbol() + " #" + ai_8 + " CLOSE SELL ORDER " + l_dbl2str_32 + " LOTS AT " + l_dbl2str_48 + "."); if (Debug_BackTestTrade == TRUE) BTWrite_Trade(" " + Symbol() + " #" + ai_8 + " CLOSE SELL ORDER " + l_dbl2str_32 + " LOTS AT " + l_dbl2str_48 + "."); } } void GetGlobalVars() { NameGlobalVars(); InitGlobalVars(); GetGlobalVarValues(); } void GetGlobalVarValues() { double l_global_var_0 = GlobalVariableGet(g_var_name_1132); if (l_global_var_0 > 0.0) gi_368 = TRUE; else gi_368 = FALSE; l_global_var_0 = GlobalVariableGet(g_var_name_1140); if (l_global_var_0 > 0.0) gi_404 = TRUE; else gi_404 = FALSE; g_global_var_560 = GlobalVariableGet(g_var_name_1148); g_global_var_576 = GlobalVariableGet(g_var_name_1156); g_global_var_640 = GlobalVariableGet(g_var_name_1164); gi_644 = GlobalVariableGet(g_var_name_1188); g_global_var_984 = GlobalVariableGet(g_var_name_1196); g_global_var_988 = GlobalVariableGet(g_var_name_1204); g_global_var_1000 = GlobalVariableGet(g_var_name_1212); gd_1056 = GlobalVariableGet(g_var_name_1228); gd_1064 = GlobalVariableGet(g_var_name_1236); gd_1072 = GlobalVariableGet(g_var_name_1244); gd_1080 = GlobalVariableGet(g_var_name_1252); g_global_var_1264 = GlobalVariableGet(g_var_name_1172); gd_1272 = GlobalVariableGet(g_var_name_1180); } void InitGlobalVars() { if (!GlobalVariableCheck(g_var_name_1132)) GlobalVariableSet(g_var_name_1132, -10); if (!GlobalVariableCheck(g_var_name_1140)) GlobalVariableSet(g_var_name_1140, -10); if (!GlobalVariableCheck(g_var_name_1148)) GlobalVariableSet(g_var_name_1148, 0); if (!GlobalVariableCheck(g_var_name_1156)) GlobalVariableSet(g_var_name_1156, 0); if (!GlobalVariableCheck(g_var_name_1164)) GlobalVariableSet(g_var_name_1164, 0); if (!GlobalVariableCheck(g_var_name_1188)) GlobalVariableSet(g_var_name_1188, 0); if (!GlobalVariableCheck(g_var_name_1196)) GlobalVariableSet(g_var_name_1196, 0); if (!GlobalVariableCheck(g_var_name_1204)) GlobalVariableSet(g_var_name_1204, 0); if (!GlobalVariableCheck(g_var_name_1212)) GlobalVariableSet(g_var_name_1212, 0); if (!GlobalVariableCheck(g_var_name_1228)) GlobalVariableSet(g_var_name_1228, 0); if (!GlobalVariableCheck(g_var_name_1236)) GlobalVariableSet(g_var_name_1236, 0); if (!GlobalVariableCheck(g_var_name_1244)) GlobalVariableSet(g_var_name_1244, 0); if (!GlobalVariableCheck(g_var_name_1252)) GlobalVariableSet(g_var_name_1252, 0); if (!GlobalVariableCheck(g_var_name_1172)) GlobalVariableSet(g_var_name_1172, 0); if (!GlobalVariableCheck(g_var_name_1180)) GlobalVariableSet(g_var_name_1180, 0); } void NameGlobalVars() { string ls_0 = "H_" + Symbol() + tf2txt(Period()); g_var_name_1132 = ls_0 + "_First_TP_Level"; g_var_name_1140 = ls_0 + "_First_Trigger_Level"; g_var_name_1148 = ls_0 + "_InternalTakeProfit"; g_var_name_1156 = ls_0 + "_TP_Level1"; g_var_name_1164 = ls_0 + "_InternalStopLoss"; g_var_name_1188 = ls_0 + "_StopLoss"; g_var_name_1172 = ls_0 + "_IntTPprice"; g_var_name_1180 = ls_0 + "_IntSTprice"; g_var_name_1196 = ls_0 + "_AlertTimeFrame"; g_var_name_1204 = ls_0 + "_EntryTimeFrame"; g_var_name_1212 = ls_0 + "_ExitTimeFrameProfit"; g_var_name_1228 = ls_0 + "_HighBid"; g_var_name_1236 = ls_0 + "_LowBid"; g_var_name_1244 = ls_0 + "_HighAsk"; g_var_name_1252 = ls_0 + "_LowAsk"; } void SaveFirst_TP_Level(int ai_0) { if (ai_0 == 1) { GlobalVariableSet(g_var_name_1132, 10.0); return; } GlobalVariableSet(g_var_name_1132, -10.0); } void SaveFirst_Trigger_Level(int ai_0) { if (ai_0 == 1) { GlobalVariableSet(g_var_name_1140, 10.0); return; } GlobalVariableSet(g_var_name_1140, -10.0); } void SaveInternalTakeProfit(int ai_0) { GlobalVariableSet(g_var_name_1148, ai_0); } void SaveTP_Level1(int ai_0) { GlobalVariableSet(g_var_name_1156, ai_0); } void SaveInternalStopLoss(int ai_0) { GlobalVariableSet(g_var_name_1164, ai_0); } void SaveStopLoss(int ai_0) { GlobalVariableSet(g_var_name_1188, ai_0); } void SaveAlertTimeFrame(int ai_0) { GlobalVariableSet(g_var_name_1196, ai_0); } void SaveEntryTimeFrame(int ai_0) { GlobalVariableSet(g_var_name_1204, ai_0); } void SaveExitTimeFrameProfit(int ai_0) { GlobalVariableSet(g_var_name_1212, ai_0); } void SaveHighBid(double ad_0) { GlobalVariableSet(g_var_name_1228, ad_0); } void SaveLowBid(double ad_0) { GlobalVariableSet(g_var_name_1236, ad_0); } void SaveHighAsk(double ad_0) { GlobalVariableSet(g_var_name_1244, ad_0); } void SaveLowAsk(double ad_0) { GlobalVariableSet(g_var_name_1252, ad_0); } void SaveIntSTprice(double ad_0) { GlobalVariableSet(g_var_name_1180, ad_0); } void SaveIntTPprice(double ad_0) { GlobalVariableSet(g_var_name_1172, ad_0); }