Адаптивная параметризованная стратегия отслеживания тренда KNN

MA KNN SMA
Дата создания: 2024-11-29 10:54:49 Последнее изменение: 2024-11-29 10:54:49
Копировать: 0 Количество просмотров: 517
1
Подписаться
1617
Подписчики

Адаптивная параметризованная стратегия отслеживания тренда KNN

Обзор

Эта стратегия является самостоятельной адаптивной параметрической системой отслеживания тенденций, основанной на алгоритме машинного обучения K близко к {\displaystyle K} . Эта стратегия динамически корректирует параметры отслеживания тенденций с помощью алгоритма KNN в сочетании с созданием торговых сигналов в сочетании с движущейся средней. Система может автоматически корректировать параметры стратегии в зависимости от изменения рыночной среды, повышая адаптивность и стабильность стратегии.

Стратегический принцип

Ключевым принципом стратегии является использование алгоритмов KNN для анализа исторических данных о ценах и прогнозирования движения цены путем вычисления сопоставимости текущего состояния рынка с историческими данными. Конкретные шаги по реализации следующие:

  1. Настройка размера окна наблюдений и значения K для формирования вектора характеристики сбора исторических данных о ценах
  2. Расчет расстояния в европе между текущей ценовой последовательностью и историческими данными
  3. Выбор K наиболее близких исторических ценовых последовательностей в качестве соседних выборки
  4. Анализ последующих ценовых изменений в этой соседствующей выборке K
  5. Создание торгового сигнала на основе изменения средней цены на соседних выборках в сочетании с движущейся средней Когда средняя цена K близких соседних образцов изменяется положительно, и текущая цена находится выше скользящей средней, система генерирует многозначный сигнал; наоборот, генерирует пустой сигнал.

Стратегические преимущества

  1. Самостоятельная адаптация: алгоритм KNN может автоматически корректировать параметры в зависимости от изменения рыночной среды, что позволяет стратегии быть более адаптивными
  2. Многомерный анализ: в сочетании с алгоритмами машинного обучения и техническими показателями, обеспечивающими более полный взгляд на анализ рынка
  3. Контроль риска обоснован: снижение влияния ложных сигналов с помощью подвижных средних в качестве вспомогательного подтверждения
  4. Ясность логики вычислений: процесс реализации стратегии прозрачен, его легко понять и оптимизировать
  5. Гибкость параметров: параметры, такие как k-значение и размер окна, могут быть изменены в зависимости от различных рыночных условий

Стратегический риск

  1. Высокая сложность вычислений: алгоритм KNN требует вычисления большого количества исторических данных, что может повлиять на эффективность выполнения стратегии
  2. Чувствительность параметров: выбор значения K и размера окна имеет важное влияние на эффективность стратегии
  3. Зависимость от рыночных условий: в условиях резкого колебания рыночных условий эталонные значения исторических сходств могут быть снижены
  4. Риск перенастройки: чрезмерное использование исторических данных может привести к перенастройке стратегии
  5. Риск задержки: возможна задержка сигналов из-за необходимости сбора достаточных исторических данных

Направление оптимизации стратегии

  1. Инженерная оптимизация:
  • Добавление большего количества технических показателей в качестве характеристик
  • Введение показателей рыночных настроений
  • Оптимизация методов стандартизации характеристик
  1. Повышение эффективности алгоритмов:
  • Оптимизация поиска по соседству с использованием структур данных, таких как деревья KD
  • Реализация параллельных вычислений
  • Оптимизация хранения и доступа к данным
  1. Усиление контроля рисков:
  • Добавить механизм стоп-лосса и тейк-профита
  • Представляем фильтры волатильности
  • Дизайн динамической системы управления позициями
  1. Параметры оптимизации:
  • Реализация адаптивного выбора K-значений
  • Динамическая настройка размера окна наблюдения
  • Оптимизация циклов скользящих средних
  1. Улучшение механизма генерации сигнала:
  • Введение системы оценки силы сигнала
  • Дизайн механизма подтверждения сигнала
  • Оптимизация времени входа и выхода

Подвести итог

Стратегия инновационно применяет алгоритм 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)