Estratégia de Crossover de Média Móvel de Preço


Data de criação: 2023-11-27 16:52:19 última modificação: 2023-11-27 16:52:19
cópia: 1 Cliques: 677
1
focar em
1617
Seguidores

Estratégia de Crossover de Média Móvel de Preço

Visão geral

A estratégia é essencialmente uma estratégia de cruzamento de equilíbrio. É calculada através de uma média móvel de preços e estabelece uma média móvel de curto prazo definida, fazendo um acréscimo quando a média móvel de curto prazo atravessa a média móvel de longo prazo a partir da parte inferior; fazendo um zero quando a média móvel de curto prazo atravessa a média móvel de longo prazo a partir da parte superior.

Princípio da estratégia

A ideia central da estratégia de cruzamento de média de preço é que a média móvel dos preços pode efetivamente refletir a tendência das mudanças de preço. A estratégia gera um sinal de negociação ao definir duas médias móveis de diferentes períodos, e uma certa lógica de negociação, para julgar as mudanças na tendência do mercado.

A estratégia calcula uma média de longo prazo e uma média de curto prazo. A média de longo prazo é usada para determinar a tendência principal, enquanto a curta é usada para capturar oscilações de curto prazo durante a tendência principal. O sinal de negociação da estratégia é derivado principalmente do cruzamento entre a curta e a longa: a curta atravessa a linha longa como um sinal múltiplo e a curta atravessa a linha longa como um sinal de vazio.

Especificamente, a estratégia usa 7 tipos diferentes de médias móveis, incluindo SMA, EMA, VWMA, etc. O usuário pode escolher o tipo de média móvel. A duração da média móvel também pode ser configurada de forma flexível. Além disso, a estratégia também fornece um certo limite de período de negociação e um mecanismo de gerenciamento de posição.

Análise de vantagens

Os principais benefícios da estratégia de cruzamento da linha média de preços são os seguintes:

  1. A lógica da estratégia é clara, simples, fácil de entender e implementar, adequada para o aprendizado de iniciantes.

  2. A estratégia é sólida, baseada em regras de equilíbrio bem comprovadas e testadas pela prática do mercado.

  3. Os parâmetros da estratégia são flexíveis e os usuários podem escolher os parâmetros apropriados de acordo com seu julgamento e preferências sobre o mercado.

  4. A estratégia possui um mecanismo de controle de risco para reduzir o tempo de detenção de perdas e evitar posições de retorno desnecessárias.

  5. A estratégia contém vários tipos de médias móveis, com o usuário podendo escolher o tipo de média móvel mais adequado para sua variedade de negociação.

  6. A estratégia apoia a abertura de lógica de negociação em períodos específicos de negociação, evitando oscilações anormais nos principais mercados de feriados.

Análise de Riscos

Embora a estratégia de cruzar a média de preços tenha muitos benefícios, há também alguns riscos na negociação real, principalmente em dois aspectos:

  1. Uma vez que a maioria das médias móveis são retardadas, os sinais de cruzamento podem aparecer no final do período após a reversão de preços e podem ser facilmente bloqueados.

  2. Se os parâmetros forem configurados de forma inadequada, os sinais de cruzamento podem ser muito frequentes, causando uma atividade de negociação excessiva e gerando custos de negociação maiores.

Os riscos acima mencionados podem ser controlados e respondidos de forma a:

  1. Controlar o risco de perdas individuais através da definição de um limiar de perda moderado.

  2. Aumentar as condições de filtragem, reduzir a frequência de negociação e evitar o excesso de negociação. Por exemplo, definir um canal de preço ou condições de amplitude de flutuação de preços.

  3. Optimizar os parâmetros das médias móveis, escolher o conjunto de parâmetros mais adequado para a sua variedade de negociação e período. Testar a estabilidade da estratégia em diferentes condições de mercado.

Direção de otimização

A estratégia de cruzar a média dos preços tem espaço para uma maior otimização, que pode ser feita a partir de:

  1. Aumentar os mecanismos de proteção em situações de hipertrofia, como a suspensão de negociações em situações de forte flutuação de preços, evitando períodos de mercado anormais.

  2. Adicionar mais condições de filtragem e combinação de sinais de negociação, aumentando a qualidade e a estabilidade do sinal. Por exemplo, a combinação com outros indicadores técnicos de identificação de tendências fortes de cruzamentos.

  3. Um sistema de parâmetros dinâmicos que ajusta automaticamente o comprimento da média móvel e os interruptores de negociação, em vez de usar valores fixos, de acordo com as condições do mercado e as características da variedade.

  4. Aplicar o sinal de cruzamento da média em estratégias avançadas, como arbitragem multivariada composta. Combinar com outras informações, para otimização de estratégias em profundidade.

As recomendações acima podem tornar a estratégia mais abrangente, mais eficaz e integrar melhor o risco e o retorno.

Resumir

Este artigo faz uma análise detalhada do código e interpretação da estratégia de cruzamento uniforme simples da Noro’s CrossMA. Analisamos a idéia da estratégia, a estrutura de princípios, os principais benefícios e as possíveis direções de melhoria. A estratégia como um todo é lógica clara, simples de usar, flexível para ajustar os parâmetros e pode ser adaptada a vários ambientes de negociação.

Código-fonte da estratégia
/*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")