Beberapa indikator penyesuaian posisi adaptif dinamis strategi volatilitas ATR

ATR EMA RSI SMA
Tanggal Pembuatan: 2024-11-12 11:41:30 Akhirnya memodifikasi: 2024-11-12 11:41:30
menyalin: 0 Jumlah klik: 511
1
fokus pada
1617
Pengikut

Beberapa indikator penyesuaian posisi adaptif dinamis strategi volatilitas ATR

Ringkasan

Strategi ini adalah strategi perdagangan kuantitatif yang didasarkan pada beberapa indikator teknis dan manajemen risiko dinamis. Strategi ini menggabungkan beberapa dimensi seperti pelacakan tren EMA, volatilitas ATR, RSI overbought dan oversold, dan pengenalan pola K-line, untuk menyeimbangkan risiko keuntungan dengan penyesuaian otomatis dan stop loss dinamis.

Prinsip Strategi

Strategi ini dilakukan melalui beberapa cara:

  1. Garis rata-rata EMA 5 siklus dan 10 siklus digunakan untuk menentukan arah tren
  2. Perhatikan area overbought dan oversold dengan RSI untuk menghindari kebocoran.
  3. Menggunakan indikator ATR untuk secara dinamis menyesuaikan posisi stop loss dan ukuran posisi
  4. Kombinasi bentuk K-line ((penyerap, kalung, meteor) sebagai sinyal masuk tambahan
  5. Mengadopsi mekanisme kompensasi slippoint dinamis berbasis ATR
  6. Menyaring sinyal palsu melalui konfirmasi volume transaksi

Keunggulan Strategis

  1. Multi-Signal Cross-Verifikasi Untuk Meningkatkan Keandalan Transaksi
  2. Manajemen risiko dinamis, beradaptasi dengan perubahan pasar
  3. Strategi penghentian batch, penguncian sebagian keuntungan secara wajar
  4. Menggunakan Stop Loss Mobile untuk Melindungi Profit
  5. Tetapkan batas stop loss harian untuk mengontrol eksposur risiko
  6. Kompensasi Dinamis Slide Point, Tingkatkan Rasio Pengembalian Pesanan

Risiko Strategis

  1. Beberapa indikator dapat menyebabkan kelambatan sinyal
  2. Transaksi yang sering dapat menghasilkan biaya yang lebih tinggi
  3. Mungkin sering stop loss di pasar yang bergejolak
  4. Ada faktor subjektif dalam identifikasi bentuk garis K
  5. Optimasi parameter dapat menyebabkan overfitting

Arah optimasi strategi

  1. Memperkenalkan penilaian siklus fluktuasi pasar, parameter penyesuaian dinamis
  2. Meningkatkan intensitas filter tren untuk mengurangi sinyal palsu
  3. Mengoptimalkan algoritma manajemen posisi, meningkatkan efisiensi penggunaan dana
  4. Menambahkan lebih banyak indikator sentimen pasar
  5. Pengembangan sistem optimasi parameter adaptif

Meringkaskan

Ini adalah sistem strategi yang matang yang menggabungkan beberapa indikator teknis untuk meningkatkan stabilitas perdagangan melalui manajemen risiko dinamis dan verifikasi sinyal ganda. Keunggulan inti dari strategi adalah kemampuan beradaptasi dan sistem kontrol risiko yang baik, tetapi masih perlu diverifikasi dan terus dioptimalkan di tempat.

Kode 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)