Je ne trouve pas mon erreur enfin 2 erreurs.

 
Bonjour à toutes et à tous,

Pouvez vous m'aider pour un code.  Je n'arrive pas à trouver les erreurs.  Une piste m'aiderait beaucoup.

Merci d'avance.

// Définition des variables
input int Period_zerolagema = 20; // Période de l'EMA sans décalage

double EMA1_zerolagema, EMA2_zerolagema, Difference_zerolagema, ZeroLagEMA;

// Fonction pour calculer l'EMA
double iMA(int _handle, int _shift, double _series[], int period, int _method, int _mode, int _price) {
    if (period < 1) {
        return INVALID_HANDLE;
    }

    int i, limit, start;

    // Correction de la première erreur
    limit = ArraySize(_series) - 1;
    start = _shift < 0 ? _shift : 0;

    double sum = 0.0;
    double k = 2.0 / (double)(period + 1);

    for (i = start; i <= limit; i++) {
        if (_mode == MODE_EMA) {
            sum += _series[i] * k;
        } else if (_mode == MODE_SMA) {
            sum += _series[i];
        }
    }

    if (_mode == MODE_EMA) {
        if (_shift >= 0) {
            return sum;
        }

        double ema = sum;
        for (i = start + 1; i < limit; i++) {
            ema += (_series[i] - _series[i - 1]) * k;
        }

        return ema;
    } else if (_mode == MODE_SMA) {
        if (_shift >= 0) {
            return sum / (double)(limit - start + 1);
        }

        double sma = sum;
        for (i = start + 1; i < limit; i++) {
            sma += _series[i] - _series[i - 1];
        }

        return sma / (double)(limit - start);
    }

    return INVALID_HANDLE;
}

// Fonction principale
void OnStart() {
    // Calcul de l'EMA1
    EMA1_zerolagema = iMA(NULL, 0, **close**, Period_zerolagema, 0, MODE_EMA, PRICE_CLOSE);

    // Calcul de l'EMA2
    EMA2_zerolagema = iMA(NULL, 0, EMA1_zerolagema, Period_zerolagema, 0, MODE_EMA, PRICE_CLOSE);
}
    // Boucle sur les barres
    for (int i = 0; i < Bars; i++) {
        // Calcul de la différence et de l'EMA sans décalage
        Difference_zerolagema = EMA1_zerolagema - EMA2_zerolagema;
        ZeroLagEMA = EMA1_zerolagema + Difference_zerolagema;

        // Affichage de l'EMA sans décalage

        plot



'_series' - arrays are passed by reference only zero lag EMA.mq5 7 44

'{' - unbalanced parentheses zero lag EMA.mq5 57 16



Merci


 
Bonsoir.
Je n'ai pas trouvé l'erreur dans ton code.
La première erreur c'est que les array ne peuvent pas être passé en paramètre dans une signature de fonction. Il faut rajouter un & devant dans la fonction.


La deuxième, tu as un souci avec une parenthèse en trop ouh en moins
 
Merci beaucoup pour ton aide.

Je vais fouiller tout cela.
 
Me voilà de retour

Ok pour  double _series j'ai ajouté &

Et une erreur de moins mais alors pour la parenthèse, je ne trouve pas.
Dès que je modifie, j'ai une floppée d'erreur.

Merci
 
Bonjour
sans promesse, essaye de faire passer ton code bien formaté et pas en copier coller violent
 
Un grand merci pour ton aide.

Est ce que c'est mieux comme cela ?

// Définition des variables
input int Period_zerolagema = 20; // Période de l'EMA sans décalage

double EMA1_zerolagema, EMA2_zerolagema, Difference_zerolagema, ZeroLagEMA;

// Fonction pour calculer l'EMA
double iMA(int _handle, int _shift, double &_series[], int period, int _method, int _mode, int _price) {
    if (period < 1) {
        return INVALID_HANDLE;
    }

    int i, limit, start;

    // Correction de la première erreur
    limit = ArraySize(_series) - 1;
    start = _shift < 0 ? _shift : 0;

    double sum = 0.0;
    double k = 2.0 / (double)(period + 1);

    for (i = start; i <= limit; i++) {
        if (_mode == MODE_EMA) {
            sum += _series[i] * k;
        } else if (_mode == MODE_SMA) {
            sum += _series[i];
        }
    }

    if (_mode == MODE_EMA) {
        if (_shift >= 0) {
            return sum;
        }

        double ema = sum;
        for (i = start + 1; i < limit; i++) {
            ema += (_series[i] - _series[i - 1]) * k;
        }

        return ema;
    } else if (_mode == MODE_SMA) {
        if (_shift >= 0) {
            return sum / (double)(limit - start + 1);
        }

        double sma = sum;
        for (i = start + 1; i < limit; i++) {
            sma += _series[i] - _series[i - 1];
        }

        return sma / (double)(limit - start);
    }

    return INVALID_HANDLE;
}

// Fonction principale
void OnStart() {
    // Calcul de l'EMA1
    EMA1_zerolagema = iMA(NULL, 0, **close**, Period_zerolagema, 0, MODE_EMA, PRICE_CLOSE);

    // Calcul de l'EMA2
    EMA2_zerolagema = iMA(NULL, 0, EMA1_zerolagema, Period_zerolagema, 0, MODE_EMA, PRICE_CLOSE);
    
    // Boucle sur les barres
    for (int i = 0; i < Bars; i++) {
        // Calcul de la différence et de l'EMA sans décalage
        Difference_zerolagema = EMA1_zerolagema - EMA2_zerolagema;
        ZeroLagEMA = EMA1_zerolagema + Difference_zerolagema;
    }
        // Affichage de l'EMA sans décalage
        plot
        
Merci d'avance pour ton aide.
 

Salut,
Je ne pige pas ... C'est ton code complet ?
Parce que pour le coup il manque semble-t-il pas mal de chose après "plot" tout en bas.

Egalement les déclarations des iMA ne sont pas bonnes (voir la doc : https://www.mql5.com/en/docs/indicators/ima)

Documentation on MQL5: Technical Indicators / iMA
Documentation on MQL5: Technical Indicators / iMA
  • www.mql5.com
iMA - Technical Indicators - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Merci je vais me pencher la dessus.

Je suis un petit nouveau qui tente ;)
 
Bonjour
Je te propose de regarder ce code
Il est volontairement simple pour t'aider à faite tes codes

Free download of the 'Moving average code for beginners by William210' indicator by 'William210' for MetaTrader 5 in the MQL5 Code Base, 2023.08.24
Moving average code for beginners by William210
Moving average code for beginners by William210
  • www.mql5.com
Moving average beginner tutorial to learn how to code in MQL5
 
Merci.  Je regarde tout cela.
 
penses à mettre une étoile pour le référencement STP
Raison: