Bonjour,
Je cherche désespérément à faire en sorte que mon backtest ne puisse pas prendre ni le SL, ni le TP, sur la bougie d’entrée.
Malgré la commande :
IF barindex - tradeindex >= 1 THEN
Set stop loss xx
Set target profit xx
ENDIF
Ca ne fonctionne pas, car si la bougie d’entrée est grande et que les 2 sont touchés, c’est encore le TP qui compte même si c’est évidemment perdant.
Merci pour votre aide.
Voici le code complet (que je publierai dans la librairie une fois qu’il sera corrigé). Il s’applique sur l’EUR/USD en graphes M15.
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
//Res3 = Pivot + ((Ht - Bs)*2)
Res2 = Pivot + Ht - Bs
//Res1 = (2 * Pivot) - Bs
//Sup1 = (2 * Pivot) - Ht
Sup2 = Pivot - (Ht - Bs)
//Sup3 = Pivot - ((Ht - Bs)*2)
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
ENDIF
// STOP LOSS & TAKE PROFIT
xx = 0.0020
IF barindex - tradeindex >= 1 THEN
Set stop loss xx
Set target profit xx
ENDIF
IF time >= 210000 THEN
IF longonmarket THEN
sell at market
ENDIF
IF shortonmarket THEN
exitshort at market
ENDIF
ENDIF
Et en plaçant le stoploss à la bougie d’entrée et le takeprofit à la suivante ?
Bonjour,
Oui, par exemple, je n’ai pas trouvé comment faire.
Ce sont des ordres LIMIT, je n’avais pas vu. Si tu places ton instruction SET STOP LOSS au même moment que ton ordre LIMIT est envoyé au courtier, je pense que le SL sera inscrit à ce moment là.
Ensuite avec :
IF barindex - tradeindex >= 1 THEN
Set target profit xx
ENDIF
ça devrait le faire.
Avec des réserves toutefois, il faut que je vérifie si le tradeindex commence quand l’ordre est lancé au marché où si c’est au moment où l’ordre limite est placé. C’est une excellente question ..
Merci pour ta réponse.
Le problème, c’est que c’est exactement ce que j’ai écrit (cf mon code plus haut), etc an e fonctionne pas.
C’est pour cela que je me creuse encore la tête…
Je peux très bien faire :
IF barindex - tradeindex = 2 THEN
sell at market
ENDIF
et ça fonctionne, mais bizarrement ça ne fonctionne pas avec les ordres stop.
Bonne soirée.
Bonsoir,
Et si tu essaies ça:
IF OnMarket THEN
Set stop loss xx
Set target profit xx
ENDIF
Bonne soirée
Non moi je voulais faire ça plutôt :
IF Ctime and Czone THEN
buy n shares at Sup2 limit
sellshort n shares at Res2 limit
xx = 0.0020
Set stop loss xx
ENDIF
IF barindex - tradeindex >= 1 THEN
Set target profit xx
ENDIF
C’est pas tout à fait pareil puisqu’on place bien le stoploss à l’ouverture du trade ou plutôt lors du placement de l’ordre LIMIT.
Le problème est qu’on veut ensuite placer le take profit sur l’ordre si il a au moins une barre d’ancienneté, mais je ne sais pas si le tradeindex s’incrémente si l’ordre LIMIT n’a pas déclenché par contre, car si oui alors ça ne fonctionnera pas.
@ eba973 :
Merci pour ta proposition.
Mais le problème est le même
@ Nicolas :
Je vais essayer, je vous tiens au courant. Et si le code fonctionne bien il ira en librairie bien sûr
Bonne journée
Ça ne marche pas mieux… je donne ma langue au chat.
C’est vraiment bizarre !
Ça devrait pourtant fonctionner…
Pourtant avec un petit programme simple:
defparam cumulateorders = false
BUY 1 SHARE AT 1.1310 LIMIT
GRAPH tradeindex
Le graph retourne 0 tant que l’ordre n’est pas exécuté (ici sur eurodol le 16 Mai à partir de 10h00).
Bizarre que sur ce graph ça reste coincé à la même valeur (que je suppose être “1”)
En fait, lorsque je lance mon bakctest avec la fonction “graph tradeindex”, la valeur de ce dernier ne fait qu’augmenter, et ne revient jamais à zéro.
Le problème vient donc de là.
De plus, il n’augmente pas de 1 en 1, mais de façon non linéaire.
cf capture d’écran, fenêtre du milieu.
Une idée ?
Merci
Je crois que tu n’as pas saisi TRADEINDEX
Non c’est pas bizarre justement ! c’est très bien. ça signifie que: l’ordre LIMIT est placé (et donc n’est pas au marché), alors le système nous retourne que le tradeindex n’existe pas (et donc à 0). Par contre dés que l’ordre s’exécute et passe donc au marché, alors le tradeindex s’incrémente au barindex où l’ordre a été effectivement placé au marché.
Il est logique que ta courbe de tradeindex monte, puisqu’elle reflète le barindex de l’ordre en cours (si TRADEINDEX sans (n) derrière) et que le barindex est le x-éme numéro de la barre depuis le début de l’historique affiché.
Sur mon image, le premier tradeindex est à 0 car il n’y a jamais eu d’ordre.
Donc si on résume, le fait de placer ton stoploss au courtier quand tu lances l’ordre doit pouvoir l’inscrire dans son carnet à ce moment là. Ensuite, on attend quelques bars (1 ou plusieurs à toi de voir) et on place le takeprofit. Ce qui en toute logique devrait éviter les TP/SL sur la même barre. La difficulté ici étant les ordres LIMIT. Sur une stratégie d’ordres directement au marché, cela pourrait nous faire avancer sur le problème des backtests erronées à cause des TP/SL immédiat au lancement de l’ordre. Qu’en penses-tu ?
J’ai compris, je pensais que tradeindex se remettait toujours à zéro après chaque trade… Je ne lis pas beaucoup les notices ! lol
Par contre le problème est toujours le même, je ne comprends vraiment pas pourquoi.
Merci pour ton aide.
Si je parviens à résoudre ce problème avec ton aide, je pourrai mettre en ligne 2 stratégies très performantes sur les points pivot… pour peu que le problème résolu ne casse pas trop la performance du backtest.
Je mets pourtant :
IF barindex - tradeindex > 1 THEN
set target profit 0.0020
ENDIF
par exemple.
Et pourtant, Même en supprimant le stop loss par exemple, j’ai encore des prises de profit sur la même barre.
Je pense avoir contourné le problème avec, par exemple pour un take profit :
xx = 0.0012
IF barindex - tradeindex >= 1 THEN
sell at tradeprice + xx limit
exitshort at tradeprice - xx limit
ENDIF
Et évidemment, le backtest devient mauvais… encore du travail !
A bientôt