Bonjour Nicolas,
Ci-dessous le code d’un indicateur qui est censé me donner un signal +1 lorsque une bougie bullish ouvre sous et clôture au-dessus de la boll inférieure et, dans les 10 bougies qui suivent ce premier critère, le SAR est au-dessus de la clôture de la bougie. Inversément opur le signal -1.
Mais pour l’instant, l’encéphalogramme est plat malgré des signaux sur le graphique!
Peux-tu m’aider?
Merci d’avance,
Phil4910
X = 10 //quantité de bougies dans le passé à scanner pour trouver la dernière bougie qui croise la BBoll
bbperiod = 50
bolup = BollingerUp[bbperiod](close)
boldown = BollingerDown[bbperiod](close)
for i = 1 to X do
if open < BolDown and close > open and close > BolDown then
signallong = close[i]
break
elsif close > BolUp and open > close and close < BolUp then
signalshort = close[i]
break
endif
next
ParaSAR = SAR[0.02,0.02,0.03]
C1 = signallong AND ParaSAR < close
C2 = signalshort AND ParaSAR > close
If c1 then
r=1
Elsif c2 then
r=-1
else
r=0
endif
return r
Dans ta boucle tu compares continuellement les informations des indicateurs et données OHLC avec la période actuelle et non celles de la boucle (incrément [i]).
Modifié mais encéphalogramme toujours plat… Help
bbperiod = 50
bolup = BollingerUp[bbperiod](close)
boldown = BollingerDown[bbperiod](close)
signallong = open < BolDown and close > open and close > BolDown
signalshort = close > BolUp and open > close and close < BolUp
X = 10 //quantité de bougies dans le passé à scanner pour trouver la dernière bougie qui croise la BBoll
for i = 1 to X do
if close[i] = signallong then
C1 = close[i]
break
endif
next
for i = 1 to X do
if close[i] = signalshort then
C2 = close[i]
break
endif
next
ParaSAR = SAR[0.02,0.02,0.03]
C3 = c1 AND ParaSAR < close
C4 = c2 AND ParaSAR > close
If c3 then
r=1
Elsif c4 then
r=-1
else
r=0
endif
return r
J’ai préféré repartir de ton premier code et je l’ai modifié tel que j’ai compris ta stratégie de signaux. Ci-joint exemple, tu en penses quoi ? Ce sera pas mieux d’avoir des flèches sur le graphique pour cet indicateur de signaux de trading ?
X = 10 //quantité de bougies dans le passé à scanner pour trouver la dernière bougie qui croise la BBoll
bbperiod = 50
bolup = BollingerUp[bbperiod](close)
boldown = BollingerDown[bbperiod](close)
for i = 1 to X do
if open[i] < BolDown[i] and close[i] > open[i] and close[i] > BolDown[i] then
//signallong = close[i]
barlong = barindex[i]
break
elsif open[i] > BolUp[i] and open[i] > close[i] and close[i] < BolUp[i] then
//signalshort = close[i]
barshort = barindex[i]
break
endif
next
ParaSAR = SAR[0.02,0.02,0.03]
C1 = ParaSAR < close and ParaSAR[1]>close[1] and barindex-barlong<X
C2 = ParaSAR > close and ParaSAR[1]<close[1] and barindex-barshort<X
return c1 coloured(0,200,0) style(histogram), c2 coloured(200,0,0) style (histogram)
Merci Nicolas d’avoir réanimé mon patient mais il n’est pas encore tiré d’affaire!
Sur ma copie d’écran (100 ticks), tu verras que les signaux arrivent trop tard 🙁
Penses-tu pouvoir le remettre sur pieds?
Pour les flèches, c’est une bonne idée mais je souhaite d’abord le backtester avant.
Phil4910.
Les signaux arrivent au bon moment si je ne me trompes pas (voir image), c’est à dire à la première apparition du SAR contrarien. Vérifie que tu utilises bien les mêmes périodes des indicateurs que tu as sur ton graphique et ceux que j’ai utilisé dans mon code. Pour le SAR notamment: ParaSAR = SAR[0.02,0.02,0.03]
Tu as raison, j’avais modifié le facteur d’accélération du PSAR sur mon graphe.
Un grand merci Nicolas,
Phil4910
Très bien et cela donne-t’il des résultats probants ?
C’est pas mal sur le Dax en 100 ticks (cfr image jointe) avec un trailing stop, mais cela pourrait être plus rentable si plutôt qu’avoir un stop loss à 15 je pouvais le mettre au plus haut/plus bas de la bougie précédent le signal. Evidemment, j’ai essayé ce week-end mais sans y parvenir. Ton aide serait la bienvenue!
Par contre, mes résultats sont légèrement meilleurs sans le PSAR et en long uniquement, mais toujours ce problème de stop loss…
Voici le bout de code :
trailingstart = 5 //how much pips/points in gain to activate the breakeven function?
trailingstep = 5 //trailing step to move the "stoploss"
PointsToKeep = 1 //how much pips/points to keep in profit above of below our entry price when the breakeven is activated (beware of spread)
// --- BUY SIDE ---
//test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=trailingstart*pipsize THEN
//calculate the breakevenLevel
newSL = tradeprice(1)+PointsToKeep*pipsize
ENDIF
//place the new stop orders on market at breakevenLevel
IF newSL>0 THEN
SELL AT newSL STOP
ENDIF
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
IF SHORTONMARKET AND tradeprice(1)-close>trailingstart*pipsize THEN
//calculate the breakevenLevel
newSL = tradeprice(1)-PointsToKeep*pipsize
ENDIF
//place the new stop orders on market at breakevenLevel
IF newSL>0 THEN
EXITSHORT AT newSL STOP
ENDIF
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
IF NOT ONMARKET THEN
newSL=0
ENDIF
Set Stop Loss 15
Phil4910
Dans ce cas il faudrait placer cette ligne juste après avoir envoyer l’ordre:
// pour un ordre d'achat
set stop loss Close-low[1]
//pour un ordre de vente à découvert
set stop loss high[1]-close
et supprimer la ligne 33 du code que tu viens de poster. Donne nous des nouvelles !
J’ai finalement supprimé le PSAR car il retarde la prise de position et j’ai gardé un stop loss à 6 ce qui est raisonnable pour moi.
Par contre, ce système est rentable mais en long uniquement (trop de stop touchés en short) mais je pense que cela est dû à la tendance du marché depuis septembre.
Je poursuis mes recherches avec notamment l’ajout du RSI.
Phil4910.