
Strategi ini menggunakan kombinasi T3 Moving Average, ATR Indicator, dan Hybrid Force untuk mengidentifikasi sinyal buy dan sell, dan untuk melakukan trend-following trading berdasarkan perhitungan posisi stop loss dan stop loss ATR. Strategi ini memiliki keunggulan untuk merespons dengan cepat, sekaligus mengontrol risiko trading.
T3 Moving Average: T3 Moving Average yang dihitung dengan parameter halus T3 (default 100) untuk menentukan arah tren.
ATR: menghitung ATR (Average True Rate of Volatility) untuk menentukan ukuran posisi stop loss.
ATR mobile stop loss: Sebuah mobile stop loss line yang dihitung berdasarkan ATR dapat disesuaikan dengan perubahan harga dan volatilitas, memungkinkan pelacakan tren.
Sinyal beli: Sinyal beli dihasilkan ketika ATR bergerak di atas garis stop loss dan berada di bawah rata-rata T3 pada harga penutupan.
Sinyal jual: Sinyal jual muncul ketika ATR bergerak di bawah batas batas harga dan berada di atas rata-rata T3.
Stop Loss: Stop Loss dan Stop Price dihitung berdasarkan nilai ATR dan RRR yang ditetapkan pengguna.
Setelah membeli, harga stop loss adalah harga masuk dikurangi ATR, harga stop loss adalah harga masuk ditambah ATR dikali tingkat pengembalian risiko.
Setelah dijual, harga stop loss ditambah nilai ATR untuk harga masuk, harga stop loss dikurangi nilai ATR untuk harga masuk dikalikan dengan tingkat pengembalian risiko.
Ketika harga memicu stop loss atau stop loss, posisi kosong akan keluar.
Parameter rata-rata T3 secara default adalah 100, yang lebih sensitif terhadap perubahan harga dibandingkan rata-rata bergerak umum.
Stop loss bergerak yang dihitung menggunakan ATR dapat dihitung berdasarkan harga trail yang berfluktuasi di pasar, menghindari risiko stop loss yang akan ditembus. Posisi stop loss yang dihitung berdasarkan ATR dapat mengontrol tingkat risiko-pengembalian per transaksi.
ATR mobile stop loss line dapat melacak tren dan tidak akan dipicu keluar dari lapangan bahkan ketika harga memutar kembali dalam jangka pendek, sehingga mengurangi sinyal yang salah.
Siklus rata-rata T3 dan siklus ATR dapat dioptimalkan untuk menyesuaikan parameter untuk pasar yang berbeda dan meningkatkan stabilitas strategi.
Jika terjadi situasi yang ekstrem, harga dapat langsung menerobos garis stop loss dan menyebabkan kerugian. Periode ATR dan jarak stop loss dapat diperluas sesuai untuk mengurangi kerugian.
Ketika tren berbalik, harga melewati garis stop loss yang bergerak dapat menyebabkan kerugian. Dapat digabungkan dengan indikator lain untuk menilai tren, dan menghindari perdagangan di dekat titik balik.
Optimasi parameter membutuhkan dukungan data historis yang kaya, dan ada risiko over-optimasi. Harus menggunakan kombinasi parameter optimasi multi-pasar multi-periode, tidak bergantung pada satu set data.
Uji parameter siklus rata-rata T3 yang berbeda untuk menemukan kombinasi parameter terbaik yang menyeimbangkan sensitivitas dan stabilitas
Pengujian parameter siklus ATR untuk menemukan keseimbangan optimal antara kontrol risiko dan tren keuntungan
Menggunakan indikator RSI, MACD, dan lain-lain untuk menghindari kesalahan trading pada titik balik tren
Metode pembelajaran mesin untuk melatih parameter optimal, mengurangi keterbatasan optimasi manual
Meningkatkan strategi manajemen posisi untuk mengendalikan risiko dengan lebih baik
Strategi ini mengintegrasikan keuntungan dari T3 Average Line dan ATR indicator untuk merespons perubahan harga dengan cepat dan mengendalikan risiko. Dengan mengoptimalkan parameter dan menggabungkannya dengan indikator lain, stabilitas strategi dan efisiensi perdagangan dapat ditingkatkan lebih lanjut. Namun, pedagang harus tetap waspada terhadap risiko reversal dan terobosan dan menghindari ketergantungan berlebihan pada hasil pengujian ulang.
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy w/ NinjaView', 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 ,alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell , 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')