Strategi mengikut arah aliran kuantitatif


Tarikh penciptaan: 2024-02-01 11:42:22 Akhirnya diubah suai: 2024-02-01 11:42:22
Salin: 0 Bilangan klik: 524
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran kuantitatif

Gambaran keseluruhan

Strategi ini menggunakan beberapa petunjuk seperti Brinband, RSI, ADX, MACD untuk menilai trend pasaran, dengan keupayaan pengenalan trend yang kuat. Apabila isyarat indikator sama-sama bullish, mengambil strategi mengejar; Apabila isyarat indikator sama-sama bearish, berhenti posisi.

Prinsip Strategi

  • Menggunakan Bollinger Bands untuk menentukan sama ada harga berada di Bollinger Bands berhampiran dengan uptrend atau downtrend sebagai asas untuk menentukan sama ada trend telah terbentuk
  • Menggunakan RSI untuk menentukan sama ada anda berada dalam zon overbought atau oversold untuk mengelakkan false breakout
  • Menggunakan ADX untuk menilai kekuatan trend, hanya memberi isyarat apabila trend kuat
  • Menggunakan MACD untuk menentukan keserasian trend jangka pendek dan jangka panjang
  • Berkongsi tempoh hari, hanya berdagang pada masa yang ditetapkan

Mengambil keputusan melalui gabungan pelbagai petunjuk, mengenal pasti trend harga dengan tepat, menjejaki trend tepat pada masanya, dan mencapai keuntungan tambahan.

Analisis kelebihan

Kelebihan utama strategi ini adalah bahawa penilaian gabungan penunjuk lebih komprehensif dan tepat, yang dapat mengesan trend harga dengan berkesan dan mengelakkan isyarat palsu yang disebabkan oleh satu petunjuk.

Secara khusus, ia mempunyai kelebihan:

  1. Brinband dapat menentukan tahap dan kekuatan pergerakan harga
  2. RSI mengelak daripada membeli di kawasan overbought dan menjual di kawasan oversold
  3. ADX menilai kekuatan trend, hanya mengikut trend yang kuat
  4. MACD menilai kesesuaian garis pendek dan panjang
  5. Hadkan masa dagangan untuk mengelakkan risiko bermalam

Mengambil keputusan melalui gabungan indikator, ia dapat mengurangkan isyarat palsu dan meningkatkan kestabilan strategi.

Analisis risiko

Risiko utama dari strategi ini adalah:

  1. Kejadian yang tidak dijangka menyebabkan indikator tidak berfungsi
  2. Banyak isyarat palsu dihasilkan semasa gempa

Untuk risiko 1, kerana bergantung kepada pelbagai petunjuk, masalah kegagalan satu petunjuk dapat dielakkan, tetapi mekanisme kawalan risiko masih perlu diperbaiki.

Untuk risiko 2, parameter boleh disesuaikan dengan sewajarnya, mengurangkan jarak perdagangan, mengurangkan kekerapan perdagangan, mengurangkan risiko.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Menambah mekanisme penangguhan, seperti penangguhan bergerak, penangguhan masa, penangguhan penembusan, dan lain-lain, untuk mengelakkan penarikan balik yang terlalu dalam
  2. Optimumkan parameter, sesuaikan kombinasi parameter penunjuk, cari parameter optimum
  3. Menambah syarat penapisan, seperti penapisan kuantitatif, untuk mengelakkan penembusan palsu yang kecil
  4. Gabungan dengan lebih banyak petunjuk seperti KDJ, OBV dan lain-lain untuk meningkatkan ketepatan isyarat
  5. Parameter pengoptimuman automatik menggunakan kaedah pembelajaran mesin

Dengan terus mengoptimumkan, terus meningkatkan kekuatan parameter strategi dan mengurangkan kemungkinan isyarat palsu.

ringkaskan

Strategi ini secara keseluruhannya mempunyai keupayaan yang kuat untuk mengenal pasti isyarat trend, dan dapat mengenal pasti trend harga secara berkesan melalui gabungan indikator, max.

Walau bagaimanapun, terdapat risiko tertentu, yang memerlukan mekanisme kawalan angin yang terus diperbaiki dan parameter yang terus dioptimumkan untuk operasi yang stabil dalam jangka masa panjang. Jika kaedah pembelajaran mesin dan lain-lain dapat diperkenalkan pada masa akan datang untuk mengoptimumkan parameter secara automatik, ini akan meningkatkan kebolehpercayaan dan keuntungan strategi.

Kod 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)