
A estratégia de entrada dinâmica de risco de reversão de tendência é projetada para os comerciantes de balanço que desejam estabelecer posições múltiplas em reversões após mudanças de tendência de curto prazo e, ao mesmo tempo, entrar em ações de balanço imediatamente quando as condições do mercado favorecem a descida. A estratégia combina a confirmação de tendências de cruzamento SMA, pontos de entrada de reversão de porcentagem fixa e parâmetros de gerenciamento de risco ajustáveis para a melhor execução de negociação.
O núcleo da estratégia é o uso de uma média móvel simples (SMA) cruzada de 10 e 25 períodos para confirmar a direção da tendência, e combinada com uma média móvel de 150 períodos (EMA) como uma condição de filtragem adicional para negociações a céu aberto. As negociações de múltiplos não são inseridas imediatamente após a SMA cruzada, mas sim aguardam a reversão do preço para a porcentagem especificada para entrar, o que otimiza o preço de entrada e aumenta o risco-retorno.
A estratégia funciona de acordo com algumas partes-chave:
Mecanismo de confirmação de tendências:
Mecanismo de reencaminhamento multi-cabeça:
Regras de entrada de cabeça vazia:
Gestão de Riscos e Estratégias de Saída:
A estratégia usa uma variável de permanência para rastrear os sinais de retorno, garantindo a entrada no momento certo. Quando a posição está vazia, o sistema reinicia todos os sinais e níveis, preparando-se para o próximo sinal de negociação.
Ao analisar o código em profundidade, a estratégia mostra as seguintes vantagens significativas:
Otimização do tempo de entrada:
Gerenciamento de riscos completo:
Filtragem de tendências alinhadas:
Comentários visuais:
Altamente adaptável:
Apesar das vantagens desta estratégia, existem os seguintes riscos a serem observados:
Risco de mercado rápido:
Performance do mercado em turbulência:
Limites da gestão de risco de pontos fixos:
Excessiva dependência de indicadores técnicos:
Riscos de otimização de parâmetros:
De acordo com a análise do código, as seguintes são algumas das principais direções em que a estratégia pode ser otimizada:
Gestão de Riscos Dinâmicos:
stopDistance = input.float(2.0) * ta.atr(14)Método de cálculoFiltragem de intensidade de tendência:
Análise de Multi-Framas de Tempo:
Reconhecimento de retorno inteligente:
Confirmação de transação:
Parâmetros de adaptação:
A estratégia de entrada dinâmica é um sistema de negociação bem projetado, que combina a identificação de tendências, a otimização da entrada e o gerenciamento completo do risco. A estratégia obtém melhores preços de entrada e retornos de risco do que o simples sistema de cruzamento SMA, ao esperar a correção de preços e entrar novamente.
A vantagem central da estratégia é a sua flexibilidade e adaptabilidade, permitindo que os comerciantes ajustem os parâmetros de acordo com as preferências de risco pessoais e as condições do mercado. Ao mesmo tempo, a função de gestão de risco integrada (incluindo stop loss, stop loss e ponto de garantia) oferece proteção completa do capital.
No entanto, a estratégia também apresenta algumas limitações, incluindo a performance em mercados turbulentos e a gestão de risco de pontos fixos. A robustez e o desempenho geral da estratégia podem ser significativamente melhorados pela implementação de otimização de recomendações, como gerenciamento de risco dinâmico, filtragem de intensidade de tendência e confirmação de volume de negociação.
Esta é uma estratégia básica ideal para os comerciantes de balanço, que pode ser ainda mais personalizada de acordo com o estilo de negociação e objetivos individuais. Com a configuração razoável de parâmetros e o ajuste de monitoramento contínuo, a estratégia tem o potencial de fornecer resultados de negociação estáveis em vários ambientes de mercado.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-03-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("BTCUSD with adjustable sl,tp",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
calc_on_every_tick=true)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────
longSignalStyle = input.string("Label Up", title="Long Signal Style", options=["Label Up", "Arrow Up", "Cross"])
shortSignalStyle = input.string("Label Down", title="Short Signal Style", options=["Label Down", "Arrow Down", "Cross"])
// Adjustable exit parameters (in points)
tpDistance = input.int(1000, "Take Profit Distance (points)", minval=1)
slDistance = input.int(250, "Stop Loss Distance (points)", minval=1)
beTrigger = input.int(500, "Break-Even Trigger Distance (points)", minval=1)
// Adjustable retracement percentage for long pullback entry (e.g. 0.01 = 1%)
retracementPct = input.float(0.01, "Retracement Percentage (e.g. 0.01 for 1%)", step=0.001)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ INDICATORS: SMA & EMA
// ─────────────────────────────────────────────────────────────────────────────
sma10 = ta.sma(close, 10)
sma25 = ta.sma(close, 25)
ema150 = ta.ema(close, 150)
plot(sma10, color=color.blue, title="SMA 10")
plot(sma25, color=color.red, title="SMA 25")
plot(ema150, color=color.orange, title="EMA 150")
// ─────────────────────────────────────────────────────────────────────────────
// ▌ ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────
longCondition = ta.crossover(sma10, sma25)
shortCondition = ta.crossunder(sma10, sma25)
shortValid = close < ema150 // Only take shorts if price is below EMA150
// Plot immediate entry signals (for visual reference)
plotshape(longCondition and (strategy.position_size == 0), title="Long Signal",
style=(longSignalStyle == "Label Up" ? shape.labelup : (longSignalStyle == "Arrow Up" ? shape.triangleup : shape.cross)),
location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition and shortValid and (strategy.position_size == 0), title="Short Signal",
style=(shortSignalStyle == "Label Down" ? shape.labeldown : (shortSignalStyle == "Arrow Down" ? shape.triangledown : shape.cross)),
location=location.abovebar, color=color.red, text="Short", size=size.small)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ LONG PULLBACK ENTRY USING FIXED PERCENTAGE RETRACEMENT
// ─────────────────────────────────────────────────────────────────────────────
// We use persistent variables to track the pullback signal.
var bool longSignalActive = false
var float pullHigh = na // highest high since long signal activation
var float retraceLevel = na // level = pullHigh * (1 - retracementPct)
// Only consider new entries when no position is open.
if strategy.position_size == 0
// When a long crossover occurs, activate the signal and initialize pullHigh.
if longCondition
longSignalActive := true
pullHigh := high
// If signal active, update pullHigh and compute retracement level.
if longSignalActive
pullHigh := math.max(pullHigh, high)
retraceLevel := pullHigh * (1 - retracementPct)
// When price bounces upward and crosses above the retracement level, enter long
if ta.crossover(close, retraceLevel)
strategy.entry("Long", strategy.long)
longSignalActive := false
// Short entries: enter immediately if conditions are met
if shortCondition and shortValid
strategy.entry("Short", strategy.short)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ EXIT CONDITIONS WITH ADJUSTABLE TP, SL & BE
// ─────────────────────────────────────────────────────────────────────────────
var bool beLong = false
var bool beShort = false
// LONG EXIT LOGIC
if strategy.position_size > 0 and strategy.position_avg_price > 0
longEntry = strategy.position_avg_price
// Additional exit: if SMA(10) crosses below SMA(25) while price < EMA150, exit long
if ta.crossunder(sma10, sma25) and close < ema150
label.new(bar_index, low, "SMA Exit", style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment="SMA Cross Exit")
// Break-even trigger if price moves in favor by beTrigger points
if close >= longEntry + beTrigger
beLong := true
effectiveLongStop = beLong ? longEntry : (longEntry - slDistance)
if close <= effectiveLongStop
label.new(bar_index, low, (beLong ? "BE Hit" : "SL Hit"), style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment=(beLong ? "BE Hit" : "SL Hit"))
if close >= longEntry + tpDistance
label.new(bar_index, high, "TP Hit", style=label.style_label_up, color=color.green, textcolor=color.white)
strategy.close("Long", comment="TP Hit")
// SHORT EXIT LOGIC
if strategy.position_size < 0 and strategy.position_avg_price > 0
shortEntry = strategy.position_avg_price
// Basic stop logic
if close >= shortEntry + slDistance
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Take profit logic
if close <= shortEntry - tpDistance
label.new(bar_index, low, "TP Hit", style=label.style_label_down, color=color.green, textcolor=color.white)
strategy.close("Short", comment="TP Hit")
// Break-even trigger
if close <= shortEntry - beTrigger
beShort := true
effectiveShortStop = beShort ? shortEntry : (shortEntry + slDistance)
if close >= effectiveShortStop
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Reset BE flags when no position is open
if strategy.position_size == 0
beLong := false
beShort := false
// Reset the pullback signal
if not longSignalActive
pullHigh := na
retraceLevel := na