ATR dinamik trailing stop loss dan strategi gabungan pindah silang purata bergerak

EMA ATR RSI SMA VOLUME
Tarikh penciptaan: 2025-02-18 15:48:18 Akhirnya diubah suai: 2025-02-18 15:48:18
Salin: 1 Bilangan klik: 504
1
fokus pada
1617
Pengikut

ATR dinamik trailing stop loss dan strategi gabungan pindah silang purata bergerak

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan komposit berdasarkan ATR yang mengesan hentian dan persimpangan garis lurus secara dinamik, digabungkan dengan pelbagai petunjuk teknikal untuk penapisan perdagangan dan kawalan risiko. Strategi ini berjalan pada kitaran masa 15 minit, menentukan isyarat perdagangan melalui EMA, rata-rata, ATR, RSI, dan kuantiti perdagangan, dan menguruskan risiko kerugian dengan cara mengesan hentian secara dinamik.

Prinsip Strategi

Logik teras strategi ini merangkumi beberapa komponen utama:

  1. Syarat kemasukan menggunakan pelbagai mekanisme penapisan:
    • Harga berada di atas/di bawah 100 EMA kitaran
    • Tempoh 1 jam 100 EMA trend disahkan
    • Persaingan harga dengan ATR yang mengesan garis henti
    • RSI dalam zon neutral antara 30-70
    • Jumlah transaksi semasa lebih besar daripada purata 20 kitaran
  2. Sistem kawalan risiko:
    • Hentikan Tracking Dinamik Berdasarkan ATR 3x
    • Menetapkan ATR dua kali ganda sebagai sasaran keuntungan
  3. Mekanisme keluar:
    • 15 dan 17 kitaran EMA tanda silang dua garisan K berturut
    • Trigger Tracking Stop Loss atau Target Keuntungan

Kelebihan Strategik

  1. Penyelidikan silang pelbagai petunjuk teknikal yang berkesan untuk mengurangkan isyarat palsu
  2. Menerapkan penapisan trend pelbagai kitaran untuk meningkatkan ketepatan arah perdagangan
  3. Hentian ATR dinamik boleh disesuaikan dengan turun naik pasaran
  4. Objektif keuntungan dilampirkan kepada halangan kerugian, memastikan keseimbangan dinamik antara risiko dan ganjaran
  5. Menggunakan EMA Cross sebagai isyarat berlepas untuk mengelakkan berlepas awal
  6. Pengesahan jumlah transaksi meningkatkan kesahihan transaksi

Risiko Strategik

  1. Keadaan penapisan berganda boleh menyebabkan kehilangan sebahagian peluang dagangan
  2. ATR Stop mungkin terlalu luas dalam pasaran yang bergolak
  3. Perlawanan berturut-turut EMA boleh menyebabkan sebahagian keuntungan berbalik
  4. Bergantung kepada trend pasaran, pasaran yang bergolak mungkin kurang baik
  5. Kompleksiti pengiraan yang tinggi, mungkin ada risiko kelewatan pelaksanaan

Arah pengoptimuman strategi

  1. Memperkenalkan mekanisme pengoptimuman parameter adaptasi:
    • ATR berganda boleh disesuaikan mengikut keadaan pasaran yang berbeza
    • Kitaran EMA boleh dioptimumkan secara automatik berdasarkan turun naik pasaran
  2. Menambah pengenalan status pasaran:
    • Tambah Indeks Kekuatan Trend
    • Pengenalan penghakiman kitaran kadar turun naik
  3. Meningkatkan kawalan risiko:
    • Mencapai pengurangan dan pembinaan gudang secara berturutan
    • Peningkatan had tempoh maksimum
  4. Mempertingkatkan mekanisme permainan:
    • Penyesuaian objektif keuntungan yang dinamik dengan intensiti trend
    • Tambah mekanisme penghentian masa

ringkaskan

Strategi ini membina sistem perdagangan yang agak lengkap dengan menggunakan pelbagai petunjuk teknikal dan alat kawalan risiko secara bersepadu. Ciri utama strategi ini adalah penggunaan ATR dinamik yang mengesan stop loss untuk menyesuaikan diri dengan turun naik pasaran, sambil menggunakan penapisan pelbagai petunjuk dan persilangan garis seragam untuk mengesahkan isyarat perdagangan. Walaupun terdapat ruang untuk pengoptimuman, konsep reka bentuk keseluruhan memenuhi keperluan perdagangan kuantitatif moden dan mempunyai nilai aplikasi praktikal yang baik.

Kod sumber strategi
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='UT Bot Strategy with 100 EMA Filter, Trailing Stop and EMA Cross Exit', overlay=true)

// Inputs
a = input(1, title='Key Value. \'This changes the sensitivity\'')
c = input(10, title='ATR Period')
h = input(false, title='Signals from Heikin Ashi Candles')

// Higher timeframe trend filter (1-hour)
higherTimeframeEMA = request.security(syminfo.tickerid, "60", ta.ema(close, 100)) // 1-hour EMA

xATR = ta.atr(c)

// Adjusting ATR multiplier for Gold on 15-minute timeframe
atrMultiplier = 3
nLoss = atrMultiplier * xATR  // ATR-based loss calculation

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

// Trailing Stop Calculation
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

// Define 100 EMA
ema100 = ta.ema(src, 100)
plot(ema100, title="100 EMA", color=color.black, linewidth=2)

// Define 15 EMA and 17 EMA for exit conditions
ema15 = ta.ema(src, 15)
ema17 = ta.ema(src, 17)
plot(ema15, title="15 EMA", color=color.blue, linewidth=1)
plot(ema17, title="17 EMA", color=color.purple, linewidth=1)

// Define Entry Conditions
longCondition = src > ema100 and src > xATRTrailingStop and close > higherTimeframeEMA and ta.crossover(ta.ema(src, 1), xATRTrailingStop)
shortCondition = src < ema100 and src < xATRTrailingStop and close < higherTimeframeEMA and ta.crossover(xATRTrailingStop, ta.ema(src, 1))

// RSI Filter
rsi = ta.rsi(close, 14)
longCondition := longCondition and rsi > 30 and rsi < 70  // Ensure RSI is not in extreme conditions
shortCondition := shortCondition and rsi > 30 and rsi < 70

// Volume Filter
volumeMA = ta.sma(volume, 20)
longCondition := longCondition and volume > volumeMA
shortCondition := shortCondition and volume > volumeMA

// ** Trailing Stop Setup **
trailOffset = nLoss  // The trailing stop distance is based on ATR, which is already calculated
trailPriceLong = close - trailOffset  // The trailing stop for long trades is below the entry price
trailPriceShort = close + trailOffset  // The trailing stop for short trades is above the entry price

// Define Take Profit (TP) condition
takeProfitMultiplier = 2  // This sets the take profit at 2x the ATR from the entry
takeProfitLong = close + takeProfitMultiplier * nLoss
takeProfitShort = close - takeProfitMultiplier * nLoss

// Strategy Entries
if (longCondition)
    strategy.entry('long', strategy.long)

if (shortCondition)
    strategy.entry('short', strategy.short)

// Exit conditions for 15 and 17 EMA cross (must be consecutive on two bars)
exitLong = ta.crossover(ema15, ema17) and ta.crossover(ema15[1], ema17[1])  // Exit long if both the current and previous bars have 15 EMA crossing above 17 EMA
exitShort = ta.crossunder(ema15, ema17) and ta.crossunder(ema15[1], ema17[1])  // Exit short if both the current and previous bars have 15 EMA crossing below 17 EMA

// Apply trailing stop and take profit along with EMA cross exit
strategy.exit("Exit Long", "long", trail_price=trailPriceLong, trail_offset=trailOffset, limit=takeProfitLong)  // Long exit with trailing stop and TP
strategy.exit("Exit Short", "short", trail_price=trailPriceShort, trail_offset=trailOffset, limit=takeProfitShort)  // Short exit with trailing stop and TP

// Close positions when 15 and 17 EMAs cross consecutively
strategy.close("long", when=exitLong)
strategy.close("short", when=exitShort)

// Alert condition for trade closure
longExitAlert = exitLong  // Only trigger alert for long if both consecutive bars show crossover
shortExitAlert = exitShort  // Only trigger alert for short if both consecutive bars show crossunder

alertcondition(longExitAlert, title="Close Long Trade", message="Long trade closed. 15 EMA crossed above 17 EMA on two consecutive bars.")
alertcondition(shortExitAlert, title="Close Short Trade", message="Short trade closed. 15 EMA crossed below 17 EMA on two consecutive bars.")