Mogalef bands et Mogalef bands Stop Nano Trader
Forums › ProRealTime forum Français › Support ProBuilder › Mogalef bands et Mogalef bands Stop Nano Trader
- This topic has 4 replies, 4 voices, and was last updated 2 years ago by supertiti.
Tagged: mogalef
-
-
05/29/2021 at 7:24 PM #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 mogalefAutant 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 arrondisY = 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 barresif (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
endend
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];
endend
endinterpretation // 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;
endNivStop=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@@@06/05/2021 at 5:35 AM #17117706/09/2021 at 8:53 PM #17151009/19/2022 at 7:18 AM #20099109/19/2022 at 2:43 PM #201027BANDES DE MOGALEF1234567891011121314151617181920212223242526// BANDES DE MOGALEF Morando Galabert LefortCP=(open+high+low+2*close)/5F=LinearRegression[3](CP)E=std[7](F)if barindex<8 thenMediane = undefinedBandeHaute = undefinedBandeBasse = undefinedElseBandeHaute = F+(E*2)BandeBasse = F-(E*2)if FBandeBasse[1] thenE=E[1]BandeHaute=BandeHaute[1]BandeBasse=BandeBasse[1]endifMediane =(BandeHaute+BandeBasse)/2Endifreturn BandeHaute coloured (255,154,51) as"Mogalef Bande Haute", Mediane coloured (102,0,204) as "Mogalef Mediane", BandeBasse coloured (0,204,255) as "Mogalef Bande Basse" -
AuthorPosts
Find exclusive trading pro-tools on