Bonjour,
J’aurais besoin d’aide pour faire évoluer mon code svp.
C’est un bot à l’achat qui utilise un supertrend et un stochastique.
Lorsque le prix est supérieur au supertrend et que le stochastique croise à la hausse la valeur 20. il prends une position à l’achat. il prend toujours le premier croisement à la hausse du stochastique (lorsque le prix est supérieur au supertrend) car je suis en defparam cumulateorders=false
j’ai cependant un problème. Le bot démarre à 8h.
Si à 8h le prix est déjà supérieur au supertrend, le bot va prendre une position dès que le stochastique croisera à la hausse 20. Hors, je souhaiterais que pour l’ouverture du bot à 8h, si le prix est déjà supérieur au supertrend, il ne prenne pas de position (et attende que le prix croise à la baisse le suprentrend, puis le recroise à la hausse pour attendre le signal du stochastique).
Pourriez- vous m’aider?
Merci d’avance.
Ci dessous le code.
Je reste disponible si vous avez des questions.
Pour modifier votre code de trading automatisé afin qu’il ne prenne pas de position à 8h si le prix est déjà supérieur au Supertrend, vous pouvez ajouter une condition supplémentaire. Cette condition vérifiera si le prix était inférieur au Supertrend à la clôture de la session précédente. Si c’est le cas, cela signifie que le prix a franchi le Supertrend à la hausse après 8h, et le bot peut alors prendre une position sur le premier croisement à la hausse du stochastique.
Voici comment vous pourriez modifier votre code :
defparam cumulateorders = false
defparam flatafter = 220000
// --- paramètres
HeureDebut = 080000 // horaire de début de trading
HeureFin = 220000 // horaire de fin de trading
timeframe(30 seconds, updateonclose)
st1 = Supertrend[3,10]
sto = Stochastic[4,1](close)
buyc = sto crosses over 20 and close > st1
timec = time >= HeureDebut and time < HeureFin
// Ajout d'une condition pour vérifier si le prix était inférieur au Supertrend à la clôture de la session précédente
crossedAfterOpen = (close[1] <= st1[1]) and (close > st1)
if trading and timec then
if not longonmarket and buyc and crossedAfterOpen then
buy 1 contract at market
endif
endif
Dans ce code, la variable crossedAfterOpen est ajoutée pour vérifier si le prix était inférieur au Supertrend à la clôture de la session précédente (close[1] <= st1[1]) et s’il est actuellement supérieur au Supertrend (close > st1). Cette condition supplémentaire permet au bot de ne prendre une position que si le prix a franchi le Supertrend à la hausse après l’heure de début (8h).
Merci pour vos lignes de code et la découverte de la fonction crossedAfterOpen Nicolas.
Malgré ces modifications, lorsque j’exécute le code, il prend seulement quelques positions sans logique. Savez-vous d’où cela peut provenir?
En PJ le code qui fonctionne sans crossedAfterOpen ainsi que avec la fonction.
Merci d’avance.
Bonjour,
Je pense que le code proposé par Nicolas ne correspond pas à ce que vous demandez. Sa variable crossedAfterOpen a la valeur TRUE uniquement sur la bougie qui croise le supertrend à la hausse. Sur les bougies suivantes, au-dessus du supertrend, la variable a la valeur FALSE (puisque la bougie précédente n’est pas en-dessous du supertrend). Dans cette version, pour entrer en position, il faut donc avoir sur le même bougie à la fois le croisement à la hausse du supertrend et le croisement à la hausse du 20 par le stochastique.
Je crois que vous voulez entrer en position sur le premier croisement du 20 par le stochastique qui suit le croisement à la hausse du supertrend, pour autant que celui-ci ait lieu après 8 heures.
Je pense que le code suivant répond à cette demande:
defparam cumulateorders = false
defparam flatafter = 220000
// --- paramètres
HeureDebut = 080000 // horaire de début de trading
HeureFin = 220000 // horaire de fin de trading
timeframe(30 seconds, updateonclose)
st1 = Supertrend[3,10]
sto = Stochastic[4,1](close)
timec = time >= HeureDebut and time < HeureFin
If timec then
if close crosses over st1 then
stc = 1
elsif close crosses under st1 then
stc = 0
endif
else
stc = 0
endif
buyc = sto crosses over 20 and stc
if trading and timec then
if not longonmarket and buyc then
buy 1 contract at market
endif
endif
Bonjour Alain,
Oui c’est effectivement l’idée.
Merci pour ces lignes de code.
La condition d’entrée marche effectivement avec les lignes ci dessous:
if timec then
if close crosses over st1 then
trading = 1
elsif close crosses under st1 then
trading =0
endif
else
trading = 0
endif
Merci 🙂