Sumber dimuat naik... memuat...

Trend Parameter Adaptif Berasaskan KNN Mengikut Strategi

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

img

Ringkasan

Strategi ini adalah sistem mengikuti trend parameter adaptif berdasarkan algoritma pembelajaran mesin K-Nearest Neighbors (KNN). Strategi ini secara dinamik menyesuaikan trend mengikuti parameter melalui algoritma KNN dan menjana isyarat perdagangan dalam kombinasi dengan purata bergerak. Sistem ini boleh menyesuaikan parameter strategi secara automatik berdasarkan perubahan dalam keadaan pasaran, meningkatkan daya adaptasi dan kestabilan strategi. Strategi ini menggabungkan kaedah pembelajaran mesin untuk mengoptimumkan strategi mengikuti trend tradisional, mewakili penggabungan teknologi dan inovasi dalam pelaburan kuantitatif.

Prinsip Strategi

Prinsip teras strategi adalah untuk menganalisis data harga sejarah menggunakan algoritma KNN dan meramalkan trend harga dengan mengira persamaan antara keadaan pasaran semasa dan data sejarah.

  1. Tetapkan saiz tetingkap pemerhatian dan nilai K, mengumpul data harga sejarah untuk membentuk vektor ciri
  2. Mengira jarak Euclidean antara urutan harga semasa dan data sejarah
  3. Pilih K urutan harga sejarah yang paling serupa sebagai sampel jiran
  4. Menganalisis pergerakan harga seterusnya sampel jiran K ini
  5. Menghasilkan isyarat perdagangan berdasarkan perubahan harga purata sampel jiran digabungkan dengan purata bergerak Apabila perubahan harga purata sampel jiran K adalah positif dan harga semasa di atas purata bergerak, sistem menghasilkan isyarat panjang; jika tidak, ia menghasilkan isyarat pendek.

Kelebihan Strategi

  1. Kemudahan penyesuaian yang kuat: Algoritma KNN boleh menyesuaikan parameter secara automatik berdasarkan perubahan persekitaran pasaran
  2. Analisis pelbagai dimensi: Menggabungkan algoritma pembelajaran mesin dan penunjuk teknikal untuk analisis pasaran yang lebih komprehensif
  3. Kawalan risiko yang munasabah: Menggunakan purata bergerak sebagai pengesahan tambahan untuk mengurangkan kesan isyarat palsu
  4. Logik pengiraan yang jelas: Proses pelaksanaan strategi adalah telus dan mudah difahami dan dioptimumkan
  5. Parameter fleksibel: Nilai K dan saiz tingkap boleh diselaraskan mengikut persekitaran pasaran yang berbeza

Risiko Strategi

  1. Kerumitan pengiraan yang tinggi: Algoritma KNN memerlukan pengiraan jumlah data sejarah yang besar
  2. Sensitiviti parameter: Pilihan nilai K dan saiz tetingkap memberi kesan yang ketara kepada prestasi strategi
  3. Kebergantungan persekitaran pasaran: Nilai rujukan kesamaan sejarah mungkin menurun di pasaran yang tidak menentu
  4. Risiko overfitting: ketergantungan yang berlebihan pada data sejarah boleh membawa kepada overfitting strategi
  5. Risiko kelewatan: Kelewatan isyarat mungkin wujud kerana keperluan untuk pengumpulan data sejarah yang mencukupi

Arahan Pengoptimuman Strategi

  1. Optimasi Kejuruteraan Ciri:
  • Tambah lebih banyak penunjuk teknikal sebagai ciri
  • Memperkenalkan penunjuk sentimen pasaran
  • Mengoptimumkan kaedah standardisasi ciri
  1. Penambahbaikan kecekapan algoritma:
  • Mengoptimumkan carian jiran terdekat menggunakan pokok KD
  • Melaksanakan pengkomputeran selari
  • Mengoptimumkan kaedah penyimpanan dan akses data
  1. Peningkatan Kawalan Risiko:
  • Tambahkan mekanisme stop-loss dan mengambil keuntungan
  • Memperkenalkan penapis turun naik
  • Reka bentuk sistem pengurusan kedudukan dinamik
  1. Penyelesaian Pengoptimuman Parameter:
  • Melaksanakan pilihan nilai K adaptif
  • Sesuaikan saiz tetingkap pemerhatian secara dinamik
  • Mengoptimumkan tempoh purata bergerak
  1. Peningkatan mekanisme penjanaan isyarat:
  • Memperkenalkan sistem penilaian kekuatan isyarat
  • Mekanisme pengesahan isyarat reka bentuk
  • Mengoptimumkan masa masuk dan keluar

Ringkasan

Strategi ini secara inovatif menggunakan algoritma KNN untuk trend mengikuti perdagangan, mengoptimumkan strategi analisis teknikal tradisional melalui kaedah pembelajaran mesin. Strategi ini mempunyai daya adaptasi dan fleksibiliti yang kuat, mampu menyesuaikan parameter secara dinamik berdasarkan keadaan pasaran. Walaupun risiko seperti kerumitan pengkomputeran yang tinggi dan kepekaan parameter ada, strategi ini masih mempunyai nilai aplikasi yang baik melalui pengoptimuman yang munasabah dan langkah kawalan risiko.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Trend Following Strategy with KNN", overlay=true,commission_value=0.03,currency='USD', commission_type=strategy.commission.percent,default_qty_type=strategy.cash)


// Input parameters
k = input.int(5, title="K (Number of Neighbors)", minval=1)  // Number of neighbors for KNN algorithm
window_size = input.int(20, title="Window Size", minval=1)  // Window size for feature vector calculation
ma_length = input.int(50, title="MA Length", minval=1)  // Length of the moving average

// Calculate moving average
ma = ta.sma(close, ma_length)

// Initialize variables
var float[] features = na
var float[] distances = na
var int[] nearest_neighbors = na

if bar_index >= window_size - 1  // Ensure there is enough historical data
    features := array.new_float(0)  // Keep only the current window data
    for i = 0 to window_size - 1
        array.push(features, close[i])

    // Calculate distances
    distances := array.new_float(0)  // Clear the array for each calculation
    for i = 0 to window_size - 1  // Calculate the distance between the current price and all prices in the window
        var float distance = 0.0
        for j = 0 to window_size - 1
            distance += math.pow(close[j] - array.get(features, j), 2)
        distance := math.sqrt(distance)
        array.push(distances, distance)

    // Find the nearest neighbors
    if array.size(distances) > 0 and array.size(distances) >= k
        nearest_neighbors := array.new_int(0)
        for i = 0 to k - 1
            var int min_index = -1
            var float min_distance = na
            for j = 0 to array.size(distances) - 1
                if na(min_distance) or array.get(distances, j) < min_distance
                    min_index := j
                    min_distance := array.get(distances, j)
            if min_index != -1
                array.push(nearest_neighbors, min_index)
                array.remove(distances, min_index)  // Remove the processed neighbor

    // Calculate the average price change of the neighbors
    var float average_change = 0.0
    if array.size(nearest_neighbors) > 0
        for i = 0 to array.size(nearest_neighbors) - 1
            var int index = array.get(nearest_neighbors, i)
            // Ensure index + 1 is within range
            if index + 1 < bar_index
                average_change += (close[index] - close[index + 1])
        average_change := average_change / array.size(nearest_neighbors)

    // Generate trading signals
    if average_change > 0 and close > ma
        strategy.entry("Long", strategy.long)
    else if average_change < 0 and close < ma
        strategy.entry("Short", strategy.short)



Berkaitan

Lebih lanjut