
A estratégia de retorno de preço de alta frequência é um sistema de negociação quantitativa baseado em indicadores técnicos que oferece oportunidades de negociação para retorno de preços em um ambiente de mercado de alta frequência. A estratégia é uma otimização e reescrita completa da estratégia “Buy The Dips in Bull Market” da Coinrule, lançada em 2020, reconstruída usando o Pine Script v6. Através de uma análise profunda de mais de dois anos de dados horários do Bitcoin, a versão otimizada forneceu um ganho adicional de 312.6% em relação à estratégia original e alcançou uma taxa de vitória de 74.8%.
A estratégia utiliza um reajuste temporário de preços em um ambiente de mercado de alta, entrando quando o RSI mostra um excesso de venda e a estrutura do mercado permanece otimista, e saindo quando o preço retorna acima da média móvel crítica.
A estratégia usa um sistema de julgamento de múltiplos requisitos, que inclui principalmente a seguinte lógica central:
Lógica de entrada: A estratégia entra em uma posição multihead quando todas as seguintes condições são simultaneamente satisfeitas:
Lógica de saída: A estratégia de equilíbrio ocorre quando as seguintes duas condições são simultaneamente preenchidas:
Opções de negociação em branco: Quando ativada, a estratégia também pode usar a lógica inversa para negociações em branco:
Gestão de Riscos: A estratégia utiliza um parâmetro de stop/stop baseado no ATR, usando a volatilidade para determinar dinamicamente os níveis de risco. Por padrão, usa-se uma relação de risco-retorno de 2:1 e oferece opções totalmente personalizadas. Além disso, oferece opções de gerenciamento de risco baseadas em porcentagens fixas.
Alta taxa de sucesso: A estratégia alcançou uma alta taxa de sucesso de 74,8% com a configuração de parâmetros otimizada, um valor muito considerável em uma estratégia de negociação quantitativa. A alta taxa de sucesso torna a curva de capital mais suave e ajuda a reduzir o estresse psicológico.
Gestão de Riscos Dinâmicos: A estratégia usa um mecanismo de stop loss e stop loss baseado no ATR, que permite ajustar automaticamente os níveis de risco de acordo com a volatilidade do mercado. Esta abordagem é mais científica do que a porcentagem fixa e permite manter um controle de risco consistente em diferentes ambientes de volatilidade.
Combinação de parâmetros optimizada:
Capacidade de negociação bidirecional: A estratégia oferece opções de negociação em branco, permitindo que ela se adapte a diferentes cenários de mercado, e não se limite a uma única direção.
Visualização global: A estratégia oferece uma funcionalidade de gráfico aprimorada, incluindo a visualização de níveis de risco, para ajudar os comerciantes a entender intuitivamente a lógica de negociação e o gerenciamento de risco.
Dependência do mercado de ativos: A estratégia foi projetada para condições de mercado de alta e baixa, onde a performance pode cair significativamente. A estratégia pode gerar falsos sinais frequentes em mercados de tendência incerta ou horizontal.
Características de seguimento de tendências: Como uma estratégia de acompanhamento de tendências, pode experimentar uma grande retração durante uma forte reversão de tendência. Especialmente quando o mercado muda rapidamente de um mercado de touros para um mercado de ursos, a estratégia pode não ser ajustada a tempo.
Desafios de transações de alta frequência: As estratégias geram vários sinais e requerem monitorização ativa, o que pode aumentar os custos de transação e a complexidade operacional. As transações de alta frequência podem causar aumento de pontos de deslizamento e taxas, afetando os lucros reais.
Sensibilidade do parâmetro: O desempenho da estratégia é sensível à configuração de parâmetros, e diferentes mercados e prazos de tempo podem exigir diferentes otimizações de parâmetros. A escolha inadequada de parâmetros pode levar a um excesso de ajuste ou a uma diminuição da qualidade do sinal.
Limites da gestão de riscos: Embora o gerenciamento de risco do ATR seja um método superior, em condições de mercado extremas (como um flash crash ou um salto), o stop loss pode não ser executado no preço esperado, resultando em perdas reais superiores às esperadas.
Ajuste de parâmetros de adaptabilidade: Pode-se considerar a implementação de um sistema de parâmetros de adaptação que ajuste automaticamente o limiar RSI e o ciclo de média móvel de acordo com a volatilidade do mercado e a intensidade da tendência. Por exemplo, o uso de um limiar RSI mais baixo e um ciclo de média móvel mais longo em ambientes de alta volatilidade para reduzir os falsos sinais.
Classificação do estado do mercado: A adição de algoritmos mais complexos para identificar o estado do mercado, diferenciando claramente os mercados de alta, baixa e baixa, e usando diferentes lógicas de negociação para diferentes estados de mercado. Indicadores adicionais, como o ADX (indicador de direção média), podem ser introduzidos para medir a força da tendência.
Otimização de aprendizagem de máquina: O uso de algoritmos de aprendizado de máquina para identificar automaticamente a melhor combinação de parâmetros pode até mesmo construir modelos de previsão dinâmica para melhorar a qualidade do sinal. Isso pode ser feito através do treinamento de dados históricos e re-treinamento regular para se adaptar às mudanças do mercado.
Confirmação do Multi-Tempos: A adição de análise de múltiplos quadros temporais garante que os sinais de entrada sejam simultaneamente suportados por tendências de quadros temporais maiores. Isso pode ser feito examinando a sequência de médias móveis e leituras do RSI em vários períodos temporais, reduzindo assim os sinais falsos.
Filtro de taxa de flutuação: Aumentar o mecanismo de filtragem de taxa de flutuação, suspender a negociação ou ajustar os parâmetros de risco em um ambiente de extrema volatilidade. A porcentagem histórica de ATR pode ser usada como medida de flutuação e uma estratégia de negociação mais conservadora pode ser adotada quando a flutuação ultrapassa um determinado limiar.
Otimização da gestão de fundos: Implementar um sistema de gestão de fundos mais avançado, ajustando o tamanho da posição de acordo com o tamanho da conta, o desempenho da estratégia recente e a dinâmica da situação do mercado. Por exemplo, aumentar gradualmente a posição após uma série de ganhos e reduzir a posição após uma série de perdas.
A estratégia de alta frequência de retorno de preço de coprodução é um sistema de negociação quantitativa projetado especificamente para o ambiente de mercado de touros, para capturar oportunidades de retorno de preço através da identificação de condições de sobrevenda e em combinação com a confirmação de tendências de média móvel. Em comparação com a versão original, a estratégia alcançou um aumento significativo no desempenho através de parâmetros otimizados e recursos de gerenciamento de risco aprimorados, alcançando 312.6% de ganhos adicionais e 74.8% de vitória.
A principal vantagem da estratégia reside no seu sistema de gestão de risco dinâmico e no seu desempenho de alta taxa de vitória, o que a torna excelente em um cenário de mercado de alta. No entanto, a estratégia também é altamente dependente do cenário de mercado, podendo ocorrer riscos maiores durante a reversão da tendência, como retrações.
As orientações de otimização futuras centrar-se-ão principalmente no ajuste de parâmetros de adaptabilidade, classificação de estado de mercado, aplicação de aprendizado de máquina, análise de múltiplos prazos e sistemas de gestão de fundos mais avançados. Através dessas otimizações, a estratégia deverá manter um desempenho estável em diferentes ambientes de mercado, aumentando ainda mais sua robustez e lucratividade.
Qualquer que seja a medida de otimização, os comerciantes devem ter em conta os riscos do mercado, fazer uma verificação de feedback adequada e ajustar os parâmetros estratégicos e a distribuição de fundos de acordo com a tolerância ao risco e os objetivos de investimento individuais.
/*backtest
start: 2025-06-13 00:00:00
end: 2025-07-13 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
*/
// === DESCRIPTION ===
// Buy The Dips Bull Market Strategy - Optimized
// Modified strategy based on the original 2020 strategy from Coinrule
// Optimized parameters based on 2+ years of BTC hourly data analysis
// Performance improvement: 312.6% better returns with 74.8% win rate
// Enters long when RSI is oversold and we're in a bull market structure
// Exits when price recovers above fast MA and fast MA > slow MA
// Quant Trading Pro
//@version=6
strategy(title="High Freq Buy The Dips Bull Market [Quant Trading]",
shorttitle="High Freq Buy The Dips BUll Market",
overlay=true,
initial_capital=1000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=3,
margin_long=0,
margin_short=0)
// === INPUT PARAMETERS ===
// RSI Settings
lengthRSI = input.int(14, "RSI Period", minval=1, maxval=50, group="📊 RSI Settings")
rsiBuySignal = input.int(45, "RSI Buy Signal", minval=20, maxval=50, group="📊 RSI Settings")
// Moving Average Settings
maFastLength = input.int(15, "Fast MA Length", minval=1, maxval=50, group="📈 Moving Averages")
maSlowLength = input.int(40, "Slow MA Length", minval=10, maxval=100, group="📈 Moving Averages")
maLongLength = input.int(150, "Long MA Length", minval=50, maxval=300, group="📈 Moving Averages")
// Trade Settings
allowShortTrades = input.bool(false, "Allow Short Trades?", group="🚫 Short Trades")
// Risk Management - ATR Based
enableATRRisk = input.bool(true, "Enable ATR Risk Management", group="🛡️ Risk Management")
atrLength = input.int(14, "ATR Period", minval=1, maxval=50, group="🛡️ Risk Management")
atrMultiplier = input.float(2.0, "ATR Stop Loss Multiplier", minval=0.5, maxval=5.0, step=0.1, group="🛡️ Risk Management")
riskRewardRatio = input.float(2.0, "Risk Reward Ratio", minval=1.0, maxval=10.0, step=0.1, group="🛡️ Risk Management")
// Optional Percentage-based Risk Management
usePercentageRisk = input.bool(false, "Use Percentage Instead of ATR", group="🛡️ Risk Management")
stopLossPercent = input.float(5.0, "Stop Loss (%)", minval=1.0, maxval=20.0, step=0.5, group="🛡️ Risk Management")
takeProfitPercent = input.float(10.0, "Take Profit (%)", minval=2.0, maxval=50.0, step=0.5, group="🛡️ Risk Management")
// === 1️⃣ CALCULATIONS ===
// RSI Calculation
rsiValue = ta.rsi(close, lengthRSI)
// Moving Averages
maFast = ta.sma(close, maFastLength)
maSlow = ta.sma(close, maSlowLength)
maLong = ta.sma(close, maLongLength)
// ATR Calculation for Risk Management
atrValue = ta.atr(atrLength)
// === 2️⃣ ENTRY & EXIT LOGIC ===
// Long Entry Conditions
rsiOversold = rsiValue < rsiBuySignal
bullMarketStructure = maLong < maSlow // Long MA below slow MA indicates bullish structure
longCondition = rsiOversold and bullMarketStructure
// Long Exit Conditions
priceRecovery = close > maFast
maAlignment = maFast > maSlow
longExitCondition = priceRecovery and maAlignment
// Short Entry Conditions (reverse logic)
rsiOverbought = rsiValue > (100 - rsiBuySignal) // If RSI buy signal is 35, short when RSI > 65
bearMarketStructure = maLong > maSlow // Long MA above slow MA indicates bearish structure
shortCondition = rsiOverbought and bearMarketStructure and allowShortTrades
// Short Exit Conditions (reverse logic)
priceDecline = close < maFast
maAlignmentBear = maFast < maSlow
shortExitCondition = priceDecline and maAlignmentBear and allowShortTrades
// === 3️⃣ TRADE EXECUTIONS ===
// Long Trades
if longCondition
strategy.entry("Long", strategy.long)
// Long Exits
if longExitCondition
strategy.close("Long")
// Short Trades (if enabled)
if shortCondition
strategy.entry("Short", strategy.short)
// Short Exits
if shortExitCondition
strategy.close("Short")
// ATR-Based Risk Management (if enabled)
if enableATRRisk and not usePercentageRisk
// Calculate ATR-based stop loss and take profit levels
longStopLoss = close - (atrValue * atrMultiplier)
longTakeProfit = close + (atrValue * atrMultiplier * riskRewardRatio)
shortStopLoss = close + (atrValue * atrMultiplier)
shortTakeProfit = close - (atrValue * atrMultiplier * riskRewardRatio)
// Long position risk management
strategy.exit("Long Exit", from_entry="Long",
stop=longStopLoss,
limit=longTakeProfit)
// Short position risk management
if allowShortTrades
strategy.exit("Short Exit", from_entry="Short",
stop=shortStopLoss,
limit=shortTakeProfit)
// Percentage-Based Risk Management (Alternative)
else if enableATRRisk and usePercentageRisk
strategy.exit("Long Exit", from_entry="Long",
stop=strategy.position_avg_price * (1 - stopLossPercent / 100),
limit=strategy.position_avg_price * (1 + takeProfitPercent / 100))
if allowShortTrades
strategy.exit("Short Exit", from_entry="Short",
stop=strategy.position_avg_price * (1 + stopLossPercent / 100),
limit=strategy.position_avg_price * (1 - takeProfitPercent / 100))
// === 4️⃣ VISUALIZATIONS ===
// Moving Averages - ensure they're properly connected to price data
plot(maFast, "Fast MA", color=color.new(color.purple, 0), linewidth=2, display=display.all)
plot(maSlow, "Slow MA", color=color.new(color.orange, 0), linewidth=2, display=display.all)
plot(maLong, "Long MA", color=color.new(color.blue, 0), linewidth=3, display=display.all)
// Entry/Exit Signals - ensure they're anchored to bars
//plotshape(longCondition, title="Long Entry", location=location.belowbar,
// color=color.new(color.green, 0), style=shape.triangleup, size=size.small)
//plotshape(longExitCondition, title="Long Exit", location=location.abovebar,
// color=color.new(color.red, 0), style=shape.triangledown, size=size.small)
// Short signals (if enabled)
//plotshape(shortCondition, title="Short Entry", location=location.abovebar,
// color=color.new(color.red, 0), style=shape.triangledown, size=size.small)
//plotshape(shortExitCondition, title="Short Exit", location=location.belowbar,
// color=color.new(color.green, 0), style=shape.triangleup, size=size.small)
// Risk Management Visualization
var float longSL = na
var float longTP = na
var float shortSL = na
var float shortTP = na
// Set risk levels only when entering new positions
if longCondition and enableATRRisk
if not usePercentageRisk
longSL := close - (atrValue * atrMultiplier)
longTP := close + (atrValue * atrMultiplier * riskRewardRatio)
else
longSL := close * (1 - stopLossPercent / 100)
longTP := close * (1 + takeProfitPercent / 100)
if shortCondition and enableATRRisk
if not usePercentageRisk
shortSL := close + (atrValue * atrMultiplier)
shortTP := close - (atrValue * atrMultiplier * riskRewardRatio)
else
shortSL := close * (1 + stopLossPercent / 100)
shortTP := close * (1 - takeProfitPercent / 100)
// Clear levels when positions are closed
if strategy.position_size == 0
longSL := na
longTP := na
shortSL := na
shortTP := na
// Plot risk levels only when in position
plot(strategy.position_size > 0 ? longSL : na, "Long Stop Loss", color=color.new(color.red, 0), style=plot.style_linebr, linewidth=2)
plot(strategy.position_size > 0 ? longTP : na, "Long Take Profit", color=color.new(color.green, 0), style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? shortSL : na, "Short Stop Loss", color=color.new(color.red, 50), style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? shortTP : na, "Short Take Profit", color=color.new(color.green, 50), style=plot.style_linebr, linewidth=2)