Estratégia de captura reversa


Data de criação: 2023-11-24 16:43:25 última modificação: 2023-11-24 16:43:25
cópia: 0 Cliques: 676
1
focar em
1617
Seguidores

Estratégia de captura reversa

Visão geral

A estratégia de captura de reversão é uma estratégia de negociação de reversão que utiliza a combinação da linha de bullish do indicador de volatilidade com a dinâmica do indicador RSI. Estabelece o canal de bullish e a linha de overbought e oversold do RSI como sinais, procurando oportunidades de reversão para negociar quando a tendência muda de direção.

Princípio da estratégia

A estratégia usa a linha de Brill como principal indicador técnico, auxiliada por indicadores de dinâmica como o RSI para validar os sinais de negociação. A lógica específica é:

  1. Para determinar a direção da tendência do ciclo macro, determine se é um otimismo ou um otimismo. Use o EMA de 50 dias e o forquilho de ouro do EMA de 21 dias para julgar.
  2. Na tendência de queda, quando os preços subiram e quebraram a trajectória de baixa de Brin, e o indicador RSI acabou de rebotar da zona de superalimento, a forma de golden fork aparece, indicando que a zona de superalimento já atingiu o fundo, sendo considerada um sinal de compra.
  3. Na tendência ascendente, quando o preço de queda quebra a trajetória de Brin e o RSI acaba de recuar da zona de sobrevenda, uma forma de forquilha aparece, indicando que a zona de sobrevenda começou a se recuperar, sendo considerada um sinal de venda.
  4. Os sinais de compra e venda acima devem ser atendidos simultaneamente, para evitar falsos sinais.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. A combinação de indicadores de taxa de flutuação e indicadores de potência, o sinal é mais confiável.
  2. O risco de inversão é menor e é adequado para operações de linha curta.
  3. As regras de programação são claras e facilitam a realização de transações automáticas.
  4. Combinando com a negociação de tendências, evite abrir posições desordenadas em mercados turbulentos.

Análise de Riscos

A estratégia também apresenta os seguintes riscos:

  1. O canal de linhas de browning corre o risco de falhas de sinais e requer filtragem do RSI.
  2. O risco de reversão de falha deve ser eliminado rapidamente.
  3. O risco de não se ter uma ideia exata do ponto de viragem, pode ocorrer uma entrada antecipada ou perder o melhor ponto.

Para os riscos acima, pode-se definir a posição de stop loss para controlar a abertura de risco, ao mesmo tempo que otimizar os parâmetros, ajustar o período de linha de binário ou o parâmetro RSI.

Direção de otimização

A estratégia pode ser melhorada principalmente nas seguintes direções:

  1. Optimizar os parâmetros da faixa de Bryn, ajustar o comprimento do ciclo e o tamanho do desvio padrão, e procurar a melhor combinação de parâmetros.
  2. Otimizar o ciclo da média móvel para determinar a melhor duração do ciclo para o julgamento de tendências.
  3. Ajustar os parâmetros do RSI para encontrar o melhor intervalo de áreas de sobrecompra e sobrevenda.
  4. Adicionar outras combinações de indicadores, como KDJ, MACD, etc., para enriquecer a entrada do sistema.
  5. Aumentar os algoritmos de aprendizagem de máquina para encontrar automaticamente os melhores parâmetros usando a tecnologia de IA.

Resumir

A estratégia de captura de reversão é, em geral, uma estratégia de negociação de linha curta de melhor desempenho. Combina o julgamento de tendências e os sinais de reversão, filtrando os falsos sinais do mercado de turbulência e evitando a cobertura de tendências no mercado de tendências. O risco pode ser controlado.

Código-fonte da estratégia
/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This is an Open source work. Please do acknowledge in case you want to reuse whole or part of this code.
// Please see the documentation to know the details about this.

//@version=5
strategy('Strategy:Reversal-Catcher', shorttitle="Reversal-Catcher", overlay=true , currency=currency.NONE, initial_capital=100000)

// Inputs
src = input(close, title="Source (close, high, low, open etc.")

BBlength = input.int(defval=20, minval=1,title="Bollinger Period Length, default 20")
BBmult = input.float(defval=1.5, minval=1.0, maxval=4, step=0.1, title="Bollinger Bands Standard Deviation, default is 1.5")

fastMovingAvg = input.int(defval=21, minval=5,title="Fast Exponential Moving Average, default 21", group = "Trends")
slowMovingAvg = input.int(defval=50, minval=8,title="Slow Exponential Moving Average, default 50", group = "Trends")

rsiLenght = input.int(defval=14, title="RSI Lenght, default 14", group = "Momentum")
overbought = input.int(defval=70, title="Overbought limit (RSI), default 70", group = "Momentum")
oversold = input.int(defval=30, title="Oversold limit (RSI), default 30", group = "Momentum")

hide = input.bool(defval=true, title="Hide all plots and legends from the chart (default: true)")


// Trade related
tradeType = input.string(defval='Both', group="Trade settings", title="Trade Type", options=['Both', 'TrendFollowing', 'Reversal'], tooltip="Consider all types of trades? Or only Trend Following or only Reversal? (default: Both).")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=false, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked. (Default: off)", group="Trade settings")


// Utils
annotatePlots(txt, val, hide) => 
    if (not hide)
        var l1 = label.new(bar_index, val, txt, style=label.style_label_left, size = size.tiny, textcolor = color.white, tooltip = txt)
        label.set_xy(l1, bar_index, val)

/////////////////////////////// Indicators /////////////////////
vwap = ta.vwap(src)
plot(hide ? na : vwap, color=color.purple, title="VWAP", style = plot.style_line)
annotatePlots('VWAP', vwap, hide)

// Bollinger Band of present time frame
[BBbasis, BBupper, BBlower] = ta.bb(src, BBlength, BBmult)
p1 = plot(hide ? na : BBupper, color=color.blue,title="Bollinger Bands Upper Line")
p2 = plot(hide ? na : BBlower, color=color.blue,title="Bollinger Bands Lower Line")
p3 = plot(hide ? na : BBbasis, color=color.maroon,title="Bollinger Bands Width", style=plot.style_circles, linewidth = 1)
annotatePlots('BB-Upper', BBupper, hide)
annotatePlots('BB-Lower', BBlower, hide)
annotatePlots('BB-Base(20-SMA)', BBbasis, hide)

// RSI
rsi = ta.rsi(src, rsiLenght)

// Trend following
ema50 = ta.ema(src, slowMovingAvg)
ema21 = ta.ema(src, fastMovingAvg)
annotatePlots('21-EMA', ema21, hide)
annotatePlots('50-EMA', ema50, hide)


// Trend conditions
upTrend = ema21 > ema50 
downTrend = ema21 < ema50


// Condition to check Special Entry: HH_LL
// Long side:
hhLLong = barstate.isconfirmed and (low > low[1]) and (high > high[1]) and (close > high[1])
hhLLShort = barstate.isconfirmed and (low < low[1]) and (high < high[1]) and (close < low[1])

longCond =  barstate.isconfirmed and (high[1] < BBlower[1]) and (close > BBlower) and (close < BBupper) and hhLLong and ta.crossover(rsi, oversold) and downTrend
shortCond = barstate.isconfirmed and (low[1] > BBupper[1]) and (close < BBupper) and (close > BBlower) and hhLLShort and ta.crossunder(rsi, overbought) and upTrend

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, 1, limit=na, stop=na, comment="Long[E]")
        sl := low[1]
        target := high >= BBbasis ? BBupper : BBbasis
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, 1, limit=na, stop=na, comment="Short[E]")
        sl := high[1]
        target := low <= BBbasis ? BBlower : BBbasis
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long[SL]" : "Long[T]")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short[SL]" : "Short[T]")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "EoD[Exit]", alert_message = "EoD Exit", immediately = true)