Problème multiframe sur 3 unités de temps

Viewing 15 posts - 1 through 15 (of 27 total)
  • Author
    Posts
  • #132373 quote
    Fantasio2020
    Participant
    Senior

    Bonjour la communauté,

    j’ai un petit soucis avec une de mes stratégies…

    En effet, j’essaie de coder cette strat sur 3 unités de temps (15, 5 et 1 minute) dont une partie du code ci-dessous, et le problème que j’ai, c’est que le bot prend des positions alors qu’il ne devrait pas avec ces conditions:

    //Position acheteuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute, updateonclose)
    Time15aa = Close > Pivot
    Time15ab = Close > MMA100
    Time15ac = Close > MMA300
    Time15ad = Close > MMA600
    Time15ae = Close > MMA1000
    buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute, updateonclose)
    Time5aa = Close > Pivot
    Time5ab = Close > MMA100
    Time5ac = Close > MMA300
    Time5ad = Close > MMA600
    Time5ae = Close > MMA1000
    buyconditionAB = (Time5aa and Time5ab and Time5ac and Time5ad and Time5ae)
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute, Default)
    Time1aa = Close > Pivot
    Time1ab = Close > MMA100
    Time1ac = Close > MMA300
    Time1ad = Close > MMA600
    Time1ae = Close > MMA1000
    Time1af = z < 38.2
    buyconditionAC = (Time1aa and Time1ab and Time1ac and Time1ad and Time1ae and Time1af)
    if (buyconditionAA and buyconditionAB and buyconditionAC) and not daysForbiddenEntry then
    buy 0.3 share at market
    endif

    j’ai peut être mal écrit le code, mais le fait est que le bot ne devrait pas acheter de positions sous le pivot, or c’est ce qu’il fait

    Merci pour votre aide.

    #132376 quote
    Nicolas
    Keymaster
    Master

    As-tu commencé par GRAPH ta variable pivot ? Celle calculé dans ton code ? Cela te permettra de comprendre pourquoi une condition stricte telle que “Close > Pivot” n’est pas respecté ! 🙂

    GRAPHONPRICE pivot
    #132381 quote
    Fantasio2020
    Participant
    Senior

    Bonjour Nicolas,

    Oui effectivement, j’ai bien grapher le pivot et les 4 moyennes, tout ce superpose au pivot et aux moyennes sur le graphique le problème ne vient pas de ce coté. (uniquement en unité de temps 1 min….je n’est pas la possibilité de contrôler dans les autres timeframes car prorealtime ne me laisse pas faire.

    Je sais pas trop pourquoi j’ai ça…j’ai essayé de coder avec plusieurs syntaxes, mais j’ai le même problème (achat sous pivot….et également sous les moyennes alors que le prix devrait être au dessus pour remplir mes conditions)

    Trop de conditions? trop de timeframe?

    merci pour le retour

    #132429 quote
    Nicolas
    Keymaster
    Master

    Tu as bien compris qu’avec Updateonclose, les valeurs sont celles du Close précédent et non durant la bougie du timeframe le plus petit ?

    Possible d’avoir une copie d’écran d’une mauvaise prise de position ?

    #132439 quote
    Fantasio2020
    Participant
    Senior

    Oui Nicolas,

    j’ai bien compris que updateonclose la position se prend à la fermeture de la bougie précédente…(mais sur l’unité de temps sur laquelle je prend position non?) les conditions dans les unités de temps 15 et 5 min ne me servent qu’à confirmer la tendance….

    Ci joint deux cas ou une position acheteuse est prise sous le pivot et sous les moyennes…..!!!

    Exemple-1.png Exemple-1.png Exemple-2.png Exemple-2.png
    #132456 quote
    Nicolas
    Keymaster
    Master

    Je ne vois qu’une seule unité de temps sur ton graphique.

    Si je reprends ton code, tu vérifies si le Close en M15 est au dessus du pivot (et les MM), idem pour M5 et idem pour M1.

    Pour mémoire, l’ordre que tu pointes dans ta 1ère copie d’écran est à 8h41, donc tu utilises la bougie de 8h30 en M15  et celle de 8h40 en M5 (puisque updateonclose).

    Mais en effet, la bougie M1 est bien dessous le pivot. Je n’ai pas d’explication, mais je vois que tu utilises l’optimisation, quelles sont les variables optimisées ? J’aimerai bien reproduire pour t’aider davantage, mais sans le code complet … dur ! 😉

    #132464 quote
    Fantasio2020
    Participant
    Senior

    Nicolas,

    voici le code sur lequel je travail pour l’instant:

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    //DEFPARAM FLATBEFORE = 091500
    //DEFPARAM FLATAFTER = 154500
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    //Indicateurs de tendance
    Pivot = (DHigh(1) + DLow(1) + DClose(1) + DOpen(0))/4
    MMA100 = (ExponentialAverage[100](close))
    MMA300 = (ExponentialAverage[300](close))
    MMA600 = (ExponentialAverage[600](close))
    MMA1000 = (ExponentialAverage[1000](close))
    //Indicateurs de prise de positions
    Ind = RSI[7](Close)
    x = 0.1 * (Ind - 50)
    y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
    z = 50 * (y + 1)
    
    //Position acheteuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute, updateonclose)
    Time15aa = Close > MMA100
    Time15ab = Close > MMA300
    Time15ac = Close > MMA600
    Time15ad = Close > MMA1000
    Time15ae = z < 38.2
    buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute, updateonclose)
    Time5aa = Close > MMA100
    Time5ab = Close > MMA300
    Time5ac = Close > MMA600
    Time5ad = Close > MMA1000
    Time5ae = z < 38.2
    buyconditionAB = (Time5aa and Time5ab and Time5ac and Time5ad and Time5ae)
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute, Default)
    Time1aa = Close > Pivot
    Time1ab = Close > MMA100
    Time1ac = Close > MMA300
    Time1ad = Close > MMA600
    Time1ae = Close > MMA1000
    Time1af = z < 38.2
    buyconditionAC = (Time1aa and Time1ab and Time1ac and Time1ad and Time1ae and Time1af)
    if (buyconditionAA and buyconditionAB and buyconditionAC) and not daysForbiddenEntry then
    buy 0.3 share at market
    endif
    
    //Position Vendeuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute, updateonclose)
    Time15va = Close < MMA100
    Time15vb = Close < MMA300
    Time15vc = Close < MMA600
    Time15vd = Close < MMA1000
    Time15ve = z > 61.8
    sellconditionVA = (Time15va and Time15vb and Time15vc and Time15vd and Time15ve)
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute, updateonclose)
    Time5va = Close < MMA100
    Time5vb = Close < MMA300
    Time5vc = Close < MMA600
    Time5vd = Close < MMA1000
    Time5ve = z > 61.8
    sellconditionVB = (Time5va and Time5vb and Time5vc and Time5vd and Time5ve)
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute, Default)
    Time1va = Close < Pivot
    Time1vb = Close < MMA100
    Time1vc = Close < MMA300
    Time1vd = Close < MMA600
    Time1ve = Close < MMA1000
    Time1vf = z > 61.8
    sellconditionVC = (Time1va and Time1vb and Time1vc and Time1vd and Time1ve and Time1vf)
    if (sellconditionVA and sellconditionVB and sellconditionVC) and not daysForbiddenEntry then
    sellshort 0.3 share at market
    endif
    
    //************************************************************************
    //Stop Loss & Trailing function
    SET STOP LOSS 27
    trailingstart = 27 //trailing will start @trailinstart points profit
    trailingstep = 9 //trailing step to move the "stoploss"
    
    //reset the stoploss value
    IF NOT ONMARKET THEN
    newSL = 0
    ENDIF
    
    //manage long positions
    IF LONGONMARKET THEN
    //first move (breakeven)
    IF newSL = 0 AND close-tradeprice(1)>trailingstart*pipsize THEN
    newSL = tradeprice(1)+trailingstep*pipsize
    ENDIF
    //next moves
    IF newSL > 0 AND close-newSL>trailingstep*pipsize THEN
    newSL = newSL+trailingstep*pipsize
    ENDIF
    ENDIF
     
    //manage short positions
    IF SHORTONMARKET THEN
    //first move (breakeven)
    IF newSL = 0 AND tradeprice(1)-close>trailingstart*pipsize THEN
    newSL = tradeprice(1)-trailingstep*pipsize
    ENDIF
    //next moves
    IF newSL > 0 AND newSL-close>trailingstep*pipsize THEN
    newSL = newSL-trailingstep*pipsize
    ENDIF
    ENDIF
     
    //stop order to exit the positions
    IF newSL > 0 THEN
    SELL AT newSL STOP
    EXITSHORT AT newSL STOP
    ENDIF
    
    //Graphonprice pivot
    //Graphonprice MMA100
    //Graphonprice MMA300
    //Graphonprice MMA600
    //Graphonprice MMA1000

    à part l’inverse fisher RSI dont j’ai pris le code sur le PDF Proorder….il n’y à pas d’optimisation

    je te rejoins à toute fin utile le graph sur lequel on voit bien une prise de position à l’achat sous le pivot en UT 1 min

    Merci pour ton aide

    Cas-particulier-parmi-dautre.png Cas-particulier-parmi-dautre.png
    #132552 quote
    Fantasio2020
    Participant
    Senior

    Slt Nicolas,

    si ça peut aider, voici un prtscr avec les trois unité de temps, ou l’on voit une prise de position vente à 10h20 plus ou moins (graph envoyé pas papa).

    UT 1 conditions OK (Sous pivot et sous les moyennes)

    UT2 pas OK (sous pivot mais dans les moyennes)

    UT3 pas OK (sous pivot mais dans les moyennes)

    c’est comme si le code pour les UT 15 et 5 min n’était pas prit en compte…

     

    à te lire

    Dow-10h43.png Dow-10h43.png
    #132765 quote
    Nicolas
    Keymaster
    Master

    A la lecture de ton code, tout paraît logique. Si tu lances ton système en M1, ce qui est normal puisque c’est le TF le plus petit utilisé, alors tes 4 moyennes mobiles déclarés en tête de code, sous aucune instruction TIMEFRAME seront calculés en TF 1-minute, et donc ces variables seront toutes les mêmes pour tous les TF que tu utilises.

    #132780 quote
    Fantasio2020
    Participant
    Senior

    Bonjour Nicolas,

    comment dois-je alors faire pour que les conditions soient remplies pour chaque timeframe:

    1. Position acheteuse
      1. Que le prix soit au dessus de mes quatre moyennes dans “l’UT 15″ et que la condition du RSI soit remplie également dans cette UT
      2. Que le prix soit au dessus de mes quatre moyennes dans “l’UT 5″ et que la condition du RSI soit remplie également dans cette UT
      3. Que je prix soit au dessus de mes quatre moyennes dans “l’UT 1″ et que la condition du RSI soit remplie également dans cette UT et que le prix soit au dessus du pivot dans cette UT
    2. Idem pour le vente
      1. Que le prix soit sous mes quatre moyennes dans “l’UT 15″ et que la condition du RSI soit remplie également dans cette UT
      2. Que le prix soit sous  mes quatre moyennes dans “l’UT 5″ et que la condition du RSI soit remplie également dans cette UT
      3. Que je prix soit sous  mes quatre moyennes dans “l’UT 1″ et que la condition du RSI soit remplie également dans cette UT et que le prix soit sous le pivot dans cette UT

    Comme la position du pivot est la même peut importe l’UT c’est pas un problème.

    j’ai essayé plusieurs écritures du code  mais je n’arrive pas à remplir les condition dans chaque UT je ne trouve pas la solution….j’ai également essayé ci-dessous qui me donne de meilleurs résultat mais sans remplir les conditions de chacune des UT .

    //Position acheteuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute)
    BuyConditionA = (Close > MMA100 and Close > MMA300 and Close > MMA600 and Close > MMA1000)
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute)
    BuyConditionB = (Close > MMA100 and Close > MMA300 and Close > MMA600 and Close > MMA1000)
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute)
    BuyConditionC = (Close > Pivot and Close > MMA100 and Close > MMA300 and Close > MMA600 and Close > MMA1000 and (MyRSI < 38.2))
    if (buyconditionA and buyconditionB and buyconditionC) and not daysForbiddenEntry then
    buy 0.2 share at market
    endif
    
    //Position Vendeuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute)
    SellConditionA = (Close < MMA100 and Close < MMA300 and Close < MMA600 and Close < MMA1000)
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute)
    SellConditionB = (Close < MMA100 and Close < MMA300 and Close < MMA600 and Close < MMA1000)
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute)
    SellConditionC = (Close < Pivot and Close < MMA100 and Close < MMA300 and Close < MMA600 and Close < MMA1000 and (MyRSI > 61.8))
    if (SellConditionA and SellConditionB and SellConditionC) and not daysForbiddenEntry then
    sellshort 0.2 share at market
    endif

    ou encore ceci:

    //Position acheteuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute)
    Time15aa = Close > MMA100
    Time15ab = Close > MMA300
    Time15ac = Close > MMA600
    Time15ad = Close > MMA1000
    Time15ae = MyRSI < 38.2
    buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute)
    Time5aa = Close > MMA100
    Time5ab = Close > MMA300
    Time5ac = Close > MMA600
    Time5ad = Close > MMA1000
    Time5ae = MyRSI < 38.2
    buyconditionAB = (Time5aa and Time5ab and Time5ac and Time5ad and Time5ae)
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute, Default)
    Time1aa = Close > Pivot
    Time1ab = Close > MMA100
    Time1ac = Close > MMA300
    Time1ad = Close > MMA600
    Time1ae = Close > MMA1000
    Time1af = MyRSI < 38.2
    buyconditionAC = (Time1aa and Time1ab and Time1ac and Time1ad and Time1ae and Time1af)
    if (buyconditionAA and buyconditionAB and buyconditionAC) and not daysForbiddenEntry then
    buy 0.2 share at market
    endif
    
    //Position Vendeuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute)
    Time15va = Close < MMA100
    Time15vb = Close < MMA300
    Time15vc = Close < MMA600
    Time15vd = Close < MMA1000
    Time15ve = MyRSI > 61.8
    sellconditionVA = (Time15va and Time15vb and Time15vc and Time15vd and Time15ve)
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute)
    Time5va = Close < MMA100
    Time5vb = Close < MMA300
    Time5vc = Close < MMA600
    Time5vd = Close < MMA1000
    Time5ve = MyRSI > 61.8
    sellconditionVB = (Time5va and Time5vb and Time5vc and Time5vd and Time5ve)
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute, Default)
    Time1va = Close < Pivot
    Time1vb = Close < MMA100
    Time1vc = Close < MMA300
    Time1vd = Close < MMA600
    Time1ve = Close < MMA1000
    Time1vf = MyRSI > 61.8
    sellconditionVC = (Time1va and Time1vb and Time1vc and Time1vd and Time1ve and Time1vf)
    if (sellconditionVA and sellconditionVB and sellconditionVC) and not daysForbiddenEntry then
    sellshort 0.2 share at market
    endif

    et dans chaque cas, pas moyen d’obtenir que les conditions soient remplies pour chaque UT…

    Un peu d’aide sur la bonne syntaxe serait la bienvenue. MERCI DE TON AIDE 

    Slts

    #132789 quote
    Nicolas
    Keymaster
    Master

    Pour chaque indicateur, il suffit de créer une variable (avec un nom différent) dans chaque UT, puisque ce sont des valeurs différentes calculés avec des données différentes.

    On est bien d’accord, une MM 100 périodes en 1-minute, ce n’est pas une MM 100 périodes en 5-minutes et c’est pourtant ce que tu as fait en ne la calculant qu’une seule fois dans un seul TF (le plus petit, donc le M1 en l’occurrence).

    #132792 quote
    Fantasio2020
    Participant
    Senior

    as tu un exemple, que je comprenne bien?

    #132817 quote
    Fantasio2020
    Participant
    Senior
    //Position acheteuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute)
    BuyConditionA = (Close > MMA100) and (Close > MMA300) and (Close > MMA600)
    if BuyConditionA then
    xA = BuyConditionA
    endif
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute)
    BuyConditionB = (Close > MMA100) and (Close > MMA300) and (Close > MMA600)
    if BuyConditionB then
    yA = BuyConditionB
    endif
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute)
    BuyConditionC = (Close > MMA100) and (Close > MMA300) and (Close > MMA600) 
    if BuyConditionC then
    zA = BuyConditionC
    if (xA and yA and zA) and (Close > Pivot) and (MyRSI < 38.2) and not daysForbiddenEntry then
    buy n share at market
    endif
    endif
    
    //Position Vendeuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute)
    SellConditionA = (Close < MMA100) and (Close < MMA300) and (Close < MMA600)
    if SellConditionA Then
    xV = SellConditionA
    Endif
    
    //declare the strategy on the 5 minutes timeframe
    timeframe(5 minute)
    SellConditionB = (Close < MMA100) and (Close < MMA300) and (Close < MMA600)
    if SellConditionB Then
    yV = SellConditionB
    Endif
    
    //declare the strategy on the 1 minutes Default
    timeframe(1 minute)
    SellConditionC = (Close < Pivot) and (Close < MMA100) and (Close < MMA300) and (Close < MMA600)and (MyRSI > 61.8)
    if SellConditionC Then
    zV = SellConditionC
    if (xV and yV and zV) and not daysForbiddenEntry then
    sellshort n share at market
    endif
    endif

    Comme ceci?

    #132822 quote
    Nicolas
    Keymaster
    Master

    Non pas du tout. A aucun moment tu indiques à la plateforme de calculer une MM100 dans chaque UT.

    Exemple pour le TF 15-minutes, tu dois faire la même chose dans chaque UT :

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    //DEFPARAM FLATBEFORE = 091500
    //DEFPARAM FLATAFTER = 154500
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    Pivot = (DHigh(1) + DLow(1) + DClose(1) + DOpen(0))/4
    
    //Position acheteuse
    //declare the strategy on the 15 minutes timeframe
    timeframe(15 minute, updateonclose)
    //Indicateurs de tendance
    MMA10015 = (ExponentialAverage[100](close))
    MMA30015 = (ExponentialAverage[300](close))
    MMA60015 = (ExponentialAverage[600](close))
    MMA100015 = (ExponentialAverage[1000](close))
    //Indicateurs de prise de positions
    Ind15 = RSI[7](Close)
    x15 = 0.1 * (Ind15 - 50)
    y15 = (EXP (2 * x15) - 1) / (EXP (2 * x15) + 1)
    z15 = 50 * (y15 + 1)
    
    Time15aa = Close > MMA10015
    Time15ab = Close > MMA30015
    Time15ac = Close > MMA60015
    Time15ad = Close > MMA100015
    Time15ae = z15 < 38.2
    buyconditionAA = (Time15aa and Time15ab and Time15ac and Time15ad and Time15ae)
    #132824 quote
    Fantasio2020
    Participant
    Senior

    Ok super Merci,

    je vais faire une course et je me remet au code après ….je te reviens dans la soirée. 🙂

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

Problème multiframe sur 3 unités de temps


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
Summary

This topic contains 26 replies,
has 3 voices, and was last updated by wtangsiri
4 years, 6 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 05/20/2020
Status: Active
Attachments: 11 files
Logo Logo
Loading...