Estratégia de reversão de média móvel de quatro indicadores


Data de criação: 2023-11-27 15:51:01 última modificação: 2023-11-27 15:51:01
cópia: 0 Cliques: 605
1
focar em
1617
Seguidores

Estratégia de reversão de média móvel de quatro indicadores

Visão geral

Esta estratégia utiliza a média móvel EMA, o indicador RSI relativamente forte e o indicador CCI do canal de mercadorias, os três principais indicadores combinados, para identificar a tendência de preços através da EMA para ver se a linha média se inverte, e depois usar os indicadores RSI e CCI comprados e vendidos para julgar auxiliar, formando um sinal de negociação.

Princípio da estratégia

  1. O EMA de 4 e 8 ciclos cruzados entre si são usados para determinar a tendência dos preços, o EMA de 4 ciclos é usado para determinar rapidamente e o EMA de 8 ciclos é usado para determinar lentamente.

  2. Quando a EMA retorna para cima, ou seja, a linha de 4 períodos atravessa a linha de 8 períodos, e depois auxiliar a julgar que o indicador RSI é superior a 65 (relativamente a zona de overbought) e o indicador CCI é superior a 0 (representa que não há overbought overbought), a satisfação gera um sinal de fazer mais;

  3. Quando a EMA retorna para baixo, ou seja, a linha de 4 períodos abaixo da linha de 8 períodos, e auxiliar a julgar o indicador RSI abaixo de 35 (relativa à zona de oversold) e o indicador CCI abaixo de 0 (representa que não há sobrecompra ou sobrevenda), a satisfação gera um sinal de curto-circuito;

  4. Depois de formar o sinal, configure o preço de parada e parada de acordo com a distância de parada e a distância de parada de entrada.

Em geral, a estratégia é mais estável, considerando a tendência de preços a médio e curto prazo e os indicadores de overbought e oversold, e a configuração de stop loss também controla efetivamente a perda máxima de uma única transação.

Análise de vantagens

  1. A análise de múltiplos indicadores, evitando estratégias de negociação de um único indicador com maior probabilidade de erro;

  2. A EMA usa a linha média para avaliar a tendência principal, evitando ser enganada por oscilações de curto prazo; os indicadores RSI e CCI evitam a zona de sobrecompra e sobrevenda, aumentando a probabilidade de vitória;

  3. A configuração automática de stop-loss e de stop-loss controla o risco de uma única transação, evitando efetivamente a expansão dos prejuízos em situações extremas;

  4. Esta estratégia é uma estratégia de negociação técnica, não é afetada pelo fundamento, pode ser usada em qualquer ciclo de umidade do mercado e é fácil de usar no mercado real.

Análise de Riscos

  1. Os indicadores técnicos são susceptíveis de falhar diante de grandes ganhos inesperados/notícias positivas;

  2. A suspensão de perdas pode ser ultrapassada em situações de forte volatilidade dos preços das ações, devendo a sua amplitude ser adequadamente relaxada;

  3. Esta estratégia é uma estratégia de negociação de frequência de linha curta, e os custos de negociação têm um certo impacto sobre o lucro, adequado para uma estratégia de alta frequência com vantagem de custo.

Direção de otimização

  1. Adição de algoritmos de aprendizagem de máquina para ajustar automaticamente os parâmetros em função dos fundamentos das ações;

  2. Aumentar o mecanismo de parada de danos adaptativo, em vez de uma distância fixa de parada.

Resumir

A estratégia de negociação integra vários indicadores de julgamento, com parâmetros razoáveis, pode obter lucro de negociação de médio e curto prazo relativamente estável, pertence a estratégias técnicas fáceis de executar. Mas também deve ter em conta a prevenção de notícias básicas importantes e medidas de proteção contra riscos, como a distância de parada adequada, que também pode ser otimizada no futuro.

Código-fonte da estratégia
/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 45m
basePeriod: 5m
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/
// © SoftKill21

//@version=4


strategy(title="Moving Average Exponential", shorttitle="EMA", overlay=true)


len4 = input(4, minval=1, title="Length_MA4")
src4 = input(close, title="Source")
offset4 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out4 = ema(src4, len4)
plot(out4, title="EMA", color=color.blue, offset=offset4)

len8 = input(8, minval=1, title="Length_MA8")
src8 = input(close, title="Source")
offset8 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out8 = ema(src8, len8)
plot(out8, title="EMA", color=color.blue, offset=offset8)


//rsioma
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(ema(src, len)), 0), len)
down = rma(-min(change(ema(src, len)), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
//plot(rsi, color=color.blue)
//band1 = hline(80)
//band0 = hline(20)
//fill(band1, band0, color=color.purple, transp=90)
//hline(50, color=color.gray, linestyle=plot.style_line)
sig = ema(rsi, 21)
//plot(sig, color=color.purple)

//woodie
cciTurboLength = input(title="CCI Turbo Length", type=input.integer, defval=6, minval=3, maxval=14)
cci14Length = input(title="CCI 14 Length", type=input.integer, defval=14, minval=7, maxval=20)

source = close

cciTurbo = cci(source, cciTurboLength)
cci14 = cci(source, cci14Length)

last5IsDown = cci14[5] < 0 and cci14[4] < 0 and cci14[3] < 0 and cci14[2] < 0 and cci14[1] < 0
last5IsUp = cci14[5] > 0 and cci14[4] > 0 and cci14[3] > 0 and cci14[2] > 0 and cci14[1] > 0
histogramColor = last5IsUp ? color.green : last5IsDown ? color.red : cci14 < 0 ? color.green : color.red


// Exit Condition
// Exit Condition
a = input(12)*10
b = input(15)*10
c = a*syminfo.mintick
d = b*syminfo.mintick


longCondition = crossover(out4, out8) and (rsi >= 65 and cci14>=0)
shortCondition = crossunder(out4, out8) and (rsi <=35 and cci14<=0)


long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + d : long_profit_level1  [1]
//long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
//long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - d : short_profit_level1 [1]
//short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
//short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 


//ha
// === Input ===
//ma1_len = input(1, title="MA 01")
//ma2_len = input(40, title="MA 02")

// === MA 01 Filter ===
//o=ema(open,ma1_len)
//cc=ema(close,ma1_len)
//h=ema(high,ma1_len)
//l=ema(low,ma1_len)

// === HA calculator ===
//ha_t = heikinashi(syminfo.tickerid)
//ha_o = security(ha_t, timeframe.period, o)
//ha_c = security(ha_t, timeframe.period, cc)
//ha_h = security(ha_t, timeframe.period, h)
//ha_l = security(ha_t, timeframe.period, l)

// === MA 02 Filter ===
//o2=ema(ha_o, ma2_len)
//c2=ema(ha_c, ma2_len)
//h2=ema(ha_h, ma2_len)
//l2=ema(ha_l, ma2_len)

// === Color def ===
//ha_col=o2>c2 ? color.red : color.lime

// ===  PLOTITING===
//plotcandle(o2, h2, l2, c2, title="HA Smoothed", color=ha_col)

tp=input(120)
sl=input(96)
    
strategy.entry("long", strategy.long, when = longCondition)
//strategy.close("long", when = o2>c2 , comment="ha_long")
strategy.entry("short", strategy.short , when =shortCondition )
//strategy.close("short", when = o2<=c2 , comment = "ha_short" )

//strategy.close("long",when=long_profit_level1 or long_stop_level  , comment="tp/sl")
//strategy.close("short",when=short_profit_level1 or short_stop_level , comment="tp/sl")

strategy.exit("x_long","long",profit = tp, loss = sl) //when = o2>c2)
strategy.exit("x_short","short",profit = tp, loss = sl) //when = o2<c2)