Estratégia de rastreamento de média móvel de rompimento oscilante


Data de criação: 2023-10-30 11:39:31 última modificação: 2023-10-30 11:39:31
cópia: 1 Cliques: 629
1
focar em
1617
Seguidores

Estratégia de rastreamento de média móvel de rompimento oscilante

Esta estratégia permite obter lucros sustentáveis em mercados de turbulência através do rastreamento de rupturas de equilíbrio.

Princípio da estratégia

A estratégia baseia-se principalmente no princípio da ruptura da linha de equilíbrio para a construção de posições, usando MA aglutinando múltiplas linhas de equilíbrio para formar a linha de equilíbrio principal. Quando o preço quebra a linha de equilíbrio principal, o sinal de negociação é gerado.

Especificamente, a estratégia usa uma média móvel dupla WMA de 60 ciclos como sua principal média. Ao mesmo tempo, calcula o alcance real das flutuações dos preços e traça um canal ascendente e descendente. Os preços são otimistas quando entram em alta e pessimistas quando entram em baixa.

Em uma base de ruptura, a estratégia também introduz o indicador RSI e o indicador EMA para julgamento auxiliar, exigindo que o RSI > 50 e o preço acima da EMA façam mais, e que o RSI < 50 e o preço abaixo da EMA façam um vazio, para evitar falsas rupturas.

Além disso, a estratégia usa a forte e fraca posição da linha de equilíbrio triplo para determinar a posição de encerramento. Quando as formações de equilíbrio triplo são fracas, o ponto de saída é escolhido como o canal de ruptura inversa.

Vantagens estratégicas

  • Utilização de MA múltiplas médias, capaz de suavizar efetivamente a mudança de preço, identificar a direção da tendência
  • A plataforma de negociação de ruptura de corredores permite obter lucros em situações de crise
  • Combinação de RSI e EMA para julgamento auxiliar e filtragem de falsos sinais de ruptura
  • Utilizando o triplo equilíbrio para determinar o ponto de saída apropriado, pode-se evitar a falência

Risco estratégico

  • Em situações de grande agitação, a MA pode produzir mais brechas falsas
  • O tempo de saída do julgamento da linha de equilíbrio triplo pode não ser preciso
  • A configuração incorreta dos parâmetros do RSI pode levar a uma frequência de negociação excessiva

Pode-se reduzir o risco através da optimização dos parâmetros do ciclo de MA, ajuste da tripla linha média de configuração, o uso cauteloso dos parâmetros do RSI e outros métodos.

Direção de otimização da estratégia

  • Optimizar os parâmetros de MA para encontrar um período de linha principal mais adequado
  • Tente substituir o RSI por diferentes indicadores auxiliares, como KDJ, MACD, etc.
  • Ajustar os parâmetros da linha média tripla para encontrar um tempo de inversão mais preciso
  • Adição de estratégias de stop loss para controlar o risco de uma única transação

Resumir

Esta estratégia é uma estratégia de ruptura muito adequada para situações de turbulência. A ideia central é baseada na construção de posições de ruptura do MA, auxiliada por filtros de indicadores de tendência, com lucro contínuo em situações de turbulência.

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



//@version=5

//exapple bot
strategy('RIPO BOT', shorttitle='RIPO BOT', overlay=true, process_orders_on_close=true, calc_on_order_fills=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
sl_inp = input(0.1, title='Stop Loss %') / 100
tp_inp = input(0.33, title='Take Profit %') / 100

length = input(defval=21)
upper = ta.highest(length)
lower = ta.lowest(length)

lengthChop = input.int(14, minval=1)
ci = 100 * math.log10(math.sum(ta.atr(1), lengthChop) / (ta.highest(lengthChop) - ta.lowest(lengthChop))) / math.log10(lengthChop)
offset = input.int(0, "Offset",  minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(50, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

rsi = ta.rsi(close, 14)

var float entry_price = na

output = 100 * (close - upper) / (upper - lower)
ema = ta.ema(output, input(defval=13, title='EMA'))

ma(src, len) =>
    ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))
BBMC = ma(close, 60)
rangema = ta.ema(ta.tr, 60)
upperk = BBMC + rangema * 0.2
lowerk = BBMC - rangema * 0.2
color_bar = close > upperk ? color.blue : close < lowerk ? color.fuchsia : color.gray

ExitHigh = ma(high, 15)
ExitLow = ma(low, 15)
Hlv3 = int(na)
Hlv3 := close > ExitHigh ? 1 : close < ExitLow ? -1 : Hlv3[1]
sslExit = Hlv3 < 0 ? ExitHigh : ExitLow
base_cross_Long = ta.crossover(close, sslExit)
base_cross_Short = ta.crossover(sslExit, close)
codiff = base_cross_Long ? 1 : base_cross_Short ? -1 : na
entry_long = false

entry_short = false

    
if ta.crossover(close, BBMC) and output > ema
    entry_long := true
    
if ta.crossunder(close, BBMC) and output < ema
    entry_short := true

if entry_long and strategy.position_size == 0
    entry_price := close
    strategy.entry('enter long', strategy.long, comment='ENTER-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
if strategy.position_size > 0
    strategy.exit('Stop Loss/TP long', 'enter long', limit=entry_price * (1 + tp_inp), stop = color_bar == color.fuchsia ? BBMC : na, comment='EXIT-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0))


//if entry_short and strategy.position_size == 0
    //entry_price := close
    //strategy.entry('enter short', strategy.short, comment='ENTER-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
if strategy.position_size < 0
    strategy.exit('Stop Loss/TP short', 'enter short', limit=entry_price * (1 - tp_inp), stop = color_bar == color.blue ? BBMC : na, comment='EXIT-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0))
// plot(entry_price * (1 - sl_inp), color=color.new(color.red, 0))

plot(rsi, color=color.yellow)

plot(output, title='%R', color=color.new(color.yellow, 0), linewidth=2)
plot(ema, title='EMA', color=color.new(color.aqua, 0), linewidth=2)

plotarrow(codiff, colorup=color.new(color.blue, 35), colordown=color.new(color.fuchsia, 35), title='Exit Arrows', maxheight=20, offset=0)
plot(BBMC, color=color_bar, linewidth=4, title='MA Trendline')