Estratégia de negociação em rede baseada no sistema de médias móveis

Autora:ChaoZhang, Data: 2024-01-03 17:18:22
Tags:

img

Resumo

Esta estratégia usa a teoria da média móvel para construir um sistema de negociação de grade, julgando a tendência do mercado através de vários conjuntos de médias móveis JMA com diferentes parâmetros.

Estratégia lógica

  1. Utilize uma combinação de médias móveis JMA de 1 a 20 períodos para determinar a tendência do mercado.

  2. Abre negociações em rede em pontos de reversão da tendência, quando o MA curto cruza abaixo ou acima do MA longo.

  3. Uma opção para filtrar com base na cor do candelabro - apenas compre em velas vermelhas e venda em velas verdes, caso contrário, ignore a cor e negocie apenas na inversão da tendência.

  4. As saídas são ou rastreamento stop loss ou saída baseada no tempo quando a duração da estratégia termina.

Análise das vantagens

  1. O uso do sistema MA para determinar tendências pode identificar eficazmente reversões de tendências a longo prazo.

  2. A negociação em rede pode captar lucros de mercados de gama sem tendências claras, com stop loss para controlar os riscos.

  3. Parâmetros JMA personalizáveis, pode otimizar para diferentes períodos, alta flexibilidade.

  4. O filtro de vela evita ser enganado por falsos escapes.

Análise de riscos

  1. Os mercados de serras de alto preço sem tendências claras apresentam riscos de stop loss mais elevados.

  2. Os erros de julgamento do sistema MA podem conduzir a sinais comerciais incorretos.

  3. O filtro de velas corre o risco de perder algumas oportunidades de negociação.

  4. Se o espaçamento da grelha for demasiado grande, os lucros serão insuficientes; se for demasiado estreito, poderá resultar em demasiadas posições e custos elevados.

Orientações de otimização

  1. Testar mais combinações de parâmetros para encontrar combinações ótimas de JMA MA para diferentes produtos.

  2. Incorporar outros filtros como bandas BOLL, KD etc. para melhorar a qualidade do sinal.

  3. Otimizar as configurações da grade, como espaçamento da grade, lotes de entrada, etc.

  4. Considere mais métodos de stop loss como baseados em gap, trailing stops etc.

Conclusão

Esta estratégia julga reversões usando a teoria JMA e abre negociações de grade em pontos de virada para capturar lucros de mudanças de tendência de longo prazo.


/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's Fishnet Strategy", shorttitle = "Fishnet str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
usecf = input(false, defval = false, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//JMA
jmax(src, len) =>
    beta = 0.45*(len-1)/(0.45*(len-1)+2)
    alpha = pow(beta, 3)
    L0=0.0, L1=0.0, L2=0.0, L3=0.0, L4=0.0
    L0 := (1-alpha)*src + alpha*nz(L0[1])
    L1 := (src - L0[0])*(1-beta) + beta*nz(L1[1])
    L2 := L0[0] + L1[0]
    L3 := (L2[0] - nz(L4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(L3[1])
    L4 := nz(L4[1]) + L3[0]
	L4

ma01 = jmax(close, 10)
ma02 = jmax(close, 20)
ma03 = jmax(close, 30)
ma04 = jmax(close, 40)
ma05 = jmax(close, 50)
ma06 = jmax(close, 60)
ma07 = jmax(close, 70)
ma08 = jmax(close, 80)
ma09 = jmax(close, 90)
ma10 = jmax(close, 100)
ma11 = jmax(close, 110)
ma12 = jmax(close, 120)
ma13 = jmax(close, 130)
ma14 = jmax(close, 140)
ma15 = jmax(close, 150)
ma16 = jmax(close, 160)
ma17 = jmax(close, 170)
ma18 = jmax(close, 180)
ma19 = jmax(close, 190)
ma20 = jmax(close, 200)

trend = 0
trend := ma01 > ma20 ? 1 : ma01 < ma20 ? -1 : trend[1]
col = trend == 1 ? #00FF7F : #DC143C

plot(ma01, transp = 0, color = col)
plot(ma02, transp = 0, color = col)
plot(ma03, transp = 0, color = col)
plot(ma04, transp = 0, color = col)
plot(ma05, transp = 0, color = col)
plot(ma06, transp = 0, color = col)
plot(ma07, transp = 0, color = col)
plot(ma08, transp = 0, color = col)
plot(ma09, transp = 0, color = col)
plot(ma10, transp = 0, color = col)
plot(ma11, transp = 0, color = col)
plot(ma12, transp = 0, color = col)
plot(ma13, transp = 0, color = col)
plot(ma14, transp = 0, color = col)
plot(ma15, transp = 0, color = col)
plot(ma16, transp = 0, color = col)
plot(ma17, transp = 0, color = col)
plot(ma18, transp = 0, color = col)
plot(ma19, transp = 0, color = col)
plot(ma20, transp = 0, color = col)

//Trading
lot = 0.0
lot := strategy.equity / close * capital / 100

if trend == 1 and (close < open or usecf == false)
    strategy.entry("Long", strategy.long, needlong ? lot : na)

if trend == -1 and (close > open or usecf == false)
    strategy.entry("Short", strategy.short, needshort ? lot : na)
    

Mais.