il mio nuovo expert advisor

 

raga questo e il mio nuovo bot ma mi da errore non riesco a correggerlo neanche con chat gpt no capisco come fare qualcuno che mi puo aiutare ho provato anche a mettere periodo h1 ma nn va

//+------------------------------------------------------------------+

//|                                                       GoldBot.mq5 |
//|                        Copyright 2024, Your Name                 |
//|                                       https://www.yourwebsite.com |
//+------------------------------------------------------------------+
input double LotSize = 0.01; // Dimensione del lotto
input double TakeProfit = 10; // Take profit in dollari
input double StopLoss = 10; // Stop loss in dollari
input double DailyProfitTarget = 20; // Obiettivo di profitto giornaliero

double dailyProfit = 0;

void OnTick()
{
    // Controlla il profitto giornaliero
    double currentProfit = 0;
    for (int i = 0; i < PositionsTotal(); i++)
    {
        ulong ticket = PositionGetTicket(i);
        currentProfit += PositionGetDouble(POSITION_PROFIT);
    }
    
    dailyProfit = currentProfit;

    // Se il profitto giornaliero è raggiunto, non operare
    if (dailyProfit >= DailyProfitTarget) return;

    // Controlla se ci sono posizioni aperte
    if (PositionsTotal() == 0)
    {
        // Logica per determinare la direzione del trade
        double price = SymbolInfoDouble("XAUUSD", SYMBOL_BID); // Prezzo dell'oro
      double ma = iMA(Symbol(), 60, 14, 0, MODE_SMA, PRICE_CLOSE, 0);

        // Esempio di logica di ingresso
        if (price > ma) // Condizione di acquisto
        {
            OpenBuy();
        }
        else if (price < ma) // Condizione di vendita
        {
            OpenSell();
        }
    }
}

// Funzione per aprire una posizione buy
void OpenBuy()
{
    double price = SymbolInfoDouble("XAUUSD", SYMBOL_BID);
    double sl = price - StopLoss * SymbolInfoDouble("XAUUSD", SYMBOL_POINT);
    double tp = price + TakeProfit * SymbolInfoDouble("XAUUSD", SYMBOL_POINT);

    MqlTradeRequest request;
    MqlTradeResult result;
    int short_period = 14;

    request.symbol = "XAUUSD";
    request.volume = LotSize;
    request.price = price;
    request.tp = tp;
    request.sl = sl;
    request.magic = 0; // Puoi impostare un numero unico per identificare il tuo EA
    request.comment = "Buy Order";

    if (!OrderSend(request, result))
    {
        Print("Error opening buy order: ", result.retcode);
    }
}

// Funzione per aprire una posizione sell
void OpenSell()
{
    double price = SymbolInfoDouble("XAUUSD", SYMBOL_BID);
    double sl = price + StopLoss * SymbolInfoDouble("XAUUSD", SYMBOL_POINT);
    double tp = price - TakeProfit * SymbolInfoDouble("XAUUSD", SYMBOL_POINT);

    MqlTradeRequest request;
    MqlTradeResult result;

    request.action = TRADE_ACTION_DEAL;
request.type = ORDER_TYPE_BUY; // Per acquisto
// O
request.type = ORDER_TYPE_SELL; // Per vendita

    request.symbol = "XAUUSD";
    request.volume = LotSize;
    request.price = price;
    request.tp = tp;
    request.sl = sl;
    request.magic = 0; // Puoi impostare un numero unico per identificare il tuo EA
    request.comment = "Sell Order";

    if (!OrderSend(request, result))
    {
        Print("Error opening sell order: ", result.retcode);
    }
}

 

L'errore è dovuto a come gestisci l'indicatore MA. In MQL5 si crea prima un handle (gestore) dell'indicatore nella sezione "OnInit"

int ma = iMA(Symbol(),PERIOD_CURRENT,50,0,MODE_EMA,PRICE_CLOSE);

In seguito recuperi le informazioni di tuo interesse tramite la funzione CopyBuffer().

Documentazione su MQL5: Accesso alle Timeseries ed Indicatori / CopyBuffer
Documentazione su MQL5: Accesso alle Timeseries ed Indicatori / CopyBuffer
  • www.mql5.com
Ottiene dati di un buffer specificato di un certo indicatore nella quantità necessaria. Il conteggio degli elementi di dati copiati (buffer...