Cette stratégie intègre l'indice de force relative (TSI), l'indice des canaux de produits de base (CCI) et les indicateurs de la moyenne mobile de Hull (Hull MA) pour former une stratégie de trading de suivi de tendance.
La stratégie utilise principalement les indicateurs STI et CCI pour juger de l'orientation de la tendance et des situations de surachat/survente du marché, ainsi que le Hull MA pour déterminer l'évolution intermédiaire des prix, et les trois sont combinés comme conditions de base pour l'ouverture de positions.
Plus précisément, lorsque la ligne rapide de TSI traverse au-dessus de la ligne lente, l'indicateur CCI traverse au-dessus de +20 && n1 augmente, va long; lorsque la ligne rapide de TSI traverse au-dessous de la ligne lente, l'indicateur CCI traverse au-dessous de -20 && n1 tombe, va court.
En confirmant avec des indicateurs à travers différents cycles, les fausses éruptions peuvent être filtrées efficacement pour suivre les tendances à moyen et à long terme.
Il s'agit d'une stratégie de suivi des tendances relativement stable et efficace, qui présente les principaux avantages suivants:
L'utilisation de la STI pour évaluer les tendances à long terme est plus fiable, en évitant les interférences causées par le bruit du marché à court terme;
L'ajout de l'indicateur CCI permet de confirmer les phénomènes de surachat/survente et de filtrer certains faux signaux;
Le jugement de Hull MA
L'intégration d'indicateurs avec différents paramètres peut améliorer la fiabilité des signaux et réduire la probabilité d'interférences.
Les paramètres flexibles de la stratégie peuvent être optimisés pour différents cycles de marché.
Bien que la stratégie soit relativement stable, certains risques demeurent:
Le marché peut connaître de violents retours en arrière qui ne peuvent pas être rapidement arrêtés en cas de perte, ce qui entraîne des pertes relativement importantes;
Les indicateurs de la STI Diff et de la CCI peuvent avoir à la fois de faux signaux et des délais, manquant certains points d'entrée;
Des paramètres mal réglés peuvent également entraîner une fréquence de négociation excessivement élevée ou une diminution de la qualité du signal.
Les contre-mesures:
régler le stop-loss de manière appropriée pour contrôler les pertes uniques;
Confirmer avec d'autres indicateurs, le cas échéant, afin d'améliorer la précision du signal;
Ajustez les paramètres en fonction du marché pour assurer la stabilité de la stratégie.
La stratégie peut également être optimisée dans les aspects suivants:
Essayez différentes combinaisons d'indicateurs de paramètres pour trouver la meilleure correspondance;
Mettre en place des algorithmes d'apprentissage automatique afin d'optimiser les paramètres de manière adaptative;
Augmenter le module de gestion des capitaux pour des bénéfices plus stables;
Incorporer plus de filtres pour augmenter le taux de victoire de la stratégie.
Ce sont là les axes de l'optimisation future.
Cette stratégie utilise de manière complète les indicateurs TSI, CCI et Hull MA pour former une stratégie de suivi des tendances relativement stable et efficace. Elle tire parti avec succès des avantages des indicateurs à cycles multiples pour améliorer la qualité du signal. La prochaine étape sera d'améliorer davantage la stabilité et la rentabilité de la stratégie grâce à l'optimisation des paramètres, à l'amélioration du filtre et à d'autres moyens.
/*backtest start: 2022-11-21 00:00:00 end: 2023-11-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="TSI CCI Hull", shorttitle="TSICCIHULL", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills= false, calc_on_every_tick=true, pyramiding=0) long = input(title="Long Length", type=input.integer, defval=50) short = input(title="Short Length", type=input.integer, defval=50) signal = input(title="Signal Length", type=input.integer, defval=25) price=input(title="Source",type=input.source,defval=open) Period=input(25, minval=1) lineupper = input(title="Upper Line", type=input.integer, defval=100) linelower = input(title="Lower Line", type=input.integer, defval=-100) p=price length= Period double_smooth(src, long, short) => fist_smooth = ema(src, long) ema(fist_smooth, short) pc = change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) keh = tsi_value*5 > linelower ? color.red : color.lime teh = ema(tsi_value*5, signal*5) > lineupper ? color.red : color.lime meh = ema(tsi_value*5, signal*5) > tsi_value*5 ? color.red : color.lime i1=plot(tsi_value*5, title="TSI Value", color=color.black, linewidth=1,transp=100) i2=plot(ema(tsi_value*5, signal*5), title="TSI Signal", color=color.black, linewidth=1,transp=100) fill(i1,i2,color=meh,transp=85) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.black, linewidth=10) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.white, linewidth=8,transp=0) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=meh, linewidth=5) n2ma = 2 * wma(p, round(length / 2)) nma = wma(p, length) diff = n2ma - nma sqn = round(sqrt(length)) n1 = wma(diff, sqn) cci = (p - n1) / (0.015 * dev(p, length)) c = cci > 0 ? color.lime : color.red c1 = cci > 20 ? color.lime : color.silver c2 = cci < -20 ? color.red : color.silver cc=plot(cci, color=c, title="CCI Line", linewidth=2) cc2=plot(cci[1], color=color.gray, linewidth=1,transp=100) fill(cc,cc2,color=c,transp=85) plot(cross(20, cci) ? 20 : na, style=plot.style_cross,title="CCI cross UP", color=c1, linewidth=2,transp=100,offset=-2) plot(cross(-20, cci) ? -20 : na, style=plot.style_cross,title="CCI cross down", color=c2, linewidth=2,transp=100,offset=-2) TSI1=ema(tsi_value*5, signal*5) TSI2=ema(tsi_value*5, signal*5)[2] hullma_smoothed = wma(2*wma(n1, Period/2)-wma(n1, Period), round(sqrt(Period))) //plot(hullma_smoothed*200) longCondition = TSI1>TSI2 and hullma_smoothed<price and cci>0 if (longCondition and cci>cci[1] and cci > 0 and n1>n1[1]) strategy.entry("Buy Here", strategy.long) shortCondition = TSI1<TSI2 and hullma_smoothed>price and cci<0 if (shortCondition and cci<cci[1] and cci < 0 and n1<n1[1]) strategy.entry("Sell Here", strategy.short)