Berbilang penunjuk strategi penyesuaian kedudukan penyesuaian ATR secara dinamik

ATR EMA RSI SMA
Tarikh penciptaan: 2024-11-12 11:41:30 Akhirnya diubah suai: 2024-11-12 11:41:30
Salin: 0 Bilangan klik: 511
1
fokus pada
1617
Pengikut

Berbilang penunjuk strategi penyesuaian kedudukan penyesuaian ATR secara dinamik

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan kuantitatif berdasarkan pelbagai petunjuk teknikal dan pengurusan risiko dinamik. Ia menggabungkan beberapa dimensi seperti trend EMA, ATR, RSI overbought and oversold dan pengenalan bentuk K-line, untuk menyeimbangkan risiko keuntungan dengan penyesuaian dan hentian dinamik. Strategi ini menggunakan hentian berturut-turut dan hentian bergerak untuk melindungi keuntungan.

Prinsip Strategi

Strategi ini melibatkan beberapa aspek utama:

  1. Menggunakan EMA purata 5 kitaran dan 10 kitaran untuk menentukan arah trend
  2. Kaedah untuk menilai kawasan overbought dan oversold dengan RSI
  3. Menggunakan indikator ATR untuk menyesuaikan kedudukan berhenti dan saiz kedudukan
  4. Gabungan bentuk K-garis ((menelan, kelinci, meteor) sebagai isyarat masuk tambahan
  5. Mekanisme pampasan slip dinamik berasaskan ATR
  6. Menapis isyarat palsu melalui pengesahan jumlah transaksi

Kelebihan Strategik

  1. Semakan silang pelbagai isyarat untuk meningkatkan kebolehpercayaan urus niaga
  2. Pengurusan risiko dinamik, menyesuaikan diri dengan turun naik pasaran
  3. Strategi penghentian batch, mengunci sebahagian keuntungan dengan wajar
  4. Menggunakan Stop Loss Bergerak untuk Melindungi Keuntungan
  5. Tetapkan had hentian harian untuk mengawal pendedahan risiko
  6. Kompensasi Dinamik Slippoint, Tingkatkan Kadar Penghantaran Pesanan

Risiko Strategik

  1. Penunjuk berbilang boleh menyebabkan ketinggalan isyarat
  2. Perdagangan yang kerap boleh menyebabkan kos yang lebih tinggi
  3. Kemungkinan sering terputus dalam pasaran yang bergolak
  4. Pengiktirafan K-Line wujud dengan faktor subjektif
  5. Pengoptimuman parameter boleh menyebabkan pemasangan berlebihan

Arah pengoptimuman strategi

  1. Pengenalan penilaian kitaran turun naik pasaran, parameter penyesuaian dinamik
  2. Meningkatkan penapis kekuatan trend untuk mengurangkan isyarat palsu
  3. Mengoptimumkan algoritma pengurusan kedudukan dan meningkatkan kecekapan penggunaan dana
  4. Menambah lebih banyak petunjuk sentimen pasaran
  5. Pembangunan sistem pengoptimuman parameter adaptif

ringkaskan

Ini adalah sistem strategi yang matang yang menggabungkan beberapa petunjuk teknikal untuk meningkatkan kestabilan perdagangan melalui pengurusan risiko dinamik dan pengesahan pelbagai isyarat. Kelebihan utama strategi adalah kemampuan menyesuaikan diri dan sistem kawalan risiko yang baik, tetapi masih memerlukan pengesahan yang lengkap dan pengoptimuman berterusan di lapangan.

Kod sumber strategi
/*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)