Strategi mengikuti tren kuantitatif


Tanggal Pembuatan: 2024-02-01 11:42:22 Akhirnya memodifikasi: 2024-02-01 11:42:22
menyalin: 0 Jumlah klik: 524
1
fokus pada
1617
Pengikut

Strategi mengikuti tren kuantitatif

Ringkasan

Strategi ini menggunakan beberapa indikator untuk menilai tren pasar, seperti Brin Band, RSI, ADX, MACD, dan memiliki kemampuan identifikasi tren yang lebih kuat. Ketika sinyal indikator bullish, mengambil strategi catching up; Ketika sinyal indikator bearish, stop loss.

Prinsip Strategi

  • Menggunakan Bollinger Bands untuk menentukan apakah harga berada di dekat Bollinger Bands uptrend atau downtrend sebagai dasar untuk menentukan apakah tren terbentuk
  • Pertimbangan RSI untuk mengetahui apakah Anda berada di zona overbought atau oversold untuk menghindari false breakout
  • Menggunakan ADX untuk menilai kekuatan tren, hanya mengirimkan sinyal saat tren kuat
  • Menggunakan MACD untuk menilai konsistensi tren jangka pendek dan jangka panjang
  • Terkait dengan periode waktu dalam hari, transaksi hanya pada periode perdagangan yang ditentukan

Mengidentifikasi tren harga dengan akurat melalui kombinasi indikator, melacak tren tepat waktu saat tren terjadi, dan mencapai keuntungan tambahan.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah bahwa penilaian dari kombinasi indikator lebih komprehensif dan akurat, sehingga dapat secara efektif mengidentifikasi tren harga dan menghindari sinyal palsu yang disebabkan oleh satu indikator.

Secara khusus, ada beberapa keuntungan:

  1. Brinet dapat menentukan kisaran dan kekuatan fluktuasi harga
  2. RSI menghindari zona overbought dan zona oversold
  3. ADX menilai kekuatan tren, hanya mengikuti tren yang kuat
  4. MACD menilai konsistensi garis pendek dan panjang
  5. Menghindari risiko malam hari dengan membatasi waktu trading

Dengan mengevaluasi kombinasi indikator, dapat meminimalkan sinyal palsu dan meningkatkan stabilitas strategi.

Analisis risiko

Risiko utama dari strategi ini berasal dari:

  1. Kejadian tak terduga menyebabkan indikator tidak berfungsi
  2. Banyak sinyal palsu yang dihasilkan dari gempa

Untuk risiko 1, karena bergantung pada beberapa indikator, dapat dihindari sebagian dari kegagalan indikator tunggal, tetapi masih perlu memperbaiki mekanisme pengendalian risiko.

Untuk risiko 2, parameter dapat disesuaikan dengan tepat, mengurangi interval perdagangan, mengurangi frekuensi perdagangan, dan mengurangi risiko.

Arah optimasi

Strategi yang dapat dioptimalkan meliputi:

  1. Menambahkan mekanisme stop loss, seperti stop loss bergerak, stop loss waktu, stop loss terobosan, dan lain-lain, untuk menghindari penarikan terlalu dalam
  2. Optimalkan parameter, sesuaikan kombinasi parameter indikator, cari parameter optimal
  3. Menambahkan kondisi penyaringan, seperti penyaringan kuantitatif, untuk menghindari penembusan palsu dalam jumlah kecil
  4. Tergabung dengan lebih banyak indikator, seperti KDJ, OBV, dan lain-lain, untuk meningkatkan akurasi sinyal
  5. Parameter yang dioptimalkan secara otomatis menggunakan metode pembelajaran mesin

Dengan terus mengoptimalkan, terus meningkatkan kekuatan parameter strategi dan mengurangi probabilitas sinyal palsu.

Meringkaskan

Strategi ini secara keseluruhan memiliki kemampuan yang kuat untuk mengidentifikasi sinyal tren, dan dapat secara efektif mengidentifikasi tren harga melalui kombinasi indikator.

Namun ada juga risiko tertentu, yang memerlukan perbaikan terus-menerus pada mekanisme kontrol angin, terus-menerus mengoptimalkan parameter, agar dapat beroperasi secara stabil dalam jangka panjang. Jika metode pembelajaran mesin dan lain-lain dapat diperkenalkan di kemudian hari untuk mengoptimalkan parameter secara otomatis, maka akan sangat meningkatkan keanggunan dan kemampuan keuntungan dari strategi tersebut.

Kode Sumber Strategi
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 5h
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/
// © abilash.s.90


dIMinusCalc(adxLen) =>
    
    smoothedTrueRange = 0.0
    smoothedDirectionalMovementMinus = 0.0
    dIMinus = 0.0
    trueRange = 0.0
    directionalMovementMinus = 0.0
    
    trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
    directionalMovementMinus := nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
    
    smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange
    smoothedDirectionalMovementMinus := nz(smoothedDirectionalMovementMinus[1]) - (nz(smoothedDirectionalMovementMinus[1])/adxLen) + directionalMovementMinus
    
    dIMinus := smoothedDirectionalMovementMinus / smoothedTrueRange * 100
    
    dIMinus

dIPlusCalc(adxLen) =>
    
    smoothedTrueRange = 0.0
    smoothedDirectionalMovementPlus = 0.0
    dIPlus =  0.0
    trueRange = 0.0
    directionalMovementPlus = 0.0
    
    trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
    directionalMovementPlus := high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
    
    smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange
    smoothedDirectionalMovementPlus := nz(smoothedDirectionalMovementPlus[1]) - (nz(smoothedDirectionalMovementPlus[1])/adxLen) + directionalMovementPlus
    
    dIPlus := smoothedDirectionalMovementPlus / smoothedTrueRange * 100
    
    dIPlus
    
    
Adx(adxLen) =>
    dIPlus =  0.0
    dIMinus = 0.0
    dX = 0.0
    aDX = 0.0
    dIPlus := dIPlusCalc(adxLen)
    dIMinus := dIMinusCalc(adxLen)
    dX := abs(dIPlus-dIMinus) / (dIPlus+dIMinus)*100
    aDX := sma(dX, adxLen)
    
    aDX
    
BarInSession(sess) => time(timeframe.period, sess) != 0


//@version=4
strategy("Bollinger Band + RSI + ADX + MACD", overlay=true)

//Session

session = input(title="Trading Session", type=input.session, defval="0930-1500")

sessionColor = BarInSession(session) ? color.green : na

bgcolor(color=sessionColor, transp=95)

// Bollinger Bands
src = input(high, title="Bollinger Band Source", type=input.source)
length = input(3, minval=1, type=input.integer, title="Bollinger Band Length")
mult = input(4.989, minval=0.001, maxval=50, step=0.001, type=input.float, title="Bollinger Band Std Dev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev


plot(upper, title="Bollinger Band Upper", color=color.red)
plot(lower, title="Bollinger Band Lower", color=color.green)

// RSI
rsiSrc = input(close, title="RSI Source", type=input.source)
rsiLength = input(16, minval=1, type=input.integer, title="RSI Length")
rsiComparator = input(39.2, title="RSI Comparator", type=input.float, step=0.1)

rsi = rsi(rsiSrc, rsiLength)

// ADX
adxLength = input(14, minval=1, type=input.integer, title="ADX Length")
adxComparator = input(14, minval=1, type=input.integer, title="ADX Comparator")

adx = Adx(adxLength)

// Heikinashi

haClose = security(heikinashi(syminfo.ticker), timeframe.period, close)
haOpen = security(heikinashi(syminfo.ticker), timeframe.period, open)

nextHaOpen = (haOpen + haClose) / 2

//MACD

macdCalcTypeProcessed = input(title="MACD Source", type=input.source, defval=high)
fast = input(12, title="MACD Fast")
slow = input(20, title="MACD Slow")
signalLen = input(15, title="MACD Signal")

fastMA = ema(macdCalcTypeProcessed, fast)
slowMA = ema(macdCalcTypeProcessed, slow)
macd = fastMA - slowMA
signal = sma(macd, signalLen)



longCondition() =>
    (low < lower) and (rsi[0] > rsiComparator) and (adx > adxComparator) and (close > nextHaOpen) and BarInSession(session) and macd > signal

stop = (close - max((low - (low * 0.0022)), (close - (close * 0.0032)))) / syminfo.mintick
target = (max(upper, (close + (close * 0.0075))) - close) / syminfo.mintick


strategy.entry("SX,LE", strategy.long, when=longCondition(), comment="SX,LE")
strategy.close_all(when=(not BarInSession(session)))
strategy.exit("LX", from_entry="SX,LE", profit=target, loss=stop)