
Cette stratégie est une stratégie de suivi de tendance qui utilise plusieurs indices de temps-cadre convenus. Elle ouvre des positions en hausse ou en baisse simultanément sur la ligne du jour, la ligne du 10, la ligne du 15 et la ligne du 30, et utilise la méthode de stop-loss dynamique.
La stratégie utilise quatre périodes de temps: le jour, le 10, le 15 et le 30 pour déterminer la direction de la tendance. Elle est jugée haussière lorsque les prix de clôture des quatre périodes sont supérieurs au prix d’ouverture et baissière lorsque les prix de clôture des quatre périodes sont inférieurs au prix d’ouverture.
Si la position est positive, vous devez effectuer une entrée plus élevée; si la position est négative, vous devez effectuer une entrée plus courte. Utilisez le canal KC pour effectuer un arrêt dynamique après l’entrée.
Plus précisément, la stratégie juge la direction de la tendance en comparant les prix d’ouverture et de fermeture de différentes périodes. Si le prix d’ouverture est inférieur au prix de fermeture, la période est en hausse, indiquée en vert.
Quand les quatre périodes sont en hausse, la stratégie prend une position plus élevée; quand les quatre périodes sont en baisse, la stratégie prend une position vide. Les conditions de placement sont stop loss ou inversion de tendance.
L’utilisation de plusieurs périodes pour juger des tendances permet de filtrer efficacement les fausses ruptures et de déterminer la direction de la tendance
La méthode de stop-loss dynamique protège au maximum les fonds
Les conditions d’entrée sont strictes, ce qui permet de réduire les transactions inutiles et d’éviter les coûts excessifs des points de glissement.
La combinaison d’un cadre temporel multiple permet de trouver un équilibre entre la vitesse et la stabilité de la rentabilité
Les conditions d’admission sont trop strictes et vous risquez de manquer certaines opportunités
Un mauvais réglage du stop loss peut être trop radical ou conservateur
Une mauvaise sélection des délais peut ne pas correspondre à des tendances à plus long terme ou à plus court terme
Les événements soudains entraînent une inversion rapide et ne peuvent pas être arrêtés
Optimiser le choix des délais, en équilibrant la vitesse et la stabilité des bénéfices
Tester différents paramètres pour optimiser le stop loss
Ajout d’algorithmes d’apprentissage automatique pour aider à déterminer les points de basculement des tendances
Accroître l’attention sur les événements majeurs et éviter les pertes soudaines
La stratégie intègre plusieurs cadres temporels pour juger de la direction de la tendance, des conditions d’entrée strictes combinées à des arrêts dynamiques, dans le but d’obtenir des gains stables. Il existe des opportunités potentiellement manquées ainsi que des problèmes de contrôle inadéquat des risques. La prochaine étape consiste à continuer à optimiser les paramètres pour améliorer la stabilité de la stratégie.
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[RichG] Easy MTF Strategy v1.1", overlay=false)
TF_1_time = input("D", "Timeframe 1")
TF_2_time = input("10D", "Timeframe 2")
TF_3_time = input("15D", "Timeframe 3")
TF_4_time = input("30D", "Timeframe 4")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
lengthBB=input(20, title="BB Length")
transaction_size = input(1, "Contract/Share Amount")
src = close, len = 20
out = sma(src, len)
width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line
kc() =>
ma = sma(close, lengthKC)
range = tr
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
[lowerKC, upperKC]
bb() =>
source = close
basis = sma(source, lengthBB)
dev = multKC * stdev(source, lengthBB)
upperBB = basis + dev
lowerBB = basis - dev
[upperBB, lowerBB]
TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor
TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor
TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor
TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor
TF_global = TF_1 and TF_2 and TF_3 and TF_4
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width
plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)
exitCondition_Long = TF_global_bear
exitCondition_Short = TF_global
longCondition = TF_global
if (longCondition)
strategy.entry("MTF_Long", strategy.long, qty=transaction_size)
shortCondition = TF_global_bear
if (shortCondition)
strategy.entry("MTF_Short", strategy.short, qty=transaction_size)
[kc_lower,kc_upper] = kc()
strategy.close("MTF_Long", when=close < kc_upper)
strategy.close("MTF_Short", when=close > kc_lower)