Estrategia de seguimiento de tendencias parametrizadas adaptativas de KNN

MA KNN SMA
Fecha de creación: 2024-11-29 10:54:49 Última modificación: 2024-11-29 10:54:49
Copiar: 0 Número de Visitas: 517
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias parametrizadas adaptativas de KNN

Descripción general

La estrategia es un sistema de seguimiento de tendencias parametrizado y adaptativo basado en el algoritmo de aprendizaje automático K-nearest ((KNN)). La estrategia ajusta dinámicamente los parámetros de seguimiento de tendencias a través del algoritmo de KNN, en combinación con la generación de señales de negociación de promedios móviles. El sistema puede ajustar automáticamente los parámetros de la estrategia según los cambios en el entorno del mercado, mejorando la adaptabilidad y la estabilidad de la estrategia.

Principio de estrategia

El principio central de la estrategia es el uso de algoritmos KNN para analizar los datos históricos de precios y predecir el movimiento de los precios mediante el cálculo de la similitud entre el estado actual del mercado y los datos históricos. Los pasos concretos para su implementación son los siguientes:

  1. Establecer el tamaño de la ventana de observación y el valor de K para recopilar datos históricos de precios para formar vectores de características
  2. Calcula la distancia en euros entre la secuencia de precios actual y los datos históricos
  3. Selección de las K secuencias de precios históricos más similares como muestra de proximidad
  4. Análisis de los movimientos de precios posteriores en la muestra de K
  5. Combinado con un promedio móvil, genera una señal de transacción basada en el cambio de precio promedio de una muestra adyacente Cuando el precio promedio de K muestras contiguas es positivo y el precio actual está por encima de la media móvil, el sistema genera una señal de multiplicación; al contrario, genera una señal de vacío.

Ventajas estratégicas

  1. Adaptabilidad: El algoritmo KNN puede ajustar automáticamente los parámetros según los cambios en el entorno del mercado, lo que hace que la estrategia tenga una mayor adaptabilidad
  2. Análisis multidimensional: combinación de algoritmos de aprendizaje automático y indicadores técnicos para ofrecer una perspectiva más completa de análisis de mercado
  3. El control de riesgo es razonable: el efecto de las falsas señales se reduce con la media móvil como confirmación auxiliar
  4. Claridad de la lógica de cálculo: el proceso de ejecución de la estrategia es transparente, fácil de entender y optimizar
  5. Parámetros de ajuste flexible: los parámetros como el valor de K y el tamaño de la ventana se pueden ajustar según las diferentes condiciones del mercado

Riesgo estratégico

  1. Alta complejidad computacional: los algoritmos KNN requieren una gran cantidad de datos históricos que pueden afectar la eficiencia de la ejecución de la estrategia
  2. Sensibilidad de los parámetros: el valor de K y la elección del tamaño de la ventana tienen un impacto importante en el rendimiento de la estrategia
  3. Dependencia del entorno de mercado: los valores de referencia de las similitudes históricas pueden reducirse en un entorno de mercado muy volátil
  4. Riesgo de sobreajuste: la excesiva dependencia de los datos históricos puede conducir a una estrategia de sobreajuste
  5. Riesgo de retraso: Es posible que haya un retraso en la señal debido a la necesidad de reunir suficientes datos históricos.

Dirección de optimización de la estrategia

  1. Optimización de la ingeniería de características:
  • Añadir más indicadores técnicos como características
  • Introducción de un indicador de la emoción en el mercado
  • Métodos de optimización de la estandarización de las características
  1. Mejoras en la eficiencia de los algoritmos:
  • Optimización de la búsqueda de vecindad con estructuras de datos como árboles de KD
  • Implementación de la computación en paralelo
  • Optimizar el almacenamiento y el acceso a los datos
  1. Mejora en el control de riesgos:
  • Añadir mecanismo de stop loss y take profit
  • Introducción de filtros de volatilidad
  • Diseño de un sistema de gestión de posiciones dinámicas
  1. Optimización de parámetros:
  • Realización de la selección de K-valores de adaptación
  • Ajuste dinámico el tamaño de la ventana de observación
  • Optimización de la media móvil
  1. Mejora en el mecanismo de generación de señales:
  • Introducción de un sistema de puntuación de la intensidad de la señal
  • Diseño de mecanismos de reconocimiento de señales
  • Optimizar el tiempo de entrada y salida

Resumir

La estrategia aplica de manera innovadora el algoritmo de KNN a las operaciones de seguimiento de tendencias, optimizando las estrategias tradicionales de análisis técnico a través de métodos de aprendizaje automático. La estrategia tiene una gran adaptabilidad y flexibilidad, y puede ajustar los parámetros según la dinámica del entorno del mercado.

Código Fuente de la Estrategia
/*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)