Problème de compilation EA - TradeAssistant

 

Bonjour a tous,

J'essaie de créer un assistant pour le prise de positions sur Metatrader5 mais je ne parviens pas a compiler en mlq5.


J'ai les erreus de compilations suivante qui se répètes partout, que j'utilise ObjectSetDouble ou ObjectSetInteger impossible de compiler.

-undeclared identifier

-cannot convert enum

-wrong parameters count

-could be one of 2 function

-   built-in: bool ObjectSetInteger(long,const string,ENUM_OBJECT_PROPERTY_INTEGER,long)

-    built-in: bool ObjectSetInteger(long,const string,ENUM_OBJECT_PROPERTY_INTEGER,int,long)


J'ai aussi un probleme ici : if(!PositionSelectByIndex(i)) continue;

- undeclared identifier

- 'i' - some operator expected

(J'ai essayé avec (idx) = même probleme)


Le but est de créer un Trade assistant simple et fonctionnel qui s'adapte dans le temps durant toute la durée du trade.

- s'active a l'ouverture d'un ordre (directe ou programmé) avec sl et tp par defaut (réglable en live)

-rectangle ajustable (style tradingview) qui s'adapte => défilement vers la droite le temps du Trade (ici j'ai mis un an, je ne sais pas si c'est possible de faire  autrement ?)

j'aimerais idéalement qu'il respecte les couleur vert vers le zone de tp et rouge vers la zone de sl = s'adapte en fonction du sens Long/Short.

  -Annule l'offre au tp si l'ordre n'a pas été déclenché (prévoir éventuel coupure de courant, data ou autre) 


Voici mon script :

Edité par modo
utilisé le bouton  ou ALT + S pour insérer votre code ou mettez le en PJ

//+------------------------------------------------------------------+
//|               TradeAssistant.mq5                       |
//+------------------------------------------------------------------+
#property strict
#include <Trade/Trade.mqh>
#include <ChartObjects/ChartObjectsShapes.mqh>
#include <ChartObjects/ChartObjectsTxtControls.mqh>
#include <ChartObjects\ChartObject.mqh>
#include <ChartObjects\ChartObjectsLines.mqh>
#include <Trade\PositionInfo.mqh>

CTrade trade;

// Couleurs rectangles
input color ColorSLRed   = clrRed;
input color ColorTPGreen = clrGreen;

// Taille du lot par défaut
input double LotSize = 0.10;

// Points par défaut SL/TP si création depuis chart
input int DefaultSL_Points = 500;
input int DefaultTP_Points = 2000;

// ---------------------------------------------------------------
// Vérifie si l'ordre est un Buy
bool IsBuyType(const int type)
{
    return (type == ORDER_TYPE_BUY || type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP);
}

// ---------------------------------------------------------------
// Annulation des pending si TP touché avant activation
void CheckCancelIfTPHit(ulong ticket, int type, double tp)
{
    if(tp==0) return;

    double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
    double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);

    bool isBuy = IsBuyType(type);

    if(isBuy && bid >= tp)
    {
        Print("TP touché avant activation → suppression BUY pending #", ticket);
        trade.OrderDelete(ticket);
    }
    else if(!isBuy && ask <= tp)
    {
        Print("TP touché avant activation → suppression SELL pending #", ticket);
        trade.OrderDelete(ticket);
    }
}

// ---------------------------------------------------------------
// Mise à jour des rectangles SL/TP pour un trade
void UpdateTradeRectangle(ulong ticket, double entry, double sl, double tp, int type)
{
    string obj_name = "TradeRect_" + (string)ticket;

    datetime t_now = TimeCurrent();
    datetime t_far = t_now + 3600*24*365; // reste visible tant que trade ouvert

    // Ajuste les valeurs pour Buy/Sell
    double low_price, high_price;
    if(IsBuyType(type))
    {
        low_price  = sl; // rouge bas
        high_price = tp; // vert haut
    }
    else
    {
        low_price  = tp; // vert bas
        high_price = sl; // rouge haut
    }

    if(ObjectFind(0,obj_name) < 0)
    {
        ObjectCreate(0,obj_name,OBJ_RECTANGLE,0,t_now,low_price,t_far,high_price);
        ObjectSetInteger(0,obj_name,OBJPROP_COLOR,ColorTPGreen);  // couleur principale (TP)
        ObjectSetInteger(0,obj_name,OBJPROP_BGCOLOR,ColorTPGreen);
        ObjectSetInteger(0,obj_name,OBJPROP_TRANSPARENCY,60);
    }
    else
    {
        ObjectSetDouble(0,obj_name,OBJPROP_PRICE1,low_price);
        ObjectSetDouble(0,obj_name,OBJPROP_PRICE2,high_price);
        ObjectSetInteger(0,obj_name,OBJPROP_TIME1,(long)t_now);
        ObjectSetInteger(0,obj_name,OBJPROP_TIME2,(long)t_far);
    }
}

// ---------------------------------------------------------------
// Modification SL/TP draggable
void ApplyDraggedSLTP(ulong ticket)
{
    string obj_name = "TradeRect_" + (string)ticket;
    double low_new = 0.0, high_new = 0.0;

    if(ObjectGetDouble(0,obj_name,OBJPROP_PRICE1,low_new) &&
       ObjectGetDouble(0,obj_name,OBJPROP_PRICE2,high_new))
    {
        if(PositionSelectByTicket(ticket))
        {
            double sl_current, tp_current;
            if(IsBuyType((int)PositionGetInteger(POSITION_TYPE)))
            {
                sl_current = low_new;
                tp_current = high_new;
            }
            else
            {
                sl_current = high_new;
                tp_current = low_new;
            }
            trade.PositionModify(ticket, sl_current, tp_current);
        }
    }
}

// ---------------------------------------------------------------
// ONTICK : main logic
void OnTick()
{
    int total = PositionsTotal();

    for(int i=0; i<total; i++)
    {
        if(!PositionSelectByIndex(i)) continue;

        string symbol = PositionGetString(POSITION_SYMBOL);
        if(symbol != _Symbol) continue;

        ulong ticket = PositionGetInteger(POSITION_TICKET);
        double entry = PositionGetDouble(POSITION_PRICE_OPEN);
        double sl    = PositionGetDouble(POSITION_SL);
        double tp    = PositionGetDouble(POSITION_TP);
        int type     = (int)PositionGetInteger(POSITION_TYPE);

        // Annule pending si TP touché avant activation
        if(type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP ||
           type == ORDER_TYPE_SELL_LIMIT || type == ORDER_TYPE_SELL_STOP)
        {
            CheckCancelIfTPHit(ticket, type, tp);
        }

        // Mise à jour rectangle SL/TP
        UpdateTradeRectangle(ticket, entry, sl, tp, type);

        // SL/TP draggable
        ApplyDraggedSLTP(ticket);
    }
}

// ---------------------------------------------------------------
// ONDEINIT : nettoyage
void OnDeinit(const int reason)
{
    ObjectsDeleteAll(0);
 

C'est le problème quand on utilise une IA pour générer du code, il utilise des fonctions inexistantes, il mélange MQL4 et MQL5. Il faut savoir programmer pour comprendre et corriger les erreurs.

Surtout pour MQL5 qui est un langage de niche avec peu de données pour entraîner un modèle LLM.

Vous pouvez soit apprendre à programmer un minimum pour comprendre les problèmes, soit faire appel à un vrai programmeur humain.

 



Merci, Problème résolu.
 
Nicolas Bouche #:

Merci, Problème résolu.
Comment ?