La stratégie est basée sur un canal de bande d’onde adaptatif, conçue avec deux stratégies de suivi et de stop-loss différentes, avec une vérification de retour systématique sur plusieurs périodes de temps, et appartient à la stratégie de trading de type suivi de tendance.
Calculer la trajectoire ascendante et descendante du canal de bande d’onde, la largeur du canal est ajustée par des paramètres.
La stratégie de suivi de la rupture consiste à ouvrir une position après que le prix a franchi la porte et à arrêter la perte pendant qu’il est dans la porte.
Stratégie de retour en arrière, ouverture de position lorsque le prix atteint le canal et arrêt de perte lorsque le prix revient dans le canal.
Les indicateurs du CCI aident à déterminer le nombre de lignes aériennes.
Le test de rétroactivité sur plusieurs périodes a confirmé la faisabilité des deux stratégies.
Les canaux de bande ondulée sont simples et intuitifs, et permettent de capturer efficacement les tendances des prix.
Les deux stratégies peuvent être adaptées à différentes conditions de marché et améliorer la stabilité.
L’indicateur CCI peut aider à déterminer le taux d’occupation.
Les résultats sont plus convaincants grâce à la rétroanalyse de plusieurs périodes.
Les règles de la stratégie sont simples, claires et faciles à mettre en œuvre.
Le canal de la bande peut être désactivé.
Les deux stratégies présentent le risque d’arrêter trop tôt ou trop tard.
L’indicateur CCI peut émettre un mauvais signal.
Il faut être prudent dans le traitement des anomalies de la rétroanalyse.
Les paramètres peuvent avoir été optimisés pour une surcompatibilité.
Test de différents paramètres pour trouver la combinaison optimale des paramètres.
Évaluer les autres indicateurs pour filtrer le signal.
Optimiser les stratégies de stop loss et réduire les risques.
Les méthodes de calcul de la largeur de passage adaptée sont étudiées.
Les tests de retour sont effectués sur de nombreuses variétés et périodes.
Paramètres d’optimisation dynamique utilisant une méthode d’apprentissage automatique.
La stratégie est basée sur la conception de deux stratégies de suivi et d’arrêt des pertes basées sur le canal de la bande d’onde, avec une vérification de retour sur plusieurs périodes. Par l’optimisation des paramètres et l’amélioration de la stratégie d’arrêt des pertes, la robustesse du système peut être renforcée et développée en un système de trading de suivi de tendance fiable et mature.
/*backtest
start: 2022-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title = "Underworld Hunter", overlay=true)
len = input(75, minval=1, title="Length")
src = input(close, title="Source")
basis = 0.0
basis := na(basis[1]) ? sma(src, len) : ema(ema(ema(src,len),len),len)
mult = input(1.9, minval=0.001, maxval=50, title="Deviation")
dev = mult * stdev(src, len)
upper = basis + dev
lower = basis - dev
//CCI calculation and inputs
lengthcci = input(20, minval=1, title="Period for CCI")
ma = sma(close, lengthcci)
ccivalue = (src - ma) / (0.015 * dev(src, lengthcci))
//CCI plotting
cciover0 = ccivalue >= 100 and ccivalue <= 120
cciover1 = ccivalue > 120 and ccivalue <= 140
cciover2 = ccivalue > 140 and ccivalue <= 160
cciover3 = ccivalue > 160 and ccivalue <= 180
cciover4 = ccivalue > 180
cciunder0 = ccivalue <= -100 and ccivalue >= -120
cciunder1 = ccivalue <= -120 and ccivalue > -140
cciunder2 = ccivalue <= -140 and ccivalue > -160
cciunder3 = ccivalue <= -160 and ccivalue > -180
cciunder4 = ccivalue <= -180
plotshape(cciover0, title="CCIO0", location=location.abovebar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder0, title="CCIU0", location=location.belowbar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover1, title="CCIO1", location=location.abovebar, color=#ffff00, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder1, title="CCIU1", location=location.belowbar, color=#ffff00, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover2, title="CCIO2", location=location.abovebar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder2, title="CCIU2", location=location.belowbar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover3, title="CCIO3", location=location.abovebar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder3, title="CCIU3", location=location.belowbar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover4, title="CCIO4", location=location.abovebar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder4, title="CCIU4", location=location.belowbar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)
//plotting
plot(upper, title="Upper shadow", color=color.black, transp = 30, linewidth = 4)
plot(upper, title="Upper line", color=#FF2E00, transp = 0, linewidth = 2)
plot(lower, title="Lower shadow", color=color.black, transp = 30, linewidth = 4)
plot(lower, title="Lower line", color=#FF2E00, transp = 0, linewidth = 2)
plot(basis, title="Basic line", color=color.red, transp = 50, linewidth = 2)
mean = input(title="Test Reverse to the Mean instead", type=input.bool, defval=false)
test = input(title="Enable testing", type=input.bool, defval=true)
ordersize=floor(50000/close)
if(close>upper and strategy.opentrades==0 and not mean and test)
strategy.entry("Hunt Up", strategy.long, ordersize)
if (close<upper and close[1]<upper and close[2]<upper)
strategy.close("Hunt Up", qty_percent = 100, comment = "Hunt End")
if(close<lower and strategy.opentrades==0 and not mean and test)
strategy.entry("Hunt Down", strategy.short, ordersize)
if (close>lower and close[1]>lower and close[2]>lower)
strategy.close("Hunt Down", qty_percent = 100, comment = "Hunt End")
//bounce of bands
if(close>upper and strategy.opentrades==0 and mean and test)
strategy.entry("Sneak Down", strategy.short, ordersize)
if (close<upper and close[1]<upper and close[2]<upper and close>high[1])
strategy.close("Sneak Down", qty_percent = 100, comment = "SneakEnd")
if(close<lower and strategy.opentrades==0 and mean and test)
strategy.entry("Sneak Up", strategy.long, ordersize)
if (close>lower and close[1]>lower and close[2]>lower and close<low[1])
strategy.close("Sneak Up", qty_percent = 100, comment = "Sneak End")