Algoritma jiran K-terdekat berbilang dimensi dan strategi dagangan analisis harga jumlah corak candlestick

SMA KNN RSI VOL MA SD
Tarikh penciptaan: 2025-01-17 16:10:07 Akhirnya diubah suai: 2025-01-17 16:10:07
Salin: 0 Bilangan klik: 436
1
fokus pada
1617
Pengikut

Algoritma jiran K-terdekat berbilang dimensi dan strategi dagangan analisis harga jumlah corak candlestick

Gambaran keseluruhan

Strategi ini ialah sistem perdagangan komprehensif yang menggabungkan algoritma pembelajaran mesin jiran terdekat K (KNN), pengecaman corak candlestick dan analisis volum. Strategi ini membentuk rangka kerja analisis tiga dimensi untuk pasaran melalui kaedah analisis berbilang dimensi, termasuk saluran purata bergerak, pengesahan ambang volum dan statistik kebarangkalian, dengan itu menangkap peluang perdagangan yang berpotensi.

Prinsip Strategi

Logik teras strategi adalah berdasarkan elemen utama berikut:

  1. Gunakan purata bergerak (SMA) dan sisihan piawai untuk membina saluran harga bagi mengenal pasti kawasan terlebih beli dan terlebih jual
  2. Kenal pasti sembilan corak candlestick klasik melalui keadaan yang ditakrifkan secara atur cara, termasuk tukul, bintang jatuh, menelan, dsb.
  3. Memperkenalkan algoritma KNN untuk mempelajari arah aliran harga sejarah dan meramalkan kemungkinan arah aliran harga masa hadapan
  4. Menggunakan volum dagangan sebagai penunjuk pengesahan isyarat memerlukan volum dagangan mestilah lebih tinggi daripada ambang yang ditetapkan apabila isyarat dicetuskan
  5. Kira taburan kebarangkalian naik dan turun dan gunakannya sebagai salah satu syarat penapisan isyarat

Kelebihan Strategik

  1. Mekanisme pengesahan isyarat berbilang peringkat meningkatkan kebolehpercayaan transaksi dengan ketara
  2. Pengenalan algoritma KNN menyediakan perspektif pembelajaran mesin untuk analisis teknikal tradisional
  3. Mekanisme pengesahan volum berkesan mengelakkan penemuan palsu
  4. Lukisan dinamik garis sokongan dan rintangan membantu mengenal pasti tahap harga yang penting
  5. Sistem amaran yang komprehensif memastikan anda tidak akan terlepas peluang perdagangan yang penting
  6. Parameter strategi sangat boleh dilaraskan dan boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza

Risiko Strategik

  1. Algoritma KNN mungkin ketinggalan dalam pasaran yang tidak menentu
  2. Terlalu banyak syarat penapisan isyarat boleh menyebabkan kehilangan beberapa peluang dagangan
  3. Ambang volum tetap mungkin perlu dilaraskan secara dinamik dalam tempoh yang berbeza
  4. Terlalu banyak isyarat palsu mungkin dijana semasa fasa sisi Disyorkan:
  • Laraskan parameter algoritma secara dinamik
  • Memperkenalkan mekanisme pengenalan persekitaran pasaran
  • Tetapkan had kerugian maksimum
  • Wujudkan sistem pengurusan gudang

Arah pengoptimuman strategi

  1. Memperkenalkan mekanisme pelarasan parameter penyesuaian untuk membolehkan strategi melaraskan parameter secara automatik mengikut keadaan pasaran
  2. Mengintegrasikan algoritma pembelajaran mendalam untuk meningkatkan ketepatan ramalan
  3. Menambah lebih banyak petunjuk struktur mikro pasaran
  4. Mengoptimumkan kaedah pengiraan dinamik ambang volum dagangan
  5. Wujudkan sistem kawalan risiko yang lebih lengkap

ringkaskan

Strategi ini membina sistem perdagangan yang teguh dengan menggabungkan analisis teknikal tradisional dengan kaedah pembelajaran mesin moden. Rangka kerja analisis pelbagai dimensi strategi dan mekanisme pengesahan isyarat yang ketat menyediakan asas yang boleh dipercayai untuk keputusan perdagangan. Melalui pengoptimuman berterusan dan kawalan risiko, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam pelbagai persekitaran pasaran.

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