
Strategi ini menggunakan gabungan T3 moving average, ATR indicator, dan hypertrophy untuk mengenal pasti isyarat beli dan jual, dan melakukan perdagangan mengikut trend dengan mengira kedudukan henti rugi di bawah ATR. Kelebihan strategi ini adalah tindak balas yang cepat, sambil mengawal risiko perdagangan.
T3 Moving Average: Mengira T3 Moving Average dengan parameter yang halus iaitu T3 (default 100) untuk menentukan arah trend.
ATR: Mengira ATR (Average True Rate of Volatility), digunakan untuk menentukan saiz kedudukan stop loss.
Hentian bergerak ATR: Berdasarkan pengiraan ATR, garis hentian bergerak boleh disesuaikan dengan perubahan harga dan kadar turun naik, untuk mengikuti trend.
Sinyal beli: Sinyal beli dihasilkan apabila harga penutupan melintasi ATR Mobile Stop Line dan berada di bawah rata-rata T3.
Isyarat jual: Isyarat jual dihasilkan apabila harga penutupan melintasi ATR Mobile Stop Line dan melebihi rata-rata T3.
Hentikan Kerugian: Setelah masuk, harga hentikan dan hentikan dikira berdasarkan nilai ATR dan nisbah pulangan risiko yang ditetapkan oleh pengguna.
Selepas membeli, harga hentian adalah harga masuk tolak nilai ATR, harga hentian adalah harga masuk ditambah nilai ATR kalikan dengan nisbah pulangan risiko.
Selepas dijual, harga hentian ditambah ATR kepada harga masuk dan harga hentian dikurangkan dari ATR kepada harga masuk dengan perkalian kadar pulangan risiko.
Apabila harga mencetuskan harga stop loss atau stop loss, posisi kosong akan keluar.
Parameter purata T3 secara lalai 100 dan lebih sensitif daripada purata bergerak biasa, yang dapat bertindak balas lebih cepat terhadap perubahan harga.
Hentikan bergerak yang dikira menggunakan ATR boleh berdasarkan harga trail turun naik pasaran, untuk mengelakkan risiko hentikan yang ditembusi. Kedudukan hentikan hentikan adalah berdasarkan ATR, untuk mengawal nisbah risiko pulangan setiap perdagangan.
ATR Mobile Stop Lines mampu mengikuti trend dan tidak akan dicetuskan walaupun harga kembali pada jangka pendek, sehingga mengurangkan isyarat salah.
Kitaran purata T3 dan kitaran ATR boleh dioptimumkan untuk menyesuaikan parameter untuk pasaran yang berbeza dan meningkatkan kestabilan strategi.
Sekiranya berlaku keadaan yang teruk, harga mungkin langsung menembusi garis berhenti menyebabkan kerugian. Anda boleh memperluas kitaran ATR dan jarak berhenti untuk mengurangkan kerugian.
Apabila trend berbalik, harga melintasi garisan berhenti bergerak boleh menyebabkan kerugian. Ia boleh digabungkan dengan petunjuk lain untuk menilai trend dan mengelakkan perdagangan berhampiran titik perubahan.
Pengoptimuman parameter memerlukan sokongan data sejarah yang kaya, terdapat risiko pengoptimuman berlebihan. Parameter pengoptimuman gabungan pelbagai pasaran dan pelbagai tempoh masa harus digunakan, dan tidak boleh bergantung pada satu set data.
Uji parameter kitaran purata T3 yang berbeza untuk mencari kombinasi parameter terbaik yang mengimbangi sensitiviti dan kestabilan
Menguji parameter kitaran ATR untuk mencari keseimbangan terbaik antara kawalan risiko dan trend perolehan
Menggabungkan RSI, MACD dan lain-lain untuk mengelakkan perdagangan yang salah
Menggunakan kaedah pembelajaran mesin untuk melatih parameter optimum dan mengurangkan batasan pengoptimuman buatan
Menambah strategi pengurusan kedudukan untuk mengawal risiko dengan lebih baik
Strategi ini mengintegrasikan kelebihan T3 Average Line dan ATR Indicator untuk bertindak balas dengan cepat terhadap perubahan harga dan mengawal risiko. Dengan mengoptimumkan Parameter dan menggabungkannya dengan indikator lain, anda dapat meningkatkan lagi kestabilan strategi dan kecekapan perdagangan.
/*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')