Bug indicateur SAR et Bollinger dans boucle FOR/NEXT

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #49161 quote
    Phil4910
    Participant
    Average

    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
    #49165 quote
    Nicolas
    Keymaster
    Master

    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]).

    #49253 quote
    Phil4910
    Participant
    Average

    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
    #49292 quote
    Nicolas
    Keymaster
    Master

    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)
    #49410 quote
    Phil4910
    Participant
    Average

    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.

    #49420 quote
    Nicolas
    Keymaster
    Master

    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]

    #49467 quote
    Phil4910
    Participant
    Average

    Tu as raison, j’avais modifié le facteur d’accélération du PSAR sur mon graphe.

    Un grand merci Nicolas,

    Phil4910

    #49490 quote
    Nicolas
    Keymaster
    Master

    Très bien et cela donne-t’il des résultats probants ?

    #49517 quote
    Phil4910
    Participant
    Average

    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

    #49522 quote
    Nicolas
    Keymaster
    Master

    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 !

    #49552 quote
    Phil4910
    Participant
    Average

    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.

Viewing 11 posts - 1 through 11 (of 11 total)
  • You must be logged in to reply to this topic.

Bug indicateur SAR et Bollinger dans boucle FOR/NEXT


Support ProBuilder

New Reply
Author
author-avatar
Phil4910 @phil4910 Participant
Summary

This topic contains 10 replies,
has 2 voices, and was last updated by Phil4910
8 years, 3 months ago.

Topic Details
Forum: Support ProBuilder
Language: French
Started: 10/12/2017
Status: Active
Attachments: 4 files
Logo Logo
Loading...