Using Mogalef tools for DOW trading system

Using Mogalef tools for DOW trading system

Postby Eric Lefort » 07 Feb 2018 19:38

A lot of people use the famous WHS signal "EL Bullish Breakout Line" (in WHS Store, free) for powerfull trading systems. Here is a trading system for DOW JONES or Wall Sreet CFD, using this signal, a trend filter, a trailing stop and the standard Profit Target :

2017 avec MTF.JPG


The parameters can be see here : https://www.mogalef-trading.com/dow-jones-complete-trading-system-for-20
And the complete model can be download here : https://www.mogalef-trading.com/conferences-whselfinvest-2018 password : Aldebaran2018

You can see a trailing stop named "EL_Stop_Intelligent_V2. It's the news version (ameliorated) of an ancient traling stop named "EL_Stop_Intelligent".
What is this stop doing?
- It take place out of volatility noise
- It screens tops or bottoms to ajust its level.
- It screens variations of volatility and try to protect gains without be to close of the price.
- It's trying to stay in the market and take profit with large moves.

Intelligent stop V2 is a part of Mogalef Tools (Eric Lefort) available in the WHS Store of the Nanotrader, but I have decide to make you present of the first version of this stop.
Here is the code, hoping you'll enjoy it !


Express stop EL_Stop_Intelligent
// Conception Eric Lefort pour Mogalef et WHSelfinvest. 2013-10-30_2013-12-11

Vars

input $Quality(1,3,2); // Qualité des hauts ou bas exprimé en nombre de bougies à droite et à gauche
input $RecentVolat(1,3,2); // Durée sur laquelle est mesurée la volatilité récente
input $RefVolat(10,50,20); // Durée sur laquelle est mesurée la volatilité de référence.
input $CoefVolat(1,30,5); // Coefficient multiplicateur de l'ATR ET de l'écart à la normale de l'ATR (Space)
Input $FirstLowOrMore(1,3,2); // S'aligne (à la hausse) sur le plus bas des X derniers bas.
Input $FirstHighOrMore(1,3,2);// S'aligne (à la baisse) sur le plus haut des X derniers hauts.
input $WaitForXtrem(0,3,0); // Attendre (ou pas) que l'extrème de x bougies soit passé

series B0,B1,B2,B3; //,B4,B5;
series haut;
series bas;
series H0,H1,H2,H3; //,H4,H5;
series CBI;
series tr,avtr,avtrref,space,stlong,stoplong,flaglong;
// note : stlong,stoplong et flaglong sont également utilisées pour les courts.
series HH0,BB0;
numeric i;

calculation
CalculateAtEveryTick(false);
CBI= currentbarindex();

// ***************************************DEBUT ATRS
// ***L'ATRS est la véritable valeur de l'ATR calculée avec une moyenne mobile simple***
if isfinalbar() then begin // calcul de la série tr
for i=0 to CBI
begin
if (h[i]-l[i])>absvalue(c[i+1]-l[i]) then
if (h[i]-l[i])>absvalue(h[i]-c[i+1]) then
tr[i]=(h[i]-l[i]);
else
tr[i]=absvalue(h[i]-c[i+1]);
else
if absvalue(c[i+1]-l[i])>absvalue(h[i]-c[i+1]) then
tr[i]=absvalue(c[i+1]-l[i]);
else
tr[i]=absvalue(h[i]-c[i+1]);
end


MovingAverage(tr,avtr,$RecentVolat);
MovingAverage(tr,avtrref,$RefVolat);
end // la série tr n'est calculée qu'une seule fois par barre.
//*****************************************FIN ATRS


//******************************************************* Calcul espace additionel
// C'est l'espace ajouté aux niveaux des bas (ou hauts) qui servent de référence aux placements des stops.
// Egal à la différence : 2 fois la volat de référence (20 périodes?) moins 1 fois la volat récente
if isfinalbar() then begin
for i=0 to CBI
begin
Space[i] = (((2*avtrref[i])-(avtr[i]))*$CoefVolat)/5;
end
end // la série Space n'est calculée qu'une fois par barre
//******************************************************* Calcul espace additionel FIN


// Importance des hauts et des bas : dépends de la variable $Quality
if isfinalbar() then begin
for i=CBI downto 0
begin
haut[i]=0;
bas[i]=0;
if $Quality=1 then begin
if ((h[i]<h[i+1]) and (h[i+1]>h[i+2])) or ( (h[i]<h[i+1]) and (h[i+1]>=h[i+2]) and (h[i+2]>h[i+3]) ) then haut[i]=1;
if ((l[i]>l[i+1]) and (l[i+1]<l[i+2])) or ((l[i]>l[i+1]) and (l[i+1]<=l[i+2]) and (l[i+2]<l[i+3])) then bas[i]=1;
end
else begin
if ( ($Quality=2) and (h[i]<h[i+2]) and (h[i+1]<h[i+2]) and (h[i+3]<=h[i+2]) and (h[i+2]>h[i+4]) ) then haut[i]=2;
if ( ($Quality=2) and (l[i]>l[i+2]) and (l[i+1]>l[i+2]) and (l[i+3]>=l[i+2]) and (l[i+4]>=l[i+2]) ) then bas[i]=2;
if ( ($Quality>=3) and (h[i]<h[i+3]) and (h[i+1]<h[i+3]) and (h[i+2]<=h[i+3]) and (h[i+3]>=h[i+4]) and (h[i+3]>=h[i+5]) and (h[i+3]>=h[i+6]) ) then haut[i]=3;
if ( ($Quality>=3) and (l[i]>l[i+3]) and (l[i+1]>l[i+3]) and (l[i+2]>=l[i+3]) and (l[i+3]<=l[i+4]) and (l[i+3]<=l[i+5]) and (l[i+3]<=l[i+6]) ) then bas[i]=3;
end
// Stockage des hauts
// test de haut actuel
if ( haut[i]>0 ) then begin //si on a un nouveau haut on décale
H3[i]=H2[i+1];
H2[i]=H1[i+1];
H1[i]=h[i+$Quality];
end
else begin //sinon on garde les anciennes valeurs
H3[i]=H3[i+1];
H2[i]=H2[i+1];
H1[i]=H1[i+1];
end
// Stockage des bas
// test de bas actuel
if ( bas[i]>0 ) then begin //si on a un nouveau BAS on décale
B3[i]=B2[i+1];
B2[i]=B1[i+1];
B1[i]=L[i+$Quality];
end
else begin //sinon on garde les anciennes valeurs
B3[i]=B3[i+1];
B2[i]=B2[i+1];
B1[i]=B1[i+1];
end
end
end // les séries B et H ne sont calculées qu'une fois par barre


// ****** On met à jour la variable flaglong pour test de position ou de position antérieure à la bougie présente***
if MarketPosition() = 1 then flaglong=1; // flag pour test de position antérieure
if MarketPosition() = -1 then flaglong=-1; // flag pour test de position antérieure

if $WaitForXtrem>0 then begin //*******************************************************************
// Note : placé ici pour utiliser lorsqu'on ne remonte le stop qu'au passage d'un Xtreme-----------]
// Sinon, on peut le supprimer
BB0=B1; //
if $WaitForXtrem=2 then BB0=min(B1,B2);
else begin
if $WaitForXtrem>2 then BB0=min(min(B1,B2),B3);
end
// ------------------------------------------------------------------------------------------------]
// Note : placé ici pour utiliser lorsqu'on ne remonte le stop qu'au passage d'un Xtreme-----------]]
// Sinon, on peut le supprimer
HH0=H1;
if $WaitForXtrem=1 then H0=H1;
else begin
if $WaitForXtrem=2 then HH0=max(H1,H2);
else begin
if $WaitForXtrem>=3 then HH0=max(max(H1,H2),H3);
end
end
// ------------------------------------------------------------------------------------------------]]
end //*********************************************************************************************

If flaglong=1 then begin //******ZONE DE CALCUL SI POSITION LONGUE

// ******On donne à B0 la valeur du bas le plus bas dans les X derniers bas. C'est la base du stop******
B0=B1; // cas où $FirstLowOrMore=1
if $FirstLowOrMore=2 then B0=min(B1,B2);// cas où $FirstLowOrMore=2
else begin
if $FirstLowOrMore>2 then B0=min(min(B1,B2),B3);// cas où $FirstLowOrMore=3
end

//******************************************************* Calcul du niveau de stop de départ
Stlong=B0-Space;
if ((Stlong>c) or (Stlong<0.01)) then stlong=(c-absvalue(Space));
//******************************************************* Calcul du niveau de stop de départ FIN

If ((flaglong[1] = 1) and (stlong<stoplong[1])) or ((($WaitForXtrem>0) and (h<=hh0[1])))then begin // si on était acheteur et que le stop ne doit pas bouger
stoplong=stoplong[1]; // on ne bouge pas
end
else begin // mais s'il doit être plus près
stoplong=stlong; // on ajuste
end

if MarketPosition() = 1 then //Long position : on met le stop
SetStopPrice(Stoplong);

end ////////******ZONE DE CALCUL SI POSITION LONGUE FIN



If flaglong=-1 then begin //******ZONE DE CALCUL SI POSITION COURTE

// ******On donne à H0 la valeur du haut le plus haut des X derniers hauts. C'est la base du stop******
H0=H1;

if $FirstHighOrMore=2 then H0=max(H1,H2);
else begin
if $FirstHighOrMore>=3 then H0=max(max(H1,H2),H3);
end


//******************************************************* Calcul du niveau de stop de départ
Stlong=H0+Space;
if Stlong<c then stlong=(c+absvalue(Space));
//******************************************************* Calcul du niveau de stop de départ FIN

If ((flaglong[1] = -1) and (stlong>stoplong[1])) or ((($WaitForXtrem>0) and (l>=bb0[1]))) then begin // si on était vendeur et que le stop ne doit pas bouger
stoplong=stoplong[1]; // on ne bouge pas (pas de stop suiveur qui s'éloigne!)
end
else begin // mais s'il doit être plus près
stoplong=stlong; // on ajuste

end

if MarketPosition() = -1 then //Short position : on met le stop
SetStopPrice(Stoplong);

end ////////******ZONE DE CALCUL SI POSITION COURTE FIN
You don't have the permissions to see the files or images. You need to log in or register in order to see the full message.
Eric Lefort
 
Posts: 7
Joined: 22 May 2014 12:40

Return to WHS NANOTRADER - EXPRESS PROGRAMMING

Who is online

Users browsing this forum: No registered users and 0 guests

cron