Strategi Dagangan Futures Intraday Crossover Dual Moving Average

Penulis:ChaoZhang, Tarikh: 2023-11-15 16:48:02
Tag:

img

Ringkasan

Strategi ini menggunakan prinsip crossover purata bergerak berganda, menggabungkan penunjuk ATR untuk menghentikan kerugian dan mengambil keuntungan, dan menambah kawalan jam perdagangan untuk merancang strategi perdagangan intraday yang sesuai untuk kontrak niaga hadapan. Strategi ini mudah dan mudah difahami, menjadikannya ideal untuk pemula.

Logika Strategi

Strategi ini menggunakan garis WMA 5 tempoh dan 20 tempoh silang sebagai isyarat kemasukan. Ia pergi panjang apabila garis 5 tempoh memecahkan di atas garis 20 tempoh, dan pergi pendek apabila garis 5 tempoh memecahkan di bawah garis 20 tempoh. Ia juga menggunakan garis WMA 50 tempoh untuk menentukan arah trend. Isyarat perdagangan hanya dicetuskan apabila arah harga pecah konsisten dengan trend utama.

Di samping itu, strategi ini memanfaatkan penunjuk ATR untuk menetapkan tahap stop loss dan mengambil keuntungan yang dinamik. ATR mencerminkan turun naik pasaran. Strategi ini menggunakan nilai ATR didarabkan dengan faktor (seperti 3) untuk menentukan stop loss dan mengambil keuntungan, dengan itu mengawal kerugian setiap perdagangan.

Akhirnya, strategi ini hanya mencetuskan dagangan semasa jam dagangan AS (9:00-14:30 CST) untuk mengelakkan turun naik yang tinggi di sekitar pasaran terbuka dan ditutup di mana isyarat palsu mudah terbentuk.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Crossover purata bergerak berganda dengan berkesan menangkap titik perubahan trend untuk kemasukan tepat pada masanya.

  2. Penapis trend mengelakkan perdagangan terhadap trend utama dan mengurangkan isyarat palsu.

  3. Pengendalian stop loss berasaskan ATR dinamik bagi setiap kerugian perdagangan.

  4. Mengehadkan waktu dagangan mengelakkan tempoh buka dan tutup yang tidak menentu.

  5. Peraturan mudah dan jelas, mudah difahami dan dilaksanakan untuk pemula.

  6. Parameter yang boleh disesuaikan seperti tempoh MA, pengganda ATR, jam dagangan dll untuk pengoptimuman.

Analisis Risiko

Strategi ini juga mempunyai risiko berikut:

  1. Lebih banyak pemicu stop loss semasa pasaran yang terhad.

  2. Perpindahan dua MA mempunyai kelewatan dan mungkin terlepas jangka pendek.

  3. Tetapan parameter ATR yang tidak betul membawa kepada kehilangan berhenti yang besar atau kecil.

  4. Hanya bergantung pada penunjuk teknikal tanpa analisis asas.

  5. Keberkesanan bergantung pada simbol yang betul dan jangka masa.

  6. Sistem mekanikal mempunyai risiko untuk menjadi arbitrase.

  7. Parameter perlu diselaraskan untuk sesi dagangan yang berbeza.

Ini boleh ditingkatkan melalui penyesuaian parameter, kombinasi penunjuk, campur tangan manual selektif dll.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dalam aspek berikut:

  1. Uji sistem MA yang berbeza seperti EMA, DMA dll.

  2. Tambah penapis teknikal lain seperti MACD, RSI dll.

  3. Mengoptimumkan parameter ATR untuk menghentikan kerugian / keuntungan yang lebih baik.

  4. Masukkan penunjuk jumlah untuk mencari isyarat kemasukan berkualiti tinggi.

  5. Sesuaikan parameter berdasarkan ciri-ciri simbol.

  6. Mengintegrasikan faktor asas untuk mengelakkan perdagangan terhadap pasaran.

  7. Memperkenalkan pembelajaran mesin seperti rangkaian saraf untuk pemodelan pasaran.

  8. Terokai kombinasi pelbagai jangka masa untuk lebih banyak peluang.

  9. Membina kumpulan strategi untuk meningkatkan ketahanan.

Kesimpulan

Ringkasnya, ini adalah strategi yang mudah dan intuitif yang sesuai untuk pemula untuk mengamalkan perdagangan langsung. Pada masa yang sama, ruang yang besar masih ada untuk pengoptimuman melalui penunjuk teknikal atau pembelajaran mesin yang lebih banyak. Penyesuaian parameter berdasarkan simbol dan dinamik pasaran juga penting. Strategi ini menyediakan kerangka rujukan untuk pemula perdagangan kuant, tetapi memerlukan ujian dan peningkatan yang berterusan untuk keuntungan yang stabil.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © james4392010

//@version=4

strategy(title="DayTradingFutures Cross-Strategy", overlay=true)




// === GENERAL INPUTS ===
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
//highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn



wmaFastSource   = input(defval = close, title = "Fast WMA Source")
wmaFastLength   = input(defval = 5, title = "Fast WMA Period")
wmaSlowSource   = input(defval = close, title = "Slow WMA Source")
wmaSlowLength   = input(defval = 20, title = "Slow WMA Period")
wmaDirectionSource  = input(defval = close, title = "Trend 50 Period Source")
wmaDirectionLength  = input(defval = 50, title = "Trend 50 Period")
timeinrange(res, sess) => time(res, sess) != 0



// === SERIES SETUP ===
/// a couple of ma's..
wmaFast = wma(close, 5)
wmaSlow = wma(close, 20)
wmaDirection = wma(close, 50)





// === PLOTTING ===
fast = plot(series=wmaFast, color=color.white, linewidth=2)
slow = plot(series=wmaSlow, color=color.yellow, linewidth=2)
direction = plot(series=wmaDirection, color=color.red, linewidth=2)


// === INPUT BACKTEST RANGE ===

//fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
//fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
//fromYear = input(defval = 2022, title = "From Year", minval = 2022)
 
// To Date Inputs
//toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
//toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
//toYear = input(defval = 2022, title = "To Year", minval = 2022)
//startDate = timestamp(fromYear, fromMonth, fromDay)
//finishDate = timestamp(toYear, toMonth, toDay)
//inDateRange= (time >= fromDay, fromMonth, fromYear and time <= toDay, toMonth, toYear) 



// === FUNCTION EXAMPLE ===
//inDateRange = (time >= fromDay, fromMonth, fromYear) and (time <= toDay, toMonth, toYear)


// === LOGIC ===

enterLong = crossover(wmaFast, wmaSlow) and close > wmaDirection and timeinrange(timeframe.period, "0900-1430")
enterShort = crossunder(wmaFast, wmaSlow) and close < wmaDirection and timeinrange(timeframe.period, "0900-1430")

//trend := nz(trend[1], trend)
//trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
//upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)

buySignal = enterLong 
//plotshape(enterLong ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green)
plotshape(enterLong and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)
//dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)

sellSignal = enterShort
//plotshape(enterShort ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red)
plotshape(enterShort and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)
//mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
//longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
//shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
//fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
//fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="Buy", message="Buy!")
alertcondition(sellSignal, title="Sell", message="Sell!")
//changeCond = trend != trend[1]
//alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")



// Entry for strategy //

//tp=input(25,title="TakeProfit")
//sl=input(40,title="StopLoss")

strategy.entry("Long",1, when=buySignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)

strategy.entry("Short",1, when=sellSignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)
//strategy.exit("Exit", wmaFastwmaSlow)

//Buy and Sell Signals

//strategy.close_all(when =not timeinrange(timeframe.period, "1000-1430"))   


// === FILL ====

fill (fast, slow, color = wmaSlow > wmaDirection ? color.green : color.red)
//fill(when=enterLong, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterLong, sl, color = color.new(color.red, 90), title = "Loss area")
//fill(when=enterShort, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterShort, sl, color = color.new(color.red, 90), title = "Loss area")






Lebih lanjut