Mogalef bands et Mogalef bands Stop Nano Trader

Forums ProRealTime forum Français Support ProBuilder Mogalef bands et Mogalef bands Stop Nano Trader

Tagged: 

Viewing 5 posts - 1 through 5 (of 5 total)
  • #170754

    Bonjour,

    Je dispose bien d’un code PRT modifiable des bandes de mogalef, mais ultra simplifié et donc peu performant (j’ai fait ce que j’ai pu…).
    Je dispose aussi d’un itf des bandes plus proche de l’original MAIS pas du code source. Je ne peux donc l’utiliser qu’en visuel et non en programmation…

    J’ai déjà intégré le code “simple” dans des indicateurs “complexes” et des stratégies, avec succès, mais ce n’est pas le bon donc complications pour filtrer ce qui serait fait automatiquement avec le “bon” source.

    Eric Lefort m’a communiqué les (derniers!) fichiers sources en Nano Trader de :
    – Bandes de Mogalef
    – stop des bandes de mogalef

    Autant le code dont je dispose est à mon niveau, autant j’ai des craintes de ne pas réussir la conversion de Nano (dont je n’ai aucune connaissance) vers PRT.

    J’attache les codes Nano et une capture d’écran des bandes avec le résultat (indicateur “fermé”).
    Je ne dispose pas d’itf me donnant le stop, donc pas de copie d’écran.

    Je me tiens à votre disposition pour toute question.

    Le résultat profiterait potentiellement à au moins 5 personnes.

    Grand merci par avance

    >>>>>>>>>>>>>>>>>>>>>>>>
    express EL_MOGALEF_Bands
    >>>>>>>>>>>>>>>>>>>>>>>>>>

    vars
    input $N(2,10,3),$ET(5,15,7),$coef(1,7,2),$Visualisation(“yes;No”,0);
    series X,Y,MogRegLin,MogH,MogB,MogM,etyp,MogMA;
    series mh,mb,mm;
    numeric j,SumXY,SumX2,SumY,SumX,AvgX,AvgY,b,a,SSumXY;
    series MogStopL,MogStopS;

    calculation

    // Le programme s’exécute à la clôture de chaque barre et non à chaque tick

    if IsFirstBar() then
    begin
    CalculateAtEveryTick(false);
    end

    // Calcul du cours pondéré Mogalef exprimé en ticks:
    // Y étant un entier, on évite ainsi les risques d’erreurs dus aux arrondis

    Y = round(((h+l+o+c+c)/5/TickSize()),0);
    X = CurrentBarIndex(); // Indice de la barre

    // Calcul des paramètres a et b de la régression linéaire
    // b = Somme[(X – AvgX)(Y – AvgY)]/Somme[(X – AvgX)^2] pour les N dernières barres
    // On définit les variables numériques suivantes: SumX = somme[X], SumY = somme[Y], AvgX = moyenne[X], AvgY = moyenne[Y]
    // SumX2 = Somme[(X – AvgX)^2], SumXY = Somme[(X – AvgX)(Y – AvgY)] calculés sur les N dernières barres

    if (X <= ($N-1)) then begin SumX = SumX + X; SumY = SumY + Y; MogRegLin = close; // Calcul de SumX2 à la N ième barre if (X = ($N-1)) then begin SumX2 = $N*(Power($N,2)-1)/12; // Il s'avère que le résultat est une constante dépendant de N // Calcul de SumXY, a, b, MogRegLin à la N ième barre for j = 0 to ($N-1) begin SSumXY = SSumXY + ($N*X[j] - SumX)*($N*Y[j] - SumY); end SumXY = SSumXY/power($N,2); AvgX = SumX/$N; AvgY = SumY/$N; b = SumXY/SumX2; a = AvgY - b*AvgX; MogRegLin = (a + b*X)*TickSize(); //Le résultat est multilpié par la taille d'un tick end end else // Calcul de SumXY, a, b, MogRegLin après la N ième barre begin // On exploite les relations qui existent entre variables d'une barre à la suivante // pour éliminer les itérations et augmenter la vitesse de calcul SumX = SumX + X - X[$N]; SumY = SumY + Y - Y[$N]; SSumXY = SSumXY + ($N*X - SumX)*($N*Y - SumY)-($N*X[$N] - SumX)*($N*Y[$N] - SumY) + $N*(X - X[$N])*(Y - Y[$N]); SumXY = SSumXY/power($N,2); AvgX = SumX/$N; AvgY = SumY/$N; b = SumXY/SumX2; a = AvgY - b*AvgX; MogRegLin = (a + b*X)*TickSize(); end if IsFinalBar() then begin // On est à la dernière barre et la série MogRegLin est entièrement calculée // On calcule la série etyp qui est l'écart type de MogRegLin // Sans l'instruction IsFinalBar, on calculerait autant de fois l'écart type qu'il y a de barres // ce qui ralentirait considérablement la plateforme StdDev(MogRegLin,etyp,$ET); // Calcul des bandes de Mogalef MogMA, MogH et MogB for j = CurrentBarIndex() downto 0 begin // Pas de décallage si la RegLine est à l'intérieur des anciennes bandes If (MogRegLin[j] < MogH[j+1]) and (MogRegLin[j] > MogB[j+1]) then
    begin
    MogH[j] = MogH[j+1];
    MogB[j] = MogB[j+1];
    MogM[j] = MogM[j+1];
    MogMA[j] = MogMA[j+1];
    MogStopS[j] = MogStopS[j+1];
    MogStopL[j] = MogStopL[j+1];
    end
    else

    // Si décallage tracé des nouvelles bandes

    begin
    MogH[j] = (MogRegLin[j] + (etyp[j]*$Coef));
    MogB[j] = (MogRegLin[j] – (etyp[j]*$Coef));
    MogM[j] = MogRegLin[j];
    MogMA[j] = MogM[j+1];

    //cas du décalage vers le haut
    if (MogMA[j] < MogM[j]) then begin if (MogMA[j] < MogH[j]) and (MogMA[j] > MogB[j]) then // si l’ancien medium est à l’interieur nouvelle bande
    begin
    MogStopL[j] = MogStopL[j+1]; // on ne bouge pas le stop long
    MogStopS[j] = MogStopS[j+1]; // ni le stop court bien sur. ???????
    end
    else // mais si l’ancien medium est hors des nouvelles bandes
    begin
    MogStopL[j] = MogMA[j]; // le nouveau stop long s’adapte.
    MogStopS[j] = MogStopS[j+1]; //
    end
    end

    //cas du décalage vers le bas
    if (MogMA[j] > MogM[j]) then
    begin
    if (MogMA[j] < MogH[j]) and (MogMA[j] > MogB[j]) then // si l’ancien medium est à l’interieur de la nouvelle bande
    begin
    MogStopS[j] = MogStopS[j+1]; // on ne bouge pas le stop court
    MogStopL[j] = MogStopL[j+1]; // ni le stop long bien sur. ???????
    end
    else // mais si l’ancien medium est hors des nouvelles bandes
    begin
    MogStopS[j] = MogMA[j]; // le nouveau stop court s’adapte.
    MogStopL[j] = MogStopL[j+1]; // pas le long
    end
    end

    end
    mh[j]=void;
    mb[j]=void;
    mm[j]=void;
    if $Visualisation=0 then begin
    mh[j]=MogH[j];
    mb[j]=mogB[j];
    mm[j]=MogM[j];
    end

    end
    end

    interpretation // Must be modified, this is an exemple.
    begin
    if (h >= MogH) and (MogH = MogH[1]) then sentiment = 0;
    if (l <= MogB) and (MogH = MogH[1]) then sentiment = 100; end plotband (MH,"Yellow",2,MM,"blue",1,"lightgreen"); plotband (MM,"Blue",1,MB,"cyan",2,"lightred"); // Begin // plotband (MogH,"Yellow",2,MogM,"blue",1,"lightgreen"); // plotband (MogM,"Blue",1,MogB,"cyan",2,"lightred"); // end//@@@cs:1851506-4228835-1556514_cs@@@ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    express stop EL_MOGALEF_STOP
    // version modifiée 2016
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    vars
    input $N(2,10,3),$ET(5,15,7);
    series MogH,MogB,MogM,etyp;
    series xx,yy,zz,e,mm;
    numeric i,SumXY,SumX2,SumY,SumX,a,b;
    series X,Y,Z,MogRegLin,CoursP;
    series position,Milieu, MilieuAncien1, MilieuAncien2,NivStop;

    calculation

    //if IsFirstBar() then CalculateAtEveryTick(false);

    // Calcul du cours pondéré Mogalef
    CoursP = ((h+l+o+c+c)/5); // Fin du calcul

    // on calcule la régression linéaire—————————————-
    // if isbarcompleted() then // à la clôture de la dernière barre?

    for i = 0 to $N-1
    begin
    X[i] = i;
    Y[i] = CoursP[i];
    SumX = SumX + X[i];
    SumX2 = SumX2 + Power(X[i],2);
    SumXY = SumXY + X[i]*Y[i];
    SumY = SumY + Y[i];
    end
    b = (SumXY – SumX*SumY/$N)/(SumX2 – (1/$N)*Power(SumX,2));
    a = (SumY – b*SumX)/$N;
    Z = a + b*X[0];
    SumX = 0;
    SumX2 = 0;
    SumXY = 0;
    SumY = 0;
    if Z = void then // Si rég lin pas définie
    MogRegLin = Close;
    else
    MogRegLin = Z; // Fin régression linéaire———————————

    // Calcul des bandes Mogalef————————————————
    // Reprise des niveaux Mogalef précédents.
    StdDev(MogRegLin,etyp,$ET); //calcul écart type de longueur ET
    xx=MogH[1];
    yy=MogB[1];
    e=etyp[1];
    zz=Z[1];
    mm=MogM[1];
    // Pas de décalage si la RegLine est à l’intérieur des anciennes bandes
    If ((MogRegLin < xx) and (MogRegLin >yy)) then
    begin
    etyp=e;
    MogH=xx;
    MogB=yy;
    MogM=mm;
    end
    else //Si décalage tracé des nouvelles bandes
    begin
    MogH= (MogRegLin + (etyp*2));
    MogB= (MogRegLin – (etyp*2));
    MogM= MogRegLin;
    end // Fin calcul bandes Mogalef—————————————

    if MarketPosition() = 1 then position=1; // On met à jour la variable position
    if MarketPosition() = -1 then position=-1;

    MilieuAncien2=MilieuAncien2[1];
    MilieuAncien1=MilieuAncien1[1];
    Milieu=Milieu[1];
    if MogM<>MogM[1] then begin // On met à jour les variables Milieu et MilieuAncien 1 et 2
    MilieuAncien2=MilieuAncien1[1];
    MilieuAncien1=Milieu[1];
    Milieu=MogM;
    end

    NivStop=NivStop[1]; // par défaut, le stop est mis à son niveau antérieur

    if (MarketPosition() = 1) then begin //Long position
    if (Milieu>Milieu[1]) and (Milieu[1] position[1] then begin // si on entre en position
    if MilieuAncien1 < MogB then begin NivStop=MilieuAncien1; // si le milieu ancien 1 est utilisable on l'utilise end if (MilieuAncien1 >= MogB) and (MilieuAncien2 < MogB) then begin NivStop=MilieuAncien2; // sinon, si le milieu ancien 2 est utilisable on l'utilise end else NivStop=MogB; // sinon on utilise simplement le bas de la bande mogalef end end if (Position = -1) then begin if (MilieuMogH) then NivStop=MilieuAncien1; // si décalage vers le bas et un nouveau stop est utilisable, on l’utilise

    if position < position[1] then begin // si on entre en position if MilieuAncien1 > MogH then begin
    NivStop=MilieuAncien1; // si le milieu ancien 1 est utilisable on l’utilise
    end
    if (MilieuAncien1 <= MogH) and (MilieuAncien2 > MogH) then begin
    NivStop=MilieuAncien2; // sinon, si le milieu ancien 2 est utilisable on l’utilise
    end
    if (MilieuAncien1 <= MogH) and (MilieuAncien2 <= MogH) then begin NivStop=MogH; // sinon on utilise simplement le haut de la bande mogalef end end end if (date<01_06_2025) then begin SetStopPrice(NivStop); end//@@@cs:1347392-3996725-1114211_cs@@@

    #171177

    Bonjour

    Une traduction de ce code en prt  m’intéresserait également

    #171510

    Bonsoir,
    Eric Lefort est toujours innovant et depuis longtemps, je suis curieux de voir son adaptation sur PRT.
    Donc intéressé aussi;-)
    A suivre…
    Merci à l’équipe.

    #200991

    Bonjour Manoit, Choliver

    Avez vous eu une  réponse  avec traduction de ce code ci-dessus???

    #201027
Viewing 5 posts - 1 through 5 (of 5 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login