Bonjour,
J’essaie de faire un backtest pour tester une stratégie à l’aide de l’assistant création simplifiée , mais je n’arrive pas à indiquer la condition suivante en utilisant le wizzard :
J’achète si l’indicateur SuperTrend[3,10] est haussier
Je vends si l’indicateur SuperTrend[3,10] est baissier
Merci d’avance
Tarik
Si le SuperTrend est haussier c’est parce que le Close l’a croisé à la hausse à un moment et vice-versa pour un SuperTrend baissier. Il faut donc simplement tester un croisement du Close avec le SuperTrend.
Merci pour votre réponse. cela règle une partie de mon probléme , le deuxième point est que cette vérification de supertrend doit se faire dans une unité de temps ( 30 min ) qui est différente de l’unité de temps où j’ai mes signaux d’achat /vente ( 5 min ), voici mon code :
Dans ce code il n y a aucune distinction de 30 et 5 min, malgré que j’ai positionné le curseur sur l’UT 30 min pour ajouter la condition avec le supertrend
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
noEntryBeforeTime = 093000
timeEnterBefore = time >= noEntryBeforeTime
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
noEntryAfterTime = 163000
timeEnterAfter = time < noEntryAfterTime
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Conditions pour ouvrir une position acheteuse
ignored, ignored, indicator1 = CALL "Bande de Mogalef"
c1 = (close <= indicator1)
indicator2 = SuperTrend[3,10]
c2 = (indicator2 >= close)
IF (c1 AND c2) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
indicator3, ignored, ignored = CALL "Bande de Mogalef"
c3 = (close >= indicator3)
indicator4 = SuperTrend[3,10]
c4 = (indicator4 >= close)
IF c3 AND c4 THEN
SELL AT MARKET
ENDIF
Thanks
Il n’y a pas de support multi timeframe dans l’assistant de création de code, il faut le faire à la main.
Donc si je comprends bien, il faut prendre les signaux en UT 5 minutes avec les infos du SuperTrend 30 minutes ? Idem pour les bandes de Mogalef ?
Mais, faut-il prendre l’info des indicateurs en cours de chandelier 30 minutes ou doit-on prendre celles de la barre 30 min précédente ?
Pour mémoire, si on prend un croisement d’un Close 5-min sur un ST 30-min, à la fin du chandelier 30-min, le Close 5-min aura peut être repassé dans le sens inverse et donc le ST n’aura pas changé de couleur.
Effectivement ; les signaux d’achat/Vente je veux les prendre dans l’UT 5 min en se basant sur les bandes de Mogalef (lorsque le prix touche la bande supérieure ou inférieur ). Et je valide ces signaux en se basant uniquement sur la supertrend dans l’UT 30 min. Je n’ai pas encore indiquer les conditions de sortie ( quand je le fait j’ai une perte totale du capital,j’ai laissé ça de coté pour l’instant)
PS : les Bandes de Mogalef sur l’UT 30 Min je les utilise uniquement pour définir le SL et le TP ( à développer dans un deuxième temps ).
Les résultats du backtest ne sont pas corrects pour l’instant car j’ai du mal à intégrer l’algo que j’ai en tête ( première partie de l’algo ci dessus ).
Bàv
Ok donc si on veut utiliser les infos du ST en 30-minutes on fait comme ceci:
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
timeframe(30 minutes,updateonclose)
st = SuperTrend[3,10]
timeframe(default)
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
noEntryBeforeTime = 093000
timeEnterBefore = time >= noEntryBeforeTime
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
noEntryAfterTime = 163000
timeEnterAfter = time < noEntryAfterTime
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Conditions pour ouvrir une position acheteuse
ignored, ignored, indicator1 = CALL "Bande de Mogalef"
c1 = (close <= indicator1)
c2 = (st >= close)
IF (c1 AND c2) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
indicator3, ignored, ignored = CALL "Bande de Mogalef"
c3 = (close >= indicator3)
c4 = (st >= close)
IF c3 AND c4 THEN
SELL AT MARKET
ENDIF
Merci
J’ai des résultats contradictoires ( voir pièces jointes)
Je vais un peu analyser tout ça et revenir vers vous
Bonsoir,
Non , je n’y arrive pas , par manque de connaissance du language ! dommage ,je suis nouveau dans ce monde depuis octobre 🙂
Pourquoi penses-tu obtenir les mêmes résultats entre ces 2 deux stratégies qui sont différentes ? Dans l’une tu vérifies un ST 5-min et dans l’autre un ST en 30 minutes, ces 2 informations sont différentes, d’où des prises de positions qui ne sont pas comparables.
Pour afficher le Supertend 30-minutes sur ton graphique 5-minutes, tu peux ajouter à la fin du code la ligne :
GRAPH st
Bonjour
Je me suis mal exprimé , Sorry :
Mon algorithme dit qu’il faut vérifier le ST uniquement dans l’UT 30 min , quand on se base sur le code que vous m’avez transmis qui prend en compte ce check en UT 30 j’obtiens un résultat négatif dans backprotest (- 4272,16 eur de capital)
Voilà ce que je veux faire d’une manière algorithmique Pure :
J’achète (2 conditions) :
Condition 1 : Lorsque le cours enfonce (touche ou dépasse ) la bande inférieure sans provoquer de déplacement des bandes En UT 5 minutes
Condition 2 : Lorsque la tendance est haussière en UT 30 min (c’est à dire : quand le SUPER TREND est visuellement vert sur une période pertinente de bougies 30 min ) -voir pièce jointe pour illustrer
Exit achat :
Definir un Stop loss et un TP dans l’UT 30 min ( De X points chacun )
Je vends (2 conditions) :
Condition 1 : Quand le cours enfonce (touche ou dépasse ) la bande supérieure sans provoquer de déplacement des bandes En UT 5 minutes
Condition 2 : Quand la tendance est baissière en UT 30 min ( c’est à dire: quand le SUPER TREND c’est visuellement rouge sur une période pertinente de bougies 30 min) -voir pièce jointe pour illustrer
Exit vente :
Définir un Stop loss et un TP dans l’UT 30 min ( De X points chacun )
Voilà c’est tout , si j’arrive à implémenter ça sur proback test je serai content 🙂
Et merci encore pour votre aide
Ci-joint le code de la stratégie. un TP/SL ce sont des niveaux de prix, ils ne sont pas liés à une unité de temps.
La quantité de bougies où le ST est vert ou rouge est définit par la variable X à la ligne 3 (par défaut sur 5).
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
x = 5 //quantité de bougies tendance SuperTrend
stoploss = 50
takeprofit = 100
timeframe(30 minutes,updateonclose)
st = SuperTrend[3,10]
bullish = summation[x](close>st)=x
bearish = summation[x](close<st)=x
timeframe(default)
noEntryBeforeTime = 093000
timeEnterBefore = time >= noEntryBeforeTime
noEntryAfterTime = 163000
timeEnterAfter = time < noEntryAfterTime
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
up, ignored, down = CALL "Bande de Mogalef"
ibuy = (close <= down) and down=down[1]
isell = (close >= up) and up=up[1]
IF (ibuy AND bullish) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 SHARES AT MARKET
ENDIF
IF (isell AND bearish) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
set stop ploss stoploss
set target pprofit takeprofit
//debug
graphonprice st
graph bullish coloured(0,255,0)
graph bearish coloured(255,0,0)
Merci Nicolas , je vais regarder ça et revenir vers vous..
Re Bonjour
Le résultat est toujours négatifs sur un backtest de 3 mois ( 3 décembre au 3 mars 2020), c’est très étrange (Capture d’écran 2020-03-03 à 19.49.57.png ), quand j’analyse un peu :
1-J’ai l’impression que les trades sont en cours d’exécution même pendant les heures / jours où l’algo n’autorise pas de trading ( plage de trading : uniquement entre 9:30 et 16h00 pendant les jours ouvrés ) – pas le week end
2- Le système a arrêté d’entrer en position brusquement entre le 6 et le 7 février ( voir petite croix rouge dans la courbe des grains/perte- Capture d’écran 2020-03-03 à 20.12.24 )
3- je remarque aussi que l’algo parfois entre en position alors qu’il ne devrait pas ,exemple : le 24 janvier à 11:05 (la bougie n’a pas touché la bande inférieur ) , il ferme cette même positon à 17:20 ( heure non autorisé dans le code ) ( Capture d’écran 2020-03-03 à 20.33.09.png )
Toute suggestion sera la bien venue
Bàv
Bonjour Nicolas,
Je me permet de revenir vers vous ,car j’avoue que je suis un peu frustré de ne pas pouvoir faire ce backtest , avez eu l’opportunité de voir d’où pouvait provenir le probléme ?
Merci
Pour ma part tout fonctionne correctement ?! (voir image). J’utilise cette version des bandes de mogalef (à vérifier avec la tienne)
CP=(open+high+low+2*close)/5
F=LinearRegression[3](CP)
E=std[7](F)
if barindex<8 then
Mediane = undefined
BandeHaute = undefined
BandeBasse = undefined
Else
BandeHaute = F+(E*2)
BandeBasse = F-(E*2)
if F<BandeHaute[1] and F>BandeBasse[1] then
E=E[1]
BandeHaute=BandeHaute[1]
BandeBasse=BandeBasse[1]
endif
Mediane =(BandeHaute+BandeBasse)/2
Endif
return 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"
Le backtest est bien entendu à lancer en TF 5-minutes.
- les conditions horaires sont strictes, donc il ne devrait pas y avoir de nouveaux orders ouverts à ces moments, il faut vérifier si le graphique de l’instrument n’est pas en horaire personnalisée et utilise bien celui du marché.
- normal, manque de marge !
- pour mémoire, le code est lu à la fin de la bougie et l’ordre exécuté à l’open suivant, donc la flèche du backtest ça n’est pas la bougie où le code a vérifié les conditions, c’est bien celle juste avant
Concernant les performances, je vois pas bien ce que je peux faire par contre … 🙄