Range filter Buy and sell – sortie lors du changement de couleur

Viewing 15 posts - 1 through 15 (of 25 total)
  • Author
    Posts
  • #256695 quote
    finplus
    Participant
    Master

    Bonsoir,

    j’utilise cet indicateur ci-dessous :


    // Original Script > @DonovanWall
    
    // Adapted Version > @guikroth
    
     
    
    //////////////////////////////////////////////////////////////////////////
    
    // Settings for 5min chart, BTCUSDC. For Other coin, change the parameters
    
    //////////////////////////////////////////////////////////////////////////
    
    
    
    
    DefParam DrawOnLastBarOnly = true
    
    
    
    
    xClose = (Open+High+Low+Close)/4
    
    
    
    
    // Source
    
    src = xclose
    
     
    
    // Sampling Period
    
    // Settings for 5min chart, BTCUSDC. For Other coin, change the paremeters
    
    // per = defval=100, minval=1, "Sampling Period"
    
     
    
    // Range Multiplier
    
    // mult = defval=3.0, minval=0.1, "Range Multiplier"
    
    PER = 100
    
    MULT = 3
    
    // Smooth Average Range
    
    wper = per*2 -1
    
    avrng = exponentialaverage[per](abs(src-src[1]))
    
    smrng = mult * exponentialaverage[wper](avrng)
    
     
    
    // Range Filter
    
    rngfilt = src
    
    If src > rngfilt[1] then
    
    If rngfilt[1] > src-smrng then
    
    rngfilt = rngfilt[1]
    
    Else
    
    rngfilt = src-smrng
    
    endif
    
    elsif rngfilt[1] < src+smrng then
    
    rngfilt = rngfilt[1]
    
    else
    
    rngfilt = src+smrng
    
    endif
    
    filt = rngfilt
    
     
    
    // Filter Direction
    
    upward = 0
    
    If filt > filt[1] then
    
    upward = upward[1]+1
    
    elsif filt < filt[1] then
    
    upward = 0
    
    else
    
    upward = upward[1]
    
    endif
    
    downward = 0
    
    If filt < filt[1] then
    
    downward = downward[1]+1
    
    elsif filt > filt[1] then
    
    downward = 0
    
    else
    
    downward = downward[1]
    
    endif
    
     
    
    // Target Bands
    
    hband = filt + smrng
    
    lband = filt - smrng
    
     
    
     
    
    //// Zone de couleurs : selon des conditions
    
    ////////////////////////////////////////////////////////////////////////////
    
     
    
    mbTendance = (Average[3](filt) + filt)/2
    
    if mbTendance > mbTendance[1] then
    
    red=0
    
    green=0
    
    blue=255
    
    elsif mbTendance < mbTendance[1] then
    
    red=255
    
    green=0
    
    blue=0
    
    endif
    
    
    
    
    colorbetween(lband,hband,red,Green,Blue,88)
    
    
    
    
    if islastbarupdate then
    
    if close
    
    DRAWSEGMENT(barindex, hband, barindex+5, hband)style(line,2) coloured(0,0,200)
    
    endif
    
    if close>lband then
    
    DRAWSEGMENT(barindex, lband, barindex+5, lband)style(line,2) coloured(0,0,200)
    
    endif
    
    endif
    
    
    
    
     
    
    Return filt as "Range Filter", hband as "High Target", lband as "Low Target", mbtendance as "tendance"
    


    J’aimerai sortir d’une position longue ou courte lorsque la bande de couleur change de couleur (ex : je suis long et lorsque la bande est de couleur rouge, je sors de ma position longue. J’ai essayé avec la formule “mbTendance < mbTendance[1] ” mais cela ne donne pas les résultats escomptés.

    Merci.

    Capture-decran-2026-01-22-a-17.42.11.png Capture-decran-2026-01-22-a-17.42.11.png
    #256696 quote
    JC_Bywan
    Moderator
    Master

    Bjr,

    a priori, sans éplucher l’intégralité du code, si je ne dis pas de bêtise on doit pouvoir exprimer le changement de couleur de bande par red<>red[1], donc on doit pouvoir tester la sortie de position longue (sous proorder car longonmarket mot spécifique) avec ce if:

    if longonmarket and red<>red[1] then
     sell at market
    endif
    

    resp. pour sortie de short:

    if shortonmarket and red<>red[1] then
     exitshort at market
    endif
    
    Iván González and robertogozzi thanked this post
    #256697 quote
    finplus
    Participant
    Master

    Bonsoir,

    merci pour la rapidité de la réponse.

    je teste et vous reviens.

    Philippe.

    #256854 quote
    finplus
    Participant
    Master

    Bonjour,

    alors après avoir testé, des sorties ne se font pas systématiquement lors du changement de couleur du bandeau.


    #256856 quote
    Nicolas
    Keymaster
    Master

    Tu pourrais essayer avec:

    if mbTendance <> mbTendance[1] then
     SELL AT MARKET 
     EXITSHORT AT MARKET 
    endif
    

    dans ce cas, si on change de couleur de rouge vers bleu ou l’inverse, alors on sort toutes les positions, à l’achat ou à la vente.

    #256880 quote
    finplus
    Participant
    Master

    Bonjour,

    test fait à l’instant (voir image jointe).

    La position longue initiée à 17h20 est coupée à 18h alors que la bande est toujours bleue.

    Il y a quelque chose qui cloche.

    Philippe.

    Capture-decran-2026-01-25-a-16.18.36-scaled.png Capture-decran-2026-01-25-a-16.18.36-scaled.png
    #256892 quote
    Nicolas
    Keymaster
    Master

    Le mieux étant de nous partager le code de la stratégie, car on ne sait pas comment tu as incorporé les solutions proposés 🙂

    Il est aussi possible que les calculs de l’indicateur s’opèrent différemment entre la version appliquée sur ton graphique et la version de l’indicateur qui tu as du mettre dans ta stratégie, d’ailleurs ces versions peuvent également avoir des paramétrages différents “PER” et “mult”.

    #257188 quote
    finplus
    Participant
    Master

    Bonjour, voici donc les deux indicateurs utilisés pour les graphiques (je mettrai à la suite la stratégie d’entrée en position) :

    Indicateur n°1

    // Original Script > @DonovanWall

    // Adapted Version > @guikroth

     

    //////////////////////////////////////////////////////////////////////////

    // Settings for 5min chart, BTCUSDC. For Other coin, change the parameters

    //////////////////////////////////////////////////////////////////////////


    DefParam DrawOnLastBarOnly = true


    xClose = (Open+High+Low+Close)/4


    // Source

    src = xclose

     

    // Sampling Period

    // Settings for 5min chart, BTCUSDC. For Other coin, change the paremeters

    // per = defval=100, minval=1, “Sampling Period”

     

    // Range Multiplier

    // mult = defval=3.0, minval=0.1, “Range Multiplier”

    PER = 100

    MULT = 3

    // Smooth Average Range

    wper = per*2 -1

    avrng = exponentialaverage[per](abs(src-src[1]))

    smrng = mult * exponentialaverage[wper](avrng)

     

    // Range Filter

    rngfilt = src

    If src > rngfilt[1] then

    If rngfilt[1] > src-smrng then

    rngfilt = rngfilt[1]

    Else

    rngfilt = src-smrng

    endif

    elsif rngfilt[1] < src+smrng then

    rngfilt = rngfilt[1]

    else

    rngfilt = src+smrng

    endif

    filt = rngfilt

     

    // Filter Direction

    upward = 0

    If filt > filt[1] then

    upward = upward[1]+1

    elsif filt < filt[1] then

    upward = 0

    else

    upward = upward[1]

    endif

    downward = 0

    If filt < filt[1] then

    downward = downward[1]+1

    elsif filt > filt[1] then

    downward = 0

    else

    downward = downward[1]

    endif

     

    // Target Bands

    hband = filt + smrng

    lband = filt – smrng

     

     

    //// Zone de couleurs : selon des conditions

    ////////////////////////////////////////////////////////////////////////////

     

    mbTendance = (Average[3](filt) + filt)/2

    if mbTendance > mbTendance[1] then

    red=0

    green=0

    blue=255

    elsif mbTendance < mbTendance[1] then

    red=255

    green=0

    blue=0

    endif


    colorbetween(lband,hband,red,Green,Blue,88)


    if islastbarupdate then

    if close<hband then

    DRAWSEGMENT(barindex, hband, barindex+5, hband)style(line,2) coloured(0,0,200)

    endif

    if close>lband then

    DRAWSEGMENT(barindex, lband, barindex+5, lband)style(line,2) coloured(0,0,200)

    endif

    endif


     

    Return filt as “Range Filter”, hband as “High Target”, lband as “Low Target”, mbtendance as “tendance”


    2ème indicateur :

    /////////////////////////////////////KAMA 150


    Period = 150

    FastPeriod = 2

    SlowPeriod = 50

     

    Fastest = 2 / (FastPeriod + 1)

    Slowest = 2 / (SlowPeriod + 1)

    if barindex < Period+1 then

    Kama=close

    else

    Num = abs(close-close[Period])

    Den = summation[Period](abs(close-close[1]))

    ER = Num / Den

    Alpha = SQUARE(ER *(Fastest – Slowest )+ Slowest)

    KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])

    endif

     


    ///////////////////////////////////////////////////////////////////: Distance Cours KAMA

     

    xClose = (Open+High+Low+Close)/4

    Distance = (xclose- kama)

    moy = average[50]((distance))



    if Moy<Moy[1] and Moy[1]>Moy[2] and Moy[1]>0 then

    ///RetB5=RetB4

    ///RetB4=RetB3

    RetB3=RetB2

    RetB2=RetB1

    RetB1=Moy[1]

    RetBmoy=(RetB1+RetB2+RetB3)/3

    endif


    if Moy>Moy[1] and Moy[1]<Moy[2] and Moy[1]<0 then

    ///RetH5=RetH4

    ///RetH4=RetH3

    RetH3=RetH2

    RetH2=RetH1

    RetH1=Moy[1]

    RetHmoy=(RetH1+RetH2+RetH3)/3

    endif




    for i=0 to 49

    $montab[i]=distance[i]

    Next


    arraysort($montab,ascend)

    moy3plusBas = ($montab[0] + $montab[1] + $montab[2]) / 3

    moy3plusHauts = ($montab[49] + $montab[48] + $montab[47]) / 3



    if (distance > moy3plushauts) then

    drawcandle (0,0, distance, distance) COLOURED (32, 0, 192)

    endif


    if (distance < moy3plusbas) then

    drawcandle (0,0, distance, distance) COLOURED (235,0,0)

    endif


    if (distance > moy) and (distance < moy3plushauts) and (distance > 0) then

    drawcandle (0, 0, distance, distance) coloured (0, 204, 255)

    endif


    if (Distance < moy) and (distance > moy3plusbas) and (distance < 0) then

    drawcandle (0, 0, distance, distance) coloured (255, 204, 153)

    endif



    Return distance as “Distance”, moy as “Distance Moy”, RetBmoy as “Bande Haute”, RetHmoy as “Bande Basse”, moy3plusHauts as “FilterUp”, moy3plusBas as “FilterDn”


    Et voici la stratégie d’entrée en position (longue dans le cas présenté)


    /////////////////////////////////////////////////////////////KAMA 150


    Period = 150

    FastPeriod = 2

    SlowPeriod = 50

     

    Fastest = 2 / (FastPeriod + 1)

    Slowest = 2 / (SlowPeriod + 1)

    if barindex < Period+1 then

    Kama=close

    else

    Num = abs(close-close[Period])

    Den = summation[Period](abs(close-close[1]))

    ER = Num/ Den

    Alpha= SQUARE(ER *(Fastest – Slowest)+ Slowest)

    KAMA1= (Alpha* Close) + ((1 -Alpha)* Kama[1])

    endif



    ///////////////////////////////////////////////////////////////////: Distance Cours KAMA

     

    DistanceKAMA = (xclose- kama)



    for i=0 to 49

    $montab[i]=distanceKAMA[i]

    Next


    arraysort($montab,ascend)

    moy3plusBas = ($montab[0] + $montab[1] + $montab[2]) / 3

    moy3plusHauts = ($montab[49] + $montab[48] + $montab[47]) / 3



    FilterKAMAUp = (DistanceKAMA > Moy3plushauts)


    if FilterKAMAUp then

    buy 1 contract at market

    endif


    Mon problème est la sortie de cette position : je voudrais qu’elle intervienne lorsque le “ruban” (codé dans le 1er indicateur) passe de la couleur bleue à la couleur rouge.

    Merci.

    #257194 quote
    LucasBest
    Participant
    Average

    If LongOnMarket and mbTendance < mbTendance[1] then

    Sell At Market

    Endif

    #257199 quote
    finplus
    Participant
    Master

    Merci. Je vais tester et vous ferais un retour.

    #257337 quote
    finplus
    Participant
    Master

    Bonsoir, alors voici le retour du test : d’une manière générale, les sorties de position se font lorsque le “ruban” change de couleur.

    Toutefois, j’ai identifié quelques anomalies comme sur la capture écran de la paire USD CAD. le système prend une position longue le 7 janvier à 22H.

    Toutefois, le ruban change de couleur le 8 janvier en cours de journée et pourtant la sortie ne se fait que le 12 janvier à 2 heures du matin.

    Voilà.

    Merci.

    Capture-decran-2026-02-02-a-19.18.09-scaled.png Capture-decran-2026-02-02-a-19.18.09-scaled.png
    #257628 quote
    finplus
    Participant
    Master

    Bonjour,

    je me permets de remonter mon post et les résultats du test effectué. Merci.

    #257629 quote
    LaMaille
    Participant
    Junior

    Ce décalage est normal. La couleur du ruban est calculée au close de la bar courante (barindex) et la couleur est appliquée à ce moment là pour le segment Barindex-1 à Barindex. Mais l’ordre de sortir n’est donné qu’à la bougie suivante.

    Du point de vu graphique cela donne l’impression que la couleur change à barindex-1 mais que la sortie ne se fait qu’à Barindex+1, créant un décalage visuel, mais qui est inhérent à la manière de dessiner à barindex-1.

    Nicolas thanked this post
    #257630 quote
    finplus
    Participant
    Master

    Sauf que sur mon graphique et le tableau récapitulatif des entrées et sorties de position, l’entrée longue du 7 janvier se termine par une vente le 12 alors que le ruban a changé de couleur bien avant. Quelque chose m’échappe.

    #257632 quote
    LaMaille
    Participant
    Junior

    Quel est le time frame?

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

Range filter Buy and sell – sortie lors du changement de couleur


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
finplus @finplus Participant
Summary

This topic contains 24 replies,
has 5 voices, and was last updated by finplus
2 weeks ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 01/22/2026
Status: Active
Attachments: 3 files
Logo Logo
Loading...