Je ne trouve pas mon erreur enfin 2 erreurs. - page 2

 
Gerard Willia G J B M Dinh Sy #:
penses à mettre une étoile pour le référencement STP

Chose faite ;)

 
Dimitri Dimitri #:
Un grand merci pour ton aide.

Est ce que c'est mieux comme cela ?

Merci d'avance pour ton aide.
// 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 || ArraySize(_series) == 0) {
        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] - ema) * 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() {
    ArrayResize(EMA1_zerolagema, Bars);
    ArrayResize(EMA2_zerolagema, Bars);
    ArrayResize(Difference_zerolagema, Bars);
    ArrayResize(ZeroLagEMA, Bars);

    // Calcul de l'EMA1
    for (int i = 0; i < Bars; i++) {
        EMA1_zerolagema[i] = iMA(NULL, i, Close, Period_zerolagema, 0, MODE_EMA, PRICE_CLOSE);
    }

    // Calcul de l'EMA2
    for (int i = 0; i < Bars; i++) {
        EMA2_zerolagema[i] = iMA(NULL, i, EMA1_zerolagema, Period_zerolagema, 0, MODE_EMA, PRICE_CLOSE);
    }

    // Calcul de la différence et de l'EMA sans décalage
    for (int i = 0; i < Bars; i++) {
        Difference_zerolagema[i] = EMA1_zerolagema[i] - EMA2_zerolagema[i];
        ZeroLagEMA[i] = EMA1_zerolagema[i] + Difference_zerolagema[i];
    }

    // Affichage de l'EMA sans décalage
    PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 1);
    PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);
    PlotIndexSetInteger(0, PLOT_COLOR, clrRed);
    PlotIndexSetInteger(0, PLOT_STYLE, STYLE_SOLID);
    PlotIndexSetInteger(0, PLOT_SHIFT, 0);
    PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 0);
    PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);
    PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, Period_zerolagema - 1);
    PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
    PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 1);
    PlotIndexSetInteger(0, PLOT_COLOR, clrRed);
    PlotIndexSetInteger(0, PLOT_STYLE, STYLE_SOLID);
    PlotIndexSetInteger(0, PLOT_SHIFT, 0);
    PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 0);
    PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);
    PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, Period_zerolagema - 1);
    PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
}

Salut, j'arrive un peu tard, autre solution proposée

 

Bonjour Cédric,

Désolé pour la réponse tardive, j'étais en déplacement.

Il y a deux erreurs dans le code.

J'ai corrigé la première, ligne 7 le & avant _series

double iMA(int _handle, int _shift, double &_series[], int period, int _method, int _mode, int _price) {


Il reste une erreur à la ligne 57

void OnStart() {


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


Je n'arrive pas à trouver où est le problème.  

Si j'ajoute un } cela ajoute encore plus d'erreur.


Merci pour le code et pour ton aide.


Raison: