Adaptive Moving Stop Line Trading Strategi

Penulis:ChaoZhang, Tanggal: 2024-02-21 16:07:20
Tag:

img

Gambaran umum

Ide inti dari strategi ini adalah untuk menggunakan rata-rata bergerak T3 dan ATR adaptif trailing stop untuk menangkap titik masuk dan keluar di sepanjang tren. Ini termasuk dalam strategi trend berikut. Sinyal perdagangan dihasilkan ketika harga melanggar garis T3, dan stop loss dan take profit level ditetapkan menggunakan nilai ATR pada titik breakout untuk mencapai stop loss otomatis dan take profit.

Prinsip Strategi

Strategi ini terdiri dari indikator T3, indikator ATR dan mekanisme ATR trailing stop.

Rata-rata bergerak T3 adalah rata-rata bergerak halus yang dapat mengurangi lag kurva dan membuatnya lebih cepat merespons perubahan harga. Sinyal beli dihasilkan ketika harga menerobos rata-rata bergerak dari bawah. Sinyal jual dihasilkan ketika harga menerobos dari atas.

Indikator ATR digunakan untuk menghitung tingkat volatilitas pasar dan menetapkan tingkat stop loss. Semakin besar nilai ATR, semakin besar volatilitas pasar, dan stop loss yang lebih luas harus ditetapkan. Semakin kecil nilai ATR, semakin kecil volatilitas pasar, dan stop loss yang lebih sempit dapat ditetapkan.

Mekanisme stop trailing ATR menyesuaikan posisi garis stop loss berdasarkan nilai ATR secara real time, sehingga garis stop loss dapat mengikuti pergerakan harga dan tetap dalam kisaran yang wajar. Hal ini mencegah stop loss terlalu dekat dan tersingkir dengan mudah, dan juga mencegah stop loss terlalu luas untuk secara efektif mengendalikan risiko.

Dengan memanfaatkan T3 untuk menentukan arah, ATR untuk menghitung volatilitas dan mekanisme ATR trailing stop, strategi ini mencapai penangkapan tren dan pengendalian risiko yang relatif efisien.

Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Aplikasi garis T3 meningkatkan akurasi penangkapan tren.

  2. Indikator ATR secara dinamis menghitung volatilitas pasar, membuat tingkat stop loss dan take profit lebih wajar.

  3. Mekanisme stop trailing ATR memungkinkan garis stop loss untuk mengikuti pergerakan harga secara real time untuk pengendalian risiko yang efektif.

  4. Mengintegrasikan indikator dan mekanisme stop loss untuk mencapai perdagangan pelacakan tren otomatis.

  5. Dapat terhubung ke platform perdagangan eksternal melalui webhook untuk eksekusi pesanan otomatis.

Risiko dan Solusi

Ada juga beberapa risiko dengan strategi ini:

  1. Pengaturan parameter T3 yang tidak benar dapat kehilangan peluang tren yang lebih baik.

  2. Perhitungan nilai ATR yang tidak akurat dapat menyebabkan jarak stop loss terlalu besar atau terlalu kecil untuk mengontrol risiko secara efektif.

  3. Dalam fluktuasi yang keras, garis stop loss dapat rusak sehingga mengakibatkan kerugian yang berlebihan.

  4. Pembuatan stop loss yang sering dapat terjadi di pasar whipsaw.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Optimalkan parameter T3 untuk menemukan siklus pelembab yang paling cocok.

  2. Uji parameter siklus ATR yang berbeda untuk menghitung nilai ATR yang paling mencerminkan volatilitas pasar.

  3. Mengoptimalkan rentang fleksibel dari jarak stop trailing ATR untuk mencegah stop yang terlalu sensitif.

  4. Tambahkan filter yang tepat untuk menghindari perdagangan yang sering di pasar whipsaw.

  5. Menggabungkan indikator penilaian tren untuk meningkatkan akurasi profitabilitas arah.

  6. Gunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara otomatis.

Kesimpulan

Strategi ini mengintegrasikan penggunaan garis T3 untuk menentukan arah tren, indikator ATR untuk menghitung stop/target dan mekanisme ATR trailing stop untuk menyesuaikan jarak stop. Ini mencapai pelacakan tren otomatis dan pengendalian risiko yang efisien. Ini adalah strategi trend yang dapat diandalkan. Dalam aplikasi praktis, pengujian dan optimalisasi terus-menerus masih diperlukan untuk menemukan kombinasi parameter yang paling cocok untuk kondisi pasar saat ini, sehingga memperoleh hasil strategi yang lebih baik.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy', overlay=true)
T3 = input(100)//600
// Input for Long Settings
// Input for Long Settings


xPrice3 = close
xe1 = ta.ema(xPrice3, T3)
xe2 = ta.ema(xe1, T3)
xe3 = ta.ema(xe2, T3)
xe4 = ta.ema(xe3, T3)
xe5 = ta.ema(xe4, T3)
xe6 = ta.ema(xe5, T3)

b3 = 0.7
c1 = -b3*b3*b3
c2 = 3*b3*b3+3*b3*b3*b3
c3 = -6*b3*b3-3*b3-3*b3*b3*b3
c4 = 1+3*b3+b3*b3*b3+3*b3*b3
nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3

//plot(nT3Average, color=color.white, title="T3")

// Buy Signal - Price is below T3 Average
buySignal3 = xPrice3 < nT3Average
sellSignal3 = xPrice3 > nT3Average
// Inputs
a = input(1, title='Key Value. "This changes the sensitivity"')
c = input(50, title='ATR Period')
h = input(true, title='Signals from Heikin Ashi Candles')
riskRewardRatio = input(1, title='Risk Reward Ratio')

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

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

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

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

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

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop

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.new(color.green, 90) : na)
barcolor(barsell ? color.new(color.red, 90) : na)

var float entryPrice = na
var float takeProfitLong = na
var float stopLossLong = na
var float takeProfitShort = na
var float stopLossShort = na

if buy and buySignal3
    entryPrice := src
    takeProfitLong := entryPrice + nLoss * riskRewardRatio
    stopLossLong := entryPrice - nLoss
    takeProfitShort := na
    stopLossShort := na

if sell and sellSignal3
    entryPrice := src
    takeProfitShort := entryPrice - nLoss * riskRewardRatio
    stopLossShort := entryPrice + nLoss
    takeProfitLong := na
    stopLossLong := na

// Strategy order conditions
acct = "Sim101"
ticker = "ES 12-23"
qty = 1

OCOMarketLong = '{ "alert": "OCO Market Long", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitLong) + '", "stop_price": "' + str.tostring(stopLossLong) + '", "tif": "DAY" }'
OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }'
CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }'

strategy.entry("Long", strategy.long, when=buy and buySignal3, alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell and sellSignal3, alert_message=OCOMarketShort)

// Setting the take profit and stop loss for long trades
strategy.exit("Take Profit/Stop Loss", "Long", stop=stopLossLong, limit=takeProfitLong,alert_message=CloseAll)

// Setting the take profit and stop loss for short trades
strategy.exit("Take Profit/Stop Loss", "Short", stop=stopLossShort, limit=takeProfitShort,alert_message=CloseAll)

// Plot trade setup boxes
bgcolor(buy ? color.new(color.green, 90) : na, transp=0, offset=-1)
bgcolor(sell ? color.new(color.red, 90) : na, transp=0, offset=-1)

longCondition = buy and not na(entryPrice)
shortCondition = sell and not na(entryPrice)

// var line longTakeProfitLine = na
// var line longStopLossLine = na
// var line shortTakeProfitLine = na
// var line shortStopLossLine = na

// if longCondition
//     longTakeProfitLine := line.new(bar_index, takeProfitLong, bar_index + 1, takeProfitLong, color=color.green, width=2)
//     longStopLossLine := line.new(bar_index, stopLossLong, bar_index + 1, stopLossLong, color=color.red, width=2)
//     // label.new(bar_index + 1, takeProfitLong, str.tostring(takeProfitLong, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
//     // label.new(bar_index + 1, stopLossLong, str.tostring(stopLossLong, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)

// if shortCondition
//     shortTakeProfitLine := line.new(bar_index, takeProfitShort, bar_index + 1, takeProfitShort, color=color.green, width=2)
//     shortStopLossLine := line.new(bar_index, stopLossShort, bar_index + 1, stopLossShort, color=color.red, width=2)
//     // label.new(bar_index + 1, takeProfitShort, str.tostring(takeProfitShort, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
//     // label.new(bar_index + 1, stopLossShort, str.tostring(stopLossShort, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)

alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')


Lebih banyak