Estratégia de negociação baseada na média móvel golden cross e dead cross


Data de criação: 2023-12-07 14:56:50 última modificação: 2023-12-07 14:56:50
cópia: 0 Cliques: 429
1
focar em
1225
Seguidores

Estratégia de negociação baseada na média móvel golden cross e dead cross

Visão geral

Esta estratégia é baseada nos sinais de compra e venda do BTC, em combinação com o julgamento de indicadores técnicos adicionais, com base nas médias móveis de 50 dias e 200 dias do BTC. A estratégia é aplicada principalmente ao par BTC/USDT, que apresenta características de tendência visíveis.

Princípio da estratégia

Quando a média móvel de 50 dias acima da média móvel de 200 dias é rompida e uma forquilha de ouro é formada, o BTC entra em um mercado multi-cabeça, gerando um sinal de compra. Quando a média móvel de 50 dias é rompida para baixo da média móvel de 200 dias e uma forquilha de morte parada é formada, o BTC entra em um mercado vazio, gerando um sinal de venda.

A estratégia, além dos critérios básicos de arbitragem de forquilhas e sinais de forquilhas, adiciona alguns indicadores técnicos adicionais para auxiliar o julgamento, que incluem:

  1. EMA: calcula um EMA de comprimento + offset, que pode ser comprado quando o seu aumento indica que está atualmente em um mercado de ativos.

  2. Comparar a relação entre a média móvel e a EMA: se o valor da EMA for superior à média móvel de 50 dias, um julgamento de compra é gerado.

  3. Verifique se o preço caiu mais de 1% em relação ao ponto mais baixo da linha K anterior e, se satisfeito, faça um sinal de venda.

A combinação dos indicadores acima pode filtrar alguns sinais errôneos e tornar as decisões estratégicas de negociação mais confiáveis.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Usando a média móvel como principal sinal de negociação, pode filtrar o ruído do mercado e identificar a direção da tendência.

  2. A combinação de vários indicadores de tecnologia auxiliar, como o EMA, pode aumentar a confiabilidade do sinal e filtrar os falsos sinais.

  3. A aplicação de estratégias de parada de perdas adequadas permite controlar eficazmente as perdas individuais.

  4. Uma lógica de negociação simples, fácil de entender e apropriada para iniciantes em negociação quantitativa.

  5. Há mais parâmetros configuráveis, que podem ser ajustados de acordo com suas preferências.

Análise de Riscos

A estratégia também apresenta alguns riscos que devem ser lembrados:

  1. A própria média móvel é muito atrasada e pode perder a oportunidade de uma rápida reversão.

  2. Os indicadores auxiliares aumentam o número de regras e também a probabilidade de produzir sinais errados.

  3. A configuração inadequada de stop loss pode causar uma expansão de perdas.

  4. Configurações de parâmetros (como o comprimento de uma média móvel) podem afetar a eficácia da estratégia.

Resolução:

  1. Reduzir adequadamente os ciclos de média móvel e aumentar o alcance de otimização dos parâmetros.

  2. Aumentar a quantidade de dados e verificar a qualidade do sinal.

  3. A largura de suspensão de perdas deve ser adequadamente amenizada, e um limite de lucro deve ser estabelecido.

  4. Aumentar a otimização de parâmetros para encontrar a melhor combinação de parâmetros.

Direção de otimização

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

  1. Adição de algoritmos de aprendizagem de máquina para otimização automática de parâmetros.

  2. Adicionando mais indicadores auxiliares, construindo várias sub-estratégias e tomando decisões por meio de mecanismos de votação.

  3. Tente a estratégia de breakout para identificar breakouts.

  4. Aproveite a aprendizagem profunda para prever tendências de preços.

  5. Otimizar o mecanismo de stop loss e implementar o stop loss de rastreamento dinâmico.

A otimização acima pode aumentar a precisão das decisões e aumentar a lucratividade e a estabilidade das estratégias.

Resumir

Esta estratégia baseia-se principalmente na crossing da média móvel do BTC para tomar decisões de negociação, auxiliada por indicadores técnicos como EMA para filtrar os sinais. A estratégia possui uma forte capacidade de acompanhamento de tendências, é altamente configurável e é adequada como estratégia de entrada para negociação quantitativa.

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

//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)

securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')

sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')

// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)

ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)

up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue

plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)

ma50GreaterThanMa200 = sma50 > sma200

last3BarUp = ema > ema[1]

startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)

startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")

yearFilter = true

alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"

if true and startLong and yearFilter
    strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)

longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
    strategy.close('Long', comment = "Fuck It!", alert_message =  alertLongPositionMessage)

bgcolor(startLong ? color.green : na, transp=90)