O recurso está a ser carregado... Carregamento...

O valor da posição de referência deve ser calculado de acordo com o método de classificação do mercado.

Autora:ChaoZhang, Data: 2024-11-12 11:41:30
Tags:ATREMARSISMA

img

Resumo

Esta estratégia é um sistema de negociação quantitativo que combina múltiplos indicadores técnicos com gestão de risco dinâmica. Integra a tendência de seguimento da EMA, a volatilidade ATR, as condições de sobrecompra/supervenda do RSI e o reconhecimento de padrões de velas, alcançando retornos equilibrados através de dimensionamento adaptativo das posições e mecanismos dinâmicos de stop-loss.

Princípios de estratégia

A estratégia implementa a negociação através de:

  1. Utilização de cruzamento da EMA de 5 e 10 períodos para determinar a direção da tendência
  2. Indicador RSI para zonas de sobrecompra/supervenda
  3. Indicador ATR para o dimensionamento dinâmico do stop-loss e da posição
  4. Padrões de candelabro (engolfing, martel, shooting star) como sinais de entrada
  5. Compensação de deslizamento dinâmico baseada em ATR
  6. Confirmação de volume para filtragem de sinal

Vantagens da estratégia

  1. A validação cruzada de sinais múltiplos melhora a fiabilidade
  2. Gestão dinâmica do risco adapta-se à volatilidade do mercado
  3. A estratégia de lucro parcial bloqueia os ganhos
  4. O trailing stop-loss protege os lucros acumulados
  5. Limites de perdas diárias para controlar a exposição ao risco
  6. A compensação de deslizamento dinâmico melhora a execução de ordens

Riscos estratégicos

  1. Indicadores múltiplos podem causar atraso no sinal
  2. O comércio frequente pode acarretar custos elevados
  3. A taxa de prejuízo pode ser frequente em mercados variados.
  4. Fatores subjetivos no reconhecimento de padrões de candelabro
  5. Riscos de sobreajuste da otimização de parâmetros

Orientações de otimização

  1. Introduzir a detecção do ciclo de mercado para o ajustamento de parâmetros dinâmicos
  2. Adicionar filtros de força de tendência para reduzir falsos sinais
  3. Otimizar os algoritmos de dimensionamento de posições para melhorar a eficiência do capital
  4. Incorporar indicadores adicionais do sentimento do mercado
  5. Desenvolver um sistema de otimização de parâmetros adaptativo

Resumo

Trata-se de um sistema de estratégia sofisticado que combina múltiplos indicadores técnicos, aumentando a estabilidade da negociação através de gestão dinâmica de riscos e validação de múltiplos sinais.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Optimized Scalping with High Risk-Reward", overlay=true)

// Input for EMA periods
shortEMA_length = input(5, title="Short EMA Length")
longEMA_length = input(10, title="Long EMA Length")

// ATR for dynamic stop-loss
atrPeriod = input(14, title="ATR Period")
atrMultiplier = input(1.5, title="ATR Multiplier for Stop Loss")

// Calculate EMAs
shortEMA = ta.ema(close, shortEMA_length)
longEMA = ta.ema(close, longEMA_length)

// ATR calculation for dynamic stop loss
atr = ta.atr(atrPeriod)

// RSI for overbought/oversold conditions
rsi = ta.rsi(close, 14)

// Plot EMAs
plot(shortEMA, color=color.blue, title="Short EMA")
plot(longEMA, color=color.red, title="Long EMA")

// Dynamic Slippage based on ATR
dynamic_slippage = math.max(5, atr * 0.5)

// Candlestick pattern recognition
bullish_engulfing = close[1] < open[1] and close > open and close > open[1] and close > close[1]
hammer = close > open and (high - close) / (high - low) > 0.6 and (open - low) / (high - low) < 0.2
bearish_engulfing = open[1] > close[1] and open > close and open > open[1] and close < close[1]
shooting_star = close < open and (high - open) / (high - low) > 0.6 and (close - low) / (high - low) < 0.2

// Enhanced conditions with volume and RSI check
buy_condition = (bullish_engulfing or hammer) and close > shortEMA and shortEMA > longEMA and volume > ta.sma(volume, 20) and rsi < 70
sell_condition = (bearish_engulfing or shooting_star) and close < shortEMA and shortEMA < longEMA and volume > ta.sma(volume, 20) and rsi > 30

// Dynamic ATR multiplier based on recent volatility
volatility = atr
adaptiveMultiplier = atrMultiplier + (volatility - ta.sma(volatility, 50)) / ta.sma(volatility, 50) * 0.5

// Execute buy trades with slippage consideration
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    stop_loss_buy = strategy.position_avg_price - atr * adaptiveMultiplier - dynamic_slippage
    take_profit_buy = strategy.position_avg_price + atr * adaptiveMultiplier * 3 + dynamic_slippage
    strategy.exit("Exit Buy", "Buy", stop=stop_loss_buy, limit=take_profit_buy)

// Execute sell trades with slippage consideration
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    stop_loss_sell = strategy.position_avg_price + atr * adaptiveMultiplier + dynamic_slippage
    take_profit_sell = strategy.position_avg_price - atr * adaptiveMultiplier * 3 - dynamic_slippage
    strategy.exit("Exit Sell", "Sell", stop=stop_loss_sell, limit=take_profit_sell)

// Risk Management
maxLossPerTrade = input.float(0.01, title="Max Loss Per Trade (%)", minval=0.01, maxval=1, step=0.01)  // 1% max loss per trade
dailyLossLimit = input.float(0.03, title="Daily Loss Limit (%)", minval=0.01, maxval=1, step=0.01) // 3% daily loss limit

maxLossAmount_buy = strategy.position_avg_price * maxLossPerTrade
maxLossAmount_sell = strategy.position_avg_price * maxLossPerTrade

if (strategy.position_size > 0)
    strategy.exit("Max Loss Buy", "Buy", stop=strategy.position_avg_price - maxLossAmount_buy - dynamic_slippage)

if (strategy.position_size < 0)
    strategy.exit("Max Loss Sell", "Sell", stop=strategy.position_avg_price + maxLossAmount_sell + dynamic_slippage)

// Daily loss limit logic
var float dailyLoss = 0.0
if (dayofweek != dayofweek[1])
    dailyLoss := 0.0  // Reset daily loss tracker at the start of a new day

if (strategy.closedtrades > 0)
    dailyLoss := dailyLoss + strategy.closedtrades.profit(strategy.closedtrades - 1)

if (dailyLoss < -strategy.initial_capital * dailyLossLimit)
    strategy.close_all("Daily Loss Limit Hit")

// Breakeven stop after a certain profit with a delay
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Buy", from_entry="Buy", stop=strategy.position_avg_price)

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Sell", from_entry="Sell", stop=strategy.position_avg_price)

// Partial Profit Taking
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5)
    strategy.close("Partial Close Buy", qty_percent=50)  // Use strategy.close for partial closure at market price

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5)
    strategy.close("Partial Close Sell", qty_percent=50) // Use strategy.close for partial closure at market price

// Trailing Stop with ATR type
if (strategy.position_size > 0)
    strategy.exit("Trailing Stop Buy", from_entry="Buy", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)

if (strategy.position_size < 0)
    strategy.exit("Trailing Stop Sell", from_entry="Sell", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)


Relacionados

Mais.