Estratégia de cruzamento de indicador duplo de média móvel rápida longa e curta


Data de criação: 2023-11-22 17:29:04 última modificação: 2023-11-22 17:29:04
cópia: 0 Cliques: 615
1
focar em
1617
Seguidores

Estratégia de cruzamento de indicador duplo de média móvel rápida longa e curta

Visão geral

A estratégia de tendência de cruzamento de média móvel rápida e média móvel lenta é uma estratégia de acompanhamento de tendência que utiliza uma média móvel rápida e uma média móvel lenta para formar um sinal de compra e venda. A estratégia combina vários indicadores, como MACD, RSI e outros, para determinar a direção da tendência, com uma forte capacidade de acompanhamento de tendência.

Princípio da estratégia

A estratégia é baseada nos seguintes indicadores:

  1. Média móvel rápida e média móvel lenta: a linha rápida atravessa a linha lenta como um sinal de compra, a linha rápida atravessa a linha lenta como um sinal de venda.

  2. MACD: é um sinal de múltiplo cabeçalho quando a linha MACD está acima da linha de sinal e o valor mínimo do MACD sobe.

  3. RSI: RSI acima de 50 é um sinal de multi-cabeça, abaixo de 50 é um sinal de cabea.

  4. Oscilador de medição (AO): quando o eixo 0 acima do AO é um sinal de compra, o eixo 0 abaixo do AO é um sinal de venda.

  5. Três médias móveis de nível de linha do dia: média móvel de período mais curto de nível de linha do dia e média móvel de período mais longo são sinais de compra.

A estratégia integra vários períodos de tempo e vários indicadores, formando a lógica de julgamento de compra e venda. Quando vários indicadores geram sinais de compra ao mesmo tempo, geram instruções de compra e quando vários indicadores geram sinais de venda ao mesmo tempo, geram instruções de venda, permitindo o acompanhamento da tendência.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. A combinação de múltiplos indicadores de julgamento evita sinais errados e aumenta a precisão de julgamento.

  2. A combinação de vários períodos de tempo permite identificar a direção de tendências em níveis maiores.

  3. Os parâmetros do indicador foram otimizados, Parameters tuning, com uma melhor taxa de retorno.

  4. O uso de stop loss móvel para controlar o risco e evitar a expansão dos prejuízos.

  5. A operação de seguimento automático de tendências, sem a necessidade de intervenção humana, reduz os custos de operação.

Análise de Riscos

A estratégia também traz alguns riscos:

  1. Em situações de turbulência, é possível gerar mais sinais de negociação inválidos. Os sinais inválidos podem ser reduzidos através da otimização dos parâmetros do indicador.

  2. O acidente pode levar a uma retirada rápida. Pode-se configurar um stop loss móvel para controlar os danos.

  3. As regras de determinação de sinais de múltiplos espaços são mais complexas e a otimização de parâmetros requer suporte de dados históricos em grande quantidade.

  4. A configuração inadequada de tracking stop pode levar a uma parada prematura. Testes repetidos são necessários para determinar os parâmetros ótimos.

Direção de otimização

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

  1. Teste mais combinações de indicadores em busca de sinais de negociação mais estáveis e precisos, como os indicadores de volatilidade, OBV e outros.

  2. Otimizar os parâmetros do indicador, reduzindo o número de transações inválidas. Usar aprendizado de máquina e algoritmos genéticos para encontrar os parâmetros de otimização automaticamente.

  3. Aumentar a tecnologia de integração de modelos, integrando mais estratégias independentes e modelos de julgamento. Aumentar a estabilidade.

  4. Entrar em níveis de alta frequência e sair em níveis de baixa frequência. Reduzir o risco de captura.

  5. Aumentar o módulo de controle de vento quantificado, controlar rigorosamente a taxa de perda única, a taxa máxima de retirada, etc.

Resumir

A estratégia multi-espaço de cruzamento de dois indicadores de média móvel rápida forma um sinal de negociação por meio do cruzamento de uma média móvel rápida e uma média móvel lenta, e combina vários indicadores para determinar a direção da tendência, como MACD, RSI e outros, para permitir o acompanhamento automático da tendência. O espaço de otimização da estratégia é grande e os melhores resultados da estratégia podem ser obtidos através da introdução de mais indicadores, ajuste de parâmetros e integração de modelos.

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

//@version=5
strategy('SteffVans', shorttitle='SteffVans strategy', overlay=true, process_orders_on_close = true)

// Input settings
macd_fast_length = input(12)
macd_slow_length = input(26)
macd_signal_length = input(9)

// Calculate MACD values
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
mg = ta.lowest(signal_line, 30) >= -0

// RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1)
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
RSI = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


//  AO
AO = ta.sma((high + low) / 2, 5) - ta.sma((high + low) / 2, 34)
crossaosell = AO < AO[1] and AO[1] < AO[2] and AO[2] > AO[3]  and ta.lowest(low,3)

// Uptrend sma
len1 = input.int(5, minval=1)
len2 = input.int(10, minval=1)
len3 = input.int(20, minval=1)
src = input(close)

out1 = ta.sma(src, len1)
out2 = ta.sma(src, len2)
out3 = ta.sma(src, len3)



// Timeframe 
macdl60 = request.security(syminfo.tickerid, "60", signal_line,lookahead = barmerge.lookahead_on)
ao = request.security(syminfo.tickerid, "60", AO,lookahead = barmerge.lookahead_on)
rsi = request.security(syminfo.tickerid, "60", RSI,lookahead = barmerge.lookahead_on)
good = request.security(syminfo.tickerid, "60", mg,lookahead = barmerge.lookahead_on)
bad = request.security(syminfo.tickerid, "60", crossaosell,lookahead = barmerge.lookahead_on)

ma1 = request.security(syminfo.tickerid, "D", out1,lookahead = barmerge.lookahead_on)
ma2 = request.security(syminfo.tickerid, "D", out2, lookahead = barmerge.lookahead_on)
ma3 = request.security(syminfo.tickerid, "D", out3, lookahead = barmerge.lookahead_on)






// Kriteria BUY and SELL
uptrend1 =  request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) > ma1 and ma1 > ma3 and ma2 > ma3
uptrend2 = ta.lowest(ma1,12) > ta.lowest(ma3,12) and ta.lowest(ma2,12) > ta.lowest(ma3,12) 


 

// Triger BUY and SELL 
cross1 = ao > ao[1] and ao[1] < ao[2] and ao > 0 and good and rsi >= 60 and uptrend1
cross2 = ao > 0 and ao[1] < 0 and good and rsi >=50 and uptrend1
cross3 =  ao > 0 and ao[1] < 0 and not good and uptrend2 and uptrend1
cross4 =  ao > ao[1] and ao[1] > ao[2] and ao[2] < ao[3] and ao[3] < ao[4]  and not good and uptrend2 and uptrend1

s1 = ao < ao[1] and ao[1] < ao[2] and ao[2] < ao[3] and ao > 0 and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1
s2 =  ao < 0 and ao < ao[2] and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1 

// Variabel Buy dan Sell
buySignal = false
sellSignal = false

// Syarat masuk Buy
buyCondition =  cross1 or cross2 or cross3 or cross4
if buyCondition
    buySignal := true

// Syarat masuk Sell
sellCondition = s1 or s2
if sellCondition
    sellSignal := true

// Reset sinyal jika ada sinyal berulang
if buySignal and sellSignal
    sellSignal := false
if sellSignal and buySignal
    buySignal := false

// Logika perdagangan
if buySignal
    strategy.entry("Buy", strategy.long, comment = "BUY")
if sellSignal
    strategy.close("Buy")


plotshape(cross1,title = "Stefkuy1", style = shape.labelup, location = location.belowbar, color = color.green,text = "1", textcolor = color.white,size = size.small)
plotshape(cross2,title = "Stefkuy2", style = shape.labelup, location = location.belowbar, color = color.green, text = "2", textcolor= color.white, size = size.small)
plotshape(cross3,title = "StefVan1", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "3", textcolor= color.white,size = size.small)
plotshape(cross4,title = "StefVan2", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "4", textcolor= color.white,size = size.small)