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.
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 dari strategi ini meliputi:
Aplikasi garis T3 meningkatkan akurasi penangkapan tren.
Indikator ATR secara dinamis menghitung volatilitas pasar, membuat tingkat stop loss dan take profit lebih wajar.
Mekanisme stop trailing ATR memungkinkan garis stop loss untuk mengikuti pergerakan harga secara real time untuk pengendalian risiko yang efektif.
Mengintegrasikan indikator dan mekanisme stop loss untuk mencapai perdagangan pelacakan tren otomatis.
Dapat terhubung ke platform perdagangan eksternal melalui webhook untuk eksekusi pesanan otomatis.
Ada juga beberapa risiko dengan strategi ini:
Pengaturan parameter T3 yang tidak benar dapat kehilangan peluang tren yang lebih baik.
Perhitungan nilai ATR yang tidak akurat dapat menyebabkan jarak stop loss terlalu besar atau terlalu kecil untuk mengontrol risiko secara efektif.
Dalam fluktuasi yang keras, garis stop loss dapat rusak sehingga mengakibatkan kerugian yang berlebihan.
Pembuatan stop loss yang sering dapat terjadi di pasar whipsaw.
Strategi dapat dioptimalkan dalam aspek berikut:
Optimalkan parameter T3 untuk menemukan siklus pelembab yang paling cocok.
Uji parameter siklus ATR yang berbeda untuk menghitung nilai ATR yang paling mencerminkan volatilitas pasar.
Mengoptimalkan rentang fleksibel dari jarak stop trailing ATR untuk mencegah stop yang terlalu sensitif.
Tambahkan filter yang tepat untuk menghindari perdagangan yang sering di pasar whipsaw.
Menggabungkan indikator penilaian tren untuk meningkatkan akurasi profitabilitas arah.
Gunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara otomatis.
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')