
Ini adalah strategi pelacakan tren adaptif yang menggabungkan beberapa indikator teknis. Strategi ini menggabungkan sistem peringatan UT Bot, filter RSI yang relatif kuat, stop loss pelacakan ATR yang tidak dipetakan ulang, dan saluran Donchian. Strategi ini menggunakan kerangka waktu 15 menit, menggunakan grafik Heikin Ashi untuk meningkatkan akurasi sinyal, dan menetapkan target keluar berdasarkan persentase.
Inti dari strategi ini adalah untuk mengidentifikasi dan melacak tren pasar melalui sinkronisasi multi-indikator, sambil menyediakan mekanisme manajemen risiko yang fleksibel. Ini menggabungkan informasi pasar dalam beberapa dimensi seperti momentum (RSI), volatilitas (ATR), dan tren (Dongjian Channel) untuk membuat keputusan perdagangan yang lebih komprehensif dan solid.
ATR Tracking Stop Loss: Menggunakan rata-rata real amplitude ((ATR) untuk menghitung tingkat stop loss dinamis, memberikan kontrol risiko adaptif.
RSI Filter: Menggunakan indikator relatif kuat ((RSI) untuk mengkonfirmasi arah tren, meningkatkan keandalan sinyal masuk.
Saluran Tongjian: Sebagai alat tambahan untuk mengkonfirmasi tren, membantu mengidentifikasi arah pasar secara keseluruhan.
Syarat masuk:
Mekanisme Keluar: menetapkan target keuntungan dan tingkat stop loss berdasarkan persentase.
Opsional Wickin-Achilles diagram: digunakan untuk meluruskan data harga, mengurangi sinyal palsu.
Analisis multi-dimensi: menggabungkan indikator tren, momentum, dan volatilitas untuk memberikan wawasan pasar yang komprehensif.
Adaptif: ATR Tracking Stop Loss dapat disesuaikan secara otomatis sesuai dengan fluktuasi pasar dan menyesuaikan diri dengan lingkungan pasar yang berbeda.
Manajemen risiko yang baik: jelas tujuan stop-loss dan profit, pengendalian risiko yang efektif.
Peningkatan kualitas sinyal: dengan pengesahan ganda RSI dan saluran Dongqian, mengurangi sinyal palsu.
Fleksibilitas: Anda dapat memilih untuk menggunakan grafik Wickin-Ashwin untuk menyesuaikan gaya perdagangan yang berbeda.
ATR tidak memetakan ulang: ATR melacak stop loss yang dihitung untuk memastikan keandalan dan konsistensi sinyal.
Pertunjukan pasar yang bergoyang: sinyal palsu yang sering terjadi di pasar yang bergoyang atau bergoyang.
Keterlambatan: Mekanisme konfirmasi ganda dapat menyebabkan sedikit penundaan waktu masuk.
Risiko over-optimisasi: Banyak parameter yang dapat menyebabkan over-fit dengan data historis.
Ketergantungan pada kondisi pasar: mungkin kurang responsif dalam pasar yang berubah dengan cepat.
Eksekusi Slip: Keluar berdasarkan persentase dapat menjadi tantangan dalam eksekusi di pasar yang sangat fluktuatif.
Pengaturan parameter dinamis: mengoptimalkan parameter kunci secara otomatis (seperti RSI threshold, ATR multiplier).
Identifikasi rezim pasar: meningkatkan penilaian terhadap berbagai kondisi pasar (trend, getaran), strategi penyesuaian dinamis.
Synergy time frame: menggabungkan sinyal dari beberapa time frame untuk meningkatkan stabilitas pengambilan keputusan.
Filter Volatilitas: Menghentikan perdagangan dalam lingkungan dengan volatilitas yang sangat rendah untuk menghindari sinyal yang tidak efektif.
Meningkatkan mekanisme keluar: memperkenalkan trailing stop atau aturan keluar berdasarkan waktu, mengoptimalkan manajemen keuntungan.
Menambahkan analisis volume transaksi: menggabungkan indikator volume transaksi untuk lebih mengkonfirmasi kekuatan tren.
Integrasi pembelajaran mesin: Mengoptimalkan pilihan parameter dan generasi sinyal menggunakan algoritma pembelajaran mesin.
Strategi pelacakan tren adaptif multi-indikator yang terintegrasi ini menunjukkan keuntungan dari sistematisasi dan analisis multi-dimensi dalam perdagangan kuantitatif. Dengan mengintegrasikan beberapa indikator seperti ATR, RSI, UT Bot, dan saluran Tangqian, strategi ini dapat menangkap dinamika pasar dari berbagai sudut pandang, memberikan sinyal perdagangan yang relatif komprehensif dan stabil.
Namun, kompleksitas strategi juga membawa risiko potensial seperti over-fitting dan sensitivitas parameter. Arah optimasi di masa depan harus berfokus pada peningkatan kemampuan adaptasi dan robustnya strategi, seperti memperkenalkan fitur-fitur canggih seperti penyesuaian parameter dinamis dan identifikasi status pasar.
Secara keseluruhan, strategi ini memberikan kerangka kerja yang komprehensif dan berwawasan untuk pelacakan tren, yang memiliki potensi untuk menjadi alat perdagangan yang efektif dengan optimasi berkelanjutan dan penerapan yang bijaksana.
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("UT Bot Alerts - Non-Repainting with RSI Filter and Donchian Channels", overlay=true)
// Inputs for UT Bot
a = input.int(1, title="Key Value. 'This changes the sensitivity'")
c = input.int(10, title="ATR Period")
h = input.bool(false, title="Signals from Heikin Ashi Candles")
percentage = input.float(0.002, title="Percentage for Exit (0.2% as decimal)")
// RSI Inputs
rsiPeriod = input.int(14, title="RSI Period")
rsiSource = input.source(close, title="RSI Source")
// ATR Calculation
xATR = ta.atr(c)
nLoss = a * xATR
// Heikin Ashi Calculation
haClose = request.security(syminfo.tickerid, timeframe.period, close, lookahead=barmerge.lookahead_on)
haOpen = request.security(syminfo.tickerid, timeframe.period, open, lookahead=barmerge.lookahead_on)
haHigh = request.security(syminfo.tickerid, timeframe.period, high, lookahead=barmerge.lookahead_on)
haLow = request.security(syminfo.tickerid, timeframe.period, low, lookahead=barmerge.lookahead_on)
haCloseSeries = (haOpen + haHigh + haLow + haClose) / 4
src = h ? haCloseSeries : close
// RSI Calculation
rsiValue = ta.rsi(rsiSource, rsiPeriod)
// Non-repainting ATR Trailing Stop Calculation
var float xATRTrailingStop = na
if (barstate.isconfirmed)
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
// Position Calculation
var int pos = 0
if (barstate.isconfirmed)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)
// Track entry prices
var float entryPrice = na
// Donchian Channels
length = input.int(20, minval = 1, title="Donchian Channels Length")
offset = input.int(0, title="Donchian Channels Offset")
lower = ta.lowest(length)
upper = ta.highest(length)
basis = math.avg(upper, lower)
plot(basis, "Basis", color = #FF6D00, offset = offset)
u = plot(upper, "Upper", color = #2962FF, offset = offset)
l = plot(lower, "Lower", color = #2962FF, offset = offset)
fill(u, l, color = color.rgb(33, 150, 243, 95), title = "Background")
// Buy and sell conditions with RSI filter and basis condition
buy = src > xATRTrailingStop and above and barstate.isconfirmed and rsiValue > 50 and src > basis
sell = src < xATRTrailingStop and below and barstate.isconfirmed and rsiValue < 50 and src < basis
// Calculate target prices for exit
var float buyTarget = na
var float sellTarget = na
if (buy)
entryPrice := src
buyTarget := entryPrice * (1 + percentage)
sellTarget := entryPrice * (1 - percentage)
strategy.entry("Buy", strategy.long)
if (sell)
entryPrice := src
buyTarget := entryPrice * (1 + percentage)
sellTarget := entryPrice * (1 - percentage)
strategy.entry("Sell", strategy.short)
// Exit conditions
var bool buyExit = false
var bool sellExit = false
var bool stopLossExit = false
if (strategy.position_size > 0 and barstate.isconfirmed)
if (src >= buyTarget)
strategy.exit("Take Profit", "Buy", limit=buyTarget)
buyExit := true
if (src <= sellTarget)
strategy.exit("Stoploss exit", "Buy", stop=src)
stopLossExit := true
if (strategy.position_size < 0 and barstate.isconfirmed)
if (src <= sellTarget)
strategy.exit("Take Profit", "Sell", limit=sellTarget)
sellExit := true
if (src >= buyTarget)
strategy.exit("Stoploss exit", "Sell", stop=src)
stopLossExit := true
// Plotting
plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.red, textcolor=color.white, size=size.tiny)
barcolor(src > xATRTrailingStop ? color.green : na)
barcolor(src < xATRTrailingStop ? color.red : na)
alertcondition(buy, "UT Long", "UT Long")
alertcondition(sell, "UT Short", "UT Short")
alertcondition(buyExit, "UT Long Exit", "UT Long Exit")
alertcondition(sellExit, "UT Short Exit", "UT Short Exit")
alertcondition(stopLossExit, "Stoploss exit", "Stoploss exit")