#property copyright "Patrick Nouvion" #property link "http://www.interbankfx.com" int g_magic_76 = D'20.01.2002 13:02:25'; extern bool CLOSE_ALL_ORDERS = FALSE; extern string INITIAL_ORDERS = "Initial Orders"; extern double EURUSD_LONG = 0.0; extern double GBPUSD_LONG = 0.0; extern double USDCHF_LONG = 0.0; extern double USDJPY_LONG = 0.0; extern string PENDING_ORDERS = "Pending Orders"; extern double EURUSD_LOTS_TO_TRADE = 0.0; extern double __EURUSD_BUY_RATE = 0.0; extern double __EURUSD_SELL_RATE = 0.0; extern double GBPUSD_LOTS_TO_TRADE = 0.0; extern double __GBPUSD_BUY_RATE = 0.0; extern double __GBPUSD_SELL_RATE = 0.0; extern double USDCHF_LOTS_TO_TRADE = 0.0; extern double __USDCHF_BUY_RATE = 0.0; extern double __USDCHF_SELL_RATE = 0.0; extern double USDJPY_LOTS_TO_TRADE = 0.0; extern double __USDJPY_BUY_RATE = 0.0; extern double __USDJPY_SELL_RATE = 0.0; extern string OPTIONS = "Options"; extern double PROFIT_TARGET = 0.0; extern double TRAIL_START = 0.0; extern double TRAIL = 0.0; extern bool EMAIL_ALERTS = FALSE; double gd_264 = 0.0; double gd_272 = 0.0; int gi_unused_280 = 0; int gi_284 = 0; double g_ask_288; double gd_296; double g_bid_304; double gd_312; double g_ask_320; double gd_328; double g_bid_336; double gd_344; double g_ask_352; double gd_360; double g_bid_368; double gd_376; double g_ask_384; double gd_392; double g_bid_400; double gd_408 = 0.0; int init() { int l_acc_number_0; string l_comment_4; int li_12; string l_symbol_16; string l_symbol_24; string l_symbol_32; string l_symbol_40; int l_ticket_48; bool li_52; bool li_56; bool li_60; bool li_64; bool li_68; string ls_72; string ls_80; string ls_88; string ls_96; string ls_104; string ls_112; string ls_120; string ls_128; string ls_136; string ls_144; string ls_152; string ls_160; string ls_168; string ls_176; string ls_184; string ls_192; string ls_200; string ls_208; string ls_216; string ls_224; bool li_232; bool li_236; bool li_240; bool li_244; bool li_248; int l_file_252; double ld_256; double ld_264; CustomInit(); gi_284 = 0; if (UninitializeReason() == REASON_ACCOUNT) { if (gi_284 != Time[0]) { Alert("WARNING YOU JUST SWITCHED ACCOUNTS \n MAKE SURE TO REMOVE THE EXPERT \n THEN APPLY IT AGAIN"); gi_284 = Time[0]; } return (-1); } if (UninitializeReason() == REASON_PARAMETERS || UninitializeReason() == REASON_ACCOUNT) { l_acc_number_0 = AccountNumber(); l_comment_4 = "$ - IBFX - Rocks Advisor - " + l_acc_number_0; li_12 = StringGetChar(Symbol(), 6); l_symbol_16 = ""; l_symbol_24 = ""; l_symbol_32 = ""; l_symbol_40 = ""; if (li_12 != 0) { l_symbol_16 = "EURUSDm"; l_symbol_24 = "GBPUSDm"; l_symbol_32 = "USDCHFm"; l_symbol_40 = "USDJPYm"; } else { if (li_12 == 0) { l_symbol_16 = "EURUSD"; l_symbol_24 = "GBPUSD"; l_symbol_32 = "USDCHF"; l_symbol_40 = "USDJPY"; } } li_52 = FALSE; li_56 = FALSE; li_60 = FALSE; li_64 = FALSE; li_68 = FALSE; ls_224 = "0.0"; li_232 = FALSE; li_236 = FALSE; li_240 = FALSE; li_244 = FALSE; li_248 = FALSE; if (CLOSE_ALL_ORDERS) { Frexit(); if (gi_284 != Time[0]) { Alert("RESET \'Close_All_Orders\' TO FALSE \n RESET INITAL ORDERS "); gi_284 = Time[0]; } return (-1); } l_file_252 = MyFileOpen(0); if (l_file_252 == -1) { l_file_252 = MyFileOpen(1); if (l_file_252 != 1) Print("Create File Error: " + GetLastError()); ls_104 = DoubleToStr(EURUSD_LONG, 2); ls_112 = DoubleToStr(GBPUSD_LONG, 2); ls_120 = DoubleToStr(USDCHF_LONG, 2); ls_128 = DoubleToStr(USDJPY_LONG, 2); ls_136 = DoubleToStr(EURUSD_LOTS_TO_TRADE, 2); ls_168 = DoubleToStr(__EURUSD_BUY_RATE, 4); ls_176 = DoubleToStr(__EURUSD_SELL_RATE, 4); ls_72 = "0.0"; ls_144 = DoubleToStr(GBPUSD_LOTS_TO_TRADE, 2); ls_184 = DoubleToStr(__GBPUSD_BUY_RATE, 4); ls_192 = DoubleToStr(__GBPUSD_SELL_RATE, 4); ls_80 = "0.0"; ls_152 = DoubleToStr(USDCHF_LOTS_TO_TRADE, 2); ls_200 = DoubleToStr(__USDCHF_BUY_RATE, 4); ls_208 = DoubleToStr(__USDCHF_SELL_RATE, 4); ls_88 = "0.0"; ls_160 = DoubleToStr(USDJPY_LOTS_TO_TRADE, 2); ls_216 = DoubleToStr(__USDJPY_BUY_RATE, 4); ls_224 = DoubleToStr(__USDJPY_SELL_RATE, 4); ls_96 = "0.0"; MyFileWrite(l_file_252, ls_104, ls_136, ls_168, ls_176, ls_72, ls_112, ls_144, ls_184, ls_192, ls_80, ls_120, ls_152, ls_200, ls_208, ls_88, ls_128, ls_160, ls_216, ls_224, ls_96); li_248 = TRUE; } else { l_file_252 = MyFileOpen(0); ls_104 = FileReadString(l_file_252); ls_136 = FileReadString(l_file_252); ls_168 = FileReadString(l_file_252); ls_176 = FileReadString(l_file_252); ls_72 = FileReadString(l_file_252); ls_112 = FileReadString(l_file_252); ls_144 = FileReadString(l_file_252); ls_184 = FileReadString(l_file_252); ls_192 = FileReadString(l_file_252); ls_80 = FileReadString(l_file_252); ls_120 = FileReadString(l_file_252); ls_152 = FileReadString(l_file_252); ls_200 = FileReadString(l_file_252); ls_208 = FileReadString(l_file_252); ls_88 = FileReadString(l_file_252); ls_128 = FileReadString(l_file_252); ls_160 = FileReadString(l_file_252); ls_216 = FileReadString(l_file_252); ls_224 = FileReadString(l_file_252); ls_96 = FileReadString(l_file_252); MyFileClose(l_file_252); if (EURUSD_LONG != 0.0 && EURUSD_LONG != NormalizeDouble(StrToDouble(ls_104), 2)) { li_232 = TRUE; li_248 = TRUE; } else { if (__EURUSD_BUY_RATE != 0.0 && __EURUSD_BUY_RATE != StrToDouble(ls_168) && __EURUSD_BUY_RATE != StrToDouble(ls_72) && __EURUSD_SELL_RATE != StrToDouble(ls_72)) li_232 = TRUE; else if (__EURUSD_SELL_RATE != 0.0 && __EURUSD_SELL_RATE != StrToDouble(ls_176) && __EURUSD_SELL_RATE != StrToDouble(ls_72) && __EURUSD_BUY_RATE != StrToDouble(ls_72)) li_232 = TRUE; } if (li_232) { ls_104 = DoubleToStr(EURUSD_LONG, 2); ls_136 = DoubleToStr(EURUSD_LOTS_TO_TRADE, 2); ls_168 = DoubleToStr(__EURUSD_BUY_RATE, 4); ls_176 = DoubleToStr(__EURUSD_SELL_RATE, 4); GlobalVariableSet("ibfxrocksPENDINGLOTSEURUSD", StrToDouble(ls_136)); GlobalVariableSet("ibfxrocksPENDINGBUYEURUSD", StrToDouble(ls_168)); GlobalVariableSet("ibfxrocksPENDINGSELLEURUSD", StrToDouble(ls_176)); } if (GBPUSD_LONG != 0.0 && GBPUSD_LONG != StrToDouble(ls_112)) { li_236 = TRUE; li_248 = TRUE; } else { if (__GBPUSD_BUY_RATE != 0.0 && __GBPUSD_BUY_RATE != StrToDouble(ls_184) && __GBPUSD_BUY_RATE != StrToDouble(ls_80) && __GBPUSD_SELL_RATE != StrToDouble(ls_80)) li_236 = TRUE; else if (__GBPUSD_SELL_RATE != 0.0 && __GBPUSD_SELL_RATE != StrToDouble(ls_192) && __GBPUSD_SELL_RATE != StrToDouble(ls_80) && __GBPUSD_BUY_RATE != StrToDouble(ls_80)) li_236 = TRUE; } if (li_236) { ls_112 = DoubleToStr(GBPUSD_LONG, 2); ls_144 = DoubleToStr(GBPUSD_LOTS_TO_TRADE, 2); ls_184 = DoubleToStr(__GBPUSD_BUY_RATE, 4); ls_192 = DoubleToStr(__GBPUSD_SELL_RATE, 4); GlobalVariableSet("ibfxrocksPENDINGLOTSGBPUSD", StrToDouble(ls_144)); GlobalVariableSet("ibfxrocksPENDINGBUYGBPUSD", StrToDouble(ls_184)); GlobalVariableSet("ibfxrocksPENDINGSELLGBPUSD", StrToDouble(ls_192)); } if (USDCHF_LONG != 0.0 && USDCHF_LONG != StrToDouble(ls_120)) { li_240 = TRUE; li_248 = TRUE; } else { if (__USDCHF_BUY_RATE != 0.0 && __USDCHF_BUY_RATE != StrToDouble(ls_200) && __USDCHF_BUY_RATE != StrToDouble(ls_88) && __USDCHF_SELL_RATE != StrToDouble(ls_88)) li_240 = TRUE; else if (__USDCHF_SELL_RATE != 0.0 && __USDCHF_SELL_RATE != StrToDouble(ls_208) && __USDCHF_SELL_RATE != StrToDouble(ls_88) && __USDCHF_BUY_RATE != StrToDouble(ls_88)) li_240 = TRUE; } if (li_240) { ls_120 = DoubleToStr(USDCHF_LONG, 2); ls_152 = DoubleToStr(USDCHF_LOTS_TO_TRADE, 2); ls_200 = DoubleToStr(__USDCHF_BUY_RATE, 4); ls_208 = DoubleToStr(__USDCHF_SELL_RATE, 4); GlobalVariableSet("ibfxrocksPENDINGLOTSUSDCHF", StrToDouble(ls_152)); GlobalVariableSet("ibfxrocksPENDINGBUYUSDCHF", StrToDouble(ls_200)); GlobalVariableSet("ibfxrocksPENDINGSELLUSDCHF", StrToDouble(ls_208)); } if (USDJPY_LONG != 0.0 && USDJPY_LONG != StrToDouble(ls_128)) { li_244 = TRUE; li_248 = TRUE; } else { if (__USDJPY_BUY_RATE != 0.0 && __USDJPY_BUY_RATE != StrToDouble(ls_216) && __USDJPY_BUY_RATE != StrToDouble(ls_96) && __USDJPY_SELL_RATE != StrToDouble(ls_96)) li_244 = TRUE; else if (__USDJPY_SELL_RATE != 0.0 && __USDJPY_SELL_RATE != StrToDouble(ls_224) && __USDJPY_SELL_RATE != StrToDouble(ls_96) && __USDJPY_BUY_RATE != StrToDouble(ls_96)) li_244 = TRUE; } if (li_244) { ls_128 = DoubleToStr(USDJPY_LONG, 2); ls_160 = DoubleToStr(USDJPY_LOTS_TO_TRADE, 2); ls_216 = DoubleToStr(__USDJPY_BUY_RATE, 4); ls_224 = DoubleToStr(__USDJPY_SELL_RATE, 4); GlobalVariableSet("ibfxrocksPENDINGLOTSUSDJPY", StrToDouble(ls_160)); GlobalVariableSet("ibfxrocksPENDINGBUYUSDJPY", StrToDouble(ls_216)); GlobalVariableSet("ibfxrocksPENDINGSELLUSDJPY", StrToDouble(ls_224)); } if (li_232 || li_236 || li_240 || li_244 || li_248) { l_file_252 = MyFileOpen(1); MyFileWrite(l_file_252, ls_104, ls_136, ls_168, ls_176, ls_72, ls_112, ls_144, ls_184, ls_192, ls_80, ls_120, ls_152, ls_200, ls_208, ls_88, ls_128, ls_160, ls_216, ls_224, ls_96); } } if (li_248 == TRUE) { while (!li_52) { ld_256 = 0; ld_264 = 0; if (EURUSD_LONG != 0.0 && CountLongs(l_symbol_16, g_magic_76) == 0) { ld_256 = EURUSD_LONG / 50.0; if (ld_256 <= 1.0) { Wait(); l_ticket_48 = OrderSend(l_symbol_16, OP_BUY, EURUSD_LONG, MarketInfo(l_symbol_16, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); if (l_ticket_48 >= 0) { li_56 = TRUE; EURUSD_LONG = 0.0; } } else { for (int l_count_272 = 0; l_count_272 < ld_256; l_count_272++) { EURUSD_LONG -= ld_264; Wait(); l_ticket_48 = OrderSend(l_symbol_16, OP_BUY, EURUSD_LONG - 50.0 * (MathFloor(ld_256) - l_count_272), MarketInfo(l_symbol_16, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); ld_264 = EURUSD_LONG - 50.0 * (MathRound(ld_256) - l_count_272); } li_56 = TRUE; EURUSD_LONG = 0.0; } } else li_56 = TRUE; ld_256 = 0; ld_264 = 0; l_count_272 = 0; if (GBPUSD_LONG != 0.0 && CountLongs(l_symbol_24, g_magic_76) == 0) { ld_256 = GBPUSD_LONG / 50.0; if (ld_256 <= 1.0) { Wait(); l_ticket_48 = OrderSend(l_symbol_24, OP_BUY, GBPUSD_LONG, MarketInfo(l_symbol_24, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); if (l_ticket_48 >= 0) { li_60 = TRUE; GBPUSD_LONG = 0.0; } } else { for (l_count_272 = 0; l_count_272 < ld_256; l_count_272++) { GBPUSD_LONG -= ld_264; Wait(); l_ticket_48 = OrderSend(l_symbol_24, OP_BUY, GBPUSD_LONG - 50.0 * (MathFloor(ld_256) - l_count_272), MarketInfo(l_symbol_24, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); ld_264 = GBPUSD_LONG - 50.0 * (MathRound(ld_256) - l_count_272); } li_60 = TRUE; GBPUSD_LONG = 0.0; } } else li_60 = TRUE; ld_256 = 0; ld_264 = 0; if (USDCHF_LONG != 0.0 && CountLongs(l_symbol_32, g_magic_76) == 0) { ld_256 = USDCHF_LONG / 50.0; if (ld_256 <= 1.0) { Wait(); l_ticket_48 = OrderSend(l_symbol_32, OP_BUY, USDCHF_LONG, MarketInfo(l_symbol_32, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); if (l_ticket_48 >= 0) { li_64 = TRUE; USDCHF_LONG = 0.0; } } else { for (l_count_272 = 0; l_count_272 < ld_256; l_count_272++) { USDCHF_LONG -= ld_264; Wait(); l_ticket_48 = OrderSend(l_symbol_32, OP_BUY, USDCHF_LONG - 50.0 * (MathFloor(ld_256) - l_count_272), MarketInfo(l_symbol_32, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); ld_264 = USDCHF_LONG - 50.0 * (MathRound(ld_256) - l_count_272); } li_64 = TRUE; USDCHF_LONG = 0.0; } } else li_64 = TRUE; ld_256 = 0; ld_264 = 0; l_count_272 = 0; if (USDJPY_LONG != 0.0 && CountLongs(l_symbol_40, g_magic_76) == 0) { ld_256 = USDJPY_LONG / 50.0; if (ld_256 <= 1.0) { Wait(); l_ticket_48 = OrderSend(l_symbol_40, OP_BUY, USDJPY_LONG, MarketInfo(l_symbol_40, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); if (l_ticket_48 >= 0) { li_68 = TRUE; USDJPY_LONG = 0.0; } } else { for (l_count_272 = 0; l_count_272 < ld_256; l_count_272++) { USDJPY_LONG -= ld_264; Wait(); l_ticket_48 = OrderSend(l_symbol_40, OP_BUY, USDJPY_LONG - 50.0 * (MathFloor(ld_256) - l_count_272), MarketInfo(l_symbol_40, MODE_ASK), 10.0, 0.0, 0.0, l_comment_4, g_magic_76, 0, CLR_NONE); ld_264 = USDJPY_LONG - 50.0 * (MathRound(ld_256) - l_count_272); } li_68 = TRUE; USDJPY_LONG = 0.0; } } else li_68 = TRUE; if (li_56 && li_60 && li_64 && li_68) li_52 = TRUE; } } } return (0); } int deinit() { ObjectDelete("ibfxrocksVersion"); return (0); } int start() { string l_dbl2str_80; string l_dbl2str_88; string l_dbl2str_96; string l_dbl2str_104; CustomInit(); if (CLOSE_ALL_ORDERS) { Frexit(); if (gi_284 != Time[0]) { Alert("RESET \'Close_All_Orders\' TO FALSE \n RESET INITAL ORDERS "); gi_284 = Time[0]; } return (-1); } double ld_0 = CalcProfit(g_magic_76); if (ld_0 >= PROFIT_TARGET && PROFIT_TARGET != 0.0) Frexit(); if (GlobalVariableCheck("ibfxrocksTRAILON") == FALSE) gd_264 = 0.0; if (TRAIL_START > 0.0 && TRAIL > 0.0 && ld_0 > TRAIL_START) { gd_272 = ld_0 - TRAIL; if (gd_272 > gd_264) gd_264 = gd_272; if (gd_264 > 0.0) GlobalVariableSet("ibfxrocksTRAILON", gd_264); } if (ld_0 > 0.0 && ld_0 < gd_264 && gd_264 != 0.0) Frexit(); else { if (ld_0 < 0.0 && ld_0 < gd_264 && gd_264 != 0.0) { Alert("A spike occured, we could not close with a profit and the trailing has been reset"); gd_264 = 0.0; GlobalVariableDel("ibfxrocksTRAILON"); } } int l_acc_number_8 = AccountNumber(); string l_comment_12 = "$ - IBFX - Rocks Advisor - " + l_acc_number_8; int li_20 = StringGetChar(Symbol(), 6); string l_symbol_24 = ""; string l_symbol_32 = ""; string l_symbol_40 = ""; string l_symbol_48 = ""; if (li_20 != 0) { l_symbol_24 = "EURUSDm"; l_symbol_32 = "GBPUSDm"; l_symbol_40 = "USDCHFm"; l_symbol_48 = "USDJPYm"; } else { if (li_20 == 0) { l_symbol_24 = "EURUSD"; l_symbol_32 = "GBPUSD"; l_symbol_40 = "USDCHF"; l_symbol_48 = "USDJPY"; } } int li_unused_60 = 0; int li_unused_64 = 0; int li_unused_68 = 0; int li_unused_72 = 0; int li_unused_76 = 0; bool li_272 = FALSE; bool li_276 = FALSE; bool li_280 = FALSE; bool li_284 = FALSE; gd_296 = g_ask_288; g_ask_288 = MarketInfo(l_symbol_24, MODE_ASK); gd_312 = g_bid_304; g_bid_304 = MarketInfo(l_symbol_24, MODE_BID); gd_328 = g_ask_320; g_ask_320 = MarketInfo(l_symbol_32, MODE_ASK); gd_344 = g_bid_336; g_bid_336 = MarketInfo(l_symbol_32, MODE_BID); gd_360 = g_ask_352; g_ask_352 = MarketInfo(l_symbol_40, MODE_ASK); gd_376 = g_bid_368; g_bid_368 = MarketInfo(l_symbol_40, MODE_BID); gd_392 = g_ask_384; g_ask_384 = MarketInfo(l_symbol_48, MODE_ASK); gd_408 = g_bid_400; g_bid_400 = MarketInfo(l_symbol_48, MODE_BID); int l_file_288 = MyFileOpen(0); string ls_144 = FileReadString(l_file_288); string ls_176 = FileReadString(l_file_288); string ls_208 = FileReadString(l_file_288); string ls_216 = FileReadString(l_file_288); string ls_112 = FileReadString(l_file_288); string ls_152 = FileReadString(l_file_288); string ls_184 = FileReadString(l_file_288); string ls_224 = FileReadString(l_file_288); string ls_232 = FileReadString(l_file_288); string ls_120 = FileReadString(l_file_288); string ls_160 = FileReadString(l_file_288); string ls_192 = FileReadString(l_file_288); string ls_240 = FileReadString(l_file_288); string ls_248 = FileReadString(l_file_288); string ls_128 = FileReadString(l_file_288); string ls_168 = FileReadString(l_file_288); string ls_200 = FileReadString(l_file_288); string ls_256 = FileReadString(l_file_288); string ls_264 = FileReadString(l_file_288); string ls_136 = FileReadString(l_file_288); MyFileClose(l_file_288); if (CountLongs(l_symbol_24, g_magic_76) > 0) { if (gd_312 != 0.0 && gd_312 < StrToDouble(ls_216) && g_bid_304 >= StrToDouble(ls_216) && StrToDouble(ls_216) != 0.0 && StrToDouble(ls_216) != StrToDouble(ls_112)) { Wait(); CloseLotsforSellLimit(l_symbol_24, g_magic_76, EURUSD_LOTS_TO_TRADE); GlobalVariableSet("LastEurAction", 2.0); GlobalVariableSet("LastEurPrice", g_bid_304); GlobalVariableSet("LastEurLots", EURUSD_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSEURUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYEURUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLEURUSD", 0.0); l_dbl2str_80 = DoubleToStr(StrToDouble(ls_216), 4); li_272 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_24 + " triggered the Sell rate at " + StrToDouble(ls_216) + " and the advisor closed " + EURUSD_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } else { if (gd_296 != 0.0 && gd_296 > StrToDouble(ls_208) && g_ask_288 <= StrToDouble(ls_208) && StrToDouble(ls_208) != 0.0 && StrToDouble(ls_208) != StrToDouble(ls_112)) { Wait(); OrderSend(l_symbol_24, OP_BUY, EURUSD_LOTS_TO_TRADE, MarketInfo(l_symbol_24, MODE_ASK), 3.0, 0.0, 0.0, l_comment_12, g_magic_76, 0, CLR_NONE); GlobalVariableSet("LastEurAction", 1.0); GlobalVariableSet("LastEurPrice", g_ask_288); GlobalVariableSet("LastEurLots", EURUSD_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSEURUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYEURUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLEURUSD", 0.0); l_dbl2str_80 = DoubleToStr(StrToDouble(ls_208), 4); li_272 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_24 + " triggered the Buy rate at " + StrToDouble(ls_208) + " and the advisor bought " + EURUSD_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } } } if (CountLongs(l_symbol_32, g_magic_76) > 0) { if (gd_344 != 0.0 && gd_344 < StrToDouble(ls_232) && g_bid_336 >= StrToDouble(ls_232) && StrToDouble(ls_232) != 0.0 && StrToDouble(ls_232) != StrToDouble(ls_120)) { Wait(); CloseLotsforSellLimit(l_symbol_32, g_magic_76, GBPUSD_LOTS_TO_TRADE); GlobalVariableSet("LastGbpAction", 2.0); GlobalVariableSet("LastGbpPrice", g_bid_336); GlobalVariableSet("LastGbpLots", GBPUSD_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSGBPUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYGBPUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLGBPUSD", 0.0); l_dbl2str_88 = DoubleToStr(StrToDouble(ls_232), 4); li_276 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_32 + " triggered the Sell rate at " + StrToDouble(ls_232) + " and the advisor closed " + GBPUSD_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } else { if (gd_328 != 0.0 && gd_328 > StrToDouble(ls_224) && g_ask_320 <= StrToDouble(ls_224) && StrToDouble(ls_224) != 0.0 && StrToDouble(ls_224) != StrToDouble(ls_120)) { Wait(); OrderSend(l_symbol_32, OP_BUY, GBPUSD_LOTS_TO_TRADE, MarketInfo(l_symbol_32, MODE_ASK), 3.0, 0.0, 0.0, l_comment_12, g_magic_76, 0, CLR_NONE); GlobalVariableSet("LastGbpAction", 1.0); GlobalVariableSet("LastGbpPrice", g_ask_320); GlobalVariableSet("LastGbpLots", GBPUSD_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSGBPUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYGBPUSD", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLGBPUSD", 0.0); l_dbl2str_88 = DoubleToStr(StrToDouble(ls_224), 4); li_276 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_32 + " triggered the Buy rate at " + StrToDouble(ls_224) + " and the advisor bought " + GBPUSD_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } } } if (CountLongs(l_symbol_40, g_magic_76) > 0) { if (gd_376 != 0.0 && gd_376 < StrToDouble(ls_248) && g_bid_368 >= StrToDouble(ls_248) && StrToDouble(ls_248) != 0.0 && StrToDouble(ls_248) != StrToDouble(ls_128)) { Wait(); CloseLotsforSellLimit(l_symbol_40, g_magic_76, USDCHF_LOTS_TO_TRADE); GlobalVariableSet("LastChfAction", 2.0); GlobalVariableSet("LastChfPrice", g_bid_368); GlobalVariableSet("LastChfLots", USDCHF_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSUSDCHF", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYUSDCHF", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLUSDCHF", 0.0); l_dbl2str_96 = DoubleToStr(StrToDouble(ls_248), 4); li_280 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_40 + " triggered the Sell rate at " + StrToDouble(ls_248) + " and the advisor closed " + USDCHF_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } else { if (gd_360 != 0.0 && gd_360 > StrToDouble(ls_240) && g_ask_352 <= StrToDouble(ls_240) && StrToDouble(ls_240) != 0.0 && StrToDouble(ls_240) != StrToDouble(ls_128)) { Wait(); OrderSend(l_symbol_40, OP_BUY, USDCHF_LOTS_TO_TRADE, MarketInfo(l_symbol_40, MODE_ASK), 3.0, 0.0, 0.0, l_comment_12, g_magic_76, 0, CLR_NONE); GlobalVariableSet("LastChfAction", 1.0); GlobalVariableSet("LastChfPrice", g_ask_352); GlobalVariableSet("LastChfLots", USDCHF_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSUSDCHF", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYUSDCHF", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLUSDCHF", 0.0); l_dbl2str_96 = DoubleToStr(StrToDouble(ls_240), 4); li_280 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_40 + " triggered the Buy rate at " + StrToDouble(ls_240) + " and the advisor bought " + USDCHF_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } } } if (CountLongs(l_symbol_48, g_magic_76) > 0) { if (gd_408 != 0.0 && gd_408 < StrToDouble(ls_264) && g_bid_400 >= StrToDouble(ls_264) && StrToDouble(ls_264) != 0.0 && StrToDouble(ls_264) != StrToDouble(ls_136)) { Wait(); CloseLotsforSellLimit(l_symbol_48, g_magic_76, USDJPY_LOTS_TO_TRADE); GlobalVariableSet("LastJpyAction", 2.0); GlobalVariableSet("LastJpyPrice", g_bid_400); GlobalVariableSet("LastJpyLots", USDJPY_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSUSDJPY", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYUSDJPY", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLUSDJPY", 0.0); l_dbl2str_104 = DoubleToStr(StrToDouble(ls_264), 4); li_284 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_48 + " triggered the Sell rate at " + StrToDouble(ls_264) + " and the advisor closed " + USDJPY_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } else { if (gd_392 != 0.0 && gd_392 > StrToDouble(ls_256) && g_ask_384 <= StrToDouble(ls_256) && StrToDouble(ls_256) != 0.0 && StrToDouble(ls_256) != StrToDouble(ls_136)) { Wait(); OrderSend(l_symbol_48, OP_BUY, USDJPY_LOTS_TO_TRADE, MarketInfo(l_symbol_48, MODE_ASK), 3.0, 0.0, 0.0, l_comment_12, g_magic_76, 0, CLR_NONE); GlobalVariableSet("LastJpyAction", 1.0); GlobalVariableSet("LastJpyPrice", g_ask_384); GlobalVariableSet("LastJpyLots", USDJPY_LOTS_TO_TRADE); GlobalVariableSet("ibfxrocksPENDINGLOTSUSDJPY", 0.0); GlobalVariableSet("ibfxrocksPENDINGBUYUSDJPY", 0.0); GlobalVariableSet("ibfxrocksPENDINGSELLUSDJPY", 0.0); l_dbl2str_104 = DoubleToStr(StrToDouble(ls_256), 4); li_284 = TRUE; if (EMAIL_ALERTS) SendMail("FR Monitor", l_symbol_48 + " triggered the Buy rate at " + StrToDouble(ls_256) + " and the advisor bought " + USDJPY_LOTS_TO_TRADE + " Lot(s). Make sure to set new Buy and Sell Rates"); } } } if (li_272 || li_276 || li_280 || li_284) { if (li_272) { ls_176 = "0.0"; ls_208 = "0.0"; ls_216 = "0.0"; ls_112 = l_dbl2str_80; } if (li_276) { ls_184 = "0.0"; ls_224 = "0.0"; ls_232 = "0.0"; ls_120 = l_dbl2str_88; } if (li_280) { ls_192 = "0.0"; ls_240 = "0.0"; ls_248 = "0.0"; ls_128 = l_dbl2str_96; } if (li_284) { ls_200 = "0.0"; ls_256 = "0.0"; ls_264 = "0.0"; ls_136 = l_dbl2str_104; } l_file_288 = MyFileOpen(1); MyFileWrite(l_file_288, ls_144, ls_176, ls_208, ls_216, ls_112, ls_152, ls_184, ls_224, ls_232, ls_120, ls_160, ls_192, ls_240, ls_248, ls_128, ls_168, ls_200, ls_256, ls_264, ls_136); GlobalVariablesDeleteAll("ibfxrocks"); if (ls_176 != "0.0" && ls_208 != ls_112 && ls_216 != ls_112) { GlobalVariableSet("ibfxrocksPENDINGLOTSEURUSD", StrToDouble(ls_176)); GlobalVariableSet("ibfxrocksPENDINGBUYEURUSD", StrToDouble(ls_208)); GlobalVariableSet("ibfxrocksPENDINGSELLEURUSD", StrToDouble(ls_216)); } if (ls_184 != "0.0" && ls_224 != ls_120 && ls_232 != ls_120) { GlobalVariableSet("ibfxrocksPENDINGLOTSGBPUSD", StrToDouble(ls_184)); GlobalVariableSet("ibfxrocksPENDINGBUYGBPUSD", StrToDouble(ls_224)); GlobalVariableSet("ibfxrocksPENDINGSELLGBPUSD", StrToDouble(ls_232)); } if (ls_192 != "0.0" && ls_240 != ls_128 && ls_248 != ls_128) { GlobalVariableSet("ibfxrocksPENDINGLOTSUSDCHF", StrToDouble(ls_192)); GlobalVariableSet("ibfxrocksPENDINGBUYUSDCHF", StrToDouble(ls_240)); GlobalVariableSet("ibfxrocksPENDINGSELLUSDCHF", StrToDouble(ls_248)); } if (ls_200 != "0.0" && ls_256 != ls_136 && ls_264 != ls_136) { GlobalVariableSet("ibfxrocksPENDINGLOTSUSDJPY", StrToDouble(ls_200)); GlobalVariableSet("ibfxrocksPENDINGBUYUSDJPY", StrToDouble(ls_256)); GlobalVariableSet("ibfxrocksPENDINGSELLUSDJPY", StrToDouble(ls_264)); } } return (0); } void Frexit() { CloseAllOrders(g_magic_76); GlobalVariablesDeleteAll("ibfxrocks"); GlobalVariablesDeleteAll("Last"); } int MyFileOpen(bool ai_0) { int l_file_4; if (ai_0) l_file_4 = FileOpen("IBFX - Rocks" + DoubleToStr(AccountNumber(), 0) + ".txt", FILE_CSV|FILE_WRITE, ";"); else l_file_4 = FileOpen("IBFX - Rocks" + DoubleToStr(AccountNumber(), 0) + ".txt", FILE_CSV|FILE_READ, ";"); if (l_file_4 != 1) Print(GetLastError()); Sleep(300); return (l_file_4); } void MyFileWrite(int ai_0, string as_4, string as_12, string as_20, string as_28, string as_36, string as_44, string as_52, string as_60, string as_68, string as_76, string as_84, string as_92, string as_100, string as_108, string as_116, string as_124, string as_132, string as_140, string as_148, string as_156) { FileWrite(ai_0, as_4, as_12, as_20, as_28, as_36, as_44, as_52, as_60, as_68, as_76, as_84, as_92, as_100, as_108, as_116, as_124, as_132, as_140, as_148, as_156); Sleep(300); MyFileClose(ai_0); } void MyFileClose(int a_file_0) { while (a_file_0 > 0) { FileClose(a_file_0); a_file_0--; } } void CustomInit() { string ls_0 = AccountServer(); int l_acc_number_8 = AccountNumber(); if (l_acc_number_8 != 0) { if (StringFind(ls_0, "InterbankFX", 0) == -1 && StringFind(ls_0, "IBFX", 0) == -1) Alert("InterbankFX users Only!!!"); else { if (!IsExpertEnabled()) Alert("You did not allow your expert to run live, change your settings and apply the expert again"); else { if (EURUSD_LOTS_TO_TRADE != 0.0 && __EURUSD_BUY_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid BUY LIMIT PRICE for EURUSD"); gi_284 = Time[0]; } } else { if (GBPUSD_LOTS_TO_TRADE != 0.0 && __GBPUSD_BUY_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid BUY LIMIT PRICE for GBPUSD"); gi_284 = Time[0]; } } else { if (USDCHF_LOTS_TO_TRADE != 0.0 && __USDCHF_BUY_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid BUY LIMIT PRICE for USDCHF"); gi_284 = Time[0]; } } else { if (USDJPY_LOTS_TO_TRADE != 0.0 && __USDJPY_BUY_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid BUY LIMIT PRICE for USDJPY"); gi_284 = Time[0]; } } else { if (EURUSD_LOTS_TO_TRADE != 0.0 && __EURUSD_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid SELL LIMIT PRICE for EURUSD"); gi_284 = Time[0]; } } else { if (GBPUSD_LOTS_TO_TRADE != 0.0 && __GBPUSD_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid SELL LIMIT PRICE for GBPUSD"); gi_284 = Time[0]; } } else { if (USDCHF_LOTS_TO_TRADE != 0.0 && __USDCHF_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid SELL LIMIT PRICE for USDCHF"); gi_284 = Time[0]; } } else { if (USDJPY_LOTS_TO_TRADE != 0.0 && __USDJPY_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("Invalid SELL LIMIT PRICE for USDJPY"); gi_284 = Time[0]; } } else { if (EURUSD_LOTS_TO_TRADE != 0.0 && __EURUSD_BUY_RATE != 0.0 && __EURUSD_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Sell Rate for EURUSD"); gi_284 = Time[0]; } } else { if (GBPUSD_LOTS_TO_TRADE != 0.0 && __GBPUSD_BUY_RATE != 0.0 && __GBPUSD_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Sell Rate for GBPUSD"); gi_284 = Time[0]; } } else { if (USDCHF_LOTS_TO_TRADE != 0.0 && __USDCHF_BUY_RATE != 0.0 && __USDCHF_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Sell Rate for USDCHF"); gi_284 = Time[0]; } } else { if (USDJPY_LOTS_TO_TRADE != 0.0 && __USDJPY_BUY_RATE != 0.0 && __USDJPY_SELL_RATE == 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Sell Rate for USDJPY"); gi_284 = Time[0]; } } else { if (EURUSD_LOTS_TO_TRADE != 0.0 && __EURUSD_BUY_RATE == 0.0 && __EURUSD_SELL_RATE != 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Buy Rate for EURUSD"); gi_284 = Time[0]; } } else { if (GBPUSD_LOTS_TO_TRADE != 0.0 && __GBPUSD_BUY_RATE == 0.0 && __GBPUSD_SELL_RATE != 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Buy Rate for GBPUSD"); gi_284 = Time[0]; } } else { if (USDCHF_LOTS_TO_TRADE != 0.0 && __USDCHF_BUY_RATE == 0.0 && __USDCHF_SELL_RATE != 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Buy Rate for USDCHF"); gi_284 = Time[0]; } } else { if (USDJPY_LOTS_TO_TRADE != 0.0 && __USDJPY_BUY_RATE == 0.0 && __USDJPY_SELL_RATE != 0.0) { if (gi_284 != Time[0]) { Alert("You forgot to set the Buy Rate for USDJPY"); gi_284 = Time[0]; } } else { if (UninitializeReason() == REASON_ACCOUNT) Alert("WARNING YOU JUST SWITCHED ACCOUNTS \n MAKE SURE TO REMOVE THE EXPERT \n THEN APPLY IT AGAIN"); else { ObjectMakeLabel("ibfxrocksVersion", 25, 12, 0); ObjectSetText("ibfxrocksVersion", "Version 1.29", 8, "Arial", Crimson); } } } } } } } } } } } } } } } } } } } } } int CountLongs(string a_symbol_0, int a_magic_8) { int l_count_12 = 0; for (int l_pos_16 = 0; l_pos_16 < OrdersTotal(); l_pos_16++) { OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == a_symbol_0 && OrderMagicNumber() == a_magic_8 && OrderType() == OP_BUY) l_count_12++; } return (l_count_12); } int CountAll(int a_magic_0) { int l_count_4 = 0; for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0) l_count_4++; } return (l_count_4); } void CloseAllOrders(int a_magic_0) { int l_cmd_12; bool li_16; int li_unused_4 = 0; while (CountAll(a_magic_0) > 0) { for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0) { l_cmd_12 = OrderType(); li_16 = FALSE; switch (l_cmd_12) { case OP_BUY: Wait(); li_16 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 10, CLR_NONE); break; case OP_SELL: Wait(); li_16 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 10, CLR_NONE); break; case OP_BUYLIMIT: case OP_BUYSTOP: case OP_SELLLIMIT: case OP_SELLSTOP: Wait(); li_16 = OrderDelete(OrderTicket()); } } } } if (GlobalVariableCheck("ibfxrocksTRAILON") != FALSE) GlobalVariableDel("ibfxrocksTRAILON"); } void CloseLotsforSellLimit(string a_symbol_0, int a_magic_8, double ad_12) { double l_ord_lots_28; bool li_20 = FALSE; for (int l_ord_total_24 = OrdersTotal(); !li_20; l_ord_total_24--) { OrderSelect(l_ord_total_24, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == a_symbol_0 && OrderMagicNumber() == a_magic_8) { if (OrderLots() < ad_12) l_ord_lots_28 = OrderLots(); else l_ord_lots_28 = ad_12; Wait(); OrderClose(OrderTicket(), l_ord_lots_28, MarketInfo(a_symbol_0, MODE_BID), 3, CLR_NONE); ad_12 -= l_ord_lots_28; if (ad_12 <= 0.0 || l_ord_total_24 == 0) li_20 = TRUE; } } } double CalcProfit(int a_magic_0) { double ld_ret_4 = 0.0; for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++) { OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == a_magic_0) { ld_ret_4 += OrderProfit(); ld_ret_4 += OrderSwap(); } } return (ld_ret_4); } int ObjectMakeLabel(string a_name_0, int a_x_8, int a_y_12, int a_window_16) { ObjectCreate(a_name_0, OBJ_LABEL, a_window_16, 0, 0); ObjectSet(a_name_0, OBJPROP_CORNER, 1); ObjectSet(a_name_0, OBJPROP_XDISTANCE, a_x_8); ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_12); ObjectSet(a_name_0, OBJPROP_BACK, TRUE); return (0); } void Wait() { while (IsTradeContextBusy()) Sleep(100); }