Trend mengikut strategi kuantitatif berdasarkan petunjuk Stoch dan EMA


Tarikh penciptaan: 2024-02-05 15:27:03 Akhirnya diubah suai: 2024-02-05 15:27:03
Salin: 0 Bilangan klik: 590
1
fokus pada
1617
Pengikut

Trend mengikut strategi kuantitatif berdasarkan petunjuk Stoch dan EMA

Gambaran keseluruhan

Strategi ini menggunakan penyambungan indikator Stoch yang berlaku di kawasan overbought oversold sebagai isyarat masuk, dan digabungkan dengan indikator EMA untuk menilai arah trend semasa, hanya melakukan operasi ganda dalam trend EMA yang terus meningkat, dan melakukan operasi shorting dalam trend EMA yang terus menurun, merupakan strategi trend-following yang khas.

Prinsip Strategi

Strategi ini terdiri daripada tiga bahagian utama:

  1. Indeks EMA menilai arah trend

Menggunakan dua parameter EMA yang berbeza dengan cepat dan perlahan, apabila EMA cepat berada di atas EMA perlahan dinilai sebagai tren naik, dan apabila EMA cepat berada di bawah EMA perlahan dinilai sebagai tren turun.

  1. Indeks Stoch menilai isyarat jual beli

Indeks Stoch terdiri daripada garis% K dan garis% D, garis% K menghasilkan isyarat beli apabila terdapat persilangan emas dengan garis% D di atas kawasan overbought, garis% K menghasilkan isyarat jual apabila terdapat persilangan mati dengan garis% D di bawah kawasan oversold. Strategi ini hanya menghantar isyarat perdagangan apabila persilangan indikator Stoch berlaku di kawasan oversold.

  1. Mekanisme pengurusan risiko

Strategi ini menetapkan mekanisme hentian dan hentian pada masa yang sama. Apabila memegang beberapa kedudukan, jika harga jatuh di bawah titik hentian yang ditetapkan, ia akan menghentikan kedudukan kosong; jika harga melampaui titik hentian yang ditetapkan, ia akan menghentikan kedudukan kosong.

Secara keseluruhannya, strategi ini adalah strategi dagangan kuantitatif yang lebih tipikal, menggunakan kombinasi indikator untuk menentukan arah trend dan isyarat perdagangan, sambil dilengkapi dengan peraturan pengurusan risiko yang ketat, yang dapat mengurangkan risiko perdagangan secara berkesan.

Analisis kelebihan

Strategi ini mempunyai kelebihan utama:

  1. Menggunakan EMA untuk menilai trend di peringkat utama dan rendah untuk mengelakkan terikat dalam pasaran yang tidak jelas.

  2. Ciri khas penunjuk Stoch adalah bahawa ia dapat mencerminkan dengan baik sama ada anda berada di kawasan yang terlalu banyak atau terlalu banyak dijual, oleh itu, dengan penciptaan isyarat silang, anda boleh melakukan perdagangan di kawasan yang terlalu banyak dibeli atau terlalu banyak dijual.

  3. Strategi ini menjelaskan keadaan yang mungkin berlaku untuk over dan under, membolehkan penapisan lebih lanjut terhadap isyarat yang dihasilkan, mengurangkan kebarangkalian isyarat yang salah, dan juga mengelakkan kedudukan buta di pasaran yang kompleks.

  4. Mekanisme pengurusan risiko yang ketat membantu mengawal kerugian dalam satu perdagangan, mengawal pengeluaran maksimum secara keseluruhan, dan juga meninggalkan ruang yang cukup untuk perdagangan yang menguntungkan.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. EMA, Stoch, dan lain-lain mempunyai ketinggalan yang menyebabkan strategi ini sukar dan peluang untuk merebut peluang apabila pasaran berbalik.

  2. Bergantung kepada petunjuk sahaja mudah untuk membuat penilaian pra-dominan terhadap pasaran, sehingga kehilangan peluang perdagangan yang sebenarnya ditawarkan oleh pasaran.

  3. Mekanisme pengurusan risiko itu sendiri juga boleh menjadi sekatan ruang keuntungan strategi, dan penyetempatan untuk menangguhkan kerugian dan menghentikan kedudukan dalam trend besar perlu berhati-hati.

  4. Strategi ini juga mempunyai risiko tertentu dalam pemilihan parameter, kesan parameter yang berbeza terhadap hasil memerlukan banyak pengulangan dan pengoptimuman untuk mendapatkan kombinasi parameter yang terbaik.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Cuba pelbagai jenis EMA, seperti purata bergerak bertimbangan, Hull MA dan lain-lain untuk menilai trend dan melakukan analisis perbandingan.

  2. Cuba untuk menghasilkan isyarat dagangan dengan menggabungkan petunjuk lain, seperti MACD, KDJ dan lain-lain, untuk membina sistem perdagangan pelbagai petunjuk.

  3. Optimumkan tetapan untuk menghentikan kerugian dan hentikan sehingga lebih sesuai dengan keadaan sebenar pasaran yang bergolak. Anda boleh menetapkan titik berhenti yang lebih longgar dan titik berhenti yang lebih ketat.

  4. Uji kebolehan strategi ini dalam pelbagai jenis dan tempoh untuk mencari kombinasi jenis dan tempoh yang optimum.

  5. Pertimbangkan untuk menggunakan pembelajaran mesin atau model rangkaian saraf untuk membantu menentukan arah trend dan isyarat perdagangan, dan kecerdasan strategi.

ringkaskan

Secara keseluruhannya, strategi ini menggunakan indikator biasa untuk menggabungkannya, untuk membina satu set strategi perdagangan trend yang lebih matang. Ia mempertimbangkan kedua-dua penilaian trend dan penjanaan isyarat perdagangan khusus, dan juga menyediakan mekanisme pengurusan risiko. Dengan terus mengoptimumkannya, strategi ini dipercayai dapat mencapai kesan yang lebih baik di lapangan.

Kod sumber strategi
/*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)