Discussão do artigo "Análise angular dos movimentos de preço: um modelo híbrido de previsão dos mercados financeiros"
3 publicações seguidas, estou surpreso, "os tolos têm pensamentos semelhantes" :-)
fazemos aproximadamente a mesma coisa, simultaneamente e de forma independente.
brigas semelhantes com os cantos, mas apenas o cavalo antes da carroça (a única coisa prevista é o equilíbrio pessoal, as citações não importam):
Não vou fazer screenshot sobre Gan, mas na minha opinião - nem tudo é ruim lá e lá ângulo = volatilidade típica de ciclos naturais.
intuitivamente, por experiência pessoal e tendo o que está à mão, Gan deduziu o que deduziu. mas mais objetivo do que MACD :-)
Mais uma pergunta, se você puder responder.
Ao fazer o upload dos resultados para o ONNX e implementar o EA, surgiu um problema. Ao transferir dados com dimensão {1,31} para o primeiro modelo de classificação, não há problemas, obtenho os valores
2025.04.22 19:47:28.268 test_gann (ORDIUSDT,M5) directionUpDn = 1 directionStrength=0.44935011863708496
Mas ao passar os mesmos dados para o segundo modelo, continuo recebendo o seguinte erro: ONNX: parameter is empty, inspect code '° :àh½5E' (705:10). Nenhum dos parâmetros passados é 0.
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 0, input_matrix[0][i] = -12.92599868774414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 1, input_matrix[0][i] = -12.92599868774414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 2, input_matrix[0][i] = -42.55295181274414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 3, input_matrix[0][i] = 72.71257781982422
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 4, input_matrix[0][i] = 74.29901123046875
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 5, input_matrix[0][i] = -61.42539596557617
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 6, input_matrix[0][i] = 56.164878845214844
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 7, input_matrix[0][i] = -80.11347198486328
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 8, input_matrix[0][i] = 79.91580200195312
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 9, input_matrix[0][i] = -48.93017578125
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 10, input_matrix[0][i] = 80.48663330078125
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 11, input_matrix[0][i] = -79.71015930175781
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 12, input_matrix[0][i] = -45.92404556274414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 13, input_matrix[0][i] = -82.36412048339844
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 14, input_matrix[0][i] = -56.164878845214844
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 15, input_matrix[0][i] = -10.630552291870117
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 16, input_matrix[0][i] = 62.323272705078125
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 17, input_matrix[0][i] = 13.0
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 18, input_matrix[0][i] = 10.0
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 19, input_matrix[0][i] = -12.92599868774414
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 20, input_matrix[0][i] = -61.48434829711914
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 21, input_matrix[0][i] = -36.735313415527344
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 22, input_matrix[0][i] = -23.80649185180664
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 23, input_matrix[0][i] = 0.3333333432674408
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 24, input_matrix[0][i] = 6.955999851226807
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 25, input_matrix[0][i] = 0.029581977054476738
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 26, input_matrix[0][i] = -0.5281187295913696
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 27, input_matrix[0][i] = 0.4025301933288574
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 28, input_matrix[0][i] = 420.0
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 29, input_matrix[0][i] = 641.6666870117188
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) i = 30, input_matrix[0][i] = 0.6545454263687134
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) ONNX: o parâmetro está vazio, inspecione o código '° :àh½5E' (705:10)
2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) Erro de execução: 5805
Talvez você possa me ajudar com o erro (a vastidão da Internet não ajudou)
Artigo publicado Angular analysis of price movements: a hybrid model for forecasting financial markets:
Autor: Yevgeniy Koshtenko
Métricas para barra para trás = 60, para frente = 30
Precisão do treinamento: 0,9200 | Precisão do teste: 0,8713 | GAP: 0,0486
Pontuação de F1 do trem: 0,9187 | Pontuação de F1 do teste: 0,8682 | GAP: 0,0505
O CatBoost não se sai bem em distâncias curtas, o modelo está supertreinado
Oi Yevgeniy ,
trabalho muito bom e interessante. Parabéns.
Posso perguntar se o backtesting foi feito em todo o conjunto de dados? Parece-me que ele incluiu o conjunto de treinamento também, ou estou enganado?
Por favor, preste atenção aos detalhes.
O período de tempo do teste foi de 4 meses, calculado de forma grosseira em 161280 segundos. O total de negociações ultrapassou 17500, portanto, a duração média da negociação é de 9 segundos. Considere o possível movimento médio do EURUSD em 9 segundos. Não há dinheiro a ser ganho. O modelo, em sua maior parte, prevê o último preço, como qualquer modelo de IA que usa séries de preços como entrada. Os modelos de IA convergem muito mal em séries de preços, assim como este.
Preste atenção aos detalhes.
O período de tempo do teste foi de 4 meses, calculado de forma grosseira em 161280 segundos. O total de negociações ultrapassou 17500, portanto, a duração média da negociação é de 9 segundos. Considere o possível movimento médio do EURUSD em 9 segundos. Não há dinheiro a ser ganho. O modelo, em sua maior parte, prevê o último preço, como qualquer modelo de IA que usa séries de preços como entrada. Os modelos de IA convergem muito mal em séries de preços, assim como este.
Métricas para barra para trás = 60, para frente = 30
Precisão do treinamento: 0,9200 | Precisão do teste: 0,8713 | GAP: 0,0486
Pontuação F1 do trem: 0,9187 | Pontuação F1 do teste: 0,8682 | GAP: 0,0505
Em distâncias curtas, o CatBoost não funciona bem, o modelo é treinado em excesso
Olá Aliaksandr
o problema com esse código é o uso do argumento
shuffle=True
na chamada train_test_split.
Se você alterar o argumento para
shuffle=False
você perceberá uma enorme queda no desempenho. Isso ocorre porque, mesmo que o conjunto de teste e o conjunto de treinamento estejam, em princípio, divididos e separados um do outro, a divisão é muito fina e, portanto, há muitos "valores" X muito semelhantes entre os dois conjuntos. De fato, entre cada X[i] e X[i+1] há apenas uma diferença de deslocamento de 1 barra, o que torna o conjunto de treinamento e o conjunto de teste, na prática, muito semelhantes. Portanto, os excelentes resultados que observamos (com shuffle=True) se devem essencialmente ao ajuste excessivo. Se você remover o shuffle, o conjunto de teste consistirá em um determinado número de barras contíguas (as mais recentes), e o classificador CatBoost não fará uma boa previsão dentro dele, enquanto, por outro lado, a previsão pode ser muito boa no conjunto de treinamento. Um sinal claro de ajuste excessivo. Isso ocorre mesmo com uma fração muito pequena de barras no conjunto de teste (não embaralhado) e, portanto, a degradação do desempenho não pode ser explicada por uma mudança nas condições do mercado.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso

Novo artigo Análise angular dos movimentos de preço: um modelo híbrido de previsão dos mercados financeiros foi publicado:
Todos os dias, nos gráficos de pares de moedas, ações e futuros, nascem milhares de candles. Eles se agrupam em padrões, formam tendências, criam resistências e suportes. Por trás dessas imagens familiares existe uma essência matemática que raramente percebemos: os ângulos entre pontos de preço consecutivos.
Observe um gráfico comum do EURUSD. O que você vê? Linhas e barras? Agora imagine que cada segmento entre dois pontos consecutivos forma um determinado ângulo com o eixo horizontal. Esse ângulo tem um valor matemático preciso. Um ângulo positivo indica um movimento ascendente, enquanto um ângulo negativo indica um movimento descendente. Quanto maior o ângulo, mais íngreme é o movimento do preço.
Parece simples? Mas dentro dessa simplicidade há uma profundidade surpreendente. Porque os ângulos não são iguais entre si. Eles formam o seu próprio padrão, a sua própria melodia. E essa melodia, como descobri, contém as chaves para o movimento futuro do mercado.
Autor: Yevgeniy Koshtenko