Esta é uma estratégia de breakout de canal de média móvel baseada em médias móveis e canais de intervalo.
A lógica central desta estratégia é a seguinte:
Definir uma linha média móvel de determinado período como linha do meio.
Configure as linhas de canal superior e inferior multiplicando a linha do meio por certas porcentagens. A linha superior é a linha do meio * (100% + porcentagem pré-definida). A linha inferior é a linha do meio * (100% - porcentagem pré-definida).
Quando o preço ultrapassar a linha superior, vá curto. Quando o preço ultrapassar a linha inferior, vá longo.
Fixar os preços das ordens nas linhas superior/inferior correspondentes.
Fechar posições quando o preço voltar para a linha do meio.
Então, ele negocia com base nas rupturas do canal da média móvel.
As vantagens desta estratégia são as seguintes:
Conceito simples e claro, fácil de compreender e implementar.
Parâmetros ajustáveis adaptados às diferentes condições de mercado.
A linha média e a faixa de canais podem filtrar o ruído do mercado e captar tendências.
Controle de riscos de ordens limitadas.
Cortar perdas quando o preço voltar à linha média.
Há também alguns riscos:
A configuração incorreta dos parâmetros pode provocar uma troca excessiva ou insuficiente.
Alta probabilidade de falhas e stop loss.
Falha das linhas médias e do canal sob enormes oscilações de mercado.
Saída prematura quando forçado a fechar na linha do meio.
Soluções:
Otimizar parâmetros como período de MA e porcentagem de canal.
Adicione outros indicadores como volume para evitar falhas.
Aumentem a intervenção manual.
Utilize um período de MA mais longo e uma gama de canais mais ampla.
A estratégia pode ser melhorada pelos seguintes aspectos:
Adicione métodos de stop loss como trailing stop para limitar as perdas.
Adicione indicadores de filtragem como o MACD para reduzir sinais falsos.
Ativar otimização automática de parâmetros.
Adicionar mais critérios de posição aberta para além da fuga.
Optimize os parâmetros de MA e canal.
Em conclusão, esta é uma estratégia prática de ruptura do canal MA. Tem uma lógica simples para uso fácil, enquanto a faixa de canal pode filtrar ruído. Ele tem um bom desempenho em mercados de tendência. Mas existem riscos e parâmetros, juntamente com filtros adicionais, precisam de otimização para negociação real. A estratégia tem certo valor prático e de desenvolvimento.
/*backtest start: 2023-01-01 00:00:00 end: 2023-08-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Robot WhiteBox ShiftMA", shorttitle = "Robot WhiteBox ShiftMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") per = input(3, title = "Length") src = input(ohlc4, title = "Source") shortlevel = input(10.0, title = "Short line (red)") longlevel = input(-5.0, title = "Long line (lime)") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //SMAs sma = sma(src, per) shortline = sma * ((100 + shortlevel) / 100) longline = sma * ((100 + longlevel) / 100) plot(shortline, linewidth = 2, color = red, title = "Short line") plot(sma, linewidth = 2, color = blue, title = "SMA line") plot(longline, linewidth = 2, color = lime, title = "Long line") //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[per])) and size == 0 and needlong strategy.entry("L", strategy.long, lot, limit = longline) if (not na(close[per])) and size == 0 and needshort strategy.entry("S", strategy.short, lot, limit = shortline) if (not na(close[per])) and size > 0 strategy.entry("Close", strategy.short, 0, limit = sma) if (not na(close[per])) and size < 0 strategy.entry("Close", strategy.long, 0, limit = sma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()