Esta estratégia usa o indicador VIDYA (Variable Index Dynamic Average) para identificar a direção da tendência nos mercados de criptomoedas e negociações com base na tendência.
A estratégia calcula primeiro o indicador VIDYA. O indicador VIDYA é baseado no momento do preço e pode responder às mudanças de tendência mais rapidamente. Especificamente, ele combina o oscilador de momento de Chande (CMO) e a média móvel simples (SMA). O CMO mede a diferença entre o momento ascendente e descendente para medir a força da tendência. O SMA suaviza os dados de preço. O VIDYA ajusta dinamicamente o peso do SMA com base nos valores do CMO, dando mais peso ao CMO no início das mudanças de tendência e mais peso ao SMA uma vez que a tendência é estabelecida. Assim, o VIDYA pode responder rapidamente às mudanças de tendência, mantendo também um rastreamento suave da tendência.
Depois de calcular o VIDYA, a estratégia julga a direção da tendência com base na curva do VIDYA.
O VIDYA responde rapidamente e pode captar mudanças de tendência mais cedo em comparação com indicadores tradicionais como o SMA.
Combinando a força e a direcção da tendência, pode distinguir eficazmente tendências fortes e fracas e evitar tendências falsas em mercados variados.
Confiar unicamente no VIDYA torna a estratégia simples, sem sinais conflitantes ou enganosos de múltiplos indicadores.
As configurações VIDYA mais longas permitem rastrear tendências de longo prazo e capturar a principal direção da tendência.
Bons resultados de backtest com retornos esperados positivos.
A VIDYA pode atrasar-se em resposta a eventos repentinos do mercado e perder oportunidades de negociação de curto prazo.
As configurações longas do VIDYA tornam-no menos sensível às alterações de tendência a curto prazo e podem conduzir a maiores retrações.
O seguimento da tendência pura tem um mau desempenho em mercados agitados.
Os dados limitados de backtest não podem verificar completamente a robustez. Os parâmetros precisam de otimização e teste iterativo na negociação ao vivo.
Alta volatilidade nos mercados de criptomoedas. O tamanho da posição e o stop loss devem ser cuidadosamente controlados para uma gestão rigorosa do risco.
Teste adição de indicadores de volume ou volatilidade para melhorar a sensibilidade às alterações da tendência.
Tente combinar o VIDYA com outros indicadores de tendência para um efeito de conjunto.
Otimizar a estratégia de stop loss para sair mais cedo quando a tendência se inverter.
Otimizar o dimensionamento das posições de forma dinâmica com base nas condições do mercado.
Teste a robustez em diferentes criptomoedas e prazos.
Em geral, este é um indicador de tendência quantitativa após a estratégia. Ele usa o indicador VIDYA para determinar a direção da tendência, capturando as tendências de criptomoedas de forma simples e eficaz. Mas também tem algumas limitações que exigem melhorias adicionais em stop loss, dimensionamento de posição, etc. para tornar a estratégia mais robusta e praticamente viável.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m 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/ // @version=5 // Author = TradeAutomation strategy(title="VIDYA Trend Strategy", shorttitle="VIDYA Trend Strategy", process_orders_on_close=true, overlay=true, pyramiding=25, commission_type=strategy.commission.percent, commission_value=.075, slippage = 1, initial_capital = 1000000, default_qty_type=strategy.percent_of_equity, default_qty_value=4) // Backtest Date Range Inputs // StartTime = input(defval=timestamp('01 Jan 2000 08:00'), group="Date Range", title='Start Time') EndTime = input(defval=timestamp('01 Jan 2099 00:00'), group="Date Range", title='End Time') InDateRange = true // Strategy Inputs // len = input.int(title="VIDYA Length", defval=50, step=5,group="Trend Settings") src = input.source(title="VIDYA Price Source",defval=ohlc4, group="Trend Settings") // VIDYA Calculations // valpha=2/(len+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=math.sum(vud1,9) vDD=math.sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) var VIDYA = 0.0 VIDYA := na(VIDYA[1]) ? ta.sma(src, len) : nz(valpha*math.abs(vCMO)*src)+(1-valpha*math.abs(vCMO))*nz(VIDYA[1]) plot(VIDYA, title="VIDYA",color=(VIDYA > VIDYA[1]) ? color.green : (VIDYA<VIDYA[1]) ? color.red : (VIDYA==VIDYA[1]) ? color.gray : color.black, linewidth=2) // Entry & Exit Signals // if (InDateRange) strategy.entry("Long", strategy.long, when = VIDYA>VIDYA[1]) strategy.close("Long", when = VIDYA<VIDYA[1]) if (not InDateRange) strategy.close_all()