Esta estratégia utiliza um sistema de média móvel para determinar a direção da tendência e combina o índice de volatilidade para evitar os mercados oscilantes de baixa volatilidade, com saída de candelabro para gerir as operações.
A estratégia julga a direção da tendência comparando médias móveis rápidas e lentas. Ela fica longa quando o MA rápido cruza acima do MA lento e fica curta quando o MA rápido cruza abaixo do MA lento. Para evitar oscilações nos mercados, a estratégia também incorpora Bandas de Bollinger. Ela gera sinais de negociação quando a taxa de mudança da largura do BB excede um limiar. Finalmente, a estratégia usa saídas de Chandelier como stop loss para evitar ser preso em mercados de faixa.
Especificamente, a lógica de negociação é a seguinte:
Calcular a MA rápida (default 20 days) e a MA lenta (default 50 days).
Calcular a taxa de variação da largura da banda de Bollinger (default 40 dias, 2 desvios padrão).
O valor da posição em curto quando a MA rápida ultrapassa a MA lenta e a taxa de variação da largura BB excede o limiar por defeito de 9%.
Aumentar o valor de mercado de uma unidade de medida de curto prazo quando a MA rápida cruzar abaixo da MA lenta e a taxa de alteração da largura BB exceder o limiar por defeito de 9%.
Calcule Chandelier longas e curtas paradas.
A parada longa é a mais alta - ATR * multiplicador. parada curta é a mais baixa + ATR * multiplicador.
O sistema MA acompanha eficazmente as tendências.
A mudança de largura do BB filtra a oscilação, reduzindo as transações desnecessárias.
O candelabro sai em tempo hábil, evitando ser preso.
Múltiplos parâmetros ajustáveis para otimização.
Lógica clara, fácil de entender e implementar.
O atraso da MA pode não apresentar reversões rápidas.
Parâmetros BB incorretos podem filtrar sinais válidos.
As saídas excessivas de lustres causam excesso de negociação.
A otimização inadequada dos parâmetros leva à detenção de riscos.
Incapaz de adaptar-se a alterações extremas do mercado decorrentes de grandes eventos.
Teste diferentes combinações de MA para encontrar parâmetros ótimos.
Teste diferentes períodos BB para obter o melhor filtro de volatilidade.
Adicionar outros indicadores de confirmação de entrada.
Introduzir paradas dinâmicas para melhor acompanhar os mercados.
Utilize o aprendizado de máquina para otimizar automaticamente para mercados em mudança.
Esta estratégia integra o sistema MA, o indicador BB e as saídas do candelabro para formar um sistema de tendência relativamente estável. A otimização adequada dos parâmetros pode alcançar bons resultados. Mas os riscos de reversão de tendência e oscilação permanecem. O aprendizado de máquina pode melhorar ainda mais a robustez.
/*backtest start: 2022-10-11 00:00:00 end: 2023-10-17 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © juanchez //@version=4 strategy("CHI", overlay = true, close_entries_rule = "ANY") n = input(title= "highest high o lowest low period", defval= 22) f= input(title= "multiplicador", defval= 4) long = highest(high, n) - atr(n)*f short= lowest(low, n) + atr(n)*f plot(long, color= color.red) plot(short, color= color.green) //moving averages period= input(title= "moving averages period", defval= 50) period2= input(title= "moving averages period2", defval= 20) type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema") //moving average function mo(p, t) => if t == "sma" sma(close[barstate.islast ? 1: 0], p) else if t== "ema" ema(close[barstate.islast ? 1: 0], p) m= mo(period, type) m2= mo(period2, type) trend= m2 > m plot(m, color = color.maroon, linewidth = 3) plot(m2, linewidth= 3) //BOLLINGER BANDS ENTRIES bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1) bb1_source=input(title="Bollinger band 1 source", defval=close) bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1) show_bb1= input(title="Show Bollinger bands 1", defval=false) //BOLLINGER BANDS _bb(src, lenght, multi)=> float moving_avg= sma(src[barstate.islast? 1: 0], lenght) float deviation= stdev(src[barstate.islast? 1: 0], lenght) float lowerband = moving_avg - deviation*multi float upperband = moving_avg + deviation*multi [moving_avg, lowerband, upperband] [bb1, lowerband1, upperband1]= _bb(bb1_source, bb1_period, bb1_multi) //FIRST BAND plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia) plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green) plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red) //BB's Width threshold thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100) widht= (upperband1 - lowerband1)/bb1 roc= change(widht)/widht[1]*100 cross=crossover(roc, thresh) // entry //long elong= input(true, title= "enable long") longcondition= m2 > m and cross and elong //short eshort= input(true, title= "enable short") shortcondition= m2 < m and cross and eshort plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white) plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white) out= crossunder(close, long) outt= crossover(close, short) strategy.entry("long", strategy.long, when = longcondition) strategy.close("long", when = out) strategy.entry("short", strategy.short, when = shortcondition) strategy.close("short", when = outt)