Sumber dimuat naik... memuat...

Pengukuran Posisi Adaptif Dinamik Multi-Indikator dengan Strategi Volatiliti ATR

Penulis:ChaoZhang, Tarikh: 2024-11-12 11:41:30
Tag:ATREMARSISMA

img

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan beberapa penunjuk teknikal dengan pengurusan risiko dinamik. Ia mengintegrasikan trend EMA berikut, turun naik ATR, keadaan overbought / oversold RSI, dan pengenalan corak candlestick, mencapai pulangan yang seimbang melalui ukuran kedudukan adaptif dan mekanisme stop-loss dinamik.

Prinsip Strategi

Strategi ini melaksanakan perdagangan melalui:

  1. Menggunakan persimpangan EMA 5 tempoh dan 10 tempoh untuk arah trend
  2. Indikator RSI untuk zon overbought/oversold
  3. Indikator ATR untuk stop-loss dinamik dan saiz kedudukan
  4. Corak lilin (menelan, tukul, bintang jatuh) sebagai isyarat masuk
  5. Pembalasan pelepasan dinamik berasaskan ATR
  6. Pengesahan jumlah untuk penapisan isyarat

Kelebihan Strategi

  1. Penanda silang isyarat berbilang meningkatkan kebolehpercayaan
  2. Pengurusan risiko dinamik menyesuaikan diri dengan turun naik pasaran
  3. Strategi mengambil keuntungan separa mengunci keuntungan
  4. Stop-loss berturut-turut melindungi keuntungan terkumpul
  5. Had kerugian harian mengawal pendedahan risiko
  6. Pembalasan slippage dinamik meningkatkan pelaksanaan pesanan

Risiko Strategi

  1. Pelbagai penunjuk boleh menyebabkan kelewatan isyarat
  2. Perdagangan yang kerap boleh menimbulkan kos yang tinggi
  3. Stop-loss boleh mencetuskan kerap di pasaran pelbagai
  4. Faktor subjektif dalam pengenalan corak candlestick
  5. Pengoptimuman parameter risiko terlalu sesuai

Arahan pengoptimuman

  1. Memperkenalkan pengesanan kitaran pasaran untuk pelarasan parameter dinamik
  2. Tambah penapis kekuatan trend untuk mengurangkan isyarat palsu
  3. Mengoptimumkan algoritma saiz kedudukan untuk kecekapan modal yang lebih baik
  4. Memasukkan penunjuk sentimen pasaran tambahan
  5. Membangunkan sistem pengoptimuman parameter adaptif

Ringkasan

Ini adalah sistem strategi yang canggih yang menggabungkan pelbagai penunjuk teknikal, meningkatkan kestabilan perdagangan melalui pengurusan risiko dinamik dan pengesahan isyarat berbilang.


/*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)


Berkaitan

Lebih lanjut