Stratégie de suivi des tendances basée sur les ruptures de canal

Auteur:ChaoZhang est là., Date: 2023-11-23 14h04 et 59 min
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de suivi de tendance conçue sur la base de la théorie de la rupture du canal. Elle construit un canal en utilisant le prix le plus élevé et le prix le plus bas sur une certaine période et génère des signaux de trading lorsque le prix sort du canal.

La logique de la stratégie

La stratégie calcule d'abord le prix le plus élevé et le prix le plus bas sur une longue période pour construire la bande supérieure et la bande inférieure du canal. Lorsque le prix de clôture franchit la bande supérieure, une position longue est ouverte. Lorsque le prix de clôture franchit la bande inférieure, une position courte est ouverte. La position sera fermée lorsque le prix retombe dans le canal.

La stratégie trace également un indicateur EMA avec une longueur *2 pour déterminer la direction de la tendance.

Analyse des avantages

  • La stratégie peut capturer les tendances des prix et convient aux marchés en tendance avec un potentiel de profit élevé.
  • L'utilisation de ruptures de canal pour générer des signaux peut réduire les fausses ruptures et améliorer la qualité du signal.
  • Combiner avec l'EMA pour éviter les transactions contre tendance et assurer le suivi de la tendance principale.

Analyse des risques

  • Les stratégies de rupture ont tendance à générer des transactions fréquentes pendant la consolidation des prix, ce qui peut entraîner des coûts de négociation élevés.
  • La stratégie ne peut pas quitter les positions rapidement lorsque la tendance s'inverse, ce qui peut entraîner de grosses pertes.
  • La stratégie est sensible aux paramètres et différents paramètres peuvent donner des résultats complètement différents.

Directions d'optimisation

  • Incorporer d'autres indicateurs tels que le MACD, le RSI pour éviter de fausses ruptures.
  • Utiliser des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres et améliorer la robustesse.
  • Réglez le stop-loss pour contrôler le tirage maximum.

Résumé

En résumé, il s'agit d'une stratégie de suivi de tendance simple basée sur des ruptures de canal pour capturer les tendances. Elle a une forte capacité de suivi de tendance et peut obtenir de bons rendements sur les marchés en tendance. Mais elle comporte également certains risques et nécessite une optimisation supplémentaire pour améliorer la stabilité.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


initial_capital = 1000,
default_qty_value = 90,
default_qty_type = strategy.percent_of_equity,
pyramiding = 0,
commission_value = 0.002,
commission_type = strategy.commission.percent,
calc_on_every_tick = true
length_val = 2
max_bars_back = 1440
risk_max_drawdown = 9


strategy("Channel Break",max_bars_back=max_bars_back,initial_capital = initial_capital,default_qty_value = default_qty_value,default_qty_type = default_qty_type,pyramiding = pyramiding,commission_value = commission_value,commission_type = commission_type,calc_on_every_tick = calc_on_every_tick)
// strategy.risk.max_drawdown(risk_max_drawdown, strategy.percent_of_equity) 

length = input(title="Length",  minval=1, maxval=1000, defval=length_val)

upBound = highest(high, length)
downBound = lowest(low, length)

//plot (upBound)
//plot (downBound)
//plot (close, color=red)
//plot (ema(close,length * 2), color=green)
//
if (not na(close[length]) and time>timestamp(2018, 02, 24, 0, 00) )
    strategy.entry("Buy", strategy.long, stop=upBound + syminfo.mintick, comment="Buy")
    strategy.entry("Short", strategy.short, stop=downBound - syminfo.mintick, comment="Short")
    
position = strategy.position_size
    
    
//plot(position , title="equity", color=red,style=cross,linewidth=4)
plot(variance(position,2)>0?1:0,style=circles,linewidth=4)

message = ""

if (position > 0) 
    message = "BTCUSD L: " + tostring(strategy.position_size)
    na(position)
    
if (position < 0) 
    message = "BTCUSD S: " + tostring(strategy.position_size)
    na(position)

alertcondition(variance(strategy.position_size,2) > 0, "test", message )

Plus de