Bonjour à tous,
Avez vous connaissance d’un problème avec l’instruction TIME lorsque l’on fait un backtest en daily ?
En effet, pour l’exemple, si je lance le code suivant sur Dax 1 heure il fonctionne parfaitement, mais si je suis en jour, il me renvoie zero. Je pense que cela a à voir avec le mode tick qui ne veut pas fonctionner
Mais avez vous également ce problème ?
Merci d’avance et bonne journée
Zilliq
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 090000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 171500
// 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 = 090000
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 = 171500
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
c1 = (rsi[14] crosses over 50)
IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
c2 = (rsi[14] crosses under 50)
IF c2 THEN
SELL AT MARKET
ENDIF
Le code est lu une seule fois à la clôture, donc on ne peut pas tester les conditions horaires que tu as codé.
Merci Nicolas
Par contre comment cela à la cloture, car ce sont des conditions d’ouverture d’un trade ?
Zilliq
Je ne comprends pas la question venant de ta part 🙂
On ne peut pas tester des conditions intraday dans un timeframe daily. C’est comme si sur un TF 5-minutes, on voulait tester des conditions à la seconde près (chose possible en utilisant le multi timeframe toutefois, mais c’est pas le sujet).
Comme tu le sais, le code est lu une seule fois à la clôture de bougie et l’ordre envoyé à l’Open suivant. Donc à la clôture de bougie, on ne peut pas tester “timeEnterBefore AND timeEnterAfter”, puisque ces conditions se sont déroulés dans la bougie et donc dans le passé.
Merci Nicolas,
Effectivement je ne me souvenais plus que malheureusement les conditions n’étaient testées qu’en fin de journée en daily
C’est quand même dommage que cela ne soit pas testé en journée, à moins de passer en UT inférieure, mais avec des indicateurs sur une UT daily
Passe une très bonne fin de journée
Voici le code de la stratégie qui utilise le timeframe daily pour ta condition sur le RSI avec prise de position dans la bougie (et donc sans l’information définitive que le RSI aura bien croisé à la fin de journée).
Tu peux tester cette stratégie dans tous les timeframes qu’il te plaira 🙂 Tu testeras si le RSI[14] a croisé le niveau 50, jusqu’à 86400 fois avec le timeframe 1 seconde.
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 090000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 171500
timeframe(daily)
irsi = rsi[14]
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 = 090000
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 = 171500
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
c1 = (irsi crosses over 50)
IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 SHARES AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
c2 = (irsi crosses under 50)
IF c2 THEN
SELL AT MARKET
ENDIF
Très bonne idée 😉
Merci Nicolas et très bonne fin de journée
Zilliq