Estratégia de negociação de quebra de momentum de média móvel múltipla adaptável

SMMA ZLEMA EMA MA SMA
Data de criação: 2025-01-10 15:27:53 última modificação: 2025-01-10 15:27:53
cópia: 0 Cliques: 433
1
focar em
1617
Seguidores

Estratégia de negociação de quebra de momentum de média móvel múltipla adaptável

Visão geral

Esta é uma estratégia de negociação baseada em múltiplas médias móveis e rompimentos de momentum. Esta estratégia combina vários indicadores técnicos, como SMMA (média móvel suavizada) e ZLEMA (média móvel exponencial com atraso zero) para identificar oportunidades de negociação capturando sinais de cruzamento entre preços e médias móveis. A estratégia adota um mecanismo adaptativo que pode ajustar a sensibilidade do sinal de acordo com as flutuações do mercado e melhorar a precisão das transações.

Princípio da estratégia

A estratégia usa quatro médias móveis principais: src (SMMA com base em HLC3), hi (SMMA com base em alta), lo (SMMA com base em baixa) e mi (ZLEMA com base em src). Os sinais de negociação são baseados principalmente nos relacionamentos de cruzamento e posição entre essas médias móveis. A combinação de múltiplas condições de sinal garante a confiabilidade dos sinais de negociação. Os sinais de compra incluem quatro combinações diferentes de condições, e os sinais de venda também incluem quatro combinações diferentes de condições. O sinal de fechamento é baseado no cruzamento do preço e da média móvel mi e na relação posicional entre as médias móveis.

Vantagens estratégicas

  1. Mecanismo de confirmação de múltiplos sinais melhora a precisão das transações
  2. Os recursos adaptativos permitem que as estratégias se adaptem a diferentes condições de mercado
  3. Usando SMMA e ZLEMA para reduzir o impacto de sinais falsos
  4. Um sistema de sinal em camadas oferece mais oportunidades de negociação
  5. Condições claras de fechamento ajudam a controlar riscos

Risco estratégico

  1. O crossover da média móvel pode causar atraso, afetando o tempo de entrada
  2. Várias condições podem fazer com que algumas oportunidades comerciais importantes sejam perdidas
  3. Pode gerar muitos sinais falsos em um mercado volátil
  4. Configurações de parâmetros inadequadas podem afetar o desempenho da estratégia
  5. É preciso considerar o impacto dos custos de transação nos retornos da estratégia

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

  1. Introdução de filtros de volatilidade para ajustar parâmetros de estratégia durante períodos de alta volatilidade
  2. Adicione análise de volume de negociação para melhorar a confiabilidade do sinal
  3. Mecanismo adaptativo para otimizar parâmetros de média móvel
  4. Adicionar indicador de força de tendência para melhorar a precisão do julgamento de tendência
  5. Desenvolver um mecanismo dinâmico de stop-loss para melhorar as capacidades de controlo de risco

Resumir

Esta estratégia constrói um sistema de negociação relativamente completo por meio da combinação de múltiplas médias móveis e indicadores de momentum. A natureza adaptável da estratégia e o mecanismo de confirmação múltipla melhoram a confiabilidade das transações. Por meio da otimização e melhoria, espera-se que a estratégia mantenha um desempenho estável em diferentes ambientes de mercado. É recomendável que os traders realizem testes retrospectivos e otimização de parâmetros suficientes antes do uso em tempo real.

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

//@version=6

//study("Limit order strategy", overlay=true)
strategy('Limit order strategy', overlay = true)

lengthMA = input(1)
lengthmi = input(14)
lengthhigh = input(14)
lengthlow = input(14)

calc_smma(src, len) =>
    smma = 0.0
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d


src = calc_smma(hlc3, lengthMA)
hi = calc_smma(high, lengthhigh)
lo = calc_smma(low, lengthlow)
mi = calc_zlema(src, lengthmi)

plot(src, color = color.new(#FF1493, 0), linewidth = 2, title = 'src')
plot(hi, color = color.new(#7CFC00, 0), linewidth = 2, title = 'hi')
plot(lo, color = color.new(#FF0000, 0), linewidth = 2, title = 'lo')
plot(mi, color = color.new(#00FFFF, 0), linewidth = 2, title = 'mi')


//strategy.order("buy", true, 1, stop = na, when = openbuy) // buy by market if current open great then previous high
//strategy.order("sell", false, 1, stop = na, when = opensell) // sell by market if current open less then previous low
//if src >= mi and src[1] <= mi[1] and src[1] <= lo[1]
//	strategy.entry("buy 1", strategy.long, qty = 15)
sigorderbuy1 = src > mi and src[1] < mi[1] and src < lo and mi < lo
sigorderbuy2 = src > lo and src[1] < lo[1] and mi < lo
sigorderbuy3 = src > hi and src[1] < hi[1] and mi < hi
sigorderbuy4 = src > mi and src[1] < mi[1] and src > hi and mi > hi
//sigorderbuy5 = mi > hi and  src > hi  and src > mi and src[1] < mi[1] 
//sigorderbuy6 = mi < hi and src > hi and src[1] < hi[1]
sigclosebuy = src < mi and src[1] > mi[1] or mi < lo and src < lo and src[1] > lo[1]

sigordersell1 = src < mi and src[1] > mi[1] and src > hi and mi > hi
sigordersell2 = src < hi and src[1] > hi[1] and mi > hi
sigordersell3 = src < lo and src[1] > lo[1] and mi > lo
sigordersell4 = src < mi and src[1] > mi[1] and src < lo and mi < lo
//sigordersell5 = mi < lo and  src < lo  and src < mi and src[1] > mi[1] 
//sigordersell6 = mi > lo and src < lo and src[1] > lo[1]
sigclosesell = src > mi and src[1] < mi[1] or mi > hi and src > hi and src[1] < hi[1]

plot(sigorderbuy1 ? 1 : 0, 'sigorderbuy1')
plot(sigorderbuy2 ? 1 : 0, 'sigorderbuy2')
plot(sigorderbuy3 ? 1 : 0, 'sigorderbuy3')
plot(sigorderbuy4 ? 1 : 0, 'sigorderbuy4')
//plot(sigorderbuy5 ? 1 : 0,"sigorderbuy5") 
//plot(sigorderbuy6 ? 1 : 0,"sigorderbuy6") 

plot(sigordersell1 ? 1 : 0, 'sigordersell1')
plot(sigordersell2 ? 1 : 0, 'sigordersell2')
plot(sigordersell3 ? 1 : 0, 'sigordersell3')
plot(sigordersell4 ? 1 : 0, 'sigordersell4')
//plot(sigordersell5 ? 1 : 0,"sigordersell5") 
//plot(sigordersell6 ? 1 : 0,"sigordersell6")

plot(sigclosebuy ? 1 : 0, 'sigclosebuy')
plot(sigclosesell ? 1 : 0, 'sigclosesell')


openbuy = sigorderbuy1 or sigorderbuy2 or sigorderbuy3 or sigorderbuy4 // or sigorderbuy5 or sigorderbuy6
opensell = sigordersell1 or sigordersell2 or sigordersell3 or sigordersell4 //or sigordersell5 or sigordersell6
openclosebuy = sigclosebuy
openclosesell = sigclosesell

alertcondition(condition = openbuy, title = 'sigorderbuy all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Buy {{ticker}} sig_b1={{plot("sigorderbuy1")}} sig_b2={{plot("sigorderbuy2")}} sig_b3={{plot("sigorderbuy3")}} sig_b4={{plot("sigorderbuy4")}}"}')
alertcondition(condition = opensell, title = 'sigordersell all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Sell {{ticker}} sig_s1={{plot("sigordersell1")}} sig_ss={{plot("sigordersell2")}} sig_s3={{plot("sigordersell3")}} sig_s4={{plot("sigordersell4")}} sig_s5={{plot("sigordersell5")}} sig_61={{plot("sigordersell6")}}"}')

alertcondition(condition = sigclosebuy, title = 'Close buy', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=short"}')
alertcondition(condition = sigclosesell, title = 'Close sell', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=long"}')

if sigorderbuy1
    strategy.order('Buy 1', strategy.long, 1)
if sigorderbuy2
    strategy.order('Buy 2', strategy.long, 1)
if sigorderbuy3
    strategy.order('Buy 3', strategy.long, 1)
if sigorderbuy4
    strategy.order('Buy 4', strategy.long, 1)


if sigordersell1
    strategy.order('sell 1', strategy.short, 1)
if sigordersell2
    strategy.order('sell 2', strategy.short, 1)
if sigordersell3
    strategy.order('sell 3', strategy.short, 1)
if sigordersell4
    strategy.order('sell 4', strategy.short, 1)
//strategy.order("sell 5", false, 1, when = sigordersell5)
//strategy.order("sell 6", false, 1, when = sigordersell6)