Estratégia de rastreamento de tendências parametrizadas adaptáveis ​​KNN

MA KNN SMA
Data de criação: 2024-11-29 10:54:49 última modificação: 2024-11-29 10:54:49
cópia: 0 Cliques: 517
1
focar em
1617
Seguidores

Estratégia de rastreamento de tendências parametrizadas adaptáveis ​​KNN

Visão geral

A estratégia é um sistema de rastreamento de tendências parametrizado e adaptativo, baseado no algoritmo de aprendizagem de máquina K proximidade (KNN). A estratégia ajusta dinamicamente os parâmetros de rastreamento de tendências através do algoritmo de KNN, combinando a geração de sinais de negociação com a média móvel. O sistema é capaz de ajustar automaticamente os parâmetros da estratégia de acordo com as mudanças no ambiente de mercado, aumentando a adaptabilidade e a estabilidade da estratégia.

Princípio da estratégia

O princípio central da estratégia é usar o algoritmo KNN para analisar os dados históricos de preços e prever os movimentos de preços, calculando a similaridade entre o estado atual do mercado e os dados históricos. Os passos para a implementação são os seguintes:

  1. Configure o tamanho da janela de observação e o valor de K para coletar dados históricos de preços e formar vectores de características
  2. Calcule a distância em euros entre a sequência de preços atual e os dados históricos
  3. Escolha K sequências de preços históricos mais semelhantes como amostra vizinha
  4. Análise de mudanças de preços subsequentes de uma amostra de K
  5. Combinação de médias móveis para gerar um sinal de negociação com base na variação média de preços de uma amostra vizinha Quando o preço médio de K de amostras próximas é positivo e o preço atual está acima da média móvel, o sistema gera um sinal positivo; ao contrário, gera um sinal negativo.

Vantagens estratégicas

  1. Auto-adaptabilidade: o algoritmo KNN é capaz de ajustar automaticamente os parâmetros de acordo com a mudança do ambiente de mercado, permitindo que a estratégia tenha uma maior adaptabilidade
  2. Análise multidimensional: combinação de algoritmos de aprendizagem de máquina e indicadores técnicos para uma visão mais abrangente da análise de mercado
  3. Controle de risco racional: diminuição do impacto de falsos sinais por meio de média móvel como confirmação auxiliar
  4. Lógicas de computação claras: o processo de execução da estratégia é transparente, fácil de entender e de otimizar
  5. Parâmetros flexíveis: K-valores e tamanho de janela podem ser ajustados de acordo com diferentes cenários de mercado

Risco estratégico

  1. Alta complexidade computacional: o algoritmo KNN requer a computação de uma grande quantidade de dados históricos, o que pode afetar a eficiência da execução da estratégia
  2. Sensibilidade de parâmetros: o valor de K e a escolha do tamanho da janela têm um impacto importante na performance da estratégia
  3. Dependência do cenário de mercado: em cenários de mercado altamente voláteis, o valor de referência da similaridade histórica pode ser reduzido
  4. Risco de sobreajuste: o excesso de dependência de dados históricos pode levar a uma estratégia de sobreajuste
  5. Risco de atraso: pode haver atraso no sinal devido à necessidade de coletar dados históricos suficientes

Direção de otimização da estratégia

  1. Otimização de engenharia de características:
  • Adicionar mais indicadores técnicos como característica
  • Introdução de indicadores de sentimento de mercado
  • Métodos de padronização de características de otimização
  1. Algoritmos mais eficientes:
  • Otimização de busca de proximidade usando estruturas de dados como árvores KD
  • Implementação de computação em paralelo
  • Optimizar o armazenamento e o acesso aos dados
  1. Controle de risco reforçado:
  • Adicionar mecanismo de stop loss e take profit
  • Apresentando filtros de volatilidade
  • Projetar um sistema de gestão de posições dinâmicas
  1. Optimizador de parâmetros:
  • Realização de seleção de K-valores adaptativos
  • Ajustar o tamanho da janela de observação dinamicamente
  • Otimizar o ciclo da média móvel
  1. Melhorias no mecanismo de geração de sinais:
  • Introdução de um sistema de pontuação de intensidade de sinal
  • Mecanismo de reconhecimento de sinais de design
  • Otimização do tempo de entrada e saída

Resumir

A estratégia aplica de forma inovadora o algoritmo KNN em negociações de acompanhamento de tendências, otimizando as estratégias tradicionais de análise técnica por meio de métodos de aprendizado de máquina. A estratégia possui uma forte adaptabilidade e flexibilidade, capaz de ajustar os parâmetros de acordo com a dinâmica do ambiente de mercado. Embora existam riscos, como alta complexidade computacional e sensibilidade a parâmetros, a estratégia ainda tem um bom valor de aplicação com medidas razoáveis de otimização e controle de risco.

Código-fonte da estratégia
/*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)