Bonjour la communauté,
je suis tombé sur un post par hasard, et je me demandais s’il n’y avait pas moyen d’obtenir une ligne horizontale lorsque les plats Kijun et SSB sont alignés.
kijun = (highest[26](high)+lowest[26](low))/2
SSB = (highest[52](high[26])+lowest[52](low[26]))/2
kijunp = summation[9](Kijun=Kijun[1])=9
ssbp = summation[9](SSB=SSB[1])=9
if kijunp then
kijunPrice = kijun
endif
if ssbp then
ssbPrice = SSB
endif
return kijunPrice as "Plat KIjun", ssbPrice as "Plat SSB"
En effet, quand on trace une droite horizontale lorsque l’on a un plat Kijun et un plat SSB de valeur identique on obtient généralement un bon support ou une bonne résistance.
aussi, plutôt que de retourner un “Plat Kijun” pour kijunPrice et un “Plat SSB” pour ssbPrice, l’idée serait par exemple tous les “x” Barindex de tester une condition pour ces “x” Barindex:
if kijunPrice = ssbPrice then
drawline(SR = kijunp = SSBp)
endif
return SR as "S/R"
// ou un truc du style
ce serait une belle manière de tracer des support et résistance…
Si quelqu’un à une idée pour coder ça…..? (perso j’ai pas le niveau)
Le code ci-dessous trace une ligne horizontale dés que les plats Kijun et SSB sont identiques. Si tu souhaites utiliser une instruction et comprendre comment elle fonctionne, tu peux utiliser la documentation: https://www.prorealcode.com/prorealtime-documentation/
kijun = (highest[26](high)+lowest[26](low))/2
SSB = (highest[52](high[26])+lowest[52](low[26]))/2
kijunp = summation[9](Kijun=Kijun[1])=9
ssbp = summation[9](SSB=SSB[1])=9
if kijunp then
kijunPrice = kijun
endif
if ssbp then
ssbPrice = SSB
endif
if kijunprice=ssbprice then
drawhline(kijunprice)
endif
return //kijunPrice as "Plat KIjun", ssbPrice as "Plat SSB"
Bonjour Nicolas,
Merci, cela fonctionne….
j’ai essayé d’apport une petite modif pour intégrer ca dans une stratégie, mais ça n’a pas l’aire de fonctionner:
kijun = (highest[26](high)+lowest[26](low))/2
SSB = (highest[52](high[26])+lowest[52](low[26]))/2
kijunp = summation[9](Kijun=Kijun[1])=9
ssbp = summation[9](SSB=SSB[1])=9
if kijunp then
kijunPrice = kijun
endif
if ssbp then
ssbPrice = SSB
endif
if kijunprice = ssbprice then
SR = kijunprice = ssbprice
if SR > Close then
Resist = SR
elsif SR < Close then
Support = SR
endif
endif
return support as "Support" , resist as "resist"
Condition vente:
Condition1
Condition2
Condition3 = (Close - Support) > pipsize*15
Comment faire également pour identifier quel zone de support se trouve proche du prix?
Ton code identifie et enregistre le dernier support ou résistance. Donc tu ne pourras utiliser que ce dernier dans ta stratégie, si tu souhaites utiliser ceux précédemment trouvés, alors soit :
- en v10.3, il faut faire des boucles dans le passé de l’historique pour identifier l’un des supports et résistances le plus proche
- en v11, utiliser un tableau pour enregistrer les anciens niveaux et faire une boucle dans ce tableau
Par ailleurs, je ne comprends pas ce que tu cherches à faire avec ta condition de proximité dans le cas d’une vente ? Peux-tu le détailler stp ?
SLt Nicolas,
- Oui… En fait je remarque, avec la stratégie que j’ai mi en place, que lorsque je perd une position, c’est parce que le bot prend une position sur un support ou un résistance; et 9 fois sur 10 le prix change de sens. (j’ai donné un exemple avec une vente, mais c’est pareille à l’achat)
- donc si une opportunité se présente à moins de 15 pips d’un niveau de support ou résistance il ne doit rien faire …
- avec plus de 15 pips le mécanisme de “trailingstart/trailingstep” jouera sont rôle.
je me doutais bien que j’allais devoir utiliser des boucles pour identifier les niveaux du passé….(j’ai du mal à appréhender le mécanisme de ces boucles), je veux bien un peu d’aide.
Slts
Pour apprendre le fonctionnement d’une boucle, l’une des bases de la programmation, je te suggère de consulter la formation sur la programmation avancée : https://www.prorealcode.com/courses/prorealtime-programmation-avancee/
Donc tu voudrais un code compatible prorealtime 10.3 j’imagine ?
Re Nicolas,
Oui V10.3….. V11 pas encore dispo chez IG Market
Très bien, j’ai créé une stratégie toute simple qui prendra ses ordres si “allowtrading” est égal à 1 (égal à 0 si trop proche d’un SR).
Dans la boucle on teste une proximité de “distance” avec un support/resistance détecté dans les “lookback” derniers chandeliers.
defparam cumulateorders=false
// --- settings
distance = 15 //no orders if there is a SR within X points
lookback = 1000 //lookback in bars to check recent SR
tp = 30 //takeprofit in points
sl = 10 //stoploss in points
// ----------------------------------
// --- icihmoku support and resistance
kijun = (highest[26](high)+lowest[26](low))/2
SSB = (highest[52](high[26])+lowest[52](low[26]))/2
kijunp = summation[9](Kijun=Kijun[1])=9
ssbp = summation[9](SSB=SSB[1])=9
if kijunp then
kijunPrice = kijun
endif
if ssbp then
ssbPrice = SSB
endif
if kijunprice=ssbprice then
SRlevel = kijunprice
endif
// ----------------------------------
// --- dummy strategy
buycondition = rsi[14] crosses over 50
sellcondition = rsi[14] crosses under 50
if buycondition or sellcondition then
//check if the current price is distant from at least "distance" from recent support or resistance
allowtrading=1
for i = 0 to lookback-1 do
dist = abs(close-srlevel[i])<distance*pointsize
if dist then
allowtrading=0 //no trading is allowed we are near a SR!
break //break the loop, no need to continue, trading is not allowed anymore!
endif
next
//trigger orders or not
if allowtrading then
if buycondition then
buy 1 contract at market
endif
if sellcondition then
sellshort 1 contract at market
endif
endif
set target pprofit tp
set stop ploss sl
endif
// ----------------------------------
graph allowtrading as "0=near a SR , don't trade!"
Slt Nicolas,
c’est topissime!!!
j’ai néanmoins un soucis avec la variable “i”… en effet, je travaille sur des timeframes différents (Ichimoku est dans un timeframe en 15 minutes pour identifier SRlevel en UT 15 minutes)
et lorsque j’insère la boucle en UT 10 secondes qui est mon ut de trading, le système me signale qu’une variable ne peut être utilisé dans des timeframes différents.
Une idée?
Problème réglé…. autant pour moi!!
Slt Nicolas,
Voici les résultats avec l’intégration du code:
C’est Top…! juste ce qu’il me fallait.
Merci pour le retour. N’hésite pas à partager tes futures recherches, histoire que le cercle vertueux puisse continuer, et aussi à demander de l’aide si nécessaire ! 😉
J’ai lancé la stratégie depuis tout à l’heure…
==> 3 arrêts du système dû à un problème de rechargement de donnée
- j’ai d’abord preloadé 15.000 Bars
- j’ai ensuite préloadé 30.000 Bars
pas de résultat…
Une idée d’où ça peut venir? LookBack?
Il faut en effet à minima un preloadbars de “lookback”.
Plus ce dernier est important, plus les boucles seront consommatrices de ressources.
Tu peux aussi modifier la ligne 34 de mon code en ajoutant une condition pour lancer la boucle de détection seulement si on est pas au marché :
if (buycondition or sellcondition) and NOT ONMARKET then