
A estratégia utiliza o índice de média móvel cruzada inteligente para identificar sinais de cruzamento de indicadores móveis (EMA) para identificar potenciais tendências ascendentes, em combinação com a média de custo do dólar (DCA) para fazer uma posição inteligente e proteger os lucros através de um mecanismo de parada de perda de duplo rastreamento. O núcleo da estratégia é usar o cruzamento de EMAs rápidas e lentas para determinar o momento de entrada, automaticamente implementar até duas ordens de segurança quando os preços caem (Safety Orders), aumentar as posições de posição através de uma média real de variação (ATR) ou percentual fixo, e usar um sistema de parada de perda de duplo nível (Stop Loss Tracking Standards) para proteger os fundos.
A estratégia baseia-se em vários componentes-chave:
Mecanismo de identificação de tendências: Use o cruzamento do EMA rápido (default 9 cycle) e EMA lento (default 21 cycle) para identificar uma potencial tendência ascendente. Quando o EMA rápido atravessa o EMA lento para cima, o sistema gera um sinal de compra.
Pedidos básicos e de segurançaA estratégia usa um método de gerenciamento de fundos estratificado, começando com um pedido básico (default \( 1000) e adicionando dois pedidos de segurança adicionais quando o preço cai (default \) 1250 SO1 e $ 1750 SO2).
Cálculo de intervalos dinâmicosO preço de disparo de uma ordem de segurança pode ser calculado de duas maneiras:
Sistema de detecção dupla:
Condições de saídaA estratégia é a seguinte:
Filtros de tempo de arrefecimento e data: A estratégia inclui um período de resfriamento após o pedido básico (de 4 horas por defeito) e um filtro de data opcional para limitar o retorno ou executar um período de tempo específico.
Ao analisarmos em profundidade o código da estratégia, podemos resumir as principais vantagens:
Gestão de fundos adaptáveisA estratégia usa a média de custo em dólares, combinada com ordens de segurança dinâmicas, para ajustar automaticamente as posições de acordo com as condições do mercado. Esta abordagem é especialmente eficaz em mercados voláteis, podendo reduzir o preço médio de entrada e aumentar os lucros potenciais.
Ajuste de posição com base na volatilidadeA estratégia é capaz de ajustar automaticamente o intervalo de acréscimo de posição de acordo com a atual volatilidade do mercado, com o ATR calculado para a posição de ordem segura, o que é mais flexível do que o método de porcentagem fixa.
Duas camadas de proteção de lucrosO sistema de duplo rastreamento de stop-loss oferece uma gestão de risco inovadora, o padrão de rastreamento de stop-loss protege a maior parte dos fundos, enquanto o mecanismo de bloqueio de lucro é ativado após a realização de um determinado objetivo de lucro, protegendo os lucros obtidos com uma porcentagem mais apertada.
Totalmente personalizávelTodos os parâmetros-chave (duração do EMA, tamanho da ordem, percentual de stop loss de rastreamento, intervalo de ordem segura) podem ser ajustados de acordo com as preferências de risco do comerciante e as condições do mercado.
Sistema de alerta prévio integradoA estratégia inclui condições de alerta formatadas que podem ser integradas com plataformas de automação de terceiros (como 3Commas) para transações totalmente automatizadas.
Informações de contratação transparentes: Contém uma tabela de comutação detalhada, que mostra os principais indicadores e status de negociação, facilitando o monitoramento em tempo real e a otimização de estratégias.
Apesar das vantagens da estratégia, existem os seguintes riscos potenciais:
O que fazer?: Adapte a porcentagem de stop loss de rastreamento e o intervalo de ordens de segurança de acordo com a variedade de transação e o período de tempo específico; Considere adicionar o stop loss global como uma camada de proteção adicional.
O que fazer?: realização de exaustivos testes de retorno e otimização para variedades de transações e condições de mercado específicas; implementação de mecanismos de ajuste de parâmetros de adaptação.
*O que fazer?*Considere a implementação de mecanismos mais flexíveis de acionamento de ordens de segurança, como a execução obrigatória com base no tempo ou o ajuste de intervalos em determinadas condições de mercado.
*O que fazer?*Aumentar os filtros de negociação, como a confirmação de queda de volatilidade ou de força de tendência; prolongar o período de arrefecimento para reduzir a frequência de negociação.
*O que fazer?*Considere a integração de filtros fundamentais ou indicadores de sentimento de risco; adicione uma verificação de relevância entre mercados como sinal de confirmação.
Com base em uma análise aprofundada do código da estratégia, aqui estão algumas possíveis direções de otimização:
Ajustes de parâmetros de adaptação: Implementar mecanismos para ajustar automaticamente o comprimento do EMA e o múltiplo do ATR com base na volatilidade do mercado ou no volume de transações. Por exemplo, usar um EMA mais longo e um múltiplo do ATR maior em ambientes de alta volatilidade e um EMA mais curto e um múltiplo do ATR menor em ambientes de baixa volatilidade. Isso aumentará a adaptabilidade da estratégia em diferentes condições de mercado.
Sinais de confirmação múltipla: Adicione indicadores de confirmação adicionais, como o índice de força relativa (RSI), o volume de transação ou a faixa de Brin, para reduzir o falso sinal. Pode ser implementado um filtro, exigindo que vários indicadores técnicos confirmem simultaneamente o sinal de entrada, aumentando a qualidade do sinal.
Distribuição dinâmica de fundosPor exemplo, aumentar o tamanho do pedido básico em fases de mercado com pouca volatilidade ou mais propensas a subir historicamente, e reduzir em ambientes de alto risco.
Estratégias de saída inteligentes: Implementação de mecanismos de lucro parcial, permitindo a saída gradual em diferentes níveis de lucro, em vez de uma posição de equilíbrio única. Isso pode ser feito através da definição de vários objetivos de lucro e correspondentes percentagens de saída, otimizando a relação de risco-retorno.
Integração dos indicadores emocionais: Adicionar análise de sentimentos de mercado, como o índice de medo e ganância ou análise de volume de transação, como filtros adicionais de entrada e saída. Isso ajudará a estratégia a evitar transações desnecessárias em períodos de extrema emoção de mercado.
Gestão da exposição ao risco: Implementar a função de calcular dinamicamente a exposição máxima de risco (o total de todos os possíveis pedidos de segurança) e definir limites de risco máximos aceitáveis. Isso garantirá que a estratégia não exagere em exposição de fundos em uma única transação a qualquer momento.
O sistema de rastreamento de perdas de lançamento de cadeia fixa inteligente de média móvel indexada é uma estratégia de negociação quantitativa bem projetada, que combina detecção de tendências, estratificação de risco e gerenciamento de perdas avançadas. Sua vantagem central reside na capacidade de se adaptar à volatilidade do mercado, gestão inteligente de fundos e sistema de proteção de lucros em dois níveis. A estratégia é especialmente adequada para ambientes de mercado de volatilidade moderada, em que as tendências possuem bastante continuidade e direção.
A estratégia pode melhorar ainda mais o seu desempenho e robustez com a optimização de parâmetros apropriados e o reforço de recomendações. Em particular, o ajuste de parâmetros adaptativos e os sinais de confirmação múltipla podem melhorar significativamente a qualidade de entrada, enquanto a distribuição dinâmica de fundos e a estratégia de saída inteligente podem otimizar as características de retorno de risco.
Em última análise, a estratégia representa uma abordagem de negociação quantitativa equilibrada, com foco na preservação e consistência de fundos, em vez de buscar o máximo de lucro em cada transação. Ela fornece aos comerciantes uma estrutura robusta que pode ser personalizada de acordo com as preferências de risco individuais e as condições do mercado, potencialmente alcançando resultados de negociação sustentáveis a longo prazo.
/*backtest
start: 2025-04-15 00:00:00
end: 2025-07-13 19:30:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
*/
//@version=5
strategy(
title="DCA + Dual Trailing Strategy",
overlay=true
)
// --- Trend ---
fastMALen = input.int(9, title="Fast EMA Length")
slowMALen = input.int(21, title="Slow EMA Length")
// --- Trailing Stops ---
trailStopPerc = input.float(8.0, title="Standard Trailing Stop (%)", minval=0.1) / 100
lockInThreshold = input.float(2.5, title="Profit Lock-In Trigger (%)", minval=0.1) / 100
lockInTrailPct = input.float(1.5, title="Lock-In Trail (%) after Trigger", minval=0.1) / 100
// --- Safety Orders (SO) ---
useATRSpacing = input.bool(true, title="Use ATR-Based Spacing?")
atrLength = input.int(14, title="ATR Length", minval=1)
atrSo1Multiplier = input.float(1.2, title="ATR SO1 Multiplier", minval=0.1)
atrSo2Multiplier = input.float(2.5, title="ATR SO2 Multiplier", minval=0.1)
// --- Fallback SO Spacing (if not using ATR) ---
fallbackSo1Perc = input.float(4.0, title="Fallback SO1 Drop (%) ", minval=0.1) / 100
fallbackSo2Perc = input.float(8.0, title="Fallback SO2 Drop (%) ", minval=0.1) / 100
// --- Entry Cooldown ---
cooldownBars = input.int(4, "Cooldown Bars After Base Entry", minval=0)
// --- Order Sizes in USD ---
baseUsd = input.float(10000.0, title="Base Order Size (USD)", minval=1.0)
so1Usd = input.float(12500.0, title="Safety Order 1 Size (USD)", minval=1.0)
so2Usd = input.float(17500.0, title="Safety Order 2 Size (USD)", minval=1.0)
// 2) CALCULATIONS
// --- Trend & Reversal Detection ---
fastMA = ta.ema(close, fastMALen)
slowMA = ta.ema(close, slowMALen)
trendUp = ta.crossover(fastMA, slowMA)
trendDown = ta.crossunder(fastMA, slowMA)
// --- ATR Value ---
atrValue = ta.atr(atrLength)
// 3) BASE ENTRY LOGIC
// Base Buy Signal: EMA crossover
baseBuySignal = trendUp
var int lastBuyBar = na // Tracks the bar index of the last base entry
inCooldown = not na(lastBuyBar) and (bar_index - lastBuyBar < cooldownBars)
var float baseEntryPrice = na // Stores the price of the initial base entry for SO calculations
// --- Execute Base Entry ---
if baseBuySignal and strategy.position_size == 0 and not inCooldown
baseQty = baseUsd / close // Calculate quantity based on USD
strategy.order("Base Order", strategy.long, qty=baseQty, comment="Base Entry")
baseEntryPrice := close
lastBuyBar := bar_index
// 4) SAFETY ORDERS LOGIC
// --- Calculate SO Trigger Prices ---
float so1TriggerPrice = na
float so2TriggerPrice = na
if strategy.position_size > 0 // Only calculate if a base order has been placed
so1TriggerPrice := useATRSpacing ?
(baseEntryPrice - atrValue * atrSo1Multiplier) :
(baseEntryPrice * (1 - fallbackSo1Perc))
so2TriggerPrice := useATRSpacing ?
(baseEntryPrice - atrValue * atrSo2Multiplier) :
(baseEntryPrice * (1 - fallbackSo2Perc))
// --- Conditions for SO Execution ---
// Added 'inDateRange' check
// Ensure base order exists, price trigger hit, and the specific SO hasn't filled yet
bool so1Condition = strategy.position_size > 0 and close <= so1TriggerPrice and strategy.opentrades == 1
bool so2Condition = strategy.position_size > 0 and close <= so2TriggerPrice and strategy.opentrades == 2
// --- Execute SO1 ---
if so1Condition
so1Qty = so1Usd / close // Calculate quantity based on USD
strategy.order("Safety Order 1", strategy.long, qty=so1Qty, comment="SO1")
// --- Execute SO2 ---
if so2Condition
so2Qty = so2Usd / close // Calculate quantity based on USD
strategy.order("Safety Order 2", strategy.long, qty=so2Qty, comment="SO2")
// 5) AVERAGE ENTRY PRICE
// Use the built-in variable for the average price of the open position
avgEntryPrice = strategy.position_avg_price
// 6) DUAL TRAILING STOP LOGIC
// Variables to track trailing stop levels and states
var float highestSinceEntry = na
var float trailStopPrice = na
var bool stopHitNormal = false
var bool lockInTriggered = false
var float lockInPeak = na
var float lockInStopPrice = na
var bool stopHitLockIn = false
// --- Update Trailing Logic when in a Position ---
if strategy.position_size > 0
// --- Standard Trail ---
highestSinceEntry := na(highestSinceEntry) ? close : math.max(highestSinceEntry, close)
trailStopPrice := highestSinceEntry * (1 - trailStopPerc)
stopHitNormal := close < trailStopPrice
// --- Lock-In Trail ---
if not lockInTriggered and close >= avgEntryPrice * (1 + lockInThreshold)
lockInTriggered := true
lockInPeak := close
if lockInTriggered
lockInPeak := math.max(lockInPeak, close)
lockInStopPrice := lockInPeak * (1 - lockInTrailPct)
stopHitLockIn := close < lockInStopPrice
else
stopHitLockIn := false
lockInStopPrice := na
// --- Reset Variables when Flat ---
else
highestSinceEntry := na
trailStopPrice := na
stopHitNormal := false
lockInTriggered := false
lockInPeak := na
lockInStopPrice := na
stopHitLockIn := false
// lastBuyBar is intentionally NOT reset here, cooldown depends on it
// 7) EXIT CONDITIONS
// Added 'inDateRange' check
// Exit if either trailing stop is hit OR if the trend reverses downward
exitCondition = (stopHitNormal or stopHitLockIn or trendDown) and strategy.position_size > 0
if exitCondition
strategy.close_all(comment="Exit: SL / LockIn / TrendDown")
// 9) PLOTS & DEBUG TABLE
// --- Plot MAs ---
plot(fastMA, color=color.new(color.green, 0), title="Fast EMA", linewidth=2)
plot(slowMA, color=color.new(color.red, 0), title="Slow EMA", linewidth=2)
// --- Plot Trailing Stops ---
plot(strategy.position_size > 0 ? trailStopPrice : na, color=color.new(color.orange, 0), title="Standard Trailing Stop", style=plot.style_linebr, linewidth=2)
plot(lockInTriggered ? lockInStopPrice : na, color=color.new(color.fuchsia, 0), title="Lock-In Trailing Stop", style=plot.style_linebr, linewidth=2)