
A estratégia de parada de negociação de indicadores de movimentação de média móvel é um sistema de negociação quantitativa baseado na confirmação de padrões de queda e de tendências de movimentação de média. A estratégia é baseada na identificação de padrões de queda específicos (ou seja, sinais de “parada de queda”) como pontos de entrada, ao mesmo tempo em que a combinação com a EMA (medida móvel do índice) confirma a tendência geral do mercado e usa pontos de suporte e resistência dinâmicos para identificar rupturas no mercado.
O princípio central da estratégia é a identificação de determinadas formas de queda no mercado, que geralmente representam a possibilidade de uma reversão de mercado em curto prazo. O mecanismo de funcionamento da estratégia é o seguinte:
Julgamento de tendência: julgar a tendência do mercado comparando a posição relativa do EMA20 com o EMA90. Julgar como tendência ascendente quando o EMA20 está acima do EMA90. Julgar como tendência decrescente quando o EMA20 está abaixo do EMA90.
A identificação de sinais de parada de queda:
Detecção de ruptura: identificação de uma ruptura de mercado através da comparação do preço de fechamento atual com o nível de suporte/resistência (calculado com base no preço mínimo/máximo de 30 ciclos).
Condições de entrada: se houver um sinal de parada de queda quando o mercado está em uma determinada tendência e não está em um estado de ruptura, a estratégia entrará de acordo com o parâmetro de risco predefinido (risco de 2,5% por transação).
Stop loss: para uma posição multi-head, o stop loss é de 2,5% abaixo do preço de entrada; para uma posição em branco, o stop loss é de 2,5% acima do preço de entrada.
Condições de parada: Condições combinadas com base na porcentagem de lucro e na taxa de retorno do risco. Os múltiplos requerem um lucro de pelo menos 7% e uma taxa de retorno do risco de não menos de 3; os voos exigem um lucro de pelo menos 6% e uma taxa de retorno do risco de não menos de 3.
Sinais claros de entrada e saída: forneça sinais claros de negociação por meio de padrões de queda específicos e tendências de linha média móvel, reduzindo o impacto emocional causado por julgamentos subjetivos.
Mecanismo de confirmação de tendências integradas: utiliza indicadores EMA de vários períodos de tempo para confirmar tendências de mercado, aumentando a confiabilidade dos sinais de negociação.
Identificação de suporte e resistência dinâmicos: suporte e resistência dinâmicos calculados usando janelas rolantes, permitindo que a estratégia se adapte a diferentes fases do mercado.
Gerenciamento rigoroso do risco: parâmetros de risco pré-estabelecidos (risco de 2,5% por transação) e condições de suspensão baseadas na relação de risco-retorno para garantir a racionalidade da gestão de fundos.
Diferenciação de padrões de negociação multi-cabeça: estabelecer diferentes condições de entrada e objetivos de lucro para negociações multi-cabeça e cabeça, adaptando-se às características de assimetria do mercado.
Cálculo de posição dinâmica: o tamanho de posição apropriado é calculado automaticamente com base na distância de parada, garantindo a consistência do risco de cada transação.
Indicador de atraso: A EMA, como um indicador de atraso, pode fornecer sinais de atraso em mercados de rápida mudança, resultando em um mau tempo de entrada.
Risco de Falso Breakout: O mercado pode apresentar um fenômeno de Falso Breakout, resultando em sinais errados. A solução é introduzir a confirmação de volume de transação ou aumentar o ciclo de confirmação de breakout.
Desafio de ajuste de sensibilidade: os parâmetros do sinal de parada de queda (como a proporção de linhas de sombra em relação à entidade) precisam ser ajustados de acordo com diferentes mercados e períodos. Ser muito sensível pode levar a excesso de negociação, enquanto ser muito rigoroso pode perder oportunidades.
Risco de mudança de tendência: durante a mudança de tendência, a estratégia pode gerar uma série de negociações perdedoras. A solução é aumentar o filtro de intensidade de tendência ou reduzir a frequência de negociação quando a tendência é incerta.
Inadequação da distância de parada fixa: o uso da mesma porcentagem de parada para todas as transações (,5%) pode não ser adequado para diferentes taxas de volatilidade do mercado. Pode ser considerado o uso de distância de parada dinâmica baseada na volatilidade.
Limitações das condições de filtragem RSI: o uso de filtragem RSI apenas para negociações em branco pode causar uma frequência de negociação desequilibrada. Pode ser considerado a introdução de mecanismos de filtragem semelhantes para negociações em múltiplos ou otimizar os parâmetros atuais do RSI.
Parâmetros de auto-adaptação da taxa de flutuação: introdução de indicadores de taxa de flutuação (como ATR) para ajustar dinamicamente os requisitos de proporção de linha de sombra e a distância de parada do sinal de parada de queda, permitindo que a estratégia se adapte melhor a diferentes condições de mercado.
Confirmação de múltiplos prazos: confirmação de tendências de reintrodução de prazos mais elevados (como o gráfico de 1 hora), aumentando a confiabilidade dos sinais de negociação e reduzindo o impacto de falsos sinais.
Otimização do tempo de entrada: Otimização do tempo de entrada, aumentando a taxa de sucesso do negócio, adicionando condições de filtragem adicionais (como indicadores de força de tendência, confirmação de volume de transação).
Mecanismo de parada parcial: introdução de um mecanismo de parada parcial, movendo o stop loss para o preço de custo ou bloqueando parte do lucro depois de atingir um determinado lucro, para melhor equilibrar o risco e o retorno.
Extensão do ciclo de retorno: retorno mais abrangente em diferentes ciclos e condições de mercado para verificar a solidez e adaptabilidade da estratégia.
Otimização de aprendizagem de máquina: utiliza métodos de aprendizagem de máquina para otimizar automaticamente os parâmetros da estratégia e encontrar o melhor conjunto de parâmetros para um determinado mercado.
Controle de frequência de negociação: introdução de um limite de número de negociações ou um mecanismo de período de arrefecimento para evitar a negociação excessiva em condições de mercado desfavoráveis.
A estratégia de parada de negociação de Forex é um sistema de negociação quantitativa que combina análise técnica e gerenciamento de risco para gerar sinais de negociação por meio da identificação de padrões de queda específicos e da confirmação de tendências. A principal vantagem da estratégia reside em regras de negociação claras e mecanismos rigorosos de controle de risco, que tornam a decisão de negociação mais sistemática e disciplinada. No entanto, como qualquer estratégia de análise técnica, ela também enfrenta desafios como atraso de indicadores e adaptabilidade às mudanças no mercado.
A estratégia tem o potencial de obter um desempenho mais estável em diferentes ambientes de mercado, através da introdução de melhorias na direção de parâmetros de auto-adaptação da taxa de flutuação, confirmação de múltiplos prazos e otimização do tempo de entrada. Em particular, a aplicação de métodos de aprendizagem de máquina para otimização de parâmetros pode aumentar significativamente a adaptabilidade e o desempenho geral da estratégia.
/*backtest
start: 2024-02-26 00:00:00
end: 2025-02-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Advanced Candle Stop Strategy Backtest - Tuned v9 - Max Trades", overlay=true)
// --- EMA Variables ---
ema5_length = 5
ema20_length = 20
ema90_length = 90
ema5 = ta.ema(close, ema5_length)
ema20 = ta.ema(close, ema20_length)
ema90 = ta.ema(close, ema90_length)
// --- Support, Resistance, and Volume Calculation ---
lookback_support_resistance = 30
support_level = ta.lowest(low, lookback_support_resistance)
resistance_level = ta.highest(high, lookback_support_resistance)
// --- Volume Condition for Short (Removed) ---
avg_volume_lookback = 20
avg_volume = ta.sma(volume, avg_volume_lookback)
// --- RSI Condition for Short (Removed) ---
rsi_length = 14
rsi_overbought = 70
rsi = ta.rsi(close, rsi_length)
// --- Candle Stop Function ---
is_candle_stop(trend) =>
body = math.abs(close - open)
upper_shadow = high - math.max(open, close)
lower_shadow = math.min(open, close) - low
if trend == "up"
lower_shadow >= 0.8 * body and upper_shadow < body and close > open // Shadow ratio reduced to 0.8 for longs
else if trend == "down"
upper_shadow >= 0.8 * body and lower_shadow < body and close < open // Shadow ratio reduced to 0.8 for shorts - EMA5 and Volume conditions removed
else
false
// --- Trend Determination (only 15m, no 1H confirmation) ---
trend = ema20 > ema90 ? "up" : ema20 < ema90 ? "down" : "neutral"
final_trend = trend // حذف تأیید با تایمفریم 1H
// --- Breakout Detection ---
var bool breakout_detected = false
if final_trend == "up" and close > resistance_level
breakout_detected := true
alert("شکست صعودی تشخیص داده شد! منتظر پولبک 🚀", alert.freq_once_per_bar)
else if final_trend == "down" and close < support_level
breakout_detected := true
alert("شکست نزولی تشخیص داده شد! منتظر پولبک 📉", alert.freq_once_per_bar)
// --- Entry and Exit Conditions ---
var float position = 0.0
var float entry_price = 0.0
var float stop_loss_price = na
var bool take_profit_long = false // Declare take_profit_long
var bool stop_loss_hit_long = false // Declare stop_loss_hit_long
var bool take_profit_short = false // Declare take_profit_short
var bool stop_loss_hit_short = false // Declare stop_loss_hit_short
risk_per_trade_percent = 2.5 // افزایش ریسک به 2.5٪ برای موقعیتهای بیشتر
if not breakout_detected
if position == 0 and is_candle_stop(final_trend)
risk_amount_usd = strategy.initial_capital * (risk_per_trade_percent / 100)
if final_trend == "up"
stop_loss_price := close * 0.975 // Stop loss at 2.5% below entry for longs
if (close - stop_loss_price) != 0
position_size_usd = risk_amount_usd / (close - stop_loss_price)
amount = position_size_usd / close
strategy.entry("Long", strategy.long, qty=amount)
position := amount
entry_price := close
else if final_trend == "down"
stop_loss_price := close * 1.025 // Stop loss at 2.5% above entry for shorts
if (stop_loss_price - close) != 0
position_size_usd = risk_amount_usd / (stop_loss_price - close)
amount = position_size_usd / close
if rsi >= rsi_overbought // RSI condition for short entry - No Change, still using RSI but not enforcing it for now - Consider removing RSI condition as well for max trades
strategy.entry("Short", strategy.short, qty=amount)
position := amount
entry_price := close
if position > 0
profit_percent_long = (close - entry_price) / entry_price * 100
profit_percent_short = (entry_price - close) / entry_price * 100
loss_percent_long = (entry_price - close) / entry_price * 100
loss_percent_short = (close - entry_price) / entry_price * 100
risk_reward_long = loss_percent_long != 0 ? profit_percent_long / loss_percent_long : (profit_percent_long != 0 ? 99999 : 0)
risk_reward_short = loss_percent_short != 0 ? profit_percent_short / loss_percent_short : (profit_percent_short != 0 ? 99999 : 0)
take_profit_long := profit_percent_long >= 7 and risk_reward_long >= 3
stop_loss_hit_long := close <= stop_loss_price
take_profit_short := profit_percent_short >= 6 and risk_reward_short >= 3 // Reduced Take Profit for Shorts to 6% - No Change
stop_loss_hit_short := close >= stop_loss_price
if (final_trend == "up" and (take_profit_long or stop_loss_hit_long)) or (final_trend == "down" and (take_profit_short or stop_loss_hit_short))
if final_trend == "up"
strategy.close("Long")
else
strategy.close("Short")
position := 0
entry_price := 0.0
breakout_detected := false
// --- Plotting EMAs and Support/Resistance Levels ---
plot(ema5, color=color.blue, title="EMA5")
plot(ema20, color=color.red, title="EMA20")
plot(ema90, color=color.green, title="EMA90")
plot(resistance_level, color=color.orange, style=plot.style_line, title="Resistance")
plot(support_level, color=color.orange, style=plot.style_line, title="Support")