Analisi dei risultati dei test e ottimizzazione nel tester di strategie MetaTrader 5 - pagina 8

 
qualcuno può aiutarmi a costruire una strategia?

ho fatto tutte le cose ma non sono ancora in grado di risolvere l'errore,
Errore: 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (linea) 1 (colonna) 1
nessun indicatore definito per l'indicatore 0 0
';' - parentesi aperta prevista advanctradingapproch.mq5 119 61
';' - parentesi aperta prevista advanctradingapproch.mq5 125 63

ecco il codice:

//+------------------------------------------------------------------+
//|                                        advancetradingapproch.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

input int BuyArrow = 233;
input int SellArrow = 234;

#define  CHART_ARROW_FIRST  0
#define  CHART_ARROW_LAST   1
#define  MODE_MAIN 0
#define  MODE_SIGNAL 1

int BuySignalBar = 0;
int SellSignalBar = 0;
double lastDayClose;
double adxValue, rsiValue, macdMain, macdSignal, stochasticMain, stochasticSignal;
datetime Time[];

double emaBuffer[];
double adxBuffer[];
double rsiBuffer[];
double macdBuffer[];
double stochasticBuffer[];

int OnInit()
{
    emaBuffer[0] = iMA(_Symbol, PERIOD_D1, 8, 0, MODE_EMA, PRICE_CLOSE);
    emaBuffer[1] = iMA(_Symbol, PERIOD_D1, 16, 0, MODE_EMA, PRICE_CLOSE);

    adxBuffer[0] = iADX(_Symbol, PERIOD_D1, 14);
    rsiBuffer[0] = iRSI(_Symbol, PERIOD_D1, 14, PRICE_CLOSE);
    macdBuffer[0] = iMACD(_Symbol, PERIOD_D1, 12, 26, 9, PRICE_CLOSE);
    macdBuffer[1] = iMACD(_Symbol, PERIOD_D1, 12, 26, 9, PRICE_CLOSE);
    stochasticBuffer[0] = iStochastic(_Symbol, PERIOD_D1, 5, 3, 3, MODE_SMA, STO_LOWHIGH);
    stochasticBuffer[1] = iStochastic(_Symbol, PERIOD_D1, 5, 3, 3, MODE_SMA, STO_LOWHIGH);
    
    
    ChartSetInteger(0, CHART_ARROW_FIRST, BuyArrow);
    ChartSetInteger(0, CHART_ARROW_LAST, SellArrow);
    
    ArraySetAsSeries(emaBuffer, true);
    ArraySetAsSeries(adxBuffer, true);
    ArraySetAsSeries(rsiBuffer, true);
    ArraySetAsSeries(macdBuffer, true);
    ArraySetAsSeries(stochasticBuffer, true);

    IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
    SetIndexBuffer(0, emaBuffer);
    SetIndexBuffer(1, adxBuffer);
    SetIndexBuffer(2, rsiBuffer);
    SetIndexBuffer(3, macdBuffer);
    SetIndexBuffer(4, stochasticBuffer);

     return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    double emaDiff = emaBuffer[0] - emaBuffer[1];
    bool isUptrend = emaDiff > 0;
    bool isDowntrend = emaDiff < 0;

    bool emaCrossoverBuy = (emaBuffer[0] > emaBuffer[1]) && (low[0] < emaBuffer[0]);
    bool emaCrossoverSell = (emaBuffer[0] < emaBuffer[1]) && (high[0] > emaBuffer[0]);

    double currentPrice = close[0];

    bool isHighAdx = adxBuffer[0] > 25;
    bool isOversoldRsi = rsiBuffer[0] < 30;
    bool isBullishMacd = macdBuffer[0] > macdBuffer[1];
    bool isBullishStochastic = (stochasticBuffer[0] > stochasticBuffer[1]) && (stochasticBuffer[0] < 80);

    
    if (isUptrend && emaCrossoverBuy) {
        // Generate Buy signal
    } else if (isDowntrend && emaCrossoverSell) {
        // Generate Sell signal
    }

    return(rates_total);
}

void OnTimer()
{
    // Implement timer-related functionality if needed
}

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    datetime chartTime[];
    double high[], low[];
    datetime time[];

    if(id == CHARTEVENT_OBJECT_CREATE) {
        if(ObjectFind(0, "BuySignalArrow") != -1)
            ObjectDelete(0, "BuySignalArrow");
        if(ObjectFind(0, "SellSignalArrow") != -1)
            ObjectDelete(0, "SellSignalArrow");

        if(BuySignalBar != -1 && BuySignalBar < ArraySize(high) && BuySignalBar < ArraySize(low)) {
           double buyPrice = high[BuySignalBar] + 10 * Point;
            ObjectCreate(0, "BuySignalArrow", OBJ_ARROW, 0, Time[BuySignalBar], buyPrice);
            ObjectSetInteger(0, "BuySignalArrow", OBJPROP_ARROWCODE, BuyArrow);
        }

        if(SellSignalBar != -1 && SellSignalBar < ArraySize(high) && SellSignalBar < ArraySize(low)) {
            double sellPrice = low[SellSignalBar] - 10 * Point;
            ObjectCreate(0, "SellSignalArrow", OBJ_ARROW, 0, Time[SellSignalBar], sellPrice);
            ObjectSetInteger(0, "SellSignalArrow", OBJPROP_ARROWCODE, SellArrow);
        }
    }
}


 
@Ezio Evan # Qualcuno può aiutarmi a costruire la strategia? Ho fatto tutte le cose ma non sono ancora in grado di risolvere l'errore,
Errore: 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (linea) 1 (colonna) 1
nessun indicatore definito per l'indicatore 0 0
';' - parentesi aperta prevista advanctradingapproch.mq5 119 61
';' - parentesi aperta prevista advanctradingapproch.mq5 125 63

ecco il codice:

Per favore, non chiedete aiuto per il codice generato da ChatGPT (o da altre A.I. ). Genera codice orribile, mescolando MQL4 e MQL5. Si prega di utilizzare la sezione Freelance per tali richieste.

  • Di solito le persone che non sanno programmare non ricevono aiuto gratuito su questo forum.
  • Se mostrate i vostri tentativi e descrivete chiaramente il vostro problema, molto probabilmente riceverete una risposta dalla comunità. Utilizzare il pulsante CODICE (Alt-S) per inserire il codice.
  • Per imparare la programmazione MQL, si possono consultare i numerosi articoli disponibili sull'argomento, o gli esempi presenti nel Codebase, nonché la documentazione online.
  • Se non volete imparare a programmare, non è un problema. Si può consultare il Codebase se esiste già qualcosa di gratuito, oppure il Market per i prodotti a pagamento (a volte anche gratuiti). Tuttavia, le raccomandazioni o i suggerimenti per i prodotti del Market non sono consentiti sul forum, quindi dovrete fare le vostre ricerche.
  • Infine, avete anche la possibilità di assumere un programmatore nella sezione Freelance.
Trading applications for MetaTrader 5 to order
Trading applications for MetaTrader 5 to order
  • 2023.11.30
  • www.mql5.com
The largest freelance service with MQL5 application developers
 

Ciao ragazzi,

Sto cercando di capire quali sono i componenti ideali di un computer che aiuterà a completare più velocemente le ottimizzazioni di strategie di grandi dimensioni (100.000+ combinazioni su più anni di dati M1). Lo chiedo per poter seguire le vostre raccomandazioni e creare un'istanza AWS EC2 (computer virtuale personalizzato) con le specifiche desiderate (x quantità di vCPU, x quantità di memoria, ecc.) per contribuire a ottimizzare i risultati dell'ottimizzazione in modo più rapido.

Condividerò in seguito i risultati dei costi e dei tempi di completamento di EC2 se ciò può essere utile alla comunità.

Vi ringrazio in anticipo per le vostre risposte.

 

PER FAVORE AIUTATEMI A RISOLVERE QUESTO PROBLEMA NEL MIO EA MT5



Sto cercando di creare un EA che utilizzi 2 Bande di Bollinger (una con 1 std e un'altra con 1.5 std)

e inserisco una posizione con una chiusura al di sotto della bb (1 std) e un prezzo di mercato con uno sl alla bb più grande e un tp alla linea mediana, voglio modificare automaticamente l'opzione in modo che sposti lo sl e il tp all'ultimo valore della banda di Bollinger e della linea mediana, cioè la candela corrente ha un indice di 0 e la candela precedente ha un indice di 1, quindi il valore della bb all'indice 1. Voglio che questo accada fino a quando uno dei due sl/tp non viene colpito. qualcuno può per favore guidarmi nella giusta direzione???? Sono un dilettante e ho appena iniziato con questa roba EA. sono consapevole che posso ottenere il position ticket e usarlo per modificare sl/tp ma ho difficoltà ad estrarre i 2 valori dal bb, il tp/sl iniziale e il sl/tp modificato ad ogni candela. posso ottenere i valori dalla funzione ibands e usare la funzione copy buffer per estrarre i valori, ma riesco a farlo solo per il sl/tp iniziale come faccio ad estrarre i valori per il rolling sl/tp, per favore aiutatemi, grazie per l'aiuto, lo apprezzo.

Motivazione: