Code: Select all
The original rules were clear:-Compute the rolling mean of High minus Low over the last 25 days;-Compute the IBS indicator: (Close - Low) / (High - Low);-Compute a lower band as the rolling High over the last 10 days minus 2.5 x the rolling mean of High mins Low (first bullet);-Go long whenever SPY closes under the lower band (3rd bullet), and IBS is lower than 0.3;-Close the trade whenever the SPY close is higher than yesterday's high.The logic behind this trading strategy is that the market tends to bounce back once it drops too low from its recent highs.The results shown above are from an improved strategy: better exit rule with dynamic stop losses. I created a full write-up with all its details here
Statistics: Posted by ionone — Wed May 22, 2024 6:51 pm — Replies 0 — Views 222
Statistics: Posted by JohnnyRy — Tue May 21, 2024 9:10 am — Replies 7 — Views 449
Statistics: Posted by ionone — Sun May 19, 2024 9:15 pm — Replies 2 — Views 236
Code: Select all
//+------------------------------------------------------------------+//| MonEA.mq4 |//| Copyright 2017, MetaQuotes Software Corp. |//| http://www.metaquotes.net/ |//+------------------------------------------------------------------+#property strictextern double LotSize = 0.1;extern int BreakEvenPips = 200;extern bool TradeLondonSession = true;extern bool TradeUSSession = true;extern bool TradeTokyoSession = false;// Heures définies pour les sessions en GMT+0#define LONDON_OPEN 8#define LONDON_CLOSE 16#define NEW_YORK_OPEN 13#define NEW_YORK_CLOSE 22#define TOKYO_OPEN 0#define TOKYO_CLOSE 9//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){ return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ if(!IsTradingAllowed()) return; double upSignal = iCustom(NULL, 0, "DonchianBreakoutSystem_v1.1.2", 5, 30, 0, 10, 0, 0, 1); double dnSignal = iCustom(NULL, 0, "DonchianBreakoutSystem_v1.1.2", 5, 30, 0, 10, 1, 0, 1); ManageOrder(OP_BUY, "Buy Order", Ask, BreakEvenPips); ManageOrder(OP_SELL, "Sell Order", Bid, BreakEvenPips);}//+------------------------------------------------------------------+//| Vérifie si le trading est autorisé selon la session |//+------------------------------------------------------------------+bool IsTradingAllowed(){ int hour = TimeHour(TimeCurrent()); if((TradeLondonSession && hour >= LONDON_OPEN && hour < LONDON_CLOSE) || (TradeUSSession && hour >= NEW_YORK_OPEN && hour < NEW_YORK_CLOSE) || (TradeTokyoSession && hour >= TOKYO_OPEN && hour < TOKYO_CLOSE)) return true; return false;}//+------------------------------------------------------------------+//| Fonction pour gérer les ordres |//+------------------------------------------------------------------+void ManageOrder(int orderType, string orderComment, double price, int pipsToBreakEven){ bool orderFound = false; for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == 0 && OrderType() == orderType) { orderFound = true; double openPrice = OrderOpenPrice(); double currentProfit = NormalizeDouble((price - openPrice) * (orderType == OP_BUY ? 1 : -1) * Point, 2); // Vérifier si le trade doit être mis en break-even if(currentProfit >= pipsToBreakEven * Point) { double newStopLoss = orderType == OP_BUY ? openPrice + (pipsToBreakEven * Point) : openPrice - (pipsToBreakEven * Point); if(OrderModify(OrderTicket(), openPrice, newStopLoss, OrderTakeProfit(), 0, clrYellow)) Print("Break-even stop loss set for order #", OrderTicket()); else Print("Error setting break-even: ", GetLastError()); } break; // Sortir après la gestion du premier ordre trouvé } } // Si aucun ordre existant n'est modifié, placer un nouvel ordre if(!orderFound) { int ticket = OrderSend(Symbol(), orderType, LotSize, price, 2, 0, 0, orderComment, 0, 0, orderType == OP_BUY ? clrGreen : clrRed); if(ticket < 0) { Print("Order Send failed with error #", GetLastError()); } else { Print("Order successfully placed with ticket #", ticket); } }}//+------------------------------------------------------------------+
Statistics: Posted by Xxcoincoin — Fri May 17, 2024 4:47 am — Replies 0 — Views 160
Statistics: Posted by Niveo74 — Thu May 16, 2024 5:02 pm — Replies 0 — Views 173
Statistics: Posted by ionone — Wed May 15, 2024 7:25 pm — Replies 0 — Views 84
Statistics: Posted by newonetheblock — Wed May 15, 2024 9:56 am — Replies 5 — Views 331
Statistics: Posted by ionone — Tue May 14, 2024 6:21 pm — Replies 7 — Views 376
Statistics: Posted by ionone — Tue May 14, 2024 6:11 pm — Replies 0 — Views 140
Statistics: Posted by WOLF — Tue May 14, 2024 5:20 am — Replies 10 — Views 652
Statistics: Posted by funchi — Mon May 13, 2024 6:17 pm — Replies 8 — Views 738
Statistics: Posted by kids2400 — Sat May 11, 2024 3:25 am — Replies 2 — Views 287
Statistics: Posted by BoJo199 — Sat May 11, 2024 2:03 am — Replies 0 — Views 132
Statistics: Posted by Jedidiah — Thu May 09, 2024 5:33 am — Replies 6 — Views 595
Statistics: Posted by DAMPro69 — Tue May 07, 2024 8:02 am — Replies 2 — Views 548