Bonjour,
Sur l’indicateur Supertrend + CCI crée par Nicolas il y a quelques moi, dans le fil de discussion il était questionné d’en faire un screener. J’ai fouillé le forum sans trouver trace de ce sujet.
Est il possible de le faire ? Mes connaissances sur PRT ne sont pas encore assez avancées pour réaliser ce genre de choses.
De plus, est il possible de choisir un horizon de temps défini antérieur pour l’observation des signaux détectés (hausse comme baisse). Par exemple : faire la recherche pour un signal détecté il y a 5 jours.
Il serait peut être préférable de faire deux screeners séparés : un pour la hausse, l’autre pour la baisse.
Merci,
Benjamin
Bien sûr, merci de nous indiquer de quel indicateur il s’agit exactement et je coderai les screeners.
Ci-dessous le code du screener, on peut modifier le paramètre “x” pour faire varier la fraîcheur du signal:
//PRC_Supertrend+CCI | screener
//https://www.prorealcode.com/topic/convertissement-indicateur-supertrend-cci-developpe-par-nicolas/#post-178794
// --- settings
x = 1 //fraîcheur du signal X bougies en arrière
CCIPeriod=50 // CCI indicator period
ATRPeriod=5 // ATR indicator period
Level=0 // CCI activation level
// --- end of settings
icci = CCI[CCIPeriod](typicalPrice)
iatr = AverageTrueRange[ATRPeriod](close)
TrendUp=0.0
TrendDown=0.0
//SignUp=0.0
//SignDown=0.0
if(iCCI>=Level and iCCI[1]<Level) then
TrendUp=TrendDown[1]
endif
if(iCCI<=Level and iCCI[1]>Level) then
TrendDown=TrendUp[1]
endif
if(iCCI>Level) then
TrendUp=low-iATR
if(TrendUp<TrendUp[1] and iCCI[1]>=Level) then
TrendUp=TrendUp[1]
endif
endif
if(iCCI<Level) then
TrendDown=high+iATR
if(TrendDown>TrendDown[1] and iCCI[1]<=Level) then
TrendDown=TrendDown[1]
endif
endif
signal = 0
if(TrendDown[1]<>0.0 and TrendUp<>0.0) then
//SignUp=TrendUp
signal=1
endif
if(TrendUp[1]<>0.0 and TrendDown<>0.0) then
//SignDown=TrendDown
signal=-1
endif
test = summation[x](signal<>signal[1])>0
screener[test] (signal as "direction")
Merci bcp ! Je vais tester ça mais un énorme merci en attendant pour ta réactivité.
Bonjour,
Qqs retours après utilisation,
- peut on séparer signal à la baisse et signal à la hausse ?
- pour une fraicheur de signal donné (ex 10), si aucun signal détecté sur la période fournie (<=10), la ligne est quand même détectée (ce qui n’est pas forcément une mauvaise chose mais pas forcément attendue)
Puisque la valeur du signal (1 = hausse , -1 = baisse) est retournée en critère de tri, lancer le screener avec un tri du “plus petit au plus grand” ou “plus grand au plus petit”.
En théorie le screener doit bien retournée les retournements ayant eu lieu dans les X dernières bougies. Il faut bien entendu que les valeurs des paramètres soient les mêmes à la fois dans le screener et dans l’indicateur attaché au graphique pour vérification.
Effectivement, je n’avais pas les mêmes valeurs de paramètres … merci pour le support.
Bonjour,
je reviens sur la question posée par Redisdead: est il possible de séparer dans le code le signal à la hausse et à la baisse de façon à pouvoir ajouter dans le screener d’autres conditions (par exemple signal haussier et close > kama 200, etc )?
Merci.
Oui on peut, ci-dessous la version du code où on peut choisir si on veut un signal baissier ou haussier avec le paramètre “signaltype” en tête de code:
//PRC_Supertrend+CCI | screener
//https://www.prorealcode.com/topic/convertissement-indicateur-supertrend-cci-developpe-par-nicolas/#post-178794
// --- settings
signaltype = 1 //1=haussier ; -1=baissier
x = 1 //fraîcheur du signal X bougies en arrière
CCIPeriod=50 // CCI indicator period
ATRPeriod=5 // ATR indicator period
Level=0 // CCI activation level
// --- end of settings
icci = CCI[CCIPeriod](typicalPrice)
iatr = AverageTrueRange[ATRPeriod](close)
TrendUp=0.0
TrendDown=0.0
//SignUp=0.0
//SignDown=0.0
if(iCCI>=Level and iCCI[1]<Level) then
TrendUp=TrendDown[1]
endif
if(iCCI<=Level and iCCI[1]>Level) then
TrendDown=TrendUp[1]
endif
if(iCCI>Level) then
TrendUp=low-iATR
if(TrendUp<TrendUp[1] and iCCI[1]>=Level) then
TrendUp=TrendUp[1]
endif
endif
if(iCCI<Level) then
TrendDown=high+iATR
if(TrendDown>TrendDown[1] and iCCI[1]<=Level) then
TrendDown=TrendDown[1]
endif
endif
signal = 0
if(TrendDown[1]<>0.0 and TrendUp<>0.0) then
//SignUp=TrendUp
signal=1
endif
if(TrendUp[1]<>0.0 and TrendDown<>0.0) then
//SignDown=TrendDown
signal=-1
endif
test = summation[x](signal=signaltype)>0
screener[test] (signal as "direction")
(non testé)