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 :
- 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
- 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
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")
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
Désolé, je n’ai pas bien compris les horaires.
Ajoutez cette ligne immédiatement après la première :
DEFPARAM FlatBefore = 153000
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”)
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.
JSParticipant
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")