Cela aurait du fonctionner logiquement en effet:
IF barindex - tradeindex > 1 THEN
set target profit 0.0020
ENDIF
Mais je pense que pour bien faire on devrait tagger nous même le barindex quand on est en position et ensuite vérifier qu’1 barre est terminé pour placer le takeprofit. Et là on en aura le cœur net.
En fait, j’ai constaté que les “set stop loss” et “set target profit” ne tiennent pas compte de “IF barindex – tradeindex > 1”.
J’ai résolu le problème en mettant à la place “sell at… limit” et “sell at… stop” (pour un achat)… et là ça fonctionne !
Bizarre quand même.
Ce qui est moins bizarre mais désolant, c’est que du coup ma stratégie tombe à l’eau, mauvaises performances… Il faudrait quand même pouvoir prendre profit ou stop loss sur la bougie d’entrée, mais j’attends la mise à jour PRT qui déterminera lequel est touché le premier.
Encore merci pour ton aide 🙂
C’est plutôt étrange car les conditions sont strictes pour ces fonctions, on considère bien attendre qu’une barre soit dépassé.
J’ai repris ton code en entier en flaggant nous même le barindex au moment où on place l’ordre:
Defparam cumulateorders = false
REINV = 0
IF REINV = 0 THEN
n = 8
ELSIF REINV = 1 THEN
capital = 10000 + strategyprofit
n = (capital / 10000)*8
ENDIF
IF dayofweek = 1 THEN
Ht = DHigh(2)
Bs = DLow(2)
C = DClose(2)
ENDIF
IF dayofweek >=2 and dayofweek < 6 THEN
Ht = DHigh(1)
Bs = DLow(1)
C = DClose(1)
ENDIF
Pivot = (Ht + Bs + C) / 3
Res2 = Pivot + Ht - Bs
Sup2 = Pivot - (Ht - Bs)
Ctime = time > 070000 and time < 180000
Czone = Close > Sup2 and Close < Res2
IF Ctime and Czone THEN
buy n shares at Sup2 limit
sellshort n shares at Res2 limit
xx = 0.0020
Set stop loss xx
barflag = barindex
ENDIF
// STOP LOSS & TAKE PROFIT
IF onmarket and barindex - barflag > 1 THEN
Set target profit xx
ENDIF
IF time >= 210000 THEN
IF longonmarket THEN
sell at market
ENDIF
IF shortonmarket THEN
exitshort at market
ENDIF
ENDIF
J’ai pas essayé par contre, dit moi si ça change quelque-chose ..
Désolé, encore des bizarreries avec une courbe de capital trop parfaite…
Merci quand même
J’ai la confirmation qu’avec
IF onmarket and barindex - barflag > 1 THEN
Set target profit xx
ENDIF
on a le même problème.
Il faut impérativement mettre :
IF onmarket and barindex - barflag > 1 THEN
sell at tradeprice + xx limit
exitshort at tradeprixe - xx limit
ENDIF
Et là le backtest fonctionne parfaitement… et il passe d’un backtest de rêve à un GROS flop.
Dure la vie de codeur…
Be-nParticipant
Average
Bonjour,
Je déterre ce vieux post car j’ai exactement le même problème que
Doctrading avec ce fameux SET STOP LOSS. Comme j’ai en fait part également sur un post que j’ai ouvert récemment (
ici), je souhaiterais que ce STOP LOSS soit décleclencher seulement à partir de la barre qui suit ma prise de position et non sur la barre d’entrée. Le comportement de cette instruction est extrêmement frustrant et je ne comprends pas cette impasse.
Pour ma part, j’ai tout essayé (selon mes connaissances) et les recommandations de
Nicolas :
- Placer ce STOP LOSS dans le haut de mon code (échec)
- Imbriquer cette instruction dans la condition IF ONMARKET… ONMARKET nécessitant une bougie révolue (échec)
- Utiliser le fameux mais inutile BARINDEX – TRADEINDEX > 0 (échec)
- Combiner les 3 situations ci-dessus (échec)
Simplement, est-il possible d’empêcher le SL et TP sur la bougie d’entrée ?
A la lecture de ce post, je m’en remets donc au fameux :
SELL AT prix LIMIT
EXISHORT AT prix LIMIT
Qui semble être une solution alternative…
Néanmoins, j’ai cru comprendre dans la notice que :
“ces ordres limites et stops à niveaux de prix déterminés sont valables par défaut pour une durée d’une barre, à partir de l’ouverture de la barre suivante. Ils sont donc annulés à sa clôture s’ils n’ont
pas été exécutés.“
A la suite de ce commentaire, le manuel donne un exemple qui illustre l’utilisation de certaines variables pour déterminer la durée de validité d’un ordre limite. Mais je n’arrive pas à l’appliquer à mon code. Une bonne âme passerait-elle par là ? Merci d’avance !
Voici mon code :
IF c1 THEN
buy 1 contract at market
barflag = BARINDEX
ELSIF c2 THEN
sellshort 1 contract at market
barflag = BARINDEX
ENDIF
//STOP DE PROTECTION
IF ONMARKET AND (BARINDEX - barflag > 1) THEN
IF LONGONMARKET AND close<POSITIONPRICE-objectifperte THEN
SELL AT POSITIONPRICE-objectifperte LIMIT
ELSIF SHORTONMARKET AND close>POSITIONPRICE+objectifperte THEN
EXITSHORT AT POSITIONPRICE+objectifperte LIMIT
ENDIF
ENDIF
Pour résumer, j’ai donc deux questions :
- Ma première question concerne l’instruction SET STOP LOSS. Est-il possible d’empêcher le SL et TP sur la bougie d’entrée ? Avons-nous une solution à cette impasse.
- Ma seconde question concerne la durée de validité d’un ordre limite.
- Une troisième question subsidiaire pour la route : pouvez-vous m’expliquer la différence entre un AT price LIMIT et un AT price STOP svp ?
Merci !
Be-nParticipant
Average
Be-nParticipant
Average
Salut Marc !
J’ai sans doute la solution pour empêcher les SL et TP sur la bougie d’entrée. Il suffit de placer SET STOP LOSS 0 pour éliminer tout stop loss dès la prise de position (buy ou sell) :
IF c1 THEN
buy 1 contract at market
SET STOP LOSS 0
ENDIF
SET STOP pLOSS 20
La réponse a été apportée par Robertogozzi sur un post que j’ai ouvert sur le forum Anglais :
ici
Tiens-nous informé ! 😉 Au plaisir !