Strategi dagangan berdasarkan purata bergerak T3 dan ATR


Tarikh penciptaan: 2023-11-07 17:18:05 Akhirnya diubah suai: 2023-11-07 17:18:05
Salin: 1 Bilangan klik: 809
1
fokus pada
1617
Pengikut

Strategi dagangan berdasarkan purata bergerak T3 dan ATR

Gambaran keseluruhan

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.

Analisis asas

Pengiraan penunjuk

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

Logik Transaksi

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

Strategi masuk dan keluar

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

Analisis kelebihan

Tanggapan Cepat

Parameter purata T3 secara lalai 100 dan lebih sensitif daripada purata bergerak biasa, yang dapat bertindak balas lebih cepat terhadap perubahan harga.

Kawalan Risiko

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.

Pengesanan Trend

ATR Mobile Stop Lines mampu mengikuti trend dan tidak akan dicetuskan walaupun harga kembali pada jangka pendek, sehingga mengurangkan isyarat salah.

Optimum ruang parameter

Kitaran purata T3 dan kitaran ATR boleh dioptimumkan untuk menyesuaikan parameter untuk pasaran yang berbeza dan meningkatkan kestabilan strategi.

Analisis risiko

Risiko Terobosan

Sekiranya berlaku keadaan yang teruk, harga mungkin langsung menembusi garis berhenti menyebabkan kerugian. Anda boleh memperluas kitaran ATR dan jarak berhenti untuk mengurangkan kerugian.

Risiko pembalikan arah aliran

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.

Risiko Pengoptimuman Parameter

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.

Arah pengoptimuman

  • 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

ringkaskan

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.

Kod 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')