
Idea teras strategi ini adalah menggunakan garis T3 rata-rata dan ATR menyesuaikan diri dengan berhenti bergerak untuk menangkap titik masuk dan keluar dalam trend, termasuk dalam strategi jenis trend. Apabila harga menembusi garis T3 rata-rata, menghasilkan isyarat perdagangan, dan menggunakan nilai ATR untuk menetapkan titik berhenti dan berhenti di titik pecah, untuk mencapai berhenti berhenti automatik.
Strategi ini terdiri daripada T3 Average Line Indicator, ATR Indicator dan ATR Mobile Stop Loss Mechanism.
Garis purata T3 adalah purata bergerak yang mempunyai kehalusan, yang dapat mengurangkan keterlambatan kurva, sehingga dapat bertindak balas lebih cepat terhadap perubahan harga. Ia menghasilkan isyarat beli apabila harga menerobos dari arah di bawah garis purata; ia menghasilkan isyarat jual apabila harga menerobos dari arah di atas garis purata.
Indeks ATR digunakan untuk mengira tahap turun naik pasaran dan menetapkan titik hentian. Semakin besar nilai ATR, menunjukkan semakin besar turun naik pasaran, maka anda perlu menetapkan hentian yang lebih luas. Semakin kecil nilai ATR, menunjukkan semakin kecil turun naik pasaran, anda boleh menetapkan hentian yang lebih sempit.
Mekanisme penangguhan bergerak ATR adalah dengan menyesuaikan kedudukan garisan penangguhan dalam masa nyata berdasarkan nilai ATR, membolehkan garisan penangguhan untuk mengikuti harga dan kekal dalam julat yang munasabah. Dengan demikian, kedua-dua mencegah penangguhan jarak terlalu dekat dari bergoyang, dan mencegah penangguhan jarak terlalu luas dari tidak dapat mengawal risiko dengan berkesan.
Strategi ini menggabungkan penggunaan indikator T3 untuk menentukan arah, indikator ATR untuk mengira turun naik dan mekanisme berhenti bergerak ATR untuk menangkap trend dan mengawal risiko yang lebih cekap.
Strategi ini mempunyai kelebihan berikut:
Penggunaan garis rata-rata T3 meningkatkan ketepatan trend tangkapan.
Indeks ATR secara dinamik mengira kadar turun naik pasaran, stop loss dan stop loss lebih munasabah.
ATR mempunyai mekanisme Hentikan Kerosakan Bergerak, yang membolehkan garis Hentikan untuk mengikuti harga secara langsung, dan mengawal risiko dengan berkesan.
Mengintegrasikan penilaian indikator dan mekanisme penangguhan kerugian, untuk mewujudkan perdagangan trend pemantauan automatik.
Ia juga boleh digunakan untuk membuat pesanan secara automatik melalui platform perdagangan luaran melalui webhook.
Strategi ini mempunyai beberapa risiko:
Tetapan parameter garis rata-rata T3 tidak betul, mungkin kehilangan peluang trend yang lebih baik. Anda boleh menguji parameter untuk tempoh yang berbeza untuk mencari parameter yang paling baik.
Pengiraan nilai ATR tidak tepat, jarak henti terlalu besar atau terlalu kecil, tidak dapat mengawal risiko dengan berkesan. Parameter kitaran ATR boleh disesuaikan dengan ciri-ciri turun naik pasaran.
Dalam turun naik yang kuat, garis berhenti boleh ditembusi menyebabkan kerugian yang berlebihan. Anda boleh menetapkan garis kerugian keseluruhan yang munasabah untuk mengelakkan kerugian tunggal yang terlalu besar.
Dalam keadaan berulang dua arah, mungkin terdapat kes di mana hentian sering dicetuskan. Jarak hentian bergerak ATR boleh dikurangkan dengan sewajarnya.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Optimumkan parameter garis rata T3 untuk mencari kitaran kelancaran yang paling sesuai.
Uji parameter kitaran ATR yang berbeza untuk mengira nilai ATR yang paling sesuai dengan turun naik pasaran.
Mengoptimumkan jarak elastis untuk jarak henti bergerak ATR untuk mengelakkan hentian terlalu sensitif.
Tambah syarat penapisan yang sesuai untuk mengelakkan dagangan yang kerap berlaku di pasaran yang bergolak dua arah.
Menambah ketepatan penilaian arah keuntungan, digabungkan dengan indikator penilaian trend.
Mengoptimumkan parameter secara automatik menggunakan kaedah pembelajaran mesin.
Strategi ini mengintegrasikan penggunaan T3 rata-rata untuk menentukan arah trend, ATR untuk mengira hentian hentian dan ATR untuk meminda mekanisme hentian bergerak untuk menyesuaikan jarak hentian, mewujudkan trend secara automatik dan kawalan risiko yang cekap, merupakan strategi trend yang boleh dipercayai. Dalam aplikasi sebenar, masih perlu diuji dan dioptimumkan secara berterusan untuk mencari kombinasi parameter yang paling sesuai dengan keadaan pasaran semasa, untuk mendapatkan kesan 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')