Esta estratégia utiliza o método Wilder de trailing stop de volatilidade, combinado com o indicador ATR e diferentes tipos de médias móveis, para implementar uma estratégia de stop loss adaptativa de rastreamento de tendências.
O núcleo desta estratégia é o algoritmo de parada de trail de volatilidade de Wilder. Ele primeiro calcula o indicador ATR e traça dinamicamente a linha de stop loss de acordo com o comprimento e o multiplicador de entrada ATR. Em seguida, rastreia o mais alto e o mais baixo da linha de stop loss com base na opção de preço escolhida entre preços fechados, altos e baixos. Envia sinais de negociação quando o preço quebra a linha de stop loss.
No código, a função f_ma implementa várias médias móveis, incluindo RMA, EMA, SMA e Hull MA. O indicador ATR é calculado e multiplicado pelo multiplicador definido pelo usuário para gerar a linha de parada final baseada em volatilidade. Os níveis mais altos e mais baixos desta linha são rastreados usando as funções mais altas e mais baixas. Os negócios são realizados quando o preço penetra esta linha de parada final.
Ao utilizar de forma flexível o indicador ATR, diferentes médias móveis e parâmetros ajustáveis, esta estratégia realiza um sistema de stop loss de rastreamento de tendências altamente adaptável.
Esta estratégia aproveita o algoritmo Wilder Volatility Trailing Stop, que é uma metodologia madura e confiável de rastreamento de tendências.
A estratégia utiliza o indicador ATR para calcular dinamicamente a linha de stop loss, evitando pontos rígidos de stop loss.
A aplicação de várias médias móveis, incluindo RMA, EMA, SMA e Hull MA, aumenta a adaptabilidade da estratégia.
Ao ajustar o comprimento do ATR, os parâmetros do multiplicador podem ser encontrados para diferentes mercados, melhorando o desempenho da estratégia.
O uso de diferentes opções de preço, como preços altos, baixos e próximos, permite a otimização de diferentes produtos.
Em resumo, trata-se de uma estratégia de rastreamento de tendências de stop loss confiável, adaptável e facilmente otimizável.
A estratégia depende fortemente da otimização de parâmetros. Parâmetros ATR e multiplicador apropriados precisam ser encontrados através de testes para diferentes mercados e produtos, caso contrário, o efeito stop loss pode não ser ideal.
Em mercados variáveis, a linha de stop loss ATR pode desencadear freqüentes stop outs injustificados.
Se a linha de stop loss for muito larga, as oportunidades de perda serão perdidas. Se for muito apertada, a frequência de negociação e os custos de deslizamento aumentarão. Um ponto equilibrado precisa ser encontrado através de testes cuidadosos.
Para cada produto, deve ser selecionada uma média móvel principal, sendo que as outras devem ser utilizadas apenas como referência.
Esta estratégia centra-se no acompanhamento da tendência e não visa diretamente os lucros. É necessário combiná-la com outras estratégias de entrada/saída ou técnicas de lucro.
Com parâmetros inadequados, a estratégia pode exibir períodos de negociação excessivos ou de detenção de grandes dimensões.
Podem ser introduzidos indicadores de identificação de tendências para evitar confusões em mercados variados.
Os indicadores de reversão podem ser testados para permitir um stop-out e uma reversão mais rápidos quando a tendência ascendente e descendente se alternam.
O parâmetro do período ATR pode ser correlacionado com as características do produto, de modo que diferentes produtos utilizem períodos ATR diferentes.
Os indicadores de volume podem ser utilizados para apertar mais rapidamente a linha de stop loss quando o volume diminui significativamente.
O percentual de stop loss pode ser aumentado, mas não demasiado apertado para evitar uma parada em retracements normais.
Outros indicadores podem ser usados para medir o momento e otimizar parâmetros para afrouxar paradas quando o momento é fraco.
Baseada no conceito de WILDER VOLATILITY TRAILING STOP, esta estratégia utiliza o indicador ATR para projetar um sistema altamente adaptável de rastreamento de tendências de stop loss. Através da otimização de parâmetros, pode ser adaptado a diferentes produtos de negociação e é uma abordagem de stop loss confiável e prática.
/*backtest start: 2023-10-09 00:00:00 end: 2023-10-16 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // Wilder's Volatility Trailing Stop Strategy with various MA's // by SparkyFlary //For Educational Purposes //Results can differ on different markets and can fail at any time. Profit is not guaranteed. strategy(title="Wilder's Volatility Trailing Stop Strategy with various MA's", shorttitle="Trailing Stop Strategy", overlay=true) AtrMult = input(3.0, title="ATR multiplier") ATRlength = input(7, title="ATR length") ATRavgType = input("RMA", title="ATR moving average type", options=["RMA", "EMA", "SMA", "HULL"]) sicType = input("close", title="significant close type for trail calculation", options=["close", "high-low"]) //function for choosing moving averages f_ma(type, src, len) => float result = 0 if type == "RMA" // Wilder's moving averaege or Running moving average result := rma(src, len) if type == "EMA" // Exponential moving average result := ema(src, len) if type == "SMA" // Simple moving average result := sma(src, len) if type == "HULL" // Hull moving average result := wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) result ATR = f_ma(ATRavgType, tr, ATRlength) upperTrail = lowest(sicType=="close"?close:low, ATRlength) + AtrMult * ATR lowerTrail = highest(sicType=="close"?close:high, ATRlength) - AtrMult * ATR float TS = 0 TS := close < TS[1] ? upperTrail[1] : close > TS[1] ? lowerTrail[1] : TS //plot plot(TS, title="trailing stop", color=close<TS?color.red:color.green) //Strategy buy = crossover(close, TS) //sell = close < TS short = crossunder(close, TS) //cover = close > TS strategy.entry(id="enter long", long=true, when=buy) //strategy.close(id="enter long", comment="exit long", when=sell) strategy.entry(id="enter short", long=false, when=short) //strategy.close(id="enter short", comment="exit short", when=cover)