Estratégia de preço médio móvel cruzado

Autora:ChaoZhang, Data: 2023-11-27 16:52:19
Tags:

img

Resumo

Esta estratégia é essencialmente uma estratégia cruzada de média móvel. Calculando a média móvel dos preços e definindo certas médias móveis de curto e longo prazo, vá longo quando a média móvel de curto prazo cruza acima da média móvel de longo prazo da parte inferior; vá curto quando a média móvel de curto prazo cruza abaixo da média móvel de longo prazo da parte superior.

Princípios

A ideia central da estratégia cruzada de média móvel de preços é: a média móvel do preço pode efetivamente refletir a tendência da mudança de preço. A estratégia julga a mudança da tendência do mercado através do estabelecimento de duas médias móveis de ciclos diferentes e certa lógica de negociação para gerar sinais de negociação.

A estratégia calcula uma média móvel de longo prazo e uma de curto prazo. A linha longa julga principalmente a tendência principal e a linha curta é usada para capturar flutuações de médio prazo durante a tendência principal. Os sinais de negociação da estratégia vêm principalmente do cruzamento da linha curta sobre a linha longa: o sinal longo quando a linha curta cruza acima da linha longa e o sinal curto quando a linha curta cruza abaixo. Além disso, a estratégia filtra os sinais para evitar falsos sinais.

Especificamente, a estratégia usa 7 tipos diferentes de médias móveis, incluindo SMA, EMA, VWMA, etc. Os usuários podem selecionar o tipo de média móvel. O comprimento da média móvel também pode ser definido de forma flexível. Além disso, a estratégia também fornece restrições em certos períodos de tempo de negociação e mecanismos de gerenciamento de posição. Através dessas configurações, os usuários podem ajustar flexivelmente os parâmetros da estratégia para se adaptar a diferentes variedades e ambientes de mercado.

Análise das vantagens

As principais vantagens da estratégia cruzada das médias móveis de preços são as seguintes:

  1. A lógica estratégica é clara e simples, fácil de compreender e implementar, adequada para aprendizagem de iniciantes.

  2. O princípio da estratégia é robusto, baseado em regras totalmente verificadas de negociação de médias móveis, e foi testado na prática nos mercados.

  3. Os parâmetros da estratégia são flexíveis e ajustáveis, permitindo aos utilizadores escolher os parâmetros adequados de acordo com os seus próprios julgamentos e preferências no mercado.

  4. A estratégia dispõe de certos mecanismos de controlo do risco para reduzir o tempo de retenção das ordens perdedoras e evitar posições reversíveis desnecessárias.

  5. A estratégia contém vários tipos de médias móveis. Os utilizadores podem selecionar o tipo de média móvel mais adequado para as suas variedades de negociação.

  6. A estratégia apoia a habilitação de uma lógica de negociação durante períodos de negociação específicos, a fim de evitar flutuações anormais nos principais mercados de férias.

Análise de riscos

Embora a estratégia cruzada da média móvel de preços tenha muitas vantagens, ainda existem alguns riscos na negociação real, que se refletem principalmente nos dois seguintes aspectos:

  1. Devido ao atraso da maioria das médias móveis, os sinais cruzados podem aparecer na fase posterior após a reversão do preço ser concluída, o que é fácil de ser preso.

  2. Em caso de configuração inadequada dos parâmetros, os sinais cruzados podem ser demasiado frequentes, resultando numa actividade comercial demasiado elevada e em custos comerciais mais elevados.

Em resposta aos riscos acima referidos, os controlos e os métodos de controlo são realizados das seguintes formas:

  1. Controlar o risco de perda única definindo um intervalo de stop loss adequado.

  2. Reduzir a frequência de negociação e evitar o excesso de negociação adicionando condições de filtro, por exemplo, estabelecendo condições de canal de preços ou de faixa de flutuação de preços.

  3. Optimize os parâmetros da média móvel para selecionar a combinação mais adequada de parâmetros para suas próprias variedades e ciclos de negociação.

Optimização

A estratégia de cruzamento das médias móveis de preços ainda pode ser melhorada nos seguintes aspectos:

  1. Aumentar o mecanismo de proteção em condições de mercado extremas, por exemplo, suspender temporariamente a negociação durante violentas flutuações de preços para evitar condições anormais de mercado.

  2. Aumentar as condições de filtragem e os sinais comerciais combinados para melhorar a qualidade e a estabilidade dos sinais.

  3. Adotar um sistema de parâmetros dinâmicos. De acordo com as condições do mercado e as características das variedades, ajustar automaticamente os parâmetros-chave, como comprimento médio móvel, interruptor de negociação, etc., em vez de usar valores fixos.

  4. Aplique este sinal de cruzamento de média móvel em estratégias avançadas como arbitragem de variedade composta. Combine-o com outras informações para otimização de estratégia em profundidade.

Estas sugestões podem alargar o ambiente aplicável e a eficácia desta estratégia e alcançar uma melhor compensação risco-recompensa.

Conclusão

Este artigo faz uma análise detalhada do código e interpretação da estratégia de cruzamento da média móvel simples - Noros CrossMA. Analisamos sua ideia de estratégia, estrutura de princípios, principais vantagens e possíveis direções de melhoria. No geral, esta estratégia tem lógica clara e é simples e prática. O ajuste flexível de parâmetros pode se adaptar a muitos ambientes de negociação.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Mais.