Donchian Breakout channel EA
Posted: Fri May 17, 2024 4:47 am
				
				Hello guys, 
I try to make the DonchianBreakoutSystem as an EA. But the EA place no trade at all
 i'm pretty new to coding in mql and i do not see my error
Can you guys help ?
Thx a lot
			I try to make the DonchianBreakoutSystem as an EA. But the EA place no trade at all
Can you guys help ?
Thx a lot
Code: Select all
//+------------------------------------------------------------------+
//|                                                      MonEA.mq4   |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property strict
extern 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);
        }
    }
}
//+------------------------------------------------------------------+