Esta estratégia é uma estratégia de rastreamento de tendências projetada com base na teoria do rompimento do canal. Ela constrói um canal usando o preço mais alto e o preço mais baixo durante um determinado período e gera sinais de negociação quando o preço sai do canal. Esta estratégia é adequada para mercados de tendências e pode capturar a direção de tendência do preço para rastreamento de tendências.
A estratégia primeiro calcula o preço mais alto e o preço mais baixo durante um período de comprimento para construir a banda superior e a banda inferior do canal. Quando o preço de fechamento atravessa a banda superior, uma posição longa é aberta. Quando o preço de fechamento atravessa a banda inferior, uma posição curta é aberta. A posição será fechada quando o preço cair de volta no canal.
A estratégia também traça um indicador EMA com comprimento *2 para determinar a direção da tendência.
Em resumo, esta é uma estratégia simples de rastreamento de tendências baseada em breakouts de canal para capturar tendências. Ele tem forte capacidade de rastreamento de tendências e pode alcançar bons retornos em mercados de tendências. Mas também tem alguns riscos e precisa de otimização adicional para melhorar a estabilidade. Através do ajuste de parâmetros, configuração de stop loss e combinação com outros indicadores, esta estratégia pode ser aplicada à negociação ao vivo.
/*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 )