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 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.
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 )