Algoritma K-nearest neighbor multi-dimensi dan strategi perdagangan analisis volume harga pola candlestick

SMA KNN RSI VOL MA SD
Tanggal Pembuatan: 2025-01-17 16:10:07 Akhirnya memodifikasi: 2025-01-17 16:10:07
menyalin: 0 Jumlah klik: 436
1
fokus pada
1617
Pengikut

Algoritma K-nearest neighbor multi-dimensi dan strategi perdagangan analisis volume harga pola candlestick

Ringkasan

Strategi ini adalah sistem perdagangan komprehensif yang menggabungkan algoritma pembelajaran mesin K-nearest neighbor (KNN), pengenalan pola kandil, dan analisis volume. Strategi ini membentuk kerangka analisis tiga dimensi untuk pasar melalui metode analisis multidimensi, termasuk saluran rata-rata bergerak, verifikasi ambang batas volume, dan statistik probabilitas, sehingga menangkap peluang perdagangan potensial.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada elemen-elemen kunci berikut:

  1. Gunakan moving average (SMA) dan deviasi standar untuk membangun saluran harga guna mengidentifikasi area overbought dan oversold
  2. Mengenali sembilan pola kandil klasik melalui kondisi yang ditentukan secara terprogram, termasuk palu, bintang jatuh, menelan, dsb.
  3. Perkenalkan algoritma KNN untuk mempelajari tren harga historis dan memprediksi kemungkinan tren harga di masa mendatang
  4. Penggunaan volume perdagangan sebagai indikator konfirmasi sinyal mengharuskan volume perdagangan harus lebih tinggi dari ambang batas yang ditetapkan saat sinyal dipicu
  5. Hitung distribusi probabilitas naik dan turun dan gunakan sebagai salah satu kondisi penyaringan sinyal

Keunggulan Strategis

  1. Mekanisme konfirmasi sinyal multi-level secara signifikan meningkatkan keandalan transaksi
  2. Pengenalan algoritma KNN memberikan perspektif pembelajaran mesin untuk analisis teknis tradisional
  3. Mekanisme verifikasi volume secara efektif menghindari terobosan palsu
  4. Gambar dinamis garis support dan resistance membantu mengidentifikasi level harga yang penting
  5. Sistem peringatan yang komprehensif memastikan Anda tidak akan melewatkan peluang perdagangan penting
  6. Parameter strategi sangat dapat disesuaikan dan dapat beradaptasi dengan lingkungan pasar yang berbeda

Risiko Strategis

  1. Algoritma KNN mungkin tertinggal di pasar yang bergejolak
  2. Kondisi penyaringan sinyal yang berlebihan dapat menyebabkan hilangnya beberapa peluang perdagangan
  3. Ambang batas volume tetap mungkin perlu disesuaikan secara dinamis dalam periode yang berbeda
  4. Terlalu banyak sinyal palsu yang mungkin dihasilkan selama fase samping Direkomendasikan:
  • Sesuaikan parameter algoritma secara dinamis
  • Memperkenalkan mekanisme identifikasi lingkungan pasar
  • Tetapkan batas kerugian maksimum
  • Membangun sistem manajemen pergudangan

Arah optimasi strategi

  1. Memperkenalkan mekanisme penyesuaian parameter adaptif untuk memungkinkan strategi menyesuaikan parameter secara otomatis sesuai dengan kondisi pasar
  2. Integrasikan algoritma pembelajaran mendalam untuk meningkatkan akurasi prediksi
  3. Menambahkan lebih banyak indikator mikrostruktur pasar
  4. Mengoptimalkan metode perhitungan dinamis ambang batas volume perdagangan
  5. Membangun sistem pengendalian risiko yang lebih lengkap

Meringkaskan

Strategi ini membangun sistem perdagangan yang kuat dengan menggabungkan analisis teknis tradisional dengan metode pembelajaran mesin modern. Kerangka kerja analisis multidimensi dan mekanisme konfirmasi sinyal yang ketat dari strategi ini menyediakan dasar yang dapat diandalkan untuk keputusan perdagangan. Melalui optimalisasi berkelanjutan dan pengendalian risiko, strategi ini diharapkan dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar.

Kode Sumber Strategi
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Candle Pattern Analyzer with Volume", overlay=true)

// Input parameters
length = input.int(20, "Channel Length", minval=1)
mult = input.float(2.0, "Volatility Multiplier", minval=0.1)
candleLength = input.int(5, "Candle Length", minval=1)
k = input.int(5, "KNN Neighbors", minval=1)
volumeThreshold = input.int(100000, "Volume Threshold", minval=1)

// Calculate channel
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// Plot channel
plot(basis, color=color.blue)
plot(upper, color=color.green)
plot(lower, color=color.red)

// Identify candle patterns
isBullish = close > open
isBearish = close < open

// Pre-calculate SMAs
smaLow = ta.sma(low, candleLength)
smaHigh = ta.sma(high, candleLength)
smaClose = ta.sma(close, candleLength)

// Hammer pattern
isHammer = isBullish and 
           low < smaLow and 
           close > smaClose and 
           (close - low) / (high - low) > 0.6 and
           low < low[1]

// Shooting Star pattern
isShootingStar = isBearish and 
                 high > smaHigh and 
                 close < smaClose and 
                 (high - close) / (high - low) > 0.6 and
                 high > high[1]

// Inverse Hammer pattern
isInverseHammer = isBullish and 
                   high > smaHigh and 
                   close < smaClose and 
                   (high - close) / (high - low) > 0.6 and
                   high > high[1]

// Bullish Engulfing pattern
isBullishEngulfing = isBullish and 
                      close > high[1] and 
                      open < low[1]

// Bearish Engulfing pattern
isBearishEngulfing = isBearish and 
                      close < low[1] and 
                      open > high[1]

// Morning Star pattern
isMorningStar = isBullish and close[2] < open[2] and close[1] < open[1] and  close > open[1]

// Evening Star pattern
isEveningStar = isBearish and  close[2] > open[2] and  close[1] > open[1] and  close < open[1]

// Three Black Crows pattern
isThreeBlackCrows = isBearish and 
                     close < close[1] and 
                     close[1] < close[2] and 
                     close[2] < close[3]

// Three White Soldiers pattern
isThreeWhiteSoldiers = isBullish and close > close[1] and  close[1] > close[2] and  close[2] > close[3]

// Compare previous candles
prevCandleUp = close[1] > open[1]
prevCandleDown = close[1] < open[1]

// Calculate probability
probUp = ta.sma(close > open ? 1 : 0, candleLength) / candleLength
probDown = ta.sma(close < open ? 1 : 0, candleLength) / candleLength

// Generate signals
buySignal = isHammer and prevCandleDown and probUp > probDown and volume > volumeThreshold
sellSignal = isShootingStar and prevCandleUp and probDown > probUp and volume > volumeThreshold

// Highlight patterns
color candleColor = na
if (isHammer)
    candleColor := color.green
    label.new(bar_index, high, "Hammer", color=color.green, style=label.style_label_up)

else if (isShootingStar)
    candleColor := color.red
    label.new(bar_index, low, "Shooting Star", color=color.red, style=label.style_label_down)
else if (isInverseHammer)
    candleColor := color.blue
    label.new(bar_index, high, "Inverse Hammer", color=color.blue, style=label.style_label_up)
else if (isBullishEngulfing)
    candleColor := color.yellow
    label.new(bar_index, high, "Bullish Engulfing", color=color.yellow, style=label.style_label_up)
else if (isBearishEngulfing)
    candleColor := color.purple
    label.new(bar_index, low, "Bearish Engulfing", color=color.purple, style=label.style_label_down)

else if (isMorningStar)
    candleColor := color.orange
    label.new(bar_index, high, "Morning Star", color=color.orange, style=label.style_label_up)

else if (isEveningStar)
    candleColor := color.new(color.red, 80)
    label.new(bar_index, low, "Evening Star", color=color.new(color.red, 80), style=label.style_label_down)

else if (isThreeBlackCrows)
    candleColor := color.black
    label.new(bar_index, low, "Three Black Crows", color=color.black, style=label.style_label_down)

else if (isThreeWhiteSoldiers)
    candleColor := color.white
    label.new(bar_index, high, "Three White Soldiers", color=color.white, style=label.style_label_up)


// Plot candles
barcolor(candleColor)

// KNN algorithm
var float[] knnData = array.new_float(k, na)
var float[] knnLabels = array.new_float(k, na) // Create an array to store KNN labels
array.set(knnLabels, 0, 1.0) // Label for "up" movement

// Shift KNN dataset to make room for new data point
for i = 1 to k-1
    array.set(knnData, i, array.get(knnData, i-1))
    array.set(knnLabels, i, array.get(knnLabels, i-1))

// Predict next movement using KNN algorithm
float prediction = 0.0
for i = 0 to k-1
    float distance = math.abs(close - array.get(knnData, i))
    prediction += array.get(knnLabels, i) / distance

prediction /= k

// Plot prediction
// line.new(bar_index, close, bar_index + 1, prediction, color=color.purple)

// Plot resistance and support lines
float resistance = ta.sma(high, length)
float support = ta.sma(low, length)
// line.new(bar_index, resistance, bar_index + 1, resistance, color=color.green, style=line.style_dashed)
// line.new(bar_index, support, bar_index + 1, support, color=color.red, style=line.style_dashed)

// Plot buy and sell signals with prices
if (buySignal)
    // label.new(bar_index, low, "Buy at " + str.tostring(low), color=color.green, style=label.style_label_up)
    strategy.entry("Buy", strategy.long, comment="Buy at " + str.tostring(low))
if (sellSignal)
    // label.new(bar_index, high, "Sell at " + str.tostring(high), color=color.red, style=label.style_label_down)
    strategy.entry("Sell", strategy.short, comment="Sell at " + str.tostring(high))

// Create alerts
alertcondition(buySignal, title="Buy Signal", message="Buy signal generated!")
alertcondition(sellSignal, title="Sell Signal", message="Sell signal generated!")