A ideia principal desta estratégia é negociar pullbacks de curto prazo ao longo da direção da tendência de longo prazo. Especificamente, a média móvel simples de 200 dias é usada para determinar a direção da tendência de longo prazo, e a média móvel simples de 10 dias é usada para determinar a direção da tendência de curto prazo. Quando o preço está acima da linha de 200 dias, é um mercado de touros. Quando o preço está abaixo da linha de 200 dias, é um mercado de ursos. Em um mercado de touros, vá longo quando o preço cai para a linha de 10 dias. Em um mercado de ursos, vá curto quando o preço sobe para a linha de 10 dias.
Esta estratégia usa a média móvel simples de 200 dias e a média móvel simples de 10 dias para determinar a tendência do mercado. Quando o preço cruza acima da linha de 200 dias, considera-se que está entrando em um mercado de touros. Quando o preço cruza abaixo da linha de 200 dias, considera-se que está entrando em um mercado de ursos. Em um mercado de touros, se o preço cair em torno da linha de 10 dias, significa encontrar uma correção de curto prazo. Neste momento, vá longo, visando a continuação da tendência de alta de longo prazo. Em um mercado de ursos, se o preço subir em torno da linha de 10 dias, significa encontrar um rebote de curto prazo. Neste momento, vá curto, visando a continuação da tendência de baixa de longo prazo.
Especificamente, quando as seguintes condições forem atendidas, vá longo para entrar no mercado: o preço está acima da linha de 200 dias, o preço está abaixo da linha de 10 dias e não houve posição anterior. Quando as seguintes condições forem atendidas, feche a posição para sair do mercado: o preço está acima da linha de 10 dias e houve uma posição longa anterior. Para evitar grandes perdas, um stop loss FAILSAFE é definido. Se o retração do ponto mais alto exceder 10%, imediatamente pare a perda para sair.
Pode-se ver que a lógica de negociação desta estratégia é baseada principalmente na cruz de ouro e cruz de morte das médias móveis.
A maior vantagem desta estratégia é o acompanhamento de tendências de baixo custo para obter retornos excessivos.
A utilização de uma combinação de médias móveis de longo prazo e de curto prazo para determinar a direção das tendências primárias e secundárias pode efetivamente bloquear oportunidades de tendência de médio e longo prazo e evitar ser enganado por movimentos de curto prazo do mercado.
Ao entrar com base em retrações de curto prazo, o custo de entrada pode ser minimizado para obter um potencial de lucro relativamente elevado.
O mecanismo de stop loss FAILSAFE pode controlar eficazmente perdas individuais para proteger os fundos da conta.
A autorização de saídas de rastreamento de tendências pode aproveitar plenamente as oportunidades de tendência de médio e longo prazo para os excessos de rendimentos alfa.
A adoção de um método de negociação totalmente automatizado evita o impacto emocional subjetivo e facilita a implementação da estratégia.
Os principais riscos desta estratégia são:
Risco de sobreajuste do backtest: as condições reais do mercado podem diferir dos dados históricos, resultando em um desempenho comercial reduzido.
A probabilidade de reversão dos preços perto das médias móveis é relativamente grande, o que pode facilmente conduzir a pequenas perdas acumuladas.
Risco de reversão de tendência: são comuns reversões súbitas das tendências a médio e longo prazo, que podem facilmente conduzir a perdas relativamente elevadas quando se detém posições.
As contra-medidas são:
Aumentar o tamanho da amostra e utilizar mais dados históricos para os ensaios de robustez para garantir resultados fiáveis.
Otimizar os parâmetros ajustando a combinação de parâmetros do sistema de média móvel para garantir a qualidade do sinal.
Ampliar as linhas de stop loss adequadamente para permitir algumas retrações de preços para evitar stop losses excessivamente sensíveis.
Esta estratégia pode ser melhorada nos seguintes aspectos:
Adicionar condições de filtragem, tais como filtragem de volume, para reduzir eficazmente as negociações desnecessárias causadas por falsas rupturas.
Incorporar outros indicadores, como o KDJ e o MACD, para formar sinais combinados para melhorar a qualidade dos sinais comerciais.
Testar diferentes períodos de detenção e otimizar estratégias de tomada de lucro e stop loss para melhorar ainda mais o rácio Sharpe, etc.
Ajustar dinamicamente os parâmetros com base nas condições do mercado para formar um mecanismo de otimização de parâmetros adaptativo para tornar a estratégia mais robusta.
Adicionar módulos de negociação algorítmicos usando aprendizado de máquina, etc. para gerar automaticamente sinais de negociação para reduzir a intervenção humana.
A lógica geral desta estratégia é clara e fácil de implementar para rastreamento de baixo custo de tendências de médio e longo prazo para alcançar um alfa estável. Mas também há riscos de ser pego no lado errado da tendência, o que requer mais otimização para melhorar a robustez.
/*backtest start: 2024-01-21 00:00:00 end: 2024-02-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © irfanp056 // @version=5 strategy("Simple Pullback Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=1000, // 100% of balance invested on each trade commission_type=strategy.commission.cash_per_contract, commission_value=0.005) // Interactive Brokers rate // Get user input i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA") i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.sma(close, i_ma1) ma2 = ta.sma(close, i_ma2) // Check filter(s) f_dateFilter = true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.orange)