
Visão geral
A principal ideia da estratégia é usar a média móvel de dois períodos diferentes para capturar oportunidades de rebote após a reversão do mercado. Quando o preço está acima da média de longo prazo e há uma reversão para a média de curto prazo, a estratégia abre mais posições e, quando o preço se aproxima da média de curto prazo ou toca o preço de stop loss, a estratégia procura obter lucro na tendência, procurando oportunidades de compra de reversão na tendência.
Princípio da estratégia
- Calcule a média móvel de dois períodos diferentes (MA1 e MA2), onde MA1 é a média de longo prazo e MA2 é a média de curto prazo.
- Quando o preço de fechamento está acima de MA1 e abaixo de MA2, e não há uma posição atual, e o tempo atual está dentro do intervalo de tempo de negociação definido, a estratégia de abrir uma posição é mais.
- Registre o preço de compra de abertura e calcule o preço de parada (i.e., a porcentagem de queda do preço de abertura i_stopPercent).
- Quando o preço de fechamento retorna ao MA2 e o i_lowerClose é falso, ou o preço de fechamento cai abaixo do stopPrice, a estratégia de equilíbrio.
- Se i_lowerClose for true, então a posição será fechada quando o preço de fechamento estiver acima de MA2 e o preço de fechamento da linha K anterior estiver abaixo de MA2.
Vantagens estratégicas
- Seguimento de tendências: determina a tendência geral atual, procurando oportunidades de entrada na tendência, julgando a relação entre a posição dos preços e a média de longo prazo.
- Compras de reajuste: busca de oportunidades de compra de reajuste de preços para a linha média de curto prazo em uma tendência ascendente, aumentando a taxa de rentabilidade de comprar pontos.
- Proteção de stop loss: configuração de um preço de stop loss, que elimina automaticamente as posições quando o preço atinge uma certa amplitude de flutuação inversa, controlando efetivamente o risco de queda.
- Parâmetros flexíveis: o usuário pode definir com flexibilidade o período de média, a porcentagem de parada e se o preço de fechamento da linha K anterior está abaixo da média de curto prazo, de acordo com suas preferências.
Risco estratégico
- Optimização de parâmetros: diferentes configurações de parâmetros têm um grande impacto na performance da estratégia, e é necessário otimizar e testar os parâmetros em diferentes ambientes de mercado para encontrar a melhor combinação de parâmetros.
- Mercado de turbulência: Em mercados de turbulência, os preços flutuam frequentemente entre as médias de longo prazo, o que pode levar a uma estratégia de abertura de posições de baixa frequente, com maior perda de custos de negociação.
- Reversão de tendência: quando a tendência do mercado se reverte, a estratégia pode apresentar perdas contínuas. Neste momento, é necessário julgar a reversão de tendência em combinação com outros indicadores ou sinais e ajustar a estratégia a tempo.
- Evento de Cisne Negro: Quando ocorrem surpresas importantes e imprevisíveis no mercado, isso pode levar a uma forte oscilação de preços, provocando grandes perdas na estratégia de stop loss.
Direção de otimização da estratégia
- Julgamento de tendências: introduzir mais indicadores de julgamento de tendências, como o ADX, antes de abrir uma posição, para confirmar a força e a direção da tendência atual e melhorar a precisão do sinal de abertura de posição.
- Paragem dinâmica: ajuste dinâmico do ponto de parada de acordo com a taxa de flutuação dos preços, indicadores como o ATR, com a liberação apropriada da parada quando a flutuação dos preços é maior e com o aperto da parada quando a flutuação dos preços é menor.
- Gerenciamento de posição: De acordo com a intensidade da tendência do mercado, a taxa de flutuação dos preços e outros fatores, o tamanho da posição de cada posição aberta é ajustado dinamicamente, aumentando a posição quando a tendência é forte e a taxa de flutuação é moderada, reduzindo a posição quando a tendência é fraca ou a taxa de flutuação é muito alta.
- Cobertura de múltiplos espaços: considere monitorar simultaneamente os sinais de ambos os lados do espaço e cubra posições em diferentes mercados ou períodos para reduzir o risco geral da estratégia.
Resumir
A estratégia de rastreamento de retorno de média móvel capta várias oportunidades de retorno de preços em tendências ascendentes através da relação de posição de duas médias periódicas diferentes. A estratégia é adequada para mercados de tendência, e pode obter ganhos estáveis em situações de tendência, configurando parâmetros e paradas apropriados.
Código-fonte da estratégia
/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 00:00:00
period: 1d
basePeriod: 1h
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/
// © contapessoal_ivan
// @version=5
strategy("Pullback Strategy",
overlay=true,
initial_capital=1000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100, // 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("26 Jan 2023 00:00 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime = input(title="End Filter", defval=timestamp("26 Mar 2024 23:59 +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)