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.
A estratégia baseia-se principalmente nos seguintes princípios técnicos:
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.
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.
Limite-se a entrar apenas uma vez por mês para evitar perseguir altos.
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.
Trata-se de uma estratégia simples e direta, com as seguintes vantagens:
A utilização de linhas EMA para determinar a tendência principal é simples e prática.
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.
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.
Permitir a personalização do montante de entrada a cada mês proporciona flexibilidade no dimensionamento da posição.
O backtest pode ser usado para avaliar o desempenho da estratégia, definindo uma data de início e uma data de fim.
Fechará todas as posições automaticamente quando o backtest terminar, evitando posições restantes estranhas.
Há alguns riscos potenciais desta estratégia:
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.
Considere afrouxar a frequência ou adicionar outra entrada ao quebrar os máximos recentes.
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.
O montante mensal de entrada deve ser controlado para evitar posições excessivamente grandes.
Esta tendência periódica de investimento, que segue uma estratégia, pode ser ampliada e reforçada pelos seguintes aspectos:
Adicione a lógica de stop loss para cortar ativamente as perdas quando um padrão de reversão de baixa emerge.
Considere adicionar outra compra quando o histograma MACD mostrar divergência de alta para obter mais exposição à tendência de alta.
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.
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.
Avalie o impacto de diferentes combinações de MA e parâmetros MACD. Encontre o conjunto de parâmetros ideal.
Adicione um stop loss que segue o preço a uma certa distância depois de atingir novas altas, permitindo que os lucros funcionem.
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)