Estratégia de acompanhamento da tendência de ouro baseada em investimentos periódicos

Autora:ChaoZhang, Data: 31 de outubro de 2023
Tags:

img

Resumo

Esta estratégia usa modelos de média móvel para determinar a direção da tendência do mercado. Quando uma tendência de alta é identificada, será aberta periodicamente posições longas com valores fixos para acompanhar a tendência de alta da cruz de ouro no mercado.

Estratégia lógica

A estratégia baseia-se principalmente nos seguintes princípios técnicos:

  1. Usar linhas EMA para determinar a direção da tendência do mercado Quando a linha EMA rápida cruza a linha EMA lenta, ela é julgada como uma tendência de alta e se prepara para entrar em posições longas.

  2. Combine o indicador MACD para determinar o momento da entrada. Quando o MACD passa de positivo para negativo, indica que o poder de compra começa a enfraquecer, por isso é hora de entrar em posições longas.

  3. Limite-se a entrar apenas uma vez por mês para evitar perseguir altos.

  4. Permitir a definição de uma data de início e data de fim para limitar o período de backtest.

Especificamente, a estratégia primeiro calcula a linha EMA rápida e a linha EMA lenta, e detecta a cruz de ouro entre eles para determinar a tendência do mercado. Ao mesmo tempo, calcula o indicador MACD para determinar um ponto de entrada específico. Quando ambos os critérios são atendidos, um sinal longo é gerado. De acordo com a regra de entrar apenas uma vez por mês, as ordens de entrada reais são determinadas. O valor do capital para cada entrada pode ser presetado. Quando o backtest termina, a estratégia fechará ativamente todas as posições.

Vantagens

Trata-se de uma estratégia simples e direta, com as seguintes vantagens:

  1. A utilização de linhas EMA para determinar a tendência principal é simples e prática.

  2. O indicador MACD pode identificar com relativa precisão o ponto de virada em que o poder de compra começa a enfraquecer, tornando as entradas mais seguras.

  3. Limitar-se a apenas perseguir a tendência de alta uma vez por mês pode evitar perseguir altas e matar a tendência de alta em um mercado de alta.

  4. Permitir a personalização do montante de entrada a cada mês proporciona flexibilidade no dimensionamento da posição.

  5. O backtest pode ser usado para avaliar o desempenho da estratégia, definindo uma data de início e uma data de fim.

  6. Fechará todas as posições automaticamente quando o backtest terminar, evitando posições restantes estranhas.

Riscos e atenuações

Há alguns riscos potenciais desta estratégia:

  1. A determinação da tendência através de médias móveis pode perder oportunidades durante retrações temporárias ou reagir lentamente a uma reversão da tendência.

  2. Considere afrouxar a frequência ou adicionar outra entrada ao quebrar os máximos recentes.

  3. Há riscos de ajustamento da curva, devendo ser concedido mais espaço para ajustes de parâmetros e a robustez deve ser testada em todos os mercados e períodos de tempo.

  4. O montante mensal de entrada deve ser controlado para evitar posições excessivamente grandes.

Oportunidades de melhoria

Esta tendência periódica de investimento, que segue uma estratégia, pode ser ampliada e reforçada pelos seguintes aspectos:

  1. Adicione a lógica de stop loss para cortar ativamente as perdas quando um padrão de reversão de baixa emerge.

  2. Considere adicionar outra compra quando o histograma MACD mostrar divergência de alta para obter mais exposição à tendência de alta.

  3. Introduzir a comparação das novas máximas do mês em curso com o mês anterior para avaliar a força do ímpeto.

  4. Adicionar lógica de dimensionamento de posição. O montante de entrada mensal pode ser adaptável com base em porcentagem em vez de valor fixo.

  5. Avalie o impacto de diferentes combinações de MA e parâmetros MACD. Encontre o conjunto de parâmetros ideal.

  6. Adicione um stop loss que segue o preço a uma certa distância depois de atingir novas altas, permitindo que os lucros funcionem.

Resumo

Esta estratégia representa uma abordagem de tendência simples e limpa usando investimento periódico e médias móveis. É fácil de entender e implementar, servindo como um bom ponto de partida para aprender a negociação algorítmica. Mas na negociação ao vivo, o dimensionamento de posição precisa ser controlado cuidadosamente. A estratégia deve ser melhorada para se adaptar às condições complexas do mercado.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © runescapeyttanic

//@version=4
// strategy("Buy and Hold entry finder Strategy",pyramiding=10000, overlay=true,initial_capital=0,default_qty_type=strategy.cash,default_qty_value=1000,currency = currency.EUR,commission_type=strategy.commission.cash_per_order,commission_value=0)

//INPUTS##################################################################################################################

maxEmaDistance = input(title="Maximum EMA Distance", type=input.float, step=0.01, defval=50000)
emalength = input(title="EMA Length", type=input.integer,defval=200)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2020, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=12, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=02, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)

endDate1=endDate-1
//starttag
//startmonat
//MACD########################################################################################################################

fast_length=12
slow_length=26
src=close
col_macd=#0094ff
fast_ma = ema(src, fast_length)
slow_ma = ema(src, slow_length)
macd = fast_ma - slow_ma

//EMA Distance CALC########################################################################################################

ma1 =ema(close,emalength)
distFromMean = close - ma1

inDateRange = true

longCondition = (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0 and inDateRange)
longnow=false

if(longCondition and strategy.position_size == 0)
    strategy.entry("My Long Entry Id", strategy.long)
    longnow:=true

if(longCondition and strategy.position_size > 0)
    longnow:=true
    

if(longCondition and strategy.position_size > 0 and month>valuewhen(longnow, month ,1) or longCondition and strategy.position_size > 0 and year>valuewhen(longnow, year ,1) and inDateRange)
    strategy.entry("My Long Entry Id", strategy.long)

plotchar(minute, "Minuten", "", location = location.top)

plotchar(hour, "Stunden", "", location = location.top)    

plotchar(dayofmonth, "Tage", "", location = location.top)

plotchar(month, "Monat", "", location = location.top)

plotchar(year, "Jahr", "", location = location.top)

plotchar(strategy.position_size, "Positionen", "", location = location.top)

plotchar(longCondition, "Long Condition", "", location = location.top)

if true
    strategy.close_all()

//#########################################################################################################################

plotArrow = if (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0)
    1
else
    0
    
plotarrow(series=plotArrow)



Mais.