Sumber dimuat naik... memuat...

Strategi adaptif mengambil keuntungan dinamik dan menghentikan kerugian berdasarkan ATR dan EMA

Penulis:ChaoZhang, Tarikh: 2024-05-28 14:15:56
Tag:ATREMA

img

Ringkasan

Strategi ini menggunakan dua penunjuk, ATR (Average True Range) dan EMA (Exponential Moving Average), untuk menyesuaikan secara dinamik mengambil keuntungan dan menghentikan kerugian tahap untuk menyesuaikan diri dengan turun naik pasaran. Idea utama strategi ini adalah untuk menggunakan penunjuk ATR untuk mengukur turun naik pasaran dan menetapkan mengambil keuntungan dan menghentikan kerugian tahap berdasarkan besarnya turun naik. Pada masa yang sama, penunjuk EMA digunakan untuk menentukan arah perdagangan. Apabila harga memecahkan di atas EMA, kedudukan panjang dibuka, dan apabila harga memecahkan di bawah EMA, kedudukan pendek dibuka. Strategi ini boleh menyesuaikan secara automatik mengambil keuntungan dan menghentikan kerugian tahap mengikut perubahan dalam turun naik pasaran, dengan itu mencapai tujuan kawalan risiko dinamik.

Prinsip Strategi

  1. Mengira penunjuk ATR untuk mengukur besarnya turun naik pasaran.
  2. Mengira tahap stop loss dinamik berdasarkan nilai ATR dan parameter kelipatan input.
  3. Gunakan penunjuk EMA sebagai keadaan penapis. Buka kedudukan panjang apabila harga memecahkan di atas EMA, dan buka kedudukan pendek apabila harga memecahkan di bawah EMA.
  4. Semasa memegang kedudukan, terus menyesuaikan tahap mengambil keuntungan dan stop loss berdasarkan perubahan harga dan perubahan tahap stop loss dinamik.
  5. Apabila harga mencapai tahap stop loss dinamik, tutup kedudukan dan buka kedudukan terbalik.

Kelebihan Strategi

  1. Kemudahan penyesuaian yang kuat: Dengan menyesuaikan secara dinamik tahap mengambil keuntungan dan menghentikan kerugian, strategi dapat menyesuaikan diri dengan perubahan turun naik di bawah keadaan pasaran yang berbeza dan mengawal risiko.
  2. Keupayaan yang kuat untuk mengikuti trend: Penunjuk EMA digunakan untuk menentukan arah perdagangan, yang dapat menangkap trend pasaran dengan berkesan.
  3. Parameter yang boleh diselaraskan: Dengan menyesuaikan tempoh ATR dan pelbagai parameter, risiko dan pulangan strategi dapat dikawal secara fleksibel.

Risiko Strategi

  1. Tetapan risiko parameter: Tetapan tempoh ATR dan pelbagai parameter akan memberi kesan langsung kepada prestasi strategi. Tetapan parameter yang tidak betul boleh menyebabkan kegagalan strategi.
  2. Risiko pasaran berayun: Dalam pasaran berayun, pembukaan dan penutupan kedudukan yang kerap boleh membawa kepada kehilangan pelepasan dan bayaran transaksi yang besar.
  3. Risiko pembalikan trend: Apabila trend pasaran berbalik, strategi mungkin mengalami kerugian berturut-turut.

Arahan Pengoptimuman Strategi

  1. Memperkenalkan lebih banyak penunjuk teknikal, seperti MACD dan RSI, untuk meningkatkan ketepatan penilaian trend.
  2. Mengoptimumkan kaedah pengiraan tahap mengambil keuntungan dan stop loss, seperti memperkenalkan kaedah stop loss trailing dan stop loss rasio dinamik.
  3. Mengoptimumkan parameter untuk mencari kombinasi terbaik tempoh ATR dan pelbagai parameter untuk meningkatkan kestabilan dan keuntungan strategi.
  4. Tambah modul pengurusan kedudukan untuk menyesuaikan saiz kedudukan secara dinamik berdasarkan turun naik pasaran dan tahap risiko akaun.

Ringkasan

Strategi ini menggunakan penunjuk ATR dan EMA untuk menyesuaikan secara dinamik tahap mengambil keuntungan dan menghentikan kerugian untuk menyesuaikan diri dengan perubahan dalam turun naik pasaran, sambil menggunakan penunjuk EMA untuk menentukan arah perdagangan. Strategi ini mempunyai daya adaptasi yang kuat dan keupayaan mengikuti trend, tetapi mungkin menghadapi risiko tertentu dalam tetapan parameter, pasaran berayun, dan pembalikan trend.


/*backtest
start: 2024-04-27 00:00:00
end: 2024-05-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy(title='UT MB&SS Bot', 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')
stoploss = input(2.0, title='Stop Loss (ATR Multiples)')

xATR = ta.atr(c)
nLoss = a * xATR

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

var xATR_trailing_stop = 0.0
iff_1 = src > nz(xATR_trailing_stop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATR_trailing_stop[1], 0) and src[1] < nz(xATR_trailing_stop[1], 0) ? math.min(nz(xATR_trailing_stop[1]), src + nLoss) : iff_1
xATR_trailing_stop := src > nz(xATR_trailing_stop[1], 0) and src[1] > nz(xATR_trailing_stop[1], 0) ? math.max(nz(xATR_trailing_stop[1]), src - nLoss) : iff_2

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

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

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATR_trailing_stop)
below = ta.crossover(xATR_trailing_stop, ema)

buy = src > xATR_trailing_stop and above
sell = src < xATR_trailing_stop and below

barbuy = src > xATR_trailing_stop
barsell = src < xATR_trailing_stop

plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

stop_level = pos == 1 ? xATR_trailing_stop - stoploss * xATR : xATR_trailing_stop + stoploss * xATR
stop_level := math.max(stop_level, nz(stop_level[1]))

if pos == 1
    strategy.exit('Exit Long', 'UT Long', stop=stop_level)
else if pos == -1
    strategy.exit('Exit Short', 'UT Short', stop=stop_level)





if buy
    strategy.entry("Enter Long", strategy.long)
else if sell
    strategy.entry("Enter Short", strategy.short)

Berkaitan

Lebih lanjut