Bonjour,
Pour mon premier code PRT, j’essaie le pyramidage.
Et je suis confronté aux premières difficultés.
Mon problème : au lancement du programme, j’ai deux ordres d’achats qui se succèdent sans laps de temps, à la même valeur.
J’ai essayé de forcer l’espacement avec BarIndex mais rien n’y fait et je ne trouve pas l’erreur…
DEFPARAM CumulateOrders = True
Once nbContracts = 1
Once palier = 1
Once palierIndex = 5
Once myTarget = 10
Once myStop = 4.5
Once nbPosMax = 5
If Not OnMarket Then
Buy nbContracts Contracts At Market
prevPrice = TradePrice
index = TradeIndex
EndIf
c1 = ( Close > (prevPrice + palier*pipSize) )
c2 = ( CountOfPosition < nbPosMax )
c3 = ( BarIndex - index > palierIndex )
If OnMarket And c1 And c2 And c3 Then
Buy nbContracts Contract At Market
prevPrice = TradePrice
index = TradeIndex
EndIf
Set Target pProfit myTarget
Set Stop pLoss myStop
Si un œil extérieur y trouve quelque chose, son avis serait très apprécié !
au lancement du programme
Sous ProOrder je pense ? Car en backtest, je n’arrive pas à reproduire ce comportement.
Je vois 2 problèmes éventuels:
- le palier est trop petit (1 point, cela correspond +/- à une valeur de spread “standard”)
- plus plausible, le tradeindex et tradeprice de l’ordre en cours seront disponibles à la prochaine bar et pas directement après avoir posé l’ordre au marché. Pour mémoire, le code est lu au Close et les ordres envoyés à l’Open de la barre suivante
Pour palier au problème cité en point 2, il faudrait enregistrer les valeurs comme ceci si tu souhaites les utiliser dans la même période:
prevPrice = Close//TradePrice
index = Barindex//TradeIndex
A tester toutefois, pas trop le temps de débugger ce matin 🙂
Merci pour cette réponse Nicolas !
J’ai le problème en ProOrder mais aussi en ProBacktest. Voici la copie d’écran de l’achat des premières positions alors que j’ai augmenté le palier à 4.
Grâce à ta remarque, je me suis dit que le problème pouvait venir du fait que tout était lu à la suite et que donc en arrivant à la condition pour le pyramidage, si TradePrice et TradeIndex sont par défaut sur 0, les conditions étaient toujours validées.
J’ai alors essayé en mettant les conditions “Not OnMarket” après les conditions “OnMarket” pour que ce ne soit pas considéré “OnMarket” juste après le premier achat mais cela ne change rien…
En continuant la réflexion, j’ai trouvé la solution !
Il suffit de mettre TradePrice et TradeIndex au début du code, cela prend ainsi bien le dernier Trade en compte et pas une valeur par défaut inconnue.
DEFPARAM CumulateOrders = True
Once nbContracts = 1
Once palier = 4
Once palierIndex = 5
Once myTarget = 10
Once myStop = 4.5
Once nbPosMax = 5
prevPrice = TradePrice
index = TradeIndex
c1 = ( Close > (prevPrice + palier*pipSize) )
c2 = ( CountOfPosition < nbPosMax )
c3 = ( BarIndex - index > palierIndex )
If OnMarket And c1 And c2 And c3 Then
Buy nbContracts Contract At Market
EndIf
If Not OnMarket Then
Buy nbContracts Contracts At Market
EndIf
Set Target pProfit myTarget
Set Stop pLoss myStop
Encore merci pour ton aide !