Stratégie à plusieurs délais

Auteur:ChaoZhang est là., Date: 19 février 2024 à 11 h 13 h 22
Les étiquettes:

img

Résumé

Cette stratégie utilise l'accord des indicateurs sur plusieurs délais pour suivre les tendances.

La logique de la stratégie

La stratégie évalue l'orientation de la tendance en utilisant quatre délais - quotidien, 10 jours, 15 jours et 30 jours. Lorsque les prix de clôture sont supérieurs aux prix d'ouverture sur les quatre délais, elle indique un signal haussier. Lorsque les prix de clôture sont inférieurs aux prix d'ouverture sur les quatre délais, elle indique un signal baissier.

Lorsque le signal est haussier, il va long. Lorsque le signal est baissier, il va court. Après l'entrée, le canal KC est utilisé pour le stop loss dynamique.

Plus précisément, la stratégie compare les prix d'ouverture et les prix de clôture à travers différents délais pour déterminer la direction de la tendance. Si le prix de clôture est supérieur au prix d'ouverture, le délai est considéré comme haussier et indiqué en vert. Si le prix de clôture est inférieur au prix d'ouverture, le délai est considéré comme baissier et indiqué en rouge.

Lorsque les quatre échéanciers s'accordent sur un signal haussier, la stratégie ouvrira une position longue. Lorsque les quatre échéanciers s'accordent sur un signal baissier, la stratégie ouvrira une position courte. Elle sortira lorsqu'elle atteindra le stop loss ou l'inversion de la tendance.

Les avantages

  1. L'utilisation de plusieurs délais pour confirmer les tendances peut filtrer efficacement les fausses ruptures et déterminer la direction de la tendance.

  2. Un stop loss dynamique peut maximiser la protection du capital.

  3. Des critères d'entrée stricts réduisent les transactions inutiles et les coûts de dérapage.

  4. La combinaison de plusieurs délais équilibre la vitesse et la stabilité des profits.

Les risques

  1. Les critères d'admission peuvent être trop stricts, manquant certaines opportunités.

  2. Le paramètre de stop loss peut être trop agressif ou trop conservateur.

  3. Les choix de délais inappropriés peuvent ne pas correspondre aux tendances à plus ou moins long terme.

  4. Les événements soudains peuvent ne pas déclencher un stop loss.

Les domaines d'amélioration

  1. Optimiser les sélections de délais pour équilibrer la vitesse et la stabilité des bénéfices.

  2. Testez différents paramètres pour optimiser les niveaux de stop loss.

  3. Ajouter des algorithmes d'apprentissage automatique pour aider à juger des points d'inversion.

  4. Surveiller les événements importants afin d'éviter les pertes dues à des retours brusques.

Résumé

Cette stratégie intègre des jugements sur plusieurs délais, avec des critères d'entrée stricts et des arrêts dynamiques, visant des rendements stables.


/*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)


Plus de