Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
12 février 2008 2 12 /02 /février /2008 18:39

Comment tester une stratégie sur un ensemble de valeurs ?

 

Une des lacunes du logiciel Prorealtime est de ne pas pouvoir tester les stratégies de trading sur un portefeuille d'actions.  Il faut à chaque fois relancer le backtest en changeant le support pour ainsi appliquer le système de trading aux titres un par un.  Avec une stratégie simple, je vais montrer comment on peut améliorer la chose.

 

La stratégie : achat lors du croisement A+ (de type fort) de la moyenne 7 simple avec la moyenne mobile 20 simple.  On prend position à la cloture de la barre si celle-ci est inférieure à 75% de la Bollinger Bandwdth et le high < à 85%, l'objectif est la Bollinger supérieure et le stop une cloture sous la moyenne 20 simple.  Cette stratégie sert juste d'exemple, rien ne dit qu'elle est gagnante, attention !

 

Le code :

 

REM Achat

indic1 = Average[7](close)
c1 = (indic1>indic1[1] and indic1[1]>indic1[2])
indic2=std[20](close)
indic3 = Average[20](close)
c2 = (indic3>indic3[1] and indic3[1]>indic3[2])
c10=(indic1 crosses over indic3)
indic5 = indic3+indic2
c3 = (close <= indic5 and close > indic3)
indic6 = BollingerUp[20](close)
c4 = (high <= ((indic6-indic5)*0.4)+indic5)
c11=(close>open)
IF c1 AND c2 AND c3 AND c4 and c10 and c11 THEN
    BUY 20000 CASH AT MARKET THISBARONCLOSE
ENDIF

REM Vente
sell at indic6 limit
c5 = (close<indic3)
IF c5 THEN
    SELL  AT MARKET THISBARONCLOSE
ENDIF

 

Une vue d'un trade sur  DELL, M7 haussière (en jaune), M20 haussière (en blanc), close<75% bbw (en ciel)  :

 

hk43.gif

 

L'astuce consiste à construire un indicateur qui fera office de backtest.  Voici le code de l'indicateur pour le backtest pris en exemple, on voit bien que les 2 courbes sont identiques.

 

hk44.gif

 

REM Achat
once cap=100000
indic1 = Average[7](close)
c1 = (indic1>indic1[1] and indic1[1]>indic1[2])
indic2=std[20](close)
indic3 = Average[20](close)
c2 = (indic3>indic3[1] and indic3[1]>indic3[2])
c10=(indic1 crosses over indic3)
indic5 = indic3+indic2
c3 = (close <= indic5 and close > indic3)
indic6 = BollingerUp[20](close)
c4 = (high <= ((indic6-indic5)*0.4)+indic5)
c11=(close>open)
IF c1 AND c2 AND c3 AND c4 and c10 and c11 THEN
    nbr=round (20000/close)
    cap=cap-(nbr*close)-5
    flag=1
ENDIF

REM Vente
if high>=indic6[1] and flag=1 then
    flag=0
    cap=cap+(nbr*indic6[1])-5
endif
IF close<indic3 and flag=1 tHEN
    flag=0
    cap=cap+(nbr*close)-5
endif
if flag=1 then
    capital=cap+(nbr*close)
else
    capital=cap
endif
return capital

 

Maintenant, je peux appliquer cet indicateur (comme critère) sur un screener.  De nouveau, on se retrouve confronté aux limites du logiciel : seules 30 valeurs sont affichées (je dois donc procéder en plusieures fois), le screener étant limité aux  254 derniéres barres, les résultats du backtest concernent ce même intervalle de temps.

 

Une vue du screener (on retrouve bien les données pour DELL, en 15ième position) :

 

hk45.gif

 

Une derniére astuce : si je souhaite connaître les signaux pour une certaine période comprise dans les 254 dernières barres, on peut faire un tri avec une boucle.  Ici, un exemple sur les 10 dernières barres (toujours avec la même stratégie) :

 

REM exemple de screener avec boucle
for i=0 to 9
    indic1 = Average[7](close)
    c1 = (indic1>indic1[1] and indic1[1]>indic1[2])
    indic2=std[20](close)
    indic3 = Average[20](close)
    c2 = (indic3>indic3[1] and indic3[1]>indic3[2])
    c10=(indic1 crosses over indic3)
    indic5 = indic3+indic2
    c3 = (close <= indic5 and close > indic3)
    indic6 = BollingerUp[20](close)
    c4 = (high <= ((indic6-indic5)*0.4)+indic5)
    c11=(close>open)
    IF c1 AND c2 AND c3 AND c4 and c10 and c11 THEN
        flag=1
    else
        flag=0
    ENDIF
         
    c15=(flag=1)
    criteria = volume
    c2=(volume>1000000)
    SCREENER[c15[i] and c2[i]] (criteria AS "volumei")
next

 

L'écran me retourne les valeurs avec un signal sur les 10 dernières barres (ça dure assez longtemps mais ça marche).  On voit que pour cette stratégie, il y en a eu très peu. 

 

hk46.gif

 

Partager cet article
Repost0

commentaires