Tren crossover rata-rata stokastis dan bergerak mengikuti strategi kuantitatif

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

img

Gambaran umum

Strategi ini terutama menggunakan persilangan indikator Stoch di area overbought/oversold sebagai sinyal masuk, sambil menilai arah tren saat ini dengan indikator EMA. Ini hanya pergi panjang dalam tren naik yang ditentukan oleh EMA dan pergi pendek dalam tren menurun, yang merupakan strategi trend berikut yang khas.

Prinsip-prinsip

Strategi ini terdiri dari tiga bagian utama:

  1. EMA untuk menentukan arah tren

    Menggunakan satu EMA cepat dan satu EMA lambat, ketika EMA cepat di atas EMA lambat, itu ditentukan sebagai tren naik.

  2. Saham untuk menghasilkan sinyal perdagangan

    Indikator Stoch terdiri dari garis %K dan %D. Ketika %K melintasi di atas %D di area overbought, itu menghasilkan sinyal beli. Ketika %K melintasi di bawah %D di area oversold, itu menghasilkan sinyal jual. Strategi ini hanya mengambil sinyal persilangan Stoch ketika terjadi di zona overbought / oversold.

  3. Mekanisme manajemen risiko

    Strategi ini juga menetapkan stop loss dan take profit level. Saat memegang posisi panjang, jika harga melanggar level stop loss, maka akan keluar dari perdagangan. Jika harga melanggar level take profit, maka akan menutup posisi untuk mendapatkan keuntungan. Logika yang sama berlaku untuk posisi short.

Secara umum, ini adalah strategi perdagangan kuantitatif khas yang menggunakan kombinasi indikator untuk menentukan arah tren dan sinyal perdagangan, dilengkapi dengan aturan manajemen risiko yang ketat untuk mengurangi risiko perdagangan.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Menggunakan EMA untuk menentukan tren utama dan minor menghindari terjebak dalam pasar sampingan.

  2. Kekuatan indikator Stoch terletak pada kemampuannya untuk mencerminkan secara akurat tingkat overbought/oversold.

  3. Strategi ini dengan jelas menentukan skenario jangka panjang dan jangka pendek yang mungkin, yang lebih lanjut menyaring sinyal dan menghindari membuka posisi secara membabi buta di pasar yang kompleks.

  4. Manajemen risiko yang ketat membantu mengendalikan kerugian perdagangan individu, membatasi penarikan maksimum sementara masih memberikan ruang perdagangan yang menguntungkan untuk dijalankan.

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Indikator seperti EMA dan Stoch memiliki sifat yang lambat, sehingga sulit bagi strategi ini untuk menangkap pembalikan pasar tepat waktu.

  2. Mengandalkan indikator saja dapat dengan mudah membentuk bias, sehingga kehilangan peluang perdagangan yang sebenarnya disediakan oleh pasar.

  3. Mekanisme manajemen risiko itu sendiri juga dapat membatasi potensi keuntungan dengan menetapkan stop loss dan take profit yang lebih dini.

  4. Ada risiko yang terkait dengan pemilihan parameter. backtesting dan optimalisasi yang luas diperlukan untuk menemukan parameter yang optimal.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Cobalah berbagai jenis EMA untuk penentuan tren, seperti WMA, Hull MA dll dan bandingkan hasilnya.

  2. Menggabungkan indikator lain untuk menghasilkan sinyal perdagangan, misalnya MACD, KDJ untuk membangun sistem multi-indikator.

  3. Mengoptimalkan pengaturan stop loss dan take profit untuk lebih beradaptasi dengan volatilitas pasar.

  4. Uji varian kinerja di berbagai produk dan kerangka waktu untuk menemukan kombinasi yang optimal.

  5. Pertimbangkan untuk memperkenalkan model pembelajaran mesin untuk membantu tren dan penilaian sinyal untuk membuat strategi lebih cerdas.

Kesimpulan

Sebagai kesimpulan, strategi ini menggabungkan indikator yang umum digunakan untuk membentuk sistem trend berikut yang relatif matang, dengan mempertimbangkan penentuan tren, sinyal perdagangan, dan manajemen risiko. Dengan optimasi lebih lanjut, saya percaya strategi ini dapat mencapai hasil perdagangan langsung yang lebih baik. Pada saat yang sama, kita juga harus menyadari keterbatasan strategi tunggal dan terus mempelajari seluk beluk pasar 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 banyak