Strategi perdagangan berdasarkan rata-rata pergerakan T3 dan ATR


Tanggal Pembuatan: 2023-11-07 17:18:05 Akhirnya memodifikasi: 2023-11-07 17:18:05
menyalin: 1 Jumlah klik: 809
1
fokus pada
1617
Pengikut

Strategi perdagangan berdasarkan rata-rata pergerakan T3 dan ATR

Ringkasan

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.

Analisis Prinsip

Perhitungan indikator

  • 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.

Logika Transaksi

  • 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.

Strategi masuk dan keluar

  • 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.

Analisis Keunggulan

Tanggapan Cepat

Parameter rata-rata T3 secara default adalah 100, yang lebih sensitif terhadap perubahan harga dibandingkan rata-rata bergerak umum.

Pengendalian Risiko

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.

Pelacakan tren

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.

Optimalisasi parameter ruang

Siklus rata-rata T3 dan siklus ATR dapat dioptimalkan untuk menyesuaikan parameter untuk pasar yang berbeda dan meningkatkan stabilitas strategi.

Analisis risiko

Risiko terobosan

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.

Risiko pembalikan tren

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.

Risiko Optimasi Parameter

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.

Arah optimasi

  • 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

Meringkaskan

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.

Kode Sumber Strategi
/*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')