#include extern int TakeProfit = 200; extern int StopLoss = 200; extern int MinThreshold = 10; extern int MaxTrades = 20; extern int SDevPeriod = 7; extern double SDevDivisor = 1.0; extern int SDevTimeframe = 60; extern double PositionSizing = 2.0; extern int Slippage = 3; extern double Lots = 0.01; extern double Risk = 0.25; extern double GlobalProfitMultiple = 1.0; extern double SymbolProfitMultiple = 1.0; extern int MagicNumber = 8675310; extern bool MoneyManagment = TRUE; extern bool BrokerAllowsFractionalLots = TRUE; extern bool StopAfterNoTrades = FALSE; extern bool CloseAllOnSymbolProfit = FALSE; extern bool InfoOnly = FALSE; double g_price_176; double gd_unused_184; double g_price_192; double g_price_200; double g_minlot_208; double g_lotstep_216; double g_istddev_224; double g_global_var_232; double g_global_var_240; double g_global_var_248; double g_global_var_256; double g_global_var_264; double g_ord_open_price_272; double g_ord_open_price_280; double gd_288; double gd_296; string g_var_name_304; string g_var_name_312; string g_var_name_320; double g_global_var_328; double g_global_var_336; double g_global_var_344; double g_lots_352; double g_lots_360; double gd_368; double gd_376; string g_var_name_384; string g_var_name_392; string g_var_name_400; string g_var_name_408; string g_var_name_416; int g_pos_424; int g_count_428; int g_count_432; int g_count_436; int g_count_440; int gi_444; int g_leverage_448; int gi_452; int gi_456; int gi_460; int g_error_464; bool gi_468; int gi_476; bool gi_480; bool gi_484; int init() { string ls_unused_4; g_price_176 = Bid; Risk /= 100.0; GlobalProfitMultiple = GlobalProfitMultiple / 100.0 + 1.0; SymbolProfitMultiple = SymbolProfitMultiple / 100.0 + 1.0; switch (SDevTimeframe) { case 1: ls_unused_4 = "Period_M1"; break; case 5: ls_unused_4 = "Period_M5"; break; case 15: ls_unused_4 = "Period_M15"; break; case 30: ls_unused_4 = "Period_M30"; break; case 60: ls_unused_4 = "Period_H1"; break; case 240: ls_unused_4 = "Period_H4"; break; case 1440: ls_unused_4 = "Period_D1"; break; case 10080: ls_unused_4 = "Period_W1"; break; case 43200: ls_unused_4 = "Period_MN1"; break; default: ls_unused_4 = "Current Timeframe"; } return (0); } int deinit() { return (0); } int start() { gi_460 = 0; g_error_464 = 0; g_var_name_416 = AccountNumber() + "_" + Symbol() + "_Anchor"; if (!GlobalVariableCheck(g_var_name_416)) GlobalVariableSet(g_var_name_416, (Ask + Bid) / 2.0); g_global_var_248 = GlobalVariableGet(g_var_name_416); g_var_name_400 = AccountNumber() + "_" + Symbol() + "_SymbolBalance"; if (!GlobalVariableCheck(g_var_name_400)) GlobalVariableSet(g_var_name_400, AccountEquity()); g_global_var_232 = GlobalVariableGet(g_var_name_400); g_var_name_408 = AccountNumber() + "_AllSymbolBalance"; if (!GlobalVariableCheck(g_var_name_408)) GlobalVariableSet(g_var_name_408, AccountEquity()); g_global_var_240 = GlobalVariableGet(g_var_name_408); g_var_name_304 = AccountNumber() + "_" + Symbol() + "_LargestMarginUsed"; if (!GlobalVariableCheck(g_var_name_304)) GlobalVariableSet(g_var_name_304, 0); g_var_name_312 = AccountNumber() + "_" + Symbol() + "LargestFloatingLoss"; if (!GlobalVariableCheck(g_var_name_312)) GlobalVariableSet(g_var_name_312, 0); g_var_name_320 = AccountNumber() + "_" + Symbol() + "LowestFreeMargin"; if (!GlobalVariableCheck(g_var_name_320)) GlobalVariableSet(g_var_name_320, 0); g_var_name_392 = AccountNumber() + "_" + Symbol() + "_Threshold"; if (!GlobalVariableCheck(g_var_name_392)) GlobalVariableSet(g_var_name_392, 20.0 * Point); g_global_var_264 = GlobalVariableGet(g_var_name_392); g_var_name_384 = AccountNumber() + "_" + Symbol() + "_PipsToProtect"; if (!GlobalVariableCheck(g_var_name_384)) GlobalVariableSet(g_var_name_384, 20.0 * Point); g_global_var_256 = GlobalVariableGet(g_var_name_384); g_istddev_224 = iStdDev(Symbol(), SDevTimeframe, SDevPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); if (g_istddev_224 / SDevDivisor > MinThreshold * Point) { GlobalVariableSet(g_var_name_392, g_istddev_224 / SDevDivisor); g_global_var_264 = GlobalVariableGet(g_var_name_392); GlobalVariableSet(g_var_name_384, g_istddev_224 / SDevDivisor); g_global_var_256 = GlobalVariableGet(g_var_name_384); } if (g_istddev_224 / SDevDivisor < MinThreshold * Point) { GlobalVariableSet(g_var_name_392, MinThreshold * Point); g_global_var_264 = GlobalVariableGet(g_var_name_392); } if (g_global_var_264 <= 0.0 || g_global_var_256 <= 0.0) { Comment("Need more ", SDevTimeframe, " data for ", Symbol(), ".", "\\Please download data from the server."); return (0); } g_count_428 = 0; g_lots_352 = 0; gd_368 = 0; g_count_432 = 0; g_lots_360 = 0; gd_376 = 0; gd_288 = 0; for (g_pos_424 = 0; g_pos_424 < OrdersTotal(); g_pos_424++) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) { g_count_428++; gd_288 += OrderProfit(); gd_368 += OrderProfit(); if (g_lots_352 < OrderLots()) g_lots_352 = OrderLots(); } if (OrderType() == OP_SELL) { g_count_432++; gd_288 += OrderProfit(); gd_376 += OrderProfit(); if (g_lots_360 < OrderLots()) g_lots_360 = OrderLots(); } } } g_count_436 = 0; g_count_440 = 0; for (g_pos_424 = 0; g_pos_424 < OrdersTotal(); g_pos_424++) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) g_count_436++; if (OrderType() == OP_SELL) g_count_440++; } } if (Bid > g_price_176) g_price_176 = Bid; if (Ask < g_price_176) g_price_176 = Ask; gd_unused_184 = MarketInfo(Symbol(), MODE_TICKVALUE); g_minlot_208 = MarketInfo(Symbol(), MODE_MINLOT); gi_444 = MarketInfo(Symbol(), MODE_MAXLOT); g_leverage_448 = AccountLeverage(); gi_452 = MarketInfo(Symbol(), MODE_LOTSIZE); g_lotstep_216 = MarketInfo(Symbol(), MODE_LOTSTEP); if (g_lotstep_216 == 0.01) gi_456 = 2; if (g_lotstep_216 == 0.1) gi_456 = 1; if (BrokerAllowsFractionalLots == TRUE) { if (MoneyManagment == TRUE) { Lots = AccountEquity() * Risk / (gi_452 / g_leverage_448); Lots = StrToDouble(DoubleToStr(Lots, gi_456)); if (Lots < g_minlot_208) Lots = g_minlot_208; if (Lots > gi_444) Lots = gi_444; } if (MoneyManagment == FALSE) { if (Lots < g_minlot_208) Lots = g_minlot_208; if (Lots > gi_444) Lots = gi_444; } } if (BrokerAllowsFractionalLots == FALSE) { if (MoneyManagment == TRUE) { Lots = AccountEquity() * Risk / (gi_452 / g_leverage_448); Lots = MathRound(Lots); if (Lots < g_minlot_208) Lots = g_minlot_208; if (Lots > gi_444) Lots = gi_444; } if (MoneyManagment == FALSE) { if (Lots < g_minlot_208) Lots = g_minlot_208; if (Lots > gi_444) Lots = gi_444; } } if (AccountMargin() > g_global_var_328) GlobalVariableSet(g_var_name_304, AccountMargin()); if (AccountProfit() < g_global_var_336) GlobalVariableSet(g_var_name_312, AccountProfit()); if (g_global_var_344 == 0.0) GlobalVariableSet(g_var_name_320, AccountFreeMargin()); if (AccountFreeMargin() < g_global_var_344) GlobalVariableSet(g_var_name_320, AccountFreeMargin()); g_global_var_328 = GlobalVariableGet(g_var_name_304); g_global_var_336 = GlobalVariableGet(g_var_name_312); g_global_var_344 = GlobalVariableGet(g_var_name_320); if (g_count_428 + g_count_432 == 0 && StopAfterNoTrades == FALSE) gi_468 = FALSE; if (gi_484 == TRUE && g_count_428 + g_count_432 == 0) { gi_484 = FALSE; GlobalVariableSet(g_var_name_408, AccountEquity()); g_global_var_240 = GlobalVariableGet(g_var_name_408); GlobalVariableSet(g_var_name_400, AccountEquity()); g_global_var_232 = GlobalVariableGet(g_var_name_400); if (StopAfterNoTrades == TRUE) gi_468 = TRUE; else gi_468 = FALSE; } if (gi_480 == TRUE && g_count_436 + g_count_440 == 0) { gi_480 = FALSE; GlobalVariableSet(g_var_name_408, AccountEquity()); g_global_var_240 = GlobalVariableGet(g_var_name_408); GlobalVariableSet(g_var_name_400, AccountEquity()); g_global_var_232 = GlobalVariableGet(g_var_name_400); if (StopAfterNoTrades == TRUE) gi_468 = TRUE; else gi_468 = FALSE; } g_ord_open_price_272 = 0.0; g_ord_open_price_280 = 1000.0; for (g_pos_424 = 0; g_pos_424 < OrdersTotal(); g_pos_424++) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY && OrderOpenPrice() > g_ord_open_price_272) g_ord_open_price_272 = OrderOpenPrice(); if (OrderType() == OP_SELL && OrderOpenPrice() > g_ord_open_price_272) g_ord_open_price_272 = OrderOpenPrice(); if (OrderType() == OP_BUY && OrderOpenPrice() < g_ord_open_price_280) g_ord_open_price_280 = OrderOpenPrice(); if (OrderType() == OP_SELL && OrderOpenPrice() < g_ord_open_price_280) g_ord_open_price_280 = OrderOpenPrice(); } } if (!InfoOnly) { if (IsTradeAllowed()) { if (AccountEquity() >= g_global_var_240 * GlobalProfitMultiple && CloseAllOnSymbolProfit == FALSE) gi_480 = TRUE; if (AccountEquity() >= g_global_var_232 * SymbolProfitMultiple && CloseAllOnSymbolProfit == TRUE) gi_484 = TRUE; if (gi_480 == TRUE) { for (g_pos_424 = OrdersTotal() - 1; g_pos_424 >= 0; g_pos_424--) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && OrderProfit() < 0.0) { Comment("In GLOBAL closure mode. Closing a losing BUY trade"); OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, White); } if (OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber && OrderProfit() < 0.0) { Comment("In GLOBAL closure mode. Closing a losing SELL trade"); OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, White); } } for (g_pos_424 = OrdersTotal() - 1; g_pos_424 >= 0; g_pos_424--) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && OrderProfit() >= 0.0) { Comment("In GLOBAL closure mode. Closing a winning BUY trade"); OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, White); } if (OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber && OrderProfit() >= 0.0) { Comment("In GLOBAL closure mode. Closing a winning SELL trade"); OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, White); } } Print("Global multiple reached. All orders closed"); return (0); } if (gi_484 == TRUE) { for (g_pos_424 = OrdersTotal() - 1; g_pos_424 >= 0; g_pos_424--) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && OrderProfit() < 0.0) { Comment("In SYMBOL closure mode. Closing a losing BUY trade"); OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Plum); } if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber && OrderProfit() < 0.0) { Comment("In SYMBOL closure mode. Closing a losing SELL trade"); OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Plum); } } for (g_pos_424 = OrdersTotal() - 1; g_pos_424 >= 0; g_pos_424--) { if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && OrderProfit() >= 0.0) { Comment("In SYMBOL closure mode. Closing a winning BUY trade"); OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Plum); } if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber && OrderProfit() >= 0.0) { Comment("In SYMBOL closure mode. Closing a winning SELL trade"); OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Plum); } } Print("Symbol multiple reached. All orders closed"); return (0); } for (g_pos_424 = 0; g_pos_424 < OrdersTotal(); g_pos_424++) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY && Bid - OrderOpenPrice() >= g_global_var_264) { gi_460 = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, LightBlue); if (gi_460 == -1) { g_error_464 = GetLastError(); Print("Error(", g_error_464, "): closing BUY order", ErrorDescription(g_error_464)); RefreshRates(); OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, LightBlue); } if (gi_460 > 0) Print("BUY order closed at: " + Bid + ", current price: " + Ask); } } } for (g_pos_424 = 0; g_pos_424 < OrdersTotal(); g_pos_424++) { OrderSelect(g_pos_424, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_SELL && OrderOpenPrice() - Ask >= g_global_var_264) { gi_460 = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, LightPink); if (gi_460 == -1) { g_error_464 = GetLastError(); Print("Error(", g_error_464, "): closing SELL order", ErrorDescription(g_error_464)); RefreshRates(); OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, LightPink); } if (gi_460 > 0) Print("SELL order closed at: " + Ask + ", current price: " + Bid); } } } if (gi_468 == FALSE && gi_476 == 0 && gi_480 == FALSE && gi_484 == FALSE) { if (g_price_176 >= g_global_var_248 + g_global_var_264 && g_count_428 + g_count_432 < MaxTrades) { g_price_192 = Bid + StopLoss * Point; g_price_200 = Bid - TakeProfit * Point; g_lots_360 *= PositionSizing; if (g_lots_360 <= g_minlot_208) g_lots_360 = Lots; if (g_lots_360 >= gi_444) g_lots_360 = gi_444; gi_460 = OrderSend(Symbol(), OP_SELL, g_lots_360, Bid, Slippage, g_price_192, g_price_200, "Omega", MagicNumber, 0, Red); if (gi_460 == -1) { g_error_464 = GetLastError(); Print("Error(", g_error_464, "): ", ErrorDescription(g_error_464)); if (g_error_464 == 129/* INVALID_PRICE */ || g_error_464 == 138/* REQUOTE */) RefreshRates(); if (g_error_464 == 130/* INVALID_STOPS */) { g_price_192 = 0; g_price_200 = 0; } Print("Retrying SELL entry"); gi_460 = OrderSend(Symbol(), OP_SELL, g_lots_360, Bid, Slippage, g_price_192, g_price_200, "Omega", MagicNumber, 0, Red); if (gi_460 == -1) { g_error_464 = GetLastError(); Print("Retrying SELL error(", g_error_464, "): ", ErrorDescription(g_error_464)); } } if (gi_460 > 0) { Print("SELL order placed at: " + Bid + ", ticket: " + gi_460 + ", current price: " + Ask); GlobalVariableSet(g_var_name_416, g_price_176); } return (0); } if (g_price_176 <= g_global_var_248 - g_global_var_264 && g_count_428 + g_count_432 < MaxTrades) { g_price_192 = Ask - StopLoss * Point; g_price_200 = Ask + TakeProfit * Point; g_lots_352 *= PositionSizing; if (g_lots_352 <= g_minlot_208) g_lots_352 = Lots; if (g_lots_352 >= gi_444) g_lots_352 = gi_444; gi_460 = OrderSend(Symbol(), OP_BUY, g_lots_352, Ask, Slippage, g_price_192, g_price_200, "Omega", MagicNumber, 0, Blue); if (gi_460 == -1) { g_error_464 = GetLastError(); Print("Error(", g_error_464, "): ", ErrorDescription(g_error_464)); if (g_error_464 == 129/* INVALID_PRICE */ || g_error_464 == 138/* REQUOTE */) RefreshRates(); if (g_error_464 == 130/* INVALID_STOPS */) { g_price_192 = 0; g_price_200 = 0; } Print("Retrying BUY entry."); gi_460 = OrderSend(Symbol(), OP_BUY, g_lots_352, Ask, Slippage, g_price_192, g_price_200, "Omega", MagicNumber, 0, Blue); if (gi_460 == -1) { g_error_464 = GetLastError(); Print("Retrying BUY error(", g_error_464, "): ", ErrorDescription(g_error_464)); } } if (gi_460 > 0) { Print("BUY order placed at: " + Ask + ", ticket: " + gi_460 + ", current price: " + Bid); GlobalVariableSet(g_var_name_416, g_price_176); } return (0); } } } } if (!IsTesting()) { if (g_count_428 <= 0 && g_count_432 <= 0) { Comment("Omega © Omega Trading, LLC", "\nACCOUNT INFORMATION", "\nAccount Name: ", AccountName(), "\nAccount Number: ", AccountNumber(), "\nLeverage: ", AccountLeverage(), ":1", "\nMimimum Lot Size: ", MarketInfo(Symbol(), MODE_MINLOT), "\nMaximum Lot Size: ", MarketInfo(Symbol(), MODE_MAXLOT), "\nLot Size: $ ", MarketInfo(Symbol(), MODE_LOTSIZE), "\nPip Value: $ ", MarketInfo(Symbol(), MODE_TICKVALUE), "\nLot Step: ", MarketInfo(Symbol(), MODE_LOTSTEP), "\nPRICE DATA", "\nAnchor Price: ", g_global_var_248, "\nLast Price: ", g_price_176, "\nThreshold: ", g_global_var_264, "\nInitial Lot Size: ", Lots, "\nTRADE DATA", "\nNo open trades for ", Symbol(), "\nOrder magic: ", MagicNumber, "\nMARGIN STATS", "\nLargest margin used: ", g_global_var_328, "\nLargest floating loss: ", g_global_var_336, "\nLowest free margin: ", g_global_var_344, "\nPROFIT/LOSS STATS", "\nBalance: ", AccountBalance(), "\nEquity: ", AccountEquity(), "\nAccount Profit: ", AccountProfit(), "\n", Symbol(), " Profit: ", gd_288); } if (CloseAllOnSymbolProfit == FALSE && g_count_428 + g_count_432 > 0) { gd_296 = g_global_var_240 * GlobalProfitMultiple - AccountEquity(); Comment("Omega © Omega Trading, LLC", "\nACCOUNT INFORMATION", "\nAccount Name: ", AccountName(), "\nAccount Number: ", AccountNumber(), "\nLeverage: ", AccountLeverage(), ":1", "\nMimimum Lot Size: ", MarketInfo(Symbol(), MODE_MINLOT), "\nMaximum Lot Size: ", MarketInfo(Symbol(), MODE_MAXLOT), "\nLot Size: $ ", MarketInfo(Symbol(), MODE_LOTSIZE), "\nPip Value: $ ", MarketInfo(Symbol(), MODE_TICKVALUE), "\nLot Step: ", MarketInfo(Symbol(), MODE_LOTSTEP), "\nPRICE DATA", "\nAnchor Price: ", g_global_var_248, "\nLast Price: ", g_price_176, "\nThreshold: ", g_global_var_264, "\nInitial Lot Size: ", Lots, "\nTRADE DATA", "\nTotal trades: ", g_count_428 + g_count_432, "\nBuy trades: ", g_count_428, "\nSell trades: ", g_count_432, "\nDistance Between Outliers: ", (g_ord_open_price_272 - g_ord_open_price_280) / Point, " pips", "\nOrder magic: ", MagicNumber, "\nMARGIN STATS", "\nLargest margin used: ", g_global_var_328, "\nLargest floating loss: ", g_global_var_336, "\nLowest free margin: ", g_global_var_344, "\nPROFIT/LOSS STATS", "\nBalance: ", AccountBalance(), "\nEquity: ", AccountEquity(), "\nAccount Profit: ", AccountProfit(), "\n", Symbol(), " Profit: ", gd_288, "\n$ ", NormalizeDouble(gd_296, 2), " until GLOBAL equity closure"); } if (CloseAllOnSymbolProfit == TRUE && g_count_428 + g_count_432 > 0) { gd_296 = g_global_var_232 * SymbolProfitMultiple - AccountEquity(); Comment("Omega © Omega Trading, LLC", "\nACCOUNT INFORMATION", "\nAccount Name: ", AccountName(), "\nAccount Number: ", AccountNumber(), "\nLeverage: ", AccountLeverage(), ":1", "\nMimimum Lot Size: ", MarketInfo(Symbol(), MODE_MINLOT), "\nMaximum Lot Size: ", MarketInfo(Symbol(), MODE_MAXLOT), "\nLot Size: $ ", MarketInfo(Symbol(), MODE_LOTSIZE), "\nPip Value: $ ", MarketInfo(Symbol(), MODE_TICKVALUE), "\nLot Step: ", MarketInfo(Symbol(), MODE_LOTSTEP), "\nPRICE DATA", "\nAnchor Price: ", g_global_var_248, "\nLast Price: ", g_price_176, "\nThreshold: ", g_global_var_264, "\nInitial Lot Size: ", Lots, "\nTRADE DATA", "\nTotal trades: ", g_count_428 + g_count_432, "\nBuy trades: ", g_count_428, "\nSell trades: ", g_count_432, "\nDistance Between Outliers: ", (g_ord_open_price_272 - g_ord_open_price_280) / Point, " pips", "\nOrder magic: ", MagicNumber, "\nMARGIN STATS", "\nLargest margin used: ", g_global_var_328, "\nLargest floating loss: ", g_global_var_336, "\nLowest free margin: ", g_global_var_344, "\nPROFIT/LOSS STATS", "\nBalance: ", AccountBalance(), "\nEquity: ", AccountEquity(), "\nAccount Profit: ", AccountProfit(), "\n", Symbol(), " Profit: ", gd_288, "\n$ ", NormalizeDouble(gd_296, 2), " until SYMBOL equity closure"); } } return (0); }