Эта стратегия представляет собой адаптивную параметрическую систему трендоучения, основанную на алгоритме машинного обучения K-Nearest Neighbors (KNN). Стратегия динамически корректирует параметры трендоучения через алгоритм KNN и генерирует торговые сигналы в сочетании с скользящими средними. Система может автоматически корректировать параметры стратегии на основе изменений рыночных условий, улучшая адаптивность и стабильность стратегии. Эта стратегия сочетает методы машинного обучения для оптимизации традиционных стратегий трендоучения, представляя собой слияние технологии и инноваций в количественных инвестициях.
Основной принцип стратегии заключается в анализе исторических данных о ценах с использованием алгоритма KNN и прогнозировании ценовых тенденций путем расчета сходства между текущими рыночными условиями и историческими данными.
Эта стратегия инновационно применяет алгоритм KNN к тренду после торговли, оптимизируя традиционные стратегии технического анализа с помощью методов машинного обучения. Стратегия обладает сильной адаптивностью и гибкостью, способной динамически корректировать параметры на основе рыночных условий. Хотя существуют риски, такие как высокая вычислительная сложность и чувствительность параметров, стратегия по-прежнему имеет хорошую ценность приложения благодаря разумным мерам оптимизации и контроля рисков. Рекомендуется, чтобы инвесторы корректировали параметры в соответствии с характеристиками рынка и комбинировали другие методы анализа для принятия торговых решений в практических приложениях.
/*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)