В процессе загрузки ресурсов... загрузка...

На основе KNN адаптивная параметрическая тенденция в соответствии со стратегией

Автор:Чао Чжан, Дата: 2024-11-29 10:54:49
Тэги:М.А.КННSMA

img

Обзор

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



Связанные

Больше