Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
14 février 2008 4 14 /02 /février /2008 13:05

Cycles : les publications de J. Ehlers, partie 3.

 

Dans le numéro d'août 2006 de S&C, on peut lire un article de J. Ehlers : "Modeling The Market = Building Trading Strategies".  Il y présente 3 indicateurs ainsi que 3 stratégies. 

 

Une vue du Bund avec les indicateurs : en fenêtre 1,  le cours avec l'Instantaneous Trendline (en blanc) et le Modeling The Market (en jaune), en fenêtre 2, l'indicateur Cyclic Component et en fenêtre 3, le StochasticRSI transformation appliqué au Model.

 

hk72.gif

 

Voici les codes pour Prorealtime, on peut faire varier le prix de référence (medianprice par défaut), la longueur de la moyenne (20 par défaut) ainsi que les paramètres du StochasticRSI :

 

pr=(high+low)/2
len=20
sma=average[len](pr)
sl=pr-pr[len-1]
ssl=(sl+2*sl[1]+2*sl[2]+sl[3])/6
itrend=sma+0.5*ssl

a=(1-SIN(360/len))/cos(360/len)
if barindex<50 then
   
    hp=exponentialaverage[2*len+1]((1+a)*(pr-pr[1]))
else
   
    hp=(0.5*(1+a)*(pr-pr[1]))+(a*hp[1])
endif

shp=(hp+2*hp[1]+2*hp[2]+hp[3])/6
model=itrend+shp

return itrend,model


----------------------------------------

 

pr=(high+low)/2
len=20
a=(1-SIN(360/len))/cos(360/len)
if barindex<50 then
    hp=exponentialaverage[2*len+1]((1+a)*(pr-pr[1]))
else
    hp=(0.5*(1+a)*(pr-pr[1]))+(a*hp[1])
endif
shp=(hp+2*hp[1]+2*hp[2]+hp[3])/6

return shp,0

 

-----------------------------------

 

pr=(high+low)/2
len=20
rlen=8
stolen=8
wlen=5
sma=average[len](pr)
sl=pr-pr[len-1]
ssl=(sl+2*sl[1]+2*sl[2]+sl[3])/6
itrend=sma+0.5*ssl

a=(1-SIN(360/len))/cos(360/len)
if barindex<50 then
    hp=exponentialaverage[2*len+1]((1+a)*(pr-pr[1]))
else
    hp=(0.5*(1+a)*(pr-pr[1]))+(a*hp[1])
endif
shp=(hp+2*hp[1]+2*hp[2]+hp[3])/6
model=itrend+shp

cu=0
cd=0
cu=max(0,model-model[1])
cd=max(0,model[1]-model)
cu1=average[rlen](cu)
cd1=average[rlen](cd)
if cuave<>-cdave then
    rsio=cuave/(cuave+cdave)
endif
if barindex >60 then
    cuave=(cuave[1]*(rlen-1)+cu1)/rlen
    cdave=(cdave[1]*(rlen-1)+cd1)/rlen
endif
if cuave<>-cdave then
    rsio=cuave/(cuave+cdave)
endif
mrs=rsio
hir=highest[stolen](mrs)
lor=lowest[stolen](mrs)
stor=(mrs-lor)/(hir-lor)
stari=0
div=0
for i=0 to wlen-1
    stari=stari+(wlen-i)*stor[i]
    div=div+i+1
next
stori=stari/div
trig=0.05+0.9*stori[1]
if stori>trig then
    flag=-.1
else
    flag=0
endif
if stori<trig then
    flagb=-.1
else
    flagb=0
endif

return stori,trig,flag,flagb

 

-----------------------------------

 

La première stratégie utilise uniquement l'Instantaneous Trendline.  On rentre à l'achat quand la courbe croise à la hausse l'indicateur retardé de 2 périodes.  Les conditions de vente sont inverses, on a un système SAR.  Sur la vue suivante, j'ai  optimisé la période de la moyenne et le nombre de barres de retard.  Voici l'EC avec len=27 et delay=3 (pas de slippage, frais de 4 eur A/R par contrat) :

 

hk73.gif

 

Et maintenant, le code du backtest pour Prorealtime :

 

pr=(high+low)/2
len=a
rem b=delay
sma=average[len](pr)
sl=pr-pr[len-1]
ssl=(sl+2*sl[1]+2*sl[2]+sl[3])/6
itrend=sma+0.5*ssl
REM Achat
c1 = (itrend CROSSES OVER itrend[b])
IF c1 THEN
    BUY 1 SHARES AT MARKET THISBARONCLOSE
ENDIF
REM Vente
c2 = (itrend CROSSES UNDER itrend[b])
IF c2 THEN
    SELL  AT MARKET THISBARONCLOSE
ENDIF
REM Vente à découvert
c3 = (itrend CROSSES UNDER itrend[b])
IF c3 THEN
    SELLSHORT 1 SHARES AT MARKET THISBARONCLOSE
ENDIF
REM Rachat
c4 = (itrend CROSSES OVER itrend[b])
IF c4 THEN
    EXITSHORT  AT MARKET THISBARONCLOSE
ENDIF

 

--------------------------------------------------------------------------------

 

La seconde stratégie consiste à prendre position au croisement du StochasticRSI avec son signal, c'est également un système SAR.  Voici une vue de l'EC avec les paramètres optimisés, len=19, rlen=16, stolen=19, wlen=7 (pas de slippage et 4 eur de frais A/R par contrat) :

 

hk74.gif

 

Et le code Prorealtime du backtest :

 

pr=(high+low)/2
len=aa
rlen=bb
stolen=cc
wlen=dd
sma=average[len](pr)
sl=pr-pr[len-1]
ssl=(sl+2*sl[1]+2*sl[2]+sl[3])/6
itrend=sma+0.5*ssl

a=(1-SIN(360/len))/cos(360/len)
if barindex<50 then
    hp=exponentialaverage[2*len+1]((1+a)*(pr-pr[1]))
else
    hp=(0.5*(1+a)*(pr-pr[1]))+(a*hp[1])
endif
shp=(hp+2*hp[1]+2*hp[2]+hp[3])/6
model=itrend+shp

cu=0
cd=0
cu=max(0,model-model[1])
cd=max(0,model[1]-model)
cu1=average[rlen](cu)
cd1=average[rlen](cd)
if cuave<>-cdave then
    rsio=cuave/(cuave+cdave)
endif
if barindex >60 then
    cuave=(cuave[1]*(rlen-1)+cu1)/rlen
    cdave=(cdave[1]*(rlen-1)+cd1)/rlen
endif
if cuave<>-cdave then
    rsio=cuave/(cuave+cdave)
endif
mrs=rsio
hir=highest[stolen](mrs)
lor=lowest[stolen](mrs)
stor=(mrs-lor)/(hir-lor)
stari=0
div=0
for i=0 to wlen-1
    stari=stari+(wlen-i)*stor[i]
    div=div+i+1
next
stori=stari/div
trig=0.05+0.9*stori[1]

REM Achat
c1 = (stori CROSSES OVER trig)
IF c1 THEN
    BUY 1 SHARES AT MARKET THISBARONCLOSE
ENDIF
REM Vente
c2 = (stori CROSSES UNDER trig)
IF c2 THEN
    SELL  AT MARKET THISBARONCLOSE
ENDIF
REM Vente à découvert
c3 = (stori CROSSES UNDER trig)
IF c3 THEN
    SELLSHORT 1 SHARES AT MARKET THISBARONCLOSE
ENDIF
REM Rachat
c4 = (stori CROSSES OVER trig)
IF c4 THEN
    EXITSHORT  AT MARKET THISBARONCLOSE
ENDIF

Partager cet article

Repost 0
Published by hk_lisse - dans Les Cycles
commenter cet article

commentaires