Estratégia combinada de curto prazo de média móvel dupla e MACD


Data de criação: 2023-10-09 16:47:42 última modificação: 2023-10-09 16:47:42
cópia: 0 Cliques: 749
1
focar em
1617
Seguidores

Visão geral

Esta estratégia utiliza a dupla linha média, o indicador aleatório e o indicador MACD para identificar oportunidades de negociação em linha curta, uma estratégia de negociação em linha curta mais clássica.

Princípios

A estratégia baseia-se principalmente nos seguintes princípios:

  1. Usando a linha média EMA de 50 e 100 ciclos, para determinar a direção da tendência. A linha média EMA é mais curta e pode responder rapidamente às mudanças de preço. A linha de 50 ciclos representa a entrada em mais de 100 ciclos; A linha de 50 ciclos abaixo da linha de 100 ciclos representa a entrada em vazio.

  2. O MACD é usado para determinar a diferença entre os valores de compra e venda. Quando a diferença entre os valores de compra e venda é superior a 0, a força da cabeça mostra um aumento, fazendo mais; quando a diferença entre os valores de compra e venda é inferior a 0, a força da cabeça mostra um aumento, fazendo vazio.

  3. Combinando o indicador Stochastic RSI para determinar se está sendo comprado ou vendido. O indicador, combinando os benefícios do indicador KDJ e do indicador RSI, pode mostrar a sobrevenda do mercado. Quando o indicador está abaixo de 20, é vendido em excesso, combinado com outros indicadores; Quando o indicador está acima de 80, é comprado em excesso, combinado com outros indicadores.

  4. Após a determinação da direção de abertura, uma posição pode ser aberta se 4 dos 5 últimos preços de fechamento da linha K tocarem a linha média, indicando que há suporte ou pressão perto da linha média.

  5. O uso de stop-loss para gerenciar o risco.

Vantagens

A estratégia tem as seguintes vantagens:

  1. A combinação de indicadores múltiplos, o uso integrado de linhas médias, indicadores de sobrevenda e sobrevenda e indicadores de energia, aumentam a taxa de vitória de negociação.

  2. O ciclo de linha média é curto e permite a rápida captação de tendências e reversões. Os parâmetros MACD são otimizados para identificar o momento preciso de compra e venda.

  3. Os parâmetros do indicador Stochastic RSI foram otimizados para identificar o fenômeno de sobrecompra e sobrevenda.

  4. O uso da pressão de suporte perto da linha média para o controle de ritmo, para evitar ser preso em uma quebra ineficaz.

  5. O que é um Stop Loss Racional e um Controle de Risco de uma única transação?

Riscos

A estratégia também apresenta alguns riscos:

  1. A falta de informação sobre os riscos de falhas de segurança não é totalmente evitável.

  2. A combinação de indicadores múltiplos pode se desviar, causando incoerência nos sinais de negociação.

  3. O ponto de parada fixo pode não se adaptar às mudanças no mercado.

  4. A implementação do código é mais complexa, com muitos parâmetros, e não é fácil de otimizar.

A solução para o risco é a seguinte:

  1. Optimizar os parâmetros, melhorar a qualidade do sinal e reduzir a probabilidade de falsa brecha.

  2. Estabelecer prioridades entre os indicadores para evitar conflitos de sinais

  3. Acompanhar a dinâmica de stop loss, definindo um intervalo de stop loss com base em indicadores como o ATR.

  4. Simplificar a lógica do código, extrair os parâmetros centrais para testes e otimização.

Direção de otimização

A estratégia pode ser otimizada em várias direções:

  1. Testes com o ciclo da linha média e os parâmetros MACD para encontrar a melhor combinação de parâmetros.

  2. Testar diferentes indicadores de overbought e oversold em vez do RSI estocástico.

  3. Tente o stop loss dinâmico, o stop loss móvel, etc., para tornar a gestão de perdas e prejuízos mais inteligente.

  4. Adição de filtros, como aumento de volume de transações, para melhorar a qualidade do sinal.

  5. Optimizar a lógica de abertura de posições para evitar que as rupturas não sejam efetivas. Pode-se introduzir mais indicadores para avaliar as tendências.

  6. Estabeleça limites de stop loss para o tamanho do capital da conta, o número de transações por dia, etc. Controle o risco geral.

Resumir

Esta estratégia integra várias vantagens de indicadores e tem uma forte utilidade em negociações de curta linha. A estabilidade e a lucratividade da estratégia podem ser ainda melhoradas através da continuação da otimização dos parâmetros, da lógica de abertura rigorosa e da melhoria da estratégia de gerenciamento de perdas e prejuízos. A estratégia é adequada para o uso de comerciantes de curta linha com uma certa base, mas é necessário prestar atenção ao controle de risco para evitar grandes perdas.

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

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )