#property copyright "Copyright © 2009, Matt Tabone" #property link "http://www.MTaboneWebForex.com" string gs_76 = "AshFX AutoTrader v3.1.0"; string gs_ashfx_84 = "AshFX"; extern string TradingParameters = "------------------------------------------------------------"; extern double Order01LotSize = 0.2; extern int Order01TP = 0; extern int Order01TPPercentage = 100; extern int Order01SL = 0; extern int Order01SLPercentage = 100; extern string Order01Comment = ""; extern int MaxDiffFromOpen = 0; extern bool TakeSSTrades = TRUE; extern string StopLossParameters = "------------------------------------------------------------"; extern bool TPBeforePSARTrail = FALSE; extern bool TrailWithPSAR = TRUE; extern int Order01TrailStopAmount = 0; extern string BlackoutParameters = "------------------------------------------------------------"; extern int BlackoutStartHour01 = 0; extern int BlackoutEndHour01 = 0; extern int BlackoutStartHour02 = 0; extern int BlackoutEndHour02 = 0; extern int BlackoutStartHour03 = 0; extern int BlackoutEndHour03 = 0; extern int BlackoutStartHour04 = 0; extern int BlackoutEndHour04 = 0; extern bool BlackoutClosePending = TRUE; extern bool BlackoutCloseOpen = FALSE; extern string EmailParameters = "------------------------------------------------------------"; extern bool EmailNewOrdersPlaced = FALSE; extern bool EmailProfitLossSummary = FALSE; extern string MoneyManagementParameters = "------------------------------------------------------------"; extern bool UseMoneyManagement = FALSE; extern bool AccountIsMicro = FALSE; extern int RiskPercent = 3; extern string LoggingParameters = "------------------------------------------------------------"; extern bool TradeLogging = TRUE; extern string TradeLoggingUser = ""; extern int MaxSizeNewOrders = 10; extern int MaxSizeOrderHistory = 10; extern string MiscParameters = "------------------------------------------------------------"; extern bool DisplayProfitLoss = TRUE; extern string DisplayProfitLossSince = "2008.01.01"; extern string DisplayProfitLossSinceEnd = "1900.01.01"; extern bool PreventMultiTradesPerBar = TRUE; extern int OrderSlippage = 3; extern int EAMagicNumber = 20080706; int g_str2time_312; int gi_unused_316; int g_digits_320; int gi_324; int gi_unused_328; double g_lots_332; int gi_340; bool gi_344; bool gi_348; double gd_352; double g_price_360; double gd_368; double gd_376; double gd_384; double gd_392; double gd_400; double gd_408; double gd_416; double g_iac_424; double g_iac_432; double g_iac_440; double g_iao_448; double g_iao_456; double g_iao_464; double gd_472; double gd_480; int gi_488; int g_count_492; double gd_496; double gd_504; int gi_512; int g_count_516; bool gi_520; bool gi_524; string gs_528; string gs_536; string gs_544; int gi_552; bool gi_556; bool gi_560; string gs_dummy_564; string gs_dummy_572; string gs_dummy_580; string gs_dummy_588; string gs_dummy_596; string gs_dummy_604; string gs_dummy_612; string gs_dummy_620; string gs_dummy_628; string gs_dummy_636; bool gi_644; int g_count_648; bool gi_652; bool gi_656; string gs_660; string gs_668 = ""; string gs_676 = ""; string gs_684 = "|"; string gs_692 = ";"; int init() { g_str2time_312 = StrToTime("2009.07.05 00:00"); CheckSecurity(); return (0); } int deinit() { return (0); } void CheckSecurity() { gi_556 = FALSE; if (AccountNumber() == 18449 || AccountNumber() == 18463 || AccountNumber() == 59747 || AccountNumber() == 75837 || AccountNumber() == 10292951 || AccountNumber() == 64435 || AccountNumber() == 42993 || AccountNumber() == 74861 || AccountNumber() == 44781 || AccountNumber() == 6017029 || AccountNumber() == 8360006 || AccountNumber() == 5467899 || AccountNumber() == 123456789 || AccountNumber() == 508450 || AccountNumber() == 14644 || AccountNumber() == 63892 || AccountNumber() == 123456789 || AccountNumber() == 201495 || AccountNumber() == 106891 || AccountNumber() == 6041083 || AccountNumber() == 43422 || AccountNumber() == 15149 || AccountNumber() == 123456789 || AccountNumber() == 71340 || AccountNumber() == 68610 || AccountNumber() == 3178 || AccountNumber() == 15020 || AccountNumber() == 69141 || AccountNumber() == 69518 || AccountNumber() == 55759 || AccountNumber() == 54587 || AccountNumber() == 51162 || AccountNumber() == 14307 || AccountNumber() == 123456789 || AccountNumber() == 75173 || AccountNumber() == 51332 || AccountNumber() == 46554 || AccountNumber() == 47068 || AccountNumber() == 46608 || AccountNumber() == 105449 || AccountNumber() == 20761 || AccountNumber() == 59455 || AccountNumber() == 10175 || AccountNumber() == 123456789 || AccountNumber() == 37690 || AccountNumber() == 68258 || AccountNumber() == 10283 || AccountNumber() == 13713 || AccountNumber() == 36960 || AccountNumber() == 34139 || AccountNumber() == 123456789 || AccountNumber() == 36067 || AccountNumber() == 54136 || AccountNumber() == 49966 || AccountNumber() == 112136 || AccountNumber() == 67673) gi_556 = TRUE; if (gi_556 == FALSE && IsDemo() == TRUE) { gi_556 = TRUE; gi_unused_316 = 1; } } void GetPrecision() { g_digits_320 = Digits; if (g_digits_320 == 2) gi_324 = 100; if (g_digits_320 == 3) gi_324 = 1000; if (g_digits_320 == 4) gi_324 = 10000; if (g_digits_320 == 5) gi_324 = 100000; } void GetSpread() { gi_unused_328 = MarketInfo(Symbol(), MODE_SPREAD); } void GetProfitLoss() { gd_472 = 0; gd_480 = 0; gi_488 = 0; g_count_492 = 0; gd_496 = 0; gd_504 = 0; gi_512 = 0; g_count_516 = 0; for (int l_pos_0 = 0; l_pos_0 < OrdersHistoryTotal(); l_pos_0++) { OrderSelect(l_pos_0, SELECT_BY_POS, MODE_HISTORY); if (OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber && OrderType() == OP_BUY || OrderType() == OP_SELL) { if (DisplayProfitLossSince == "" || OrderCloseTime() >= StrToTime(DisplayProfitLossSince)) { if (DisplayProfitLossSinceEnd == "" || DisplayProfitLossSinceEnd == "1900.01.01" || OrderCloseTime() <= StrToTime(DisplayProfitLossSinceEnd + " 23:59")) { gd_472 += NormalizeDouble(OrderProfit(), 2); gd_480 += NormalizeDouble(OrderSwap(), 2); if (OrderType() == OP_BUY) gi_488 = gi_488 + MathRound((OrderClosePrice() - OrderOpenPrice()) * gi_324); else if (OrderType() == OP_SELL) gi_488 = gi_488 + MathRound((OrderOpenPrice() - OrderClosePrice()) * gi_324); g_count_492++; } } } } for (l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) { OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber && OrderType() == OP_BUY || OrderType() == OP_SELL) { gd_496 += NormalizeDouble(OrderProfit(), 2); gd_504 += NormalizeDouble(OrderSwap(), 2); if (OrderType() == OP_BUY) gi_512 = gi_512 + MathRound((OrderClosePrice() - OrderOpenPrice()) * gi_324); else if (OrderType() == OP_SELL) gi_512 = gi_512 + MathRound((OrderOpenPrice() - OrderClosePrice()) * gi_324); g_count_516++; } } if (g_digits_320 == 3 || g_digits_320 == 5) { gi_488 /= 10; gi_512 /= 10; } } void SendEmailProfitLoss() { string ls_0 = "\r\n"; gs_536 = ""; gs_544 = ""; GetProfitLoss(); gs_536 = gs_ashfx_84 + " (Profit/Loss Summary: " + Symbol() + ")"; gs_544 = "Summary for " + Symbol() + ls_0; gs_544 = gs_544 + ls_0; gs_544 = gs_544 + "Profit/Loss History (P/L: " + DoubleToStr(gd_472, 2) + " / Swap: " + DoubleToStr(gd_480, 2) + " / Total: " + DoubleToStr(gd_472 + gd_480, 2) + ")" + ls_0; gs_544 = gs_544 + "Profit/Loss History (Pips: " + gi_488 + " / Total Orders: " + g_count_492 + ")" + ls_0; gs_544 = gs_544 + ls_0; gs_544 = gs_544 + "Account balance: " + DoubleToStr(AccountBalance(), 2) + ls_0; gs_544 = gs_544 + "Account floating profit: " + DoubleToStr(AccountProfit(), 2) + ls_0; gs_544 = gs_544 + "Account margin used: " + DoubleToStr(AccountMargin(), 2) + ls_0; gs_544 = gs_544 + "Account free margin: " + DoubleToStr(AccountFreeMargin(), 2) + ls_0; SendMail(gs_536, gs_544); } void SendEmailNewOrder(int a_ticket_0) { string ls_4 = "\r\n"; gs_536 = ""; gs_544 = ""; gs_528 = ""; gi_520 = FALSE; gi_524 = FALSE; OrderSelect(a_ticket_0, SELECT_BY_TICKET, MODE_TRADES); if (OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP) { gs_528 = "Long"; gi_520 = MathRound((OrderOpenPrice() - OrderStopLoss()) * gi_324); gi_524 = MathRound((OrderTakeProfit() - OrderOpenPrice()) * gi_324); } else { if (OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) { gs_528 = "Short"; gi_520 = MathRound((OrderStopLoss() - OrderOpenPrice()) * gi_324); gi_524 = MathRound((OrderOpenPrice() - OrderTakeProfit()) * gi_324); } } if (gs_528 != "") { gs_536 = gs_ashfx_84 + " (" + Symbol() + ") - New order placed"; gs_544 = "A new " + gs_528 + " order was placed for the " + Symbol() + " at " + TimeToStr(TimeCurrent()) + " time." + ls_4; gs_544 = gs_544 + "Lots: " + OrderLots() + ls_4; gs_544 = gs_544 + "Open price: " + DoubleToStr(OrderOpenPrice(), g_digits_320) + ls_4; gs_544 = gs_544 + "Stop loss: " + DoubleToStr(OrderStopLoss(), g_digits_320) + "(" + gi_520 + " pips)" + ls_4; gs_544 = gs_544 + "Take profit: " + DoubleToStr(OrderTakeProfit(), g_digits_320) + "(" + gi_524 + " pips)" + ls_4; } SendMail(gs_536, gs_544); } void Blackout() { gi_560 = FALSE; if (Period() < PERIOD_D1 && BlackoutStartHour01 != 0 || BlackoutEndHour01 != 0) { if (BlackoutStartHour01 < BlackoutEndHour01) { if (TimeHour(TimeCurrent()) >= BlackoutStartHour01 && TimeHour(TimeCurrent()) <= BlackoutEndHour01) gi_560 = TRUE; } else if (TimeHour(TimeCurrent()) >= BlackoutStartHour01 || TimeHour(TimeCurrent()) <= BlackoutEndHour01) gi_560 = TRUE; } if (Period() < PERIOD_D1 && BlackoutStartHour02 != 0 || BlackoutEndHour02 != 0) { if (BlackoutStartHour02 < BlackoutEndHour02) { if (TimeHour(TimeCurrent()) >= BlackoutStartHour02 && TimeHour(TimeCurrent()) <= BlackoutEndHour02) gi_560 = TRUE; } else if (TimeHour(TimeCurrent()) >= BlackoutStartHour02 || TimeHour(TimeCurrent()) <= BlackoutEndHour02) gi_560 = TRUE; } if (Period() < PERIOD_D1 && BlackoutStartHour03 != 0 || BlackoutEndHour03 != 0) { if (BlackoutStartHour03 < BlackoutEndHour03) { if (TimeHour(TimeCurrent()) >= BlackoutStartHour03 && TimeHour(TimeCurrent()) <= BlackoutEndHour03) gi_560 = TRUE; } else if (TimeHour(TimeCurrent()) >= BlackoutStartHour03 || TimeHour(TimeCurrent()) <= BlackoutEndHour03) gi_560 = TRUE; } if (Period() < PERIOD_D1 && BlackoutStartHour04 != 0 || BlackoutEndHour04 != 0) { if (BlackoutStartHour04 < BlackoutEndHour04) { if (TimeHour(TimeCurrent()) >= BlackoutStartHour04 && TimeHour(TimeCurrent()) <= BlackoutEndHour04) gi_560 = TRUE; } else if (TimeHour(TimeCurrent()) >= BlackoutStartHour04 || TimeHour(TimeCurrent()) <= BlackoutEndHour04) gi_560 = TRUE; } if (gi_560 == TRUE && BlackoutCloseOpen == TRUE || BlackoutClosePending == TRUE) BlackoutCloseOrders(); } void BlackoutCloseOrders() { for (int l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) { OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber) { if (OrderType() == OP_BUY) { if (BlackoutCloseOpen == TRUE) OrderClose(OrderTicket(), OrderLots(), Bid, OrderSlippage, Blue); } else { if (OrderType() == OP_BUYSTOP) { if (BlackoutClosePending == TRUE) OrderDelete(OrderTicket()); } else { if (OrderType() == OP_SELL) { if (BlackoutCloseOpen == TRUE) OrderClose(OrderTicket(), OrderLots(), Ask, OrderSlippage, Red); } else { if (OrderType() == OP_SELLSTOP) if (BlackoutClosePending == TRUE) OrderDelete(OrderTicket()); } } } } } } double LotsCalc(int ai_0) { int li_4; double ld_24; double ld_32; double ld_40; double ld_ret_8 = 0; double l_tickvalue_16 = 0.0; if (ai_0 > 0) { l_tickvalue_16 = MarketInfo(Symbol(), MODE_TICKVALUE); if (MarketInfo(Symbol(), MODE_MINLOT) == 0.1) li_4 = 1; else if (MarketInfo(Symbol(), MODE_MINLOT) == 0.01) li_4 = 2; ld_24 = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), li_4); ld_32 = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), li_4); ld_40 = NormalizeDouble(AccountFreeMargin(), 2); if (RiskPercent == 0) RiskPercent = 1; if (RiskPercent > 5) RiskPercent = 5; if (g_digits_320 == 3 || g_digits_320 == 5) ai_0 /= 10; ld_ret_8 = NormalizeDouble(ld_40 * StrToDouble("0.0" + RiskPercent) / ai_0 / l_tickvalue_16, li_4); if (g_digits_320 == 3 || g_digits_320 == 5) ld_ret_8 /= 10.0; if (AccountIsMicro == TRUE) ld_ret_8 /= 10.0; } else ld_ret_8 = 0; return (ld_ret_8); } void CheckForRecentTrades() { int li_4 = TimeCurrent() - 60 * Period(); gi_652 = FALSE; gi_656 = FALSE; gs_660 = ""; if (PreventMultiTradesPerBar == TRUE) { for (int l_pos_0 = 0; l_pos_0 < OrdersHistoryTotal(); l_pos_0++) { OrderSelect(l_pos_0, SELECT_BY_POS, MODE_HISTORY); if (OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber) { if (OrderType() == OP_BUY) { if (OrderOpenTime() > li_4) { gi_652 = TRUE; gs_660 = gs_660 + "#" + OrderTicket(); } } else { if (OrderType() == OP_SELL) { if (OrderOpenTime() > li_4) { gi_656 = TRUE; gs_660 = gs_660 + "#" + OrderTicket(); } } } } } } } void LogTradesStart(int a_ticket_0, int ai_unused_4) { gs_668 = "StartHere" + gs_684; gs_668 = gs_668 + "intTicket" + gs_692 + a_ticket_0 + gs_684; gs_668 = gs_668 + "dblAccountBalance" + gs_692 + AccountBalance() + gs_684; gs_668 = gs_668 + "strAccountCompany" + gs_692 + AccountCompany() + gs_684; gs_668 = gs_668 + "dblAccountCredit" + gs_692 + AccountCredit() + gs_684; gs_668 = gs_668 + "strAccountCurrency" + gs_692 + AccountCurrency() + gs_684; gs_668 = gs_668 + "dblAccountEquity" + gs_692 + AccountEquity() + gs_684; gs_668 = gs_668 + "dblAccountFreeMargin" + gs_692 + AccountFreeMargin() + gs_684; if (AccountFreeMarginMode() == 1) gs_668 = gs_668 + "blnAccountFreeMarginMode" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnAccountFreeMarginMode" + gs_692 + "False" + gs_684; gs_668 = gs_668 + "intAccountLeverage" + gs_692 + AccountLeverage() + gs_684; gs_668 = gs_668 + "dblAccountMargin" + gs_692 + AccountMargin() + gs_684; gs_668 = gs_668 + "strAccountName" + gs_692 + AccountName() + gs_684; gs_668 = gs_668 + "intAccountNumber" + gs_692 + AccountNumber() + gs_684; gs_668 = gs_668 + "dblAccountProfit" + gs_692 + AccountProfit() + gs_684; gs_668 = gs_668 + "strAccountServer" + gs_692 + AccountServer() + gs_684; gs_668 = gs_668 + "intAccountStopoutLevel" + gs_692 + AccountStopoutLevel() + gs_684; gs_668 = gs_668 + "intAccountStopoutMode" + gs_692 + AccountStopoutMode() + gs_684; gs_668 = gs_668 + "intDigits" + gs_692 + Digits + gs_684; if (IsDemo() == TRUE) gs_668 = gs_668 + "blnIsDemo" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnIsDemo" + gs_692 + "False" + gs_684; if (IsTesting() == TRUE) gs_668 = gs_668 + "blnIsTesting" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnIsTesting" + gs_692 + "False" + gs_684; gs_668 = gs_668 + "intPeriod" + gs_692 + Period() + gs_684; gs_668 = gs_668 + "strWindowExpertName" + gs_692 + WindowExpertName() + gs_684; gs_668 = gs_668 + "strSymbol" + gs_692 + Symbol() + gs_684; gs_668 = gs_668 + "strVersion" + gs_692 + gs_76 + gs_684; gs_668 = gs_668 + "strSystem" + gs_692 + gs_ashfx_84 + gs_684; gs_668 = gs_668 + "intOrderNumber" + gs_692 + "1" + gs_684; OrderSelect(a_ticket_0, SELECT_BY_TICKET, MODE_TRADES); gs_668 = gs_668 + "dblOrderClosePrice" + gs_692 + OrderClosePrice() + gs_684; gs_668 = gs_668 + "datOrderCloseTime" + gs_692 + TimeToStr(OrderCloseTime()) + gs_684; gs_668 = gs_668 + "strOrderComment" + gs_692 + OrderComment() + gs_684; gs_668 = gs_668 + "dblOrderCommission" + gs_692 + OrderCommission() + gs_684; gs_668 = gs_668 + "datOrderExpiration" + gs_692 + TimeToStr(OrderExpiration()) + gs_684; gs_668 = gs_668 + "dblOrderLots" + gs_692 + OrderLots() + gs_684; gs_668 = gs_668 + "intOrderMagicNumber" + gs_692 + OrderMagicNumber() + gs_684; gs_668 = gs_668 + "dblOrderOpenPrice" + gs_692 + OrderOpenPrice() + gs_684; gs_668 = gs_668 + "datOrderOpenTime" + gs_692 + TimeToStr(OrderOpenTime()) + gs_684; gs_668 = gs_668 + "dblOrderStopLoss" + gs_692 + OrderStopLoss() + gs_684; gs_668 = gs_668 + "dblOrderSwap" + gs_692 + OrderSwap() + gs_684; gs_668 = gs_668 + "strOrderSymbol" + gs_692 + OrderSymbol() + gs_684; gs_668 = gs_668 + "dblOrderTakeProfit" + gs_692 + OrderTakeProfit() + gs_684; gs_668 = gs_668 + "intOrderTicket" + gs_692 + OrderTicket() + gs_684; gs_668 = gs_668 + "intOrderType" + gs_692 + OrderType() + gs_684; } void LogTradesHistory() { int li_16; if (MaxSizeOrderHistory > 20) MaxSizeOrderHistory = 20; if (MaxSizeOrderHistory < 5) MaxSizeOrderHistory = 5; int li_20 = (1024 * MaxSizeOrderHistory) << 10; if (g_count_648 < 61) { g_count_648++; return; } g_count_648 = 0; string l_name_4 = "MTaboneWebForexLogHistory" + Symbol() + EAMagicNumber + ".txt"; int l_file_12 = FileOpen(l_name_4, FILE_CSV|FILE_WRITE|FILE_READ, ';'); if (l_file_12 > 0) { li_16 = FileSize(l_file_12); if (li_16 < li_20) { FileSeek(l_file_12, 0, SEEK_END); for (int l_pos_0 = 0; l_pos_0 < OrdersHistoryTotal(); l_pos_0++) { Comment(l_pos_0); OrderSelect(l_pos_0, SELECT_BY_POS, MODE_HISTORY); if (OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber) { gs_676 = "StartHere" + gs_684; gs_676 = gs_676 + "dblHistoryOrderClosePrice" + gs_692 + OrderClosePrice() + gs_684; gs_676 = gs_676 + "datHistoryOrderCloseTime" + gs_692 + TimeToStr(OrderCloseTime()) + gs_684; gs_676 = gs_676 + "strHistoryOrderComment" + gs_692 + OrderComment() + gs_684; gs_676 = gs_676 + "dblHistoryOrderCommission" + gs_692 + OrderCommission() + gs_684; gs_676 = gs_676 + "dblHistoryOrderLots" + gs_692 + OrderLots() + gs_684; gs_676 = gs_676 + "dblHistoryOrderProfit" + gs_692 + OrderProfit() + gs_684; gs_676 = gs_676 + "dblHistoryOrderStopLoss" + gs_692 + OrderStopLoss() + gs_684; gs_676 = gs_676 + "dblHistoryOrderSwap" + gs_692 + OrderSwap() + gs_684; gs_676 = gs_676 + "dblHistoryOrderTakeProfit" + gs_692 + OrderTakeProfit() + gs_684; gs_676 = gs_676 + "intHistoryOrderTicket" + gs_692 + OrderTicket() + gs_684; gs_676 = gs_676 + "intHistoryAccountNumber" + gs_692 + AccountNumber() + gs_684; gs_676 = gs_676 + "intOrderType" + gs_692 + OrderType() + gs_684; FileWrite(l_file_12, gs_676); } } } FileClose(l_file_12); } } void AdjustPips() { if (MaxDiffFromOpen > 0) MaxDiffFromOpen = 10 * MaxDiffFromOpen; if (Order01TP > 0) Order01TP = 10 * Order01TP; if (Order01SL > 0) Order01SL = 10 * Order01SL; if (Order01TrailStopAmount > 0) Order01TrailStopAmount = 10 * Order01TrailStopAmount; gi_644 = TRUE; } int start() { if (gi_556 == TRUE) { GetPrecision(); if (g_digits_320 == 3 || g_digits_320 == 5 && gi_644 == FALSE) AdjustPips(); GetSpread(); if (DisplayProfitLoss == TRUE) GetProfitLoss(); GetIndicatorValues(); Blackout(); UpdateOrders(); CheckForRecentTrades(); if (gi_560 == FALSE) PlaceOrders(); if (TradeLogging == TRUE) LogTradesHistory(); PrintComments(); } else Comment("This version has timed out."); return (0); } void GetIndicatorValues() { gd_352 = NormalizeDouble(iSAR(NULL, 0, 0.03, 0.2, 0), g_digits_320); g_price_360 = NormalizeDouble(iSAR(NULL, 0, 0.03, 0.2, 1), g_digits_320); gd_368 = NormalizeDouble(iSAR(NULL, 0, 0.03, 0.2, 2), g_digits_320); g_iac_424 = iAC(NULL, 0, 0); g_iac_432 = iAC(NULL, 0, 1); g_iac_440 = iAC(NULL, 0, 2); gd_376 = NormalizeDouble(iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0), 4); gd_384 = NormalizeDouble(iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1), 4); gd_392 = NormalizeDouble(iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 2), 4); gd_400 = NormalizeDouble(iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 0), 4); gd_408 = NormalizeDouble(iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1), 4); gd_416 = NormalizeDouble(iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 2), 4); g_iao_448 = iAO(NULL, 0, 0); g_iao_456 = iAO(NULL, 0, 1); g_iao_464 = iAO(NULL, 0, 2); } void PlaceOrders() { int l_ticket_0; int li_4; double l_price_8; if (gd_352 < Open[0]) { gi_348 = FALSE; if (gd_368 > Close[2] && gd_368 > Open[2]) { if (g_price_360 < Close[1] && g_price_360 < Open[1]) { if (Close[1] > Open[1]) { if (g_iac_432 > g_iac_440) { if (g_iao_456 > g_iao_464) { if (gd_384 > gd_408 && gd_384 < 50.0) li_4 = (Close[1] - Low[1]) * gi_324; else { if (TakeSSTrades == TRUE) { if (gd_384 > gd_408 && gd_384 < 80.0) { li_4 = (Close[1] - Low[1]) * gi_324; l_price_8 = g_price_360; } } } } } } } } } if (Ask <= Close[1] + MaxDiffFromOpen * Point && li_4 > 0) { if (gi_652 == FALSE && gi_344 == FALSE) { if (Order01TP == 0) li_4 = li_4 * (Order01TPPercentage / 100.0); if (Order01SL > 0) { gi_340 = Order01SL; if (UseMoneyManagement == TRUE) g_lots_332 = LotsCalc(gi_340); else g_lots_332 = Order01LotSize; if (Order01TP > 0) l_ticket_0 = OrderSend(Symbol(), OP_BUY, g_lots_332, Ask, OrderSlippage, Ask - Order01SL * Point, Ask + Order01TP * Point, Order01Comment, EAMagicNumber, 0, Blue); else l_ticket_0 = OrderSend(Symbol(), OP_BUY, g_lots_332, Ask, OrderSlippage, Ask - Order01SL * Point, 0, DoubleToStr(Ask + li_4 * Point, g_digits_320), EAMagicNumber, 0, Blue); } else { if (l_price_8 == 0.0) { gi_340 = (Ask - Low[1]) * gi_324 * (Order01SLPercentage / 100.0); if (UseMoneyManagement == TRUE) g_lots_332 = LotsCalc(gi_340); else g_lots_332 = Order01LotSize; if (Order01TP > 0) l_ticket_0 = OrderSend(Symbol(), OP_BUY, g_lots_332, Ask, OrderSlippage, Ask - gi_340 * Point, Ask + Order01TP * Point, Order01Comment, EAMagicNumber, 0, Blue); else l_ticket_0 = OrderSend(Symbol(), OP_BUY, g_lots_332, Ask, OrderSlippage, Ask - gi_340 * Point, 0, DoubleToStr(Ask + li_4 * Point, g_digits_320), EAMagicNumber, 0, Blue); } else { gi_340 = (Ask - l_price_8) * gi_324 * (Order01SLPercentage / 100.0); if (UseMoneyManagement == TRUE) g_lots_332 = LotsCalc(gi_340); else g_lots_332 = Order01LotSize; if (Order01TP > 0) l_ticket_0 = OrderSend(Symbol(), OP_BUY, g_lots_332, Ask, OrderSlippage, Ask - gi_340 * Point, Ask + Order01TP * Point, Order01Comment, EAMagicNumber, 0, Blue); else l_ticket_0 = OrderSend(Symbol(), OP_BUY, g_lots_332, Ask, OrderSlippage, Ask - gi_340 * Point, 0, DoubleToStr(Ask + li_4 * Point, g_digits_320), EAMagicNumber, 0, Blue); } } if (l_ticket_0 > 0) { gi_344 = TRUE; if (EmailNewOrdersPlaced == TRUE) SendEmailNewOrder(l_ticket_0); if (TradeLogging == TRUE) LogTrades(l_ticket_0, 1); } } } li_4 = 0; l_price_8 = 0; if (gd_352 > Open[0]) { gi_344 = FALSE; if (gd_368 < Close[2] && gd_368 < Open[2]) { if (g_price_360 > Close[1] && g_price_360 > Open[1]) { if (Close[1] < Open[1]) { if (g_iac_432 < g_iac_440) { if (g_iao_456 < g_iao_464) { if (gd_384 < gd_408 && gd_384 > 50.0) li_4 = (High[1] - Close[1]) * gi_324; else { if (TakeSSTrades == TRUE) { if (gd_384 < gd_408 && gd_384 > 20.0) { li_4 = (High[1] - Close[1]) * gi_324; l_price_8 = g_price_360; } } } } } } } } } if (Bid >= Close[1] - MaxDiffFromOpen * Point && li_4 > 0) { if (gi_656 == FALSE && gi_348 == FALSE) { if (Order01TP == 0) li_4 = li_4 * (Order01TPPercentage / 100.0); if (Order01SL > 0) { gi_340 = Order01SL; if (UseMoneyManagement == TRUE) g_lots_332 = LotsCalc(gi_340); else g_lots_332 = Order01LotSize; if (Order01TP > 0) l_ticket_0 = OrderSend(Symbol(), OP_SELL, g_lots_332, Bid, OrderSlippage, Bid + Order01SL * Point, Bid - Order01TP * Point, Order01Comment, EAMagicNumber, 0, Red); else l_ticket_0 = OrderSend(Symbol(), OP_SELL, g_lots_332, Bid, OrderSlippage, Bid + Order01SL * Point, 0, DoubleToStr(Bid - li_4 * Point, g_digits_320), EAMagicNumber, 0, Red); } else { if (l_price_8 == 0.0) { gi_340 = (High[1] - Bid) * gi_324 * (Order01SLPercentage / 100.0); if (UseMoneyManagement == TRUE) g_lots_332 = LotsCalc(gi_340); else g_lots_332 = Order01LotSize; if (Order01TP > 0) l_ticket_0 = OrderSend(Symbol(), OP_SELL, g_lots_332, Bid, OrderSlippage, Bid + gi_340 * Point, Bid - Order01TP * Point, Order01Comment, EAMagicNumber, 0, Red); else l_ticket_0 = OrderSend(Symbol(), OP_SELL, g_lots_332, Bid, OrderSlippage, Bid + gi_340 * Point, 0, DoubleToStr(Bid - li_4 * Point, g_digits_320), EAMagicNumber, 0, Red); } else { gi_340 = (l_price_8 - Bid) * gi_324 * (Order01SLPercentage / 100.0); if (UseMoneyManagement == TRUE) g_lots_332 = LotsCalc(gi_340); else g_lots_332 = Order01LotSize; if (Order01TP > 0) l_ticket_0 = OrderSend(Symbol(), OP_SELL, g_lots_332, Bid, OrderSlippage, Bid + gi_340 * Point, Bid - Order01TP * Point, Order01Comment, EAMagicNumber, 0, Red); else l_ticket_0 = OrderSend(Symbol(), OP_SELL, g_lots_332, Bid, OrderSlippage, Bid + gi_340 * Point, 0, DoubleToStr(Bid - li_4 * Point, g_digits_320), EAMagicNumber, 0, Red); } } if (l_ticket_0 > 0) { gi_348 = TRUE; if (EmailNewOrdersPlaced == TRUE) SendEmailNewOrder(l_ticket_0); if (TradeLogging == TRUE) LogTrades(l_ticket_0, 1); } } } } void UpdateOrders() { int li_4; double ld_8; string ls_16; for (int l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) { OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber) { ld_8 = NormalizeDouble(StrToDouble(OrderComment()), g_digits_320); ls_16 = CharToStr(StringGetChar(OrderComment(), 0)); ls_16 = ls_16 + CharToStr(StringGetChar(OrderComment(), 1)); if (OrderType() == OP_BUY) { li_4++; gi_344 = TRUE; if (ls_16 != "fr") { if (OrderTakeProfit() == 0.0) { if (Bid >= ld_8 && OrderStopLoss() < OrderOpenPrice()) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Blue); if (Bid >= ld_8 && OrderStopLoss() >= OrderOpenPrice()) { if (OrderLots() == 0.01) OrderClose(OrderTicket(), OrderLots(), Bid, OrderSlippage, Blue); else OrderClose(OrderTicket(), OrderLots() / 2.0, Bid, OrderSlippage, Blue); } } } else { if (OrderStopLoss() == 0.0 || OrderStopLoss() < OrderOpenPrice()) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Blue); if (g_iao_448 < g_iao_456) OrderClose(OrderTicket(), OrderLots(), Bid, OrderSlippage, Blue); else { if (Order01TrailStopAmount > 0) if (Bid - Point * Order01TrailStopAmount > OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * Order01TrailStopAmount, OrderTakeProfit(), OrderExpiration(), Blue); } } if ((TPBeforePSARTrail == FALSE && ls_16 != "fr") || ls_16 == "fr") if (TrailWithPSAR == TRUE && g_price_360 > OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), g_price_360, OrderTakeProfit(), OrderExpiration(), Blue); } if (OrderType() == OP_SELL) { li_4++; gi_348 = TRUE; if (ls_16 != "fr") { if (OrderTakeProfit() == 0.0) { if (Ask <= ld_8 && OrderStopLoss() > OrderOpenPrice()) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Red); if (Ask <= ld_8 && OrderStopLoss() <= OrderOpenPrice()) { if (OrderLots() == 0.01) OrderClose(OrderTicket(), OrderLots(), Ask, OrderSlippage, Red); else OrderClose(OrderTicket(), OrderLots() / 2.0, Ask, OrderSlippage, Red); } } } else { if (OrderStopLoss() == 0.0 || OrderStopLoss() > OrderOpenPrice()) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Red); if (g_iao_448 > g_iao_456) OrderClose(OrderTicket(), OrderLots(), Ask, OrderSlippage, Red); else { if (Order01TrailStopAmount > 0) if (Ask + Point * Order01TrailStopAmount < OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * Order01TrailStopAmount, OrderTakeProfit(), OrderExpiration(), Red); } } if ((TPBeforePSARTrail == FALSE && ls_16 != "fr") || ls_16 == "fr") if (TrailWithPSAR == TRUE && g_price_360 < OrderStopLoss()) OrderModify(OrderTicket(), OrderOpenPrice(), g_price_360, OrderTakeProfit(), OrderExpiration(), Red); } } } if (li_4 != gi_552) { gi_552 = li_4; if (EmailProfitLossSummary == TRUE) SendEmailProfitLoss(); } } void LogTrades(int ai_0, int ai_unused_4) { int li_20; if (MaxSizeNewOrders > 20) MaxSizeNewOrders = 20; if (MaxSizeNewOrders < 5) MaxSizeNewOrders = 5; int li_24 = (1024 * MaxSizeNewOrders) << 10; LogTradesStart(ai_0, 1); gs_668 = gs_668 + "dblOrder01LotSize" + gs_692 + Order01LotSize + gs_684; gs_668 = gs_668 + "intOrder01TP" + gs_692 + Order01TP + gs_684; gs_668 = gs_668 + "intOrder01TPPercentage" + gs_692 + Order01TPPercentage + gs_684; gs_668 = gs_668 + "intOrder01SL" + gs_692 + Order01SL + gs_684; gs_668 = gs_668 + "intOrder01SLPercentage" + gs_692 + Order01SLPercentage + gs_684; gs_668 = gs_668 + "strOrder01Comment" + gs_692 + Order01Comment + gs_684; gs_668 = gs_668 + "intMaxDiffFromOpen" + gs_692 + MaxDiffFromOpen + gs_684; if (TakeSSTrades == TRUE) gs_668 = gs_668 + "blnTakeSSTrades" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnTakeSSTrades" + gs_692 + "False" + gs_684; if (TPBeforePSARTrail == TRUE) gs_668 = gs_668 + "blnTPBeforePSARTrail" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnTPBeforePSARTrail" + gs_692 + "False" + gs_684; if (TrailWithPSAR == TRUE) gs_668 = gs_668 + "blnTrailWithPSAR" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnTrailWithPSAR" + gs_692 + "False" + gs_684; gs_668 = gs_668 + "intOrder01TrailStopAmount" + gs_692 + Order01TrailStopAmount + gs_684; gs_668 = gs_668 + "intBlackoutStartHour01" + gs_692 + BlackoutStartHour01 + gs_684; gs_668 = gs_668 + "intBlackoutEndHour01" + gs_692 + BlackoutEndHour01 + gs_684; gs_668 = gs_668 + "intBlackoutStartHour02" + gs_692 + BlackoutStartHour02 + gs_684; gs_668 = gs_668 + "intBlackoutEndHour02" + gs_692 + BlackoutEndHour02 + gs_684; gs_668 = gs_668 + "intBlackoutStartHour03" + gs_692 + BlackoutStartHour03 + gs_684; gs_668 = gs_668 + "intBlackoutEndHour03" + gs_692 + BlackoutEndHour03 + gs_684; gs_668 = gs_668 + "intBlackoutStartHour04" + gs_692 + BlackoutStartHour04 + gs_684; gs_668 = gs_668 + "intBlackoutEndHour04" + gs_692 + BlackoutEndHour04 + gs_684; if (BlackoutClosePending == TRUE) gs_668 = gs_668 + "blnBlackoutClosePending" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnBlackoutClosePending" + gs_692 + "False" + gs_684; if (BlackoutCloseOpen == TRUE) gs_668 = gs_668 + "blnBlackoutCloseOpen" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnBlackoutCloseOpen" + gs_692 + "False" + gs_684; if (EmailNewOrdersPlaced == TRUE) gs_668 = gs_668 + "blnEmailNewOrdersPlaced" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnEmailNewOrdersPlaced" + gs_692 + "False" + gs_684; if (EmailProfitLossSummary == TRUE) gs_668 = gs_668 + "blnEmailProfitLossSummary" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnEmailProfitLossSummary" + gs_692 + "False" + gs_684; if (UseMoneyManagement == TRUE) gs_668 = gs_668 + "blnUseMoneyManagement" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnUseMoneyManagement" + gs_692 + "False" + gs_684; if (AccountIsMicro == TRUE) gs_668 = gs_668 + "blnAccountIsMicro" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnAccountIsMicro" + gs_692 + "False" + gs_684; gs_668 = gs_668 + "intRiskPercent" + gs_692 + RiskPercent + gs_684; if (TradeLogging == TRUE) gs_668 = gs_668 + "blnTradeLogging" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnTradeLogging" + gs_692 + "False" + gs_684; gs_668 = gs_668 + "strTradeLoggingUser" + gs_692 + TradeLoggingUser + gs_684; gs_668 = gs_668 + "intMaxSizeNewOrders" + gs_692 + MaxSizeNewOrders + gs_684; gs_668 = gs_668 + "intMaxSizeOrderHistory" + gs_692 + MaxSizeOrderHistory + gs_684; if (DisplayProfitLoss == TRUE) gs_668 = gs_668 + "blnDisplayProfitLoss" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnDisplayProfitLoss" + gs_692 + "False" + gs_684; gs_668 = gs_668 + "datDisplayProfitLossSince" + gs_692 + DisplayProfitLossSince + gs_684; gs_668 = gs_668 + "datDisplayProfitLossSinceEnd" + gs_692 + DisplayProfitLossSinceEnd + gs_684; if (PreventMultiTradesPerBar == TRUE) gs_668 = gs_668 + "blnPreventMultiTradesPerBar" + gs_692 + "True" + gs_684; else gs_668 = gs_668 + "blnPreventMultiTradesPerBar" + gs_692 + "False" + gs_684; gs_668 = gs_668 + "intOrderSlippage" + gs_692 + OrderSlippage + gs_684; gs_668 = gs_668 + "intEAMagicNumber" + gs_692 + EAMagicNumber + gs_684; string l_name_8 = "MTaboneWebForexLog" + Symbol() + EAMagicNumber + ".txt"; int l_file_16 = FileOpen(l_name_8, FILE_CSV|FILE_WRITE|FILE_READ, ';'); if (l_file_16 > 0) { li_20 = FileSize(l_file_16); if (li_20 < li_24) { FileSeek(l_file_16, 0, SEEK_END); FileWrite(l_file_16, gs_668); } FileClose(l_file_16); } } void PrintComments() { string ls_0 = ""; string ls_8 = "-------------------------------------------------"; string ls_16 = "\n"; string ls_24 = ""; string ls_32 = ""; if (IsDemo() == TRUE) ls_24 = " (Demo)"; else ls_24 = " (Live)"; ls_0 = ls_8 + ls_16; ls_0 = ls_0 + gs_76 + " (running on: " + AccountCompany() + ")" + ls_24 + ls_16; if (Period() != PERIOD_D1) ls_0 = ls_0 + "The AshFX system was meant to be run on daily charts. Other time frames may not work." + ls_16; if (DisplayProfitLoss == TRUE) { if (DisplayProfitLossSince != "") { ls_32 = TimeToStr(StrToTime(DisplayProfitLossSince)); if (DisplayProfitLossSinceEnd != "" && DisplayProfitLossSinceEnd != "1900.01.01") ls_32 = ls_32 + " - " + TimeToStr(StrToTime(DisplayProfitLossSinceEnd)); } else ls_32 = "All"; ls_0 = ls_0 + "********** (History since: " + ls_32 + ")" + ls_16; ls_0 = ls_0 + "P/L: " + DoubleToStr(gd_472, 2) + " / Swap: " + DoubleToStr(gd_480, 2) + " / Total: " + DoubleToStr(gd_472 + gd_480, 2) + ls_16; ls_0 = ls_0 + "Pips: " + gi_488 + " / Total Orders: " + g_count_492 + ls_16; ls_0 = ls_0 + "********** (Open trades)" + ls_16; ls_0 = ls_0 + "P/L: " + DoubleToStr(gd_496, 2) + " / Swap: " + DoubleToStr(gd_504, 2) + " / Total: " + DoubleToStr(gd_496 + gd_504, 2) + ls_16; ls_0 = ls_0 + "Pips: " + gi_512 + " / Total Orders: " + g_count_516 + ls_16; ls_0 = ls_0 + "********** (Combined History and Open trades)" + ls_16; ls_0 = ls_0 + "P/L: " + DoubleToStr(gd_472 + gd_496, 2) + " / Swap: " + DoubleToStr(gd_480 + gd_504, 2) + " / Total: " + DoubleToStr(gd_472 + gd_480 + gd_496 + gd_504, 2) + ls_16; ls_0 = ls_0 + "Pips: " + ((gi_488 + gi_512)) + " / Total Orders: " + ((g_count_492 + g_count_516)) + ls_16; } ls_0 = ls_0 + "********** (EA information)" + ls_16; Comment(ls_0); }