Bonjour à tous,
je ne comprends pas très bien j’ai une stratégie automatisée qui ne prend pas en compte mon code ci-dessous alors qu’il fonctionne sur d’autres.
En fait je voudrais clôturer mes positions en fin de semaine pour ne pas rester overweek. Sur le papier ca semble simple mais pourtant, c’est comme si depuis ce matin la fonction OpenDayOfWeek n’était plus prise en compte par PRT 🙂
IF longonmarket THEN
IF OpenDayOfWeek = 5 AND time >= 210000 THEN
sellshort at market
ENDIF
ENDIF
et
IF shortonmarket THEN
IF OpenDayOfWeek = 5 AND time >= 210000 THEN
exitshort at market
ENDIF
ENDIF
Pour info, je suis sur une stratégie Actions en UT Daily et avec des instructions d’achat et de vente de ce type :
IF Ca1 and Ca2 THEN
BUY n SHARES AT MARKET
Set target %profit 2
ENDIF
et
IF Cv1 and Cv2 THEN
SELLSHORT n SHARES AT MARKET
Set target %profit 1
ENDIF
Malgré ce code, j’ai encore dans mes backtests des positions qui courent sur plus de 10 barres !
Merci pour votre aide !
Gregg
Les stratégies sont TOUJOURS exécutées à la fermeture d’une bougie. Ainsi, le code est exécuté à la fermeture de la bougie du vendredi, ce qui est la fermeture de transactions financières dans le monde entier.
Votre position restera ouverte toute la nuit et sera fermée lorsque les transactions financières sont ouvertes pour la nouvelle semaine.
Vous voudrez peut-être recourir au support MTF (Multiple Time Frame support) pour utiliser les TF intraday pour accomplir ce que vous voulez.
Roberto a raison, il faudra faire appel à un timeframe inférieur au Daily pour clôturer tes ordres le vendredi soir.
Puisque le code est lu à la fin de la barre, il est déjà trop tard en UT journalière pour fermer la position à sa clôture.
Merci pour vos réponses Roberto et Nicolas ! En effet je comprends mieux pourquoi cela fonctionne sur mes autres stratégies 🙂
Par contre, lorsque j’essaie de coder cette sortie sur une UT inférieure, lorsque je veux lancer mon backtest j’ai le message d’erreur qui me dit que toutes les unitées de temps appelées dans le code doivent être des multiples de l’unité de temps dans laquelle j’execute ma stratégie… compliqué tout ça 🙂
J’ai essayé ca mais comme je précise plus haut, impossible de backtester en Daily comme le voudrait ma stratégie. Je me trompe quelque part ? Ou il n’est pas possible de backtester avec le multi TF dans cette UT supérieure ?
TIMEFRAME(1 hour)
CvH1 = onmarket AND time >= 210000 AND OpenDayOfWeek = 5
TIMEFRAME(daily)
// ACHAT
IF Ca1 THEN
BUY n SHARES AT MARKET
Set target %profit 2
ENDIF
// VENTE
IF Cv1 THEN
SELLSHORT n SHARES AT MARKET
Set target %profit 1
ENDIF
// OVERWEEK
IF CvH1 THEN
sellshort at market
exitshort at market
ENDIF
Il faut backtester dans l’unité de temps la plus petite !
Oui mais ma stratégie est opérationnelle en Daily et non en H1… Sinon j’ai trouvé la formule BarIndex – TradeIndex pour limiter le nombre de barres journalières. Mais ca ne m’empêche pas de risquer l’overweek…
Ok je pense que je viens de comprendre… lorsque je backteste une stratégie en H1 dont certaines conditions sont à prendre en Daily grace au code TIMEFRAME(daily) les positions sont les mêmes que je backteste en Daily ou en H1 n’est-ce pas ? 🙂
Puisque tu veux utiliser le H1 pour tester un horaire, il est logique qu’il faille utiliser ce timeframe pour faire le backtest, c’est pour cette raison qu’il est nécessaire de toujours backtester avec l’unité de temps la plus petite utilisée dans le code.
Oui en effet, si tes conditions de trading Daily sont indiquées dans TIMEFRAME(daily, updateonclose), alors les résultats seront les mêmes.
Merci Nicolas pour ces précisions !