Bonjour
je vous ai ecrit car j’ai un système qui s’est arrété a cause de “Le système de trading a été arrété car un indicateur a reçu un paramètre négatif ou nul. Vous pouvez modifier votre code pour éviter les paramètres négatifs puis bactester le système pour vérifier la correction”
J’ai du mal a identifier la cause car le message n’est pas très précis sur quelle indicateur et il n’y a rien mentionné dans les pdf d’aide. Le support PRT ne semble pas très réactif non plus.
J’ai fait qq modif mais à chaque fois ca a replanté.
j’ai rajouté cela notamment
DEFPARAM CumulateOrders=False
defparam preloadbars=10000
Tout se passe bien dans le backtest j’ai du mal à comprendre que ca ne puisse pas etre le cas en réel.
Je vais des call d’indicateurs et j’utilise du multitimeframe.
Avez vous une idée d’ou cela vient ?
Merci
Christophe
Sans voir votre code, il est difficile de vous dire où se trouve l'erreur, mais le message que vous recevez après l'exécution du système se produit parfois pour diverses raisons. Par exemple, si vous créez un indicateur de ligne haute lmax=highest[bar](close) et que la variable qui définit les périodes bar renvoie une valeur inférieure ou inférieure à zéro, une erreur se produira.
Solution possible ? Forcer la barre à être supérieure à 0.
lmax=highest[max(1,bar)](close)
Bonjour Ivan
Je lis souvent vos posts merci pour le partage !!
Je pense que vous avez raison le problème doit être sur [Barindex-valeurBarLongOrder]. Ce que j’essaie de faire c’est qu’une fois mes conditions remplies sur un barre “valeurBarLongOrder” J’attend que le high de cette bar soit casse en placant tous les jours un stop price ert chose important sans que le low de cette par soit casse par le bas ce qui invalidera tout le set up
J’utilise également le low précédent cette bar pour définir mon stop et mon risk et donc ma quantite. Peut etre que je devrais simplement enregistré les high et low précédent cette bar .
Voila l’idée.
if (OrdreLongTrigger = 1 and OrdreLongTrigger[1] = 0) THEN
OrderLongToReplaceTrigger = 1
valeurBarLongOrder = BarIndex
endif
if OrderLongToReplaceTrigger = 1 and BarIndex<>valeurBarLongOrder and (lowest[Barindex-valeurBarLongOrder](close) < low[Barindex-valeurBarLongOrder]) THEN
OrderLongToReplaceTrigger = 0
endif
//graph OrderLongToReplaceTrigger
//graphonprice low[Barindex-valeurBarLongOrder]
// on replace l’order stop si le high du T1 n’a pas été franchi par un autre High
// on n’est pas Long car dans la boucle
// et il faut que aucun order a cette bar soit généré plus haut
//high[Barindex-valeurBarLongOrder] est la première valeur ou l’order à été trigger T1 en général (voir si plusieurs valueur il faudraut peut etre prendre la dernier ou //le plus haut high ?
// highest[Barindex-valeurBarLongOrder](high) est le plus haut high apres ce T1
if OrderLongToReplaceTrigger = 1 and OrdreLongTrigger = 0 and lowest[Barindex-valeurBarLongOrder](close) > low[Barindex-valeurBarLongOrder] then
Risk = (high[Barindex-valeurBarLongOrder]-low[Barindex-valeurBarLongOrder+1])*pointvalue
RiskperTrade = 0.02
capital = 17200+STRATEGYPROFIT
maxquantiteRiskTrade= round((RiskperTrade*capital)/risk)
if (Time > 1172001 and Time < 215901) then
depositI = 2500
maxquantitedepositI = floor(capital/depositI)
quantiteLongI = min(maxquantiteRiskTrade,maxquantitedepositI)
//graph quantiteLong
BUY quantiteLongI contract AT high[Barindex-valeurBarLongOrder] STOP
SET STOP PRICE low[Barindex-valeurBarLongOrder]
else
deposit = 3500
maxquantitedeposit = floor(capital/deposit)
quantiteLong = min(maxquantiteRiskTrade,maxquantitedeposit)
BUY quantiteLong contract AT high[Barindex-valeurBarLongOrder] STOP
SET STOP PRICE low[Barindex-valeurBarLongOrder]
endif