Tài nguyên đang được tải lên... tải...

Xu hướng tham số thích nghi dựa trên KNN theo chiến lược

Tác giả:ChaoZhang, Ngày: 2024-11-29 10:54:49
Tags:MAKNNSMA

img

Tổng quan

Chiến lược này là một hệ thống theo xu hướng tham số thích nghi dựa trên thuật toán học máy K-Nearest Neighbors (KNN). Chiến lược điều chỉnh động các tham số theo xu hướng thông qua thuật toán KNN và tạo ra các tín hiệu giao dịch kết hợp với đường trung bình động. Hệ thống có thể tự động điều chỉnh các tham số chiến lược dựa trên những thay đổi trong điều kiện thị trường, cải thiện khả năng thích nghi và ổn định của chiến lược. Chiến lược này kết hợp các phương pháp học máy để tối ưu hóa các chiến lược theo xu hướng truyền thống, đại diện cho sự hợp nhất của công nghệ và đổi mới trong đầu tư định lượng.

Nguyên tắc chiến lược

Nguyên tắc cốt lõi của chiến lược là phân tích dữ liệu giá lịch sử bằng cách sử dụng thuật toán KNN và dự đoán xu hướng giá bằng cách tính toán sự tương đồng giữa điều kiện thị trường hiện tại và dữ liệu lịch sử.

  1. Đặt kích thước cửa sổ quan sát và giá trị K, thu thập dữ liệu giá lịch sử để hình thành các vector đặc điểm
  2. Tính toán khoảng cách Euclidean giữa chuỗi giá hiện tại và dữ liệu lịch sử
  3. Chọn K chuỗi giá lịch sử tương tự nhất như các mẫu hàng xóm
  4. Phân tích các chuyển động giá tiếp theo của các mẫu hàng xóm K này
  5. Tạo tín hiệu giao dịch dựa trên thay đổi giá trung bình của các mẫu lân cận kết hợp với đường trung bình động Khi thay đổi giá trung bình của các mẫu hàng xóm K là dương tính và giá hiện tại cao hơn mức trung bình động, hệ thống tạo ra tín hiệu dài; nếu không, nó tạo ra tín hiệu ngắn.

Ưu điểm chiến lược

  1. Khả năng thích nghi mạnh: thuật toán KNN có thể tự động điều chỉnh các tham số dựa trên những thay đổi môi trường thị trường
  2. Phân tích đa chiều: Kết hợp các thuật toán học máy và các chỉ số kỹ thuật để phân tích thị trường toàn diện hơn
  3. Kiểm soát rủi ro hợp lý: Sử dụng đường trung bình động như là sự xác nhận phụ để giảm tác động của tín hiệu sai
  4. Logic tính toán rõ ràng: Quá trình thực hiện chiến lược minh bạch và dễ hiểu và tối ưu hóa
  5. Các tham số linh hoạt: Giá trị K và kích thước cửa sổ có thể được điều chỉnh theo môi trường thị trường khác nhau

Rủi ro chiến lược

  1. Sự phức tạp tính toán cao: thuật toán KNN yêu cầu tính toán một lượng lớn dữ liệu lịch sử
  2. Độ nhạy của tham số: Sự lựa chọn giá trị K và kích thước cửa sổ ảnh hưởng đáng kể đến hiệu suất chiến lược
  3. Sự phụ thuộc vào môi trường thị trường: Giá trị tham chiếu của sự tương đồng trong lịch sử có thể giảm trong các thị trường biến động
  4. Rủi ro quá phù hợp: Sự phụ thuộc quá nhiều vào dữ liệu lịch sử có thể dẫn đến quá phù hợp chiến lược
  5. Rủi ro chậm trễ: Có thể có sự chậm trễ tín hiệu do cần thu thập đủ dữ liệu lịch sử

Hướng dẫn tối ưu hóa chiến lược

  1. Tối ưu hóa kỹ thuật tính năng:
  • Thêm thêm các chỉ số kỹ thuật như các tính năng
  • giới thiệu các chỉ số tâm lý thị trường
  • Tối ưu hóa các phương pháp tiêu chuẩn hóa tính năng
  1. Cải thiện hiệu quả thuật toán:
  • Tối ưu hóa tìm kiếm hàng xóm gần nhất bằng cây KD
  • Thực hiện tính toán song song
  • Tối ưu hóa phương pháp lưu trữ và truy cập dữ liệu
  1. Tăng cường kiểm soát rủi ro:
  • Thêm các cơ chế dừng lỗ và lấy lợi nhuận
  • Thiết lập bộ lọc biến động
  • Thiết kế hệ thống quản lý vị trí động
  1. Giải pháp tối ưu hóa tham số:
  • Thực hiện lựa chọn giá trị K thích nghi
  • Điều chỉnh động kích thước cửa sổ quan sát
  • Tối ưu hóa thời gian trung bình động
  1. Cải thiện cơ chế tạo tín hiệu:
  • Đưa ra hệ thống đánh giá sức mạnh tín hiệu
  • Cơ chế xác nhận tín hiệu thiết kế
  • Tối ưu hóa thời gian vào và ra

Tóm lại

Chiến lược này áp dụng thuật toán KNN sáng tạo cho xu hướng sau giao dịch, tối ưu hóa các chiến lược phân tích kỹ thuật truyền thống thông qua các phương pháp học máy. Chiến lược có khả năng thích nghi và linh hoạt mạnh mẽ, có khả năng điều chỉnh các tham số theo động dựa trên điều kiện thị trường. Mặc dù có những rủi ro như độ phức tạp tính toán cao và độ nhạy của tham số, chiến lược vẫn có giá trị ứng dụng tốt thông qua các biện pháp tối ưu hóa và kiểm soát rủi ro hợp lý.


/*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)



Có liên quan

Thêm nữa