Esta estratégia é uma estratégia de seguimento de tendência que negocia com base no indicador de canal de variabilidade esfregado (VCI esfregado) por vitelot. Combina o julgamento da tendência das médias móveis e o julgamento de sobrecompra / sobrevenda de VCI para capturar a principal direção da tendência dos preços. Quando os preços entram em estado de sobrecompra ou sobrevenda, as operações reversas são tomadas para lucro.
A estratégia usa o indicador VCI esmaltado de vitelot
A estratégia estabelece duas condições:
O cruzamento de VCI esfregado acima da linha do gatilho é um sinal longo, e o cruzamento abaixo é um sinal curto.
Negociar apenas dentro da janela de tempo do backtest.
Quando ambas as condições estiverem preenchidas, a posição longa ou curta será tomada.
As vantagens desta estratégia são as seguintes:
Usando um indicador de tendência, pode efetivamente acompanhar tendências.
O processo de suavização reduz os falsos sinais.
O backtesting dentro de uma janela de tempo concentra-se num período específico.
O conjunto de stop loss controla o risco.
A utilização de parâmetros indicadores para a decisão longa/curta torna as regras simples e claras.
Esta estratégia apresenta também alguns riscos:
O julgamento da tendência pode ser errado, levando a perdas.
A definição inadequada dos parâmetros dos indicadores pode conduzir a uma baixa rendibilidade.
A configuração de stop loss demasiado pequena pode resultar em uma parada rápida.
Uma janela de tempo de backtest inadequada pode levar a resultados de teste tendenciosos.
A troca muito frequente de comprimento/curto pode provocar pressão de comissionamento.
A estratégia pode ser otimizada nos seguintes aspectos:
Teste diferentes combinações de parâmetros para encontrar os parâmetros ideais.
Para melhorar a precisão, utilizar outros indicadores de confirmação.
Otimizar o algoritmo de stop loss para obter stop loss dinâmico.
Otimizar as condições de entrada para evitar excesso de negociação.
Teste janelas de tempo maiores para verificar a estabilidade.
Incorporar outros fatores como o volume para melhorar a precisão da decisão.
Em resumo, esta é uma estratégia de tendência relativamente simples. Ele usa o indicador Smeared VCI para determinar a direção da tendência e posições abertas quando os sinais de negociação são gerados. O risco é controlado por stop loss. A estratégia tem capacidade de tendência, mas também tem alguns riscos.
/*backtest start: 2023-10-15 00:00:00 end: 2023-11-14 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Smeared VCI Backtest", overlay=false, shorttitle="SVCI Backtest", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5) // Smeared Variability Channel Index // a variation of the VCI indicator of the same author. // The orange line over the lime line is bullish; // The lime line over the orange one is bearish. // // vitelot/yanez/Vts // Feb 2019 // src = close ep1 = input(5, minval=1, title="Fast EMA period") ep2 = input(13, minval=2, title="Slow EMA period") sm = input(34, minval=1, title="Smearing period") tp = input(13, minval=1, title="Trigger line period") fixedSL = input(title="SL Activation", defval=300) trailSL = input(title="SL Trigger", defval=1) fixedTP = input(title="TP Activation", defval=150) trailTP = input(title="TP Trigger", defval=1) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2019, title = "From Year", minval = 2017) ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 19, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2030, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window startTimeOk() => time >= start and time <= finish ? true : false // create function "within window of time" if statement true atrP = 96 e1 = ema(src,ep1) e2 = ema(src,ep2) vci = (e1-e2)/atr(atrP) svci = sma(vci,sm) t = sma(svci,tp) plot(svci, color=lime, linewidth=3, transp=0, title="Smeared VCI") plot(t, color=orange, linewidth=3, transp=0, title="Trigger line") hline(0, title="Reference line") long = crossover(svci,t) short = crossover(t,svci) // === STRATEGY - LONG POSITION EXECUTION === strategy.entry("Long", strategy.long, when= long and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= short) // === STRATEGY - SHORT POSITION EXECUTION === strategy.entry("Short", strategy.short, when= short and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= long)