Trend silang stokastik dan purata bergerak mengikut strategi kuantitatif

Penulis:ChaoZhang, Tarikh: 2024-02-05 15:27:03
Tag:

img

Ringkasan

Strategi ini terutamanya menggunakan persilangan penunjuk Stoch di kawasan overbought / oversold sebagai isyarat kemasukan, sambil menilai arah trend semasa dengan penunjuk EMA. Ia hanya pergi panjang dalam trend menaik yang ditentukan oleh EMA dan pergi pendek dalam trend menurun, yang merupakan strategi trend berikut yang khas.

Prinsip-prinsip

Strategi ini terdiri daripada tiga bahagian utama:

  1. EMA untuk menentukan arah trend

    Menggunakan satu EMA pantas dan satu EMA perlahan, apabila EMA pantas di atas EMA perlahan, ia ditentukan sebagai trend menaik.

  2. Saham untuk menjana isyarat dagangan

    Indikator Stoch terdiri daripada garis %K dan %D. Apabila %K melintasi di atas %D di kawasan overbought, ia menghasilkan isyarat beli. Apabila %K melintasi di bawah %D di kawasan oversold, ia menghasilkan isyarat jual. Strategi ini hanya mengambil isyarat persilangan Stoch apabila ia berlaku di zon overbought / oversold.

  3. Mekanisme Pengurusan Risiko

    Strategi ini juga menetapkan tahap stop loss dan mengambil keuntungan. Apabila memegang kedudukan panjang, jika harga memecahkan tahap stop loss, ia akan keluar dari perdagangan. Jika harga memecahkan tahap mengambil keuntungan, ia akan menutup kedudukan untuk keuntungan. Logik yang sama berlaku untuk kedudukan pendek.

Secara amnya, ini adalah strategi perdagangan kuantitatif biasa yang menggunakan gabungan penunjuk untuk menentukan arah trend dan isyarat perdagangan, ditambah dengan peraturan pengurusan risiko yang ketat untuk mengurangkan risiko perdagangan.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Menggunakan EMA untuk menentukan trend utama dan kecil mengelakkan terperangkap dalam pasaran sampingan.

  2. Kekuatan penunjuk Stoch terletak pada keupayaannya untuk mencerminkan tahap overbought / oversold dengan tepat.

  3. Strategi itu menentukan senario panjang dan pendek yang mungkin dengan jelas, yang lebih menyaring isyarat dan mengelakkan membuka kedudukan secara membabi buta di pasaran yang kompleks.

  4. Pengurusan risiko yang ketat membantu mengawal kerugian dagangan individu, mengehadkan pengeluaran maksimum sambil masih memberikan ruang perdagangan yang menguntungkan untuk dijalankan.

Analisis Risiko

Terdapat juga beberapa risiko dengan strategi ini:

  1. Penunjuk seperti EMA dan Stoch mempunyai sifat yang tertinggal, menjadikan strategi ini sukar untuk menangkap pembalikan pasaran tepat pada masanya.

  2. Mengandalkan indikator semata-mata boleh dengan mudah mewujudkan bias, dengan itu kehilangan peluang perdagangan yang sebenarnya disediakan oleh pasaran.

  3. Mekanisme pengurusan risiko itu sendiri juga boleh mengehadkan potensi keuntungan dengan menetapkan stop loss dan mengambil keuntungan yang lebih awal.

  4. Terdapat risiko yang berkaitan dengan pemilihan parameter. Ujian balik dan pengoptimuman yang luas diperlukan untuk mencari parameter yang optimum.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Cuba pelbagai jenis EMA untuk penentuan trend, seperti WMA, Hull MA dll dan bandingkan hasilnya.

  2. Gabungkan penunjuk lain untuk menjana isyarat perdagangan, contohnya MACD, KDJ untuk membina sistem pelbagai penunjuk.

  3. Mengoptimumkan tetapan stop loss dan mengambil keuntungan untuk menyesuaikan diri dengan lebih baik dengan turun naik pasaran.

  4. Uji perbezaan prestasi di pelbagai produk dan jangka masa untuk mencari kombinasi yang optimum.

  5. Pertimbangkan untuk memperkenalkan model pembelajaran mesin untuk membantu trend dan penilaian isyarat untuk membuat strategi lebih pintar.

Kesimpulan

Kesimpulannya, strategi ini menggabungkan penunjuk yang biasa digunakan untuk membentuk sistem trend berikut yang agak matang, dengan mengambil kira penentuan trend, isyarat perdagangan, dan pengurusan risiko. Dengan pengoptimuman lanjut, saya percaya strategi ini dapat mencapai hasil perdagangan langsung yang lebih baik. Pada masa yang sama, kita juga harus menyedari batasan strategi tunggal dan terus mempelajari seluk beluk pasaran dalam mengejar keuntungan stabil jangka panjang.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)




Lebih lanjut