cassure range M30 en M5

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #249250 quote
    Ptitlilou87Ptitlilou87
    Participant
    Average
    Bonjour à  tous, je suis à la recherche d’aide pour finir mon code, je l’explique: je souhaiterai coder une stratégie sur le gold: j’aimerai tracer le plus haut et le plus bas de la bougie M30 de 15h qui clôture à 15h30 qui deviendra donc mon RANGE M30 Une fois le plus haut et le plus bas de dessiner nous aurons 2 cas de figure :
    1.  lorsqu’une bougie en m5 clôture avec le corps (pas avec la mèche) bien avec le corps au dessus du plus haut du range M30 et que le RSI en période 14 est en dessous de 70 alors je prend une position en achat avec un sl sous la bougie m5 qui casse le haut du range M30 et je vise 2r s
    2. deuxième cas de figure si une bougie M5 casse avec le corps le bas du range  M30 et que le rsi en période 14 est au dessus de 30 alors je prend une vente au marché avec un sl au dessus de la bougie M5 qui casse le range
    Je veux que cela reprenne une autre position si le prix réintègre le range et recasse le range en respectant les conditions de corps et de RSI   J’ai deja fait un code, mais la position est prise sur la deuxième bougie après que la première est cassée le range, hors je veux que la position soit prise au marché dès que la cloture M5 cloture au dessue ou au dessous du range. et des fois la position est prise alors que le range M30 n’est pas cassée   Une personne peut elle m’aider? merci par avance. Voici le code: DEFPARAM CumulateOrders = False // Initialisation ONCE rangeHigh = 0 ONCE rangeLow = 0 ONCE buildRange = 0 ONCE tradeDone = 0 ONCE longDone = 0 ONCE shortDone = 0 ONCE dayRef = 0 ONCE bias = 0 ONCE rangeReady = 0 // Nouveau jour IF DayOfWeek <> dayRef THEN dayRef = DayOfWeek tradeDone = 0 longDone = 0 shortDone = 0 bias = 0 rangeReady = 0 buildRange = 1 rangeHigh = 0 rangeLow = 999999 // valeur très haute pour trouver le vrai low ENDIF // Construction manuelle du range entre 15h00 et 15h25 IF Time >= 150000 AND Time < 153000 THEN IF buildRange = 1 THEN rangeHigh = MAX(rangeHigh, High) rangeLow = MIN(rangeLow, Low) ENDIF ENDIF // Clôture du range à 15h30 IF Time = 153000 THEN buildRange = 0 rangeReady = 1 ENDIF // RSI et cassures myRSI = RSI[14](close) canTradeNow = (Time >= 153500 AND Time <= 170000) // — Achat : cassure du haut du range par le corps — IF rangeReady = 1 AND canTradeNow AND tradeDone < 2 AND longDone = 0 THEN IF open > rangeHigh AND close > rangeHigh AND myRSI < 70 AND (bias = 0 OR bias = 1) THEN sl = low risk = close – sl tp = close + 2 * risk BUY 1 SHARES AT MARKET SET STOP PRICE sl SET TARGET PRICE tp tradeDone = tradeDone + 1 longDone = 1 bias = 1 ENDIF ENDIF // — Vente : cassure du bas du range par le corps — IF rangeReady = 1 AND canTradeNow AND tradeDone < 2 AND shortDone = 0 THEN IF open < rangeLow AND close < rangeLow AND myRSI > 30 AND (bias = 0 OR bias = -1) THEN sl = high risk = sl – close tp = close – 2 * risk SELLSHORT 1 SHARES AT MARKET SET STOP PRICE sl SET TARGET PRICE tp tradeDone = tradeDone + 1 shortDone = 1 bias = -1 ENDIF ENDIF
    #249266 quote
    robertogozzirobertogozzi
    Moderator
    Legend
    Le voici (j’ai préféré le réécrire) :
    DEFPARAM CumulateOrders = False
    //
    Timeframe(30mn,UpdateOnClose)
    ONCE myTime = 150000
    ONCE High30 = 9999999
    ONCE Low30  = 0
    IF OpenTime = myTime THEN
       High30 = high
       Low30  = low
    ENDIF
    //
    Timeframe(default)
    ONCE BienAuDessus = 5*PipSize    //Points minimum au-dessus du maximum ou en dessous du minimum de la RANGE M30
    myRSI      = Rsi[14](close)
    LongRSI    = myRSI < 70
    ShortRSI   = myRSI > 30
    LongCLOSE  = close >= (High30 + BienAuDessus)
    ShortCLOSE = close <= (low30  - BienAuDessus)
    LongCond   = LongRSI  AND LongClose  AND Not OnMarket
    ShortCond  = ShortRSI AND ShortClose AND Not OnMarket
    IF LongCond THEN
       BUY 1 Contract AT Market
       SLprice = low
       TPprice = close + (abs(close - low) * 2)
       SET STOP   PRICE SLprice
       SET TARGET PRICE TPprice
    ELSIF ShortCond THEN
       SELLSHORT 1 Contract AT Market
       SLprice = high
       TPprice = close - (abs(close - high) * 2)
       SET STOP   PRICE SLprice
       SET TARGET PRICE TPprice
    ENDIF
    graphonprice High30  coloured("Cyan")
    graphonprice Low30   coloured("Cyan")
    graphonprice SLprice coloured("Red")
    graphonprice TPprice coloured("Blue")
    Iván González thanked this post
    #249318 quote
    Ptitlilou87Ptitlilou87
    Participant
    Average
    Bonjour et merci pour cette réponse. Mais après avoir copier/coller ce code il prend des positions toutes la journée pas seulement à partir de 15h30. Par exemple sur la journée du 28/07/2025 il en prend une a 14h25 puis plein à l’achat à partir de 16h alors que le haut de la M30 n’est pas cassée. Pouvez-vous me dire pourquoi ou me dire ce qu’il faut que je modifie…Merci encore
    #249326 quote
    robertogozzirobertogozzi
    Moderator
    Legend
    Désolé, je n’ai pas bien compris les horaires. Ajoutez cette ligne immédiatement après la première :
    DEFPARAM FlatBefore = 153000
    #249440 quote
    Ptitlilou87Ptitlilou87
    Participant
    Average
    Merci encore pour cette réponse, Mais après vérification j’ai du modifier encore des paramètres car il prenais beaucoup trop de tarde dans la plage horaire de 15h30 à 17 h alors que le prix ne casser pas le range de 15h à 15h30. Voici le code que j’ai modifié le premier trade avec la position simulée en photo est bon, mais je ne comprends pas pourquoi il me prend les autres trades dans le rond orange, car le range de 15h à 15h30 n’est jamais réintégré. Pouvez-vous m’aider a identifier ce qui ne va pas? merci d’avance le code: DEFPARAM CumulateOrders = False DEFPARAM FlatBefore = 153000 DEFPARAM Flatafter = 173000 // Timeframe(30mn,UpdateOnClose) ONCE myTime = 150000 ONCE High30 = 153000 ONCE Low30 = 153000 IF OpenTime = myTime THEN High30 = high Low30 = low ENDIF // Timeframe(5mn) ONCE BienAuDessus = 5*PipSize //Points minimum au-dessus du maximum ou en dessous du minimum de la RANGE M30 myRSI = Rsi[14](close) LongRSI = myRSI < 70 ShortRSI = myRSI > 30 LongCLOSE = close > (High30) ShortCLOSE = close < (low30) LongCond = LongRSI AND LongClose AND Not OnMarket ShortCond = ShortRSI AND ShortClose AND Not OnMarket IF LongCond THEN BUY 1 Contract AT Market SLprice = low TPprice = close + (abs(close – low) * 2) SET STOP PRICE SLprice SET TARGET PRICE TPprice ELSIF ShortCond THEN SELLSHORT 1 Contract AT Market SLprice = high TPprice = close – (abs(close – high) * 2) SET STOP PRICE SLprice SET TARGET PRICE TPprice ENDIF graphonprice High30 coloured(“Cyan”) graphonprice Low30 coloured(“Cyan”)
    trade-.png trade-.png
    #249445 quote
    robertogozzirobertogozzi
    Moderator
    Legend
    Cela fonctionne bien pour moi. Avez-vous utilisé un intervalle de temps <= 5 minutes ? Parce qu’il DOIT y avoir une bougie qui s’ouvre aux heures indiquées. Dans votre cas, 1 heure ne fonctionne pas, car elle ignore 173 000 heures. Elle ignore également 153 000 heures, mais celle-ci est reportée à 160 000 heures, ce qui fonctionne (presque) bien. Pour la sortie, cependant, la sortie doit avoir lieu à 173 000 heures. Si aucune bougie ne se ferme/s’ouvre à ce moment-là, les échanges se poursuivent jusqu’à 000 000, date à laquelle la limite de 153 000 reprend effet.
    #249446 quote
    JSJS
    Participant
    Master

    Bonjour,

    Peut-être que cela te sera utile — il s’agit de la stratégie de base, sans toutes les conditions supplémentaires…

    Le problème avec l’utilisation de ces « ordres stop », c’est qu’ils restent actifs ; ce ne sont pas des ordres en attente…
    La première fois, tout se passe bien : une position s’ouvre dans la plage définie et est clôturée par le SL ou le TP…


    Le problème survient avec les positions suivantes. Lorsque le prix évolue au-dessus ou en dessous des « ordres stop », l’« ordre stop » devient un « ordre au marché » et commence à vivre sa propre vie…
    La position s’ouvre alors au niveau du « Open », et à partir de là, le SL et le TP sont calculés à partir de ce point d’ouverture…

    DefParam FlatBefore=153000
    DefParam FlatAfter=170000
    
    TimeFrame(5 minutes, UpdateOnClose)
    
    If OpenTime=152500 then
    xHighest=Highest[6](High)
    xLowest=Lowest[6](Low)
    EndIf
    
    If NOT LongOnMarket then
    Buy 1 contract at xHighest Stop
    LongSL=xLowest
    LongRisk=xHighest-xLowest
    LongTP=xHighest+2*LongRisk
    EndIf
    
    If LongOnMarket then
    Set Target Profit 2*LongRisk
    EndIf
    
    If NOT ShortOnMarket then
    SellShort 1 contract at xLowest Stop
    ShortSL=xHighest
    ShortRisk=xHighest-xLowest
    ShortTP=xLowest-2*ShortRisk
    EndIf
    
    If ShortOnMarket then
    Set Target Profit 2*ShortRisk
    EndIf
     
    GraphOnPrice xHighest Coloured("Green")
    GraphOnPrice xLowest Coloured("Red")
    GraphOnPrice LongSL Coloured("Red")
    GraphOnPrice LongTP Coloured("Yellow")
    GraphOnPrice ShortSL Coloured("Red")
    GraphOnPrice ShortTP Coloured("Yellow")

    Iván González thanked this post
    Scherm­afbeelding-2025-08-06-om-18.06.46.png Scherm­afbeelding-2025-08-06-om-18.06.46.png
Viewing 7 posts - 1 through 7 (of 7 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

cassure range M30 en M5


ProOrder : Trading Automatique & Backtests

New Reply
Author
Summary

This topic contains 6 replies,
has 3 voices, and was last updated by JSJS
1 year, 2 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 08/01/2025
Status: Active
Attachments: 2 files
ProRealCode ProRealCode
Loading...