Estratégia de cruzamento da média móvel exponencial

Autora:ChaoZhang, Data: 2023-10-17 16:55:10
Tags:

img

Resumo

Esta é uma estratégia de negociação automática que vai longo ou curto com base no cruzamento de duas médias móveis exponenciais (EMA) com diferentes períodos de tempo.

Princípio

A estratégia usa duas EMAs, uma é a EMA em um período de tempo maior, e a outra é a EMA no período de tempo atual.

Especificamente, a estratégia define em primeiro lugar dois parâmetros da EMA:

  1. tf - O prazo maior, por defeito diário.
  2. len - Duração do período da EMA, por defeito 3.

Em seguida, calcula duas EMAs:

  1. Ma1 - EMA de 3 dias no período diário.
  2. Ma2 - EMA de 3 dias no quadro de tempo em curso.

Por último, entra em operações baseadas em:

  • Quando ma2 > ma1, ele vai longo.
  • Quando ma2 < ma1, ele fica curto.

Ao julgar a direcção da tendência através de cruzes entre duas EMAs de períodos diferentes, automatiza a negociação.

Vantagens

A estratégia apresenta as seguintes vantagens:

  1. Princípio simples, fácil de entender e implementar, muito adequado para iniciantes.
  2. Seguir a tendência, obedecer à tendência, pode gerar lucros decentes.
  3. O uso de EMAs, mais sensíveis às alterações de preços, pode capturar as inversões de tendência em tempo hábil.
  4. A combinação de EMAs de períodos diferentes pode utilizar os seus respectivos pontos fortes e melhorar a estabilidade do sistema.
  5. Não há necessidade de muitos parâmetros, fácil de testar e otimizar, conveniente para negociação ao vivo.

Riscos

A estratégia apresenta também alguns riscos:

  1. A tendência fraca da capacidade pode ser prejudicada em mercados variados.
  2. Ficando para trás em crossovers duplos da EMA, pode perder algumas oportunidades.
  3. Não pode filtrar efetivamente os cruzamentos desordenados entre duas EMAs.
  4. Baseia-se apenas em EMAs simples, difíceis de adaptar a mercados complexos.

Os riscos podem ser reduzidos através da definição de stop loss, otimização de parâmetros, adição de outros indicadores, etc.

Optimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Teste diferentes parâmetros de EMA de grande período para encontrar a combinação ideal.
  2. Adicione um filtro de volume para evitar sinais falsos.
  3. Incorporar indicadores de tendência para aumentar o dimensionamento e a eficiência das posições.
  4. Configure o stop loss adaptativo para controlar a perda de uma única transação.
  5. Otimizar o dimensionamento das posições de acordo com as condições do mercado.
  6. Adicionar modelos de aprendizagem de máquina para tornar a estratégia mais inteligente.

Conclusão

A estratégia crossover da EMA capta tendências com indicadores simples, adequados para iniciantes aprenderem e praticarem.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Noro's Singapore Strategy", shorttitle = "Singapore 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")
tf = input("D", title = "Big Timeframe")
len = input(3, minval = 1, title = "MA length")
src = input(close, title = "MA Source")
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")

//MAs
ma1 = request.security(syminfo.tickerid, tf, sma(src, len))
ma2 = sma(src, len)
plot(ma1, linewidth = 2, color = blue, title = "Big TF MA")
plot(ma2, linewidth = 2, color = red, title = "MA")

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if ma2 > ma1
    strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if ma2 < ma1
    strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mais.