O recurso está a ser carregado... Carregamento...

Tendência paramétrica adaptativa baseada no KNN na sequência da estratégia

Autora:ChaoZhang, Data: 2024-11-29 10:54:49
Tags:MACNNSMA

img

Resumo

Esta estratégia é um sistema adaptativo de parâmetros de tendência baseado no algoritmo de aprendizado de máquina K-Nearest Neighbors (KNN). A estratégia ajusta dinamicamente os parâmetros de tendência através do algoritmo KNN e gera sinais de negociação em combinação com médias móveis. O sistema pode ajustar automaticamente os parâmetros de estratégia com base em mudanças nas condições do mercado, melhorando a adaptabilidade e a estabilidade da estratégia. Esta estratégia combina métodos de aprendizado de máquina para otimizar as estratégias tradicionais de tendência, representando uma fusão de tecnologia e inovação no investimento quantitativo.

Princípio da estratégia

O princípio central da estratégia consiste em analisar os dados históricos de preços utilizando o algoritmo KNN e prever as tendências de preços através do cálculo da semelhança entre as condições atuais do mercado e os dados históricos.

  1. Definir o tamanho da janela de observação e o valor K, coletar dados históricos de preços para formar vetores de características
  2. Calcule a distância euclidiana entre a sequência de preços atual e os dados históricos
  3. Selecionar K sequências de preços históricos mais semelhantes como amostras vizinhas
  4. Analisar os movimentos de preços subsequentes destas amostras K vizinhos
  5. Gerar sinais de negociação com base nas alterações médias de preços de amostras vizinhas combinadas com médias móveis Quando a mudança média de preço de amostras vizinhas de K é positiva e o preço atual está acima da média móvel, o sistema gera sinais longos; caso contrário, gera sinais curtos.

Vantagens da estratégia

  1. Forte adaptabilidade: o algoritmo KNN pode ajustar automaticamente os parâmetros com base nas alterações do ambiente de mercado
  2. Análise multidimensional: combina algoritmos de aprendizagem de máquina e indicadores técnicos para uma análise de mercado mais abrangente
  3. Controle razoável do risco: utiliza médias móveis como confirmação auxiliar para reduzir o impacto de falsos sinais
  4. Lógica computacional clara: o processo de execução da estratégia é transparente e fácil de entender e otimizar
  5. Parâmetros flexíveis: o valor K e o tamanho da janela podem ser ajustados de acordo com diferentes ambientes de mercado

Riscos estratégicos

  1. Alta complexidade computacional: o algoritmo KNN requer o cálculo de grandes quantidades de dados históricos
  2. Sensibilidade dos parâmetros: a escolha do valor K e do tamanho da janela afeta significativamente o desempenho da estratégia
  3. Dependência do ambiente de mercado: o valor de referência da similaridade histórica pode diminuir em mercados voláteis
  4. Risco de excesso de adaptação: a dependência excessiva de dados históricos pode conduzir a um excesso de adaptação da estratégia
  5. Risco de atraso: pode existir atraso no sinal devido à necessidade de recolha de dados históricos suficientes

Orientações para a otimização da estratégia

  1. Optimização de engenharia de recursos:
  • Adicionar mais indicadores técnicos como características
  • Introdução de indicadores de sentimento de mercado
  • Otimizar os métodos de padronização de recursos
  1. Melhoria da eficiência do algoritmo:
  • Otimize a pesquisa de vizinhos mais próximos usando árvores de KD
  • Implementar computação paralela
  • Otimizar os métodos de armazenamento e acesso de dados
  1. Melhoria do controlo dos riscos:
  • Adicionar mecanismos de stop-loss e take-profit
  • Introdução de filtros de volatilidade
  • Projeto de um sistema dinâmico de gestão da posição
  1. Soluções de otimização de parâmetros:
  • Implementar a selecção adaptativa do valor K
  • Ajustar dinamicamente o tamanho da janela de observação
  • Otimizar os períodos de média móvel
  1. Melhoria do mecanismo de geração de sinal:
  • Introduzir um sistema de pontuação da força do sinal
  • Mecanismo de confirmação do sinal de projeto
  • Otimizar o tempo de entrada e saída

Resumo

Esta estratégia aplica de forma inovadora o algoritmo KNN à tendência após a negociação, otimizando estratégias de análise técnica tradicionais por meio de métodos de aprendizado de máquina. A estratégia possui forte adaptabilidade e flexibilidade, capaz de ajustar dinamicamente parâmetros com base nas condições do mercado. Embora existam riscos como alta complexidade computacional e sensibilidade de parâmetros, a estratégia ainda tem bom valor de aplicação através de medidas razoáveis de otimização e controle de risco. Recomenda-se que os investidores ajustem parâmetros de acordo com as características do mercado e combinem outros métodos de análise para decisões de negociação em aplicações práticas.


/*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)



Relacionados

Mais.