Strategi Stochastic Purata Bergerak Berganda

Penulis:ChaoZhang, Tarikh: 2024-01-29 11:54:10
Tag:

img

Ringkasan

Strategi Stochastic Dual Moving Average cuba mengenal pasti peluang perdagangan menggunakan gabungan penunjuk purata bergerak dan osilator stochastic. Ia menghasilkan isyarat perdagangan apabila EMA cepat melintasi di atas atau di bawah SMA perlahan, sementara juga menggunakan nilai %K stochastic untuk menapis isyarat apabila pasaran terlalu meluas.

Logika Strategi

Strategi ini terutamanya berdasarkan dua penunjuk teknikal:

  1. Purata Bergerak: Ia mengira EMA cepat, SMA perlahan dan VWMA perlahan menggunakan parameter yang berbeza, dan menghasilkan isyarat perdagangan apabila EMA cepat melintasi SMA perlahan.

  2. Osilator Stochastic: Ia mengira nilai %K dan menganggap pasaran terlalu banyak dibeli atau terlalu banyak dijual apabila %K melintasi paras ambang atas atau bawah yang telah ditetapkan, menggunakan ini untuk menapis beberapa isyarat purata bergerak.

Khususnya, logik untuk penjanaan isyarat adalah:

  1. Apabila EMA pantas melintasi di atas SMA perlahan, dan %K di bawah tahap oversold, pergi panjang. Apabila EMA pantas melintasi di bawah SMA perlahan, dan %K di atas tahap overbought, pergi pendek.

  2. Untuk kedudukan panjang yang sedia ada, tutup apabila %K memasuki semula zon overbought atau harga melanggar stop loss. Untuk kedudukan pendek, tutup apabila %K memasuki semula zon oversold atau harga melanggar stop loss.

Dengan menggabungkan purata bergerak dan osilator stokastik, strategi ini cuba mengenal pasti titik isyarat purata bergerak yang berkemungkinan tinggi untuk memasuki perdagangan, sambil menggunakan stokastik untuk menapis beberapa isyarat palsu.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Menggabungkan beberapa penunjuk teknikal memberikan penilaian yang lebih komprehensif berbanding menggunakan satu penunjuk sahaja.
  2. Penapisan dengan osilator stokastik mengelakkan beberapa isyarat palsu.
  3. Menggunakan pelbagai purata bergerak dengan parameter campuran membolehkan isyarat yang lebih kukuh.
  4. Menggabungkan mekanisme stop loss untuk mengawal kerugian perdagangan tunggal.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Purata bergerak boleh menghasilkan banyak isyarat yang tidak pasti yang mengakibatkan lebih banyak entri palsu; keupayaan stop loss yang terhad.
  2. Osilator stokastik juga boleh menghasilkan isyarat yang salah sendiri.
  3. Tetapan parameter memerlukan pengoptimuman (contohnya tahap overbought / oversold, tempoh purata bergerak) sebaliknya kesan prestasi.
  4. Kurangnya analisis asas.

Pengurangan:

  1. Mengoptimumkan parameter untuk mencari kombinasi terbaik tetapan penunjuk.
  2. Gunakan saiz kedudukan yang lebih kecil, skala ke dalam.
  3. Sertakan analisis asas untuk mengelakkan kejadian.

Peluang Peningkatan

Peluang pengoptimuman utama adalah:

  1. Uji dan optimumkan parameter purata bergerak untuk mencari optimum.
  2. Uji parameter stokastik seperti zon overbought / oversold untuk tetapan yang optimum.
  3. Sertakan penunjuk tambahan seperti jumlah atau turun naik untuk logik kemasukan yang lebih kaya.
  4. Mempertingkatkan metodologi stop loss e.g. trailing stop untuk mengurangkan risiko.
  5. Meningkatkan pengurusan wang seperti saiz kedudukan dinamik berdasarkan ATR.
  6. Elakkan kejadian risiko menggunakan VIX dll.

Kesimpulan

Strategi Stochastic Purata Bergerak Berganda menggunakan campuran purata bergerak dan osilator stochastic untuk merancang sistem trend berikut yang kukuh, tetapi mempunyai beberapa peluang peningkatan di sekitar parameter, berhenti dan lain-lain. Penyempurnaan lanjut seperti penunjuk tambahan dan pengoptimuman berpotensi memberikan alpha yang lebih konsisten.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("TVIX MEAN REV V2 TREND", overlay=true)
length = input(16, minval=1)
OverBought = input(80)
OverSold = input(20)
TradeLong = input (true)
TradeShort = input (true)

OverBoughtClose = input(80)
OverSoldClose = input(20)

smoothK = 3
smoothD = 3
trail_points = input(50)

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
k2 = sma(stoch(close, high, low, length), smoothK)
d2 = sma(k, smoothD)


// === GENERAL INPUTS ===
// short Ema
maFastSource = input(defval=close, title="Fast EMA Source")
maFastLength = input(defval=1, title="Fast EMA Period", minval=1)
// long Sma
maSlowSource = input(defval=close, title="Slow SMA Source")
maSlowLength = input(defval=100, title="Slow SMA Period", minval=1)
// longer Sma
maSlowerSource = input(defval=close, title="Slower SMA Source")
maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1)

//ATR Stop Loss Indicator by Keith Larson
atrDays = input(7, "ATR Days Lookback")
theAtr = atr(atrDays)
atrModifier = input(5.0, "ATR Modifier")
//plot(atr * atrModifier, title="ATR")

LstopLoss = close - (theAtr * atrModifier)
SstopLoss = close + (theAtr * atrModifier)



// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
maSlower = vwma(maSlowerSource, maSlowerLength)
rsi = rsi(maSlowerSource, maSlowerLength)

// === PLOTTING ===
fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30)
slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30)
slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30)


// === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross
LongFilter = maFast > maSlow
ShortFilter = maSlow > maFast




BUY=crossover(k, d) and k < OverSold
SELL=crossunder(k, d) and k > OverBought

SELLCLOSE=crossover(k, d) and k < OverSoldClose
BUYCLOSE=crossunder(k, d) and k > OverBoughtClose

Open = open


if not na(k) and not na(d)
    if crossover(k, d) and k < OverSold and LongFilter and TradeLong
        strategy.entry("$", strategy.long, limit = Open, comment="Long")
    
    strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss  )
    ///strategy.close("$",when = open < LstopLoss  )
    
if not na(k) and not na(d)
    if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort
        strategy.entry("$1", strategy.short, limit = Open, comment="S")
        
    strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss  )
    ///strategy.close ("$1", when = open < SstopLoss) 
    
  
        





Lebih lanjut