Strategi mengikuti tren otomatis berdasarkan T3 dan ATR


Tanggal Pembuatan: 2024-01-03 11:58:25 Akhirnya memodifikasi: 2024-01-03 11:58:25
menyalin: 1 Jumlah klik: 698
1
fokus pada
1621
Pengikut

Strategi mengikuti tren otomatis berdasarkan T3 dan ATR

Ringkasan

Inti dari strategi ini adalah menggunakan T3 indikator rata-rata bergerak dan ATR indikator stop loss untuk mengidentifikasi arah tren dan melacak tren. Strategi ini menggabungkan trend tracking dan peluang reversal tren, yang bertujuan untuk mendapatkan lebih banyak keuntungan dalam situasi tren.

Prinsip Strategi

Strategi ini menggunakan indikator T3 untuk menghitung rata-rata bergerak lurus dari harga, dan menggunakan indikator ATR untuk menghitung rata-rata real range of fluctuation dari periode ini. Sinyal perdagangan dihasilkan ketika harga menerobos ATR stop loss. Secara khusus, sinyal beli dihasilkan ketika harga melewati ATR stop loss line di atas dan sinyal jual dihasilkan ketika harga melewati ATR stop loss line di bawah.

Untuk menyaring sinyal palsu, strategi ini secara tambahan meminta harga juga harus menembus T3 Moving Average untuk mengkonfirmasi sinyal. Selain itu, strategi ini menghitung stop loss dan stop loss dengan nilai ATR untuk manajemen risiko.

Analisis Keunggulan

Indikator T3 memiliki sensitivitas yang lebih tinggi dan keterlambatan yang lebih kecil dibandingkan dengan rata-rata bergerak tradisional, sehingga dapat menangkap perubahan tren harga lebih cepat. Selain itu, T3 memiliki keunggulan dalam perhitungan matematis yang dapat memberikan rata-rata bergerak yang lebih akurat dan halus.

Nilai ATR mencerminkan tingkat volatilitas dan tingkat risiko pasar saat ini. ATR secara dinamis melacak stop loss dan stop stop yang dapat secara dinamis menyesuaikan ukuran posisi, mendapatkan keuntungan lebih besar dalam situasi tren, dan mengurangi kerugian dalam situasi goyangan.

Analisis risiko

Strategi ini bergantung pada perhitungan indikator, dan ada risiko untuk di-arbitrage. Selain itu, T3 Smooth Moving Average dan ATR Dynamic Stop memiliki masalah keterlambatan dan mungkin kehilangan kesempatan untuk membalikkan harga dengan cepat. Parameter dapat disesuaikan sesuai atau digabungkan dengan indikator lain untuk dioptimalkan.

Ketika tren bergoyang terbalik, stop loss dapat dipecahkan dan menyebabkan kerugian meningkat. Anda dapat dengan tepat melonggarkan jangkauan stop loss atau menggunakan parameter lain seperti nilai Handle sebagai dasar stop loss.

Arah optimasi

  • Parameter indikator T3 dapat disesuaikan untuk mengoptimalkan sensitivitasnya.

  • Dapat menguji parameter ATR siklus yang berbeda untuk mencari nilai optimal.

  • Anda dapat mencoba berbagai faktor risiko-pengembalian untuk menentukan parameter optimal.

  • Anda dapat menambahkan sinyal penyaringan dari indikator lain, seperti Indeks Aliran Uang.

  • Perangkat ini dapat mengoptimalkan kombinasi parameter secara otomatis dengan metode pembelajaran mesin.

Meringkaskan

Strategi ini mengintegrasikan kemampuan pelacakan tren dari T3 Smooth Moving Average dan kemampuan penyesuaian stop loss dinamis dari ATR. Dengan optimasi parameter dan pengendalian risiko, diharapkan untuk mendapatkan tingkat pengembalian yang baik. Strategi ini mempertimbangkan baik pelacakan tren dan peluang reversal, dan merupakan strategi perdagangan kuantitatif generik.

Kode Sumber Strategi
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='NinjaView Example 1 (UTBA "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')