Discussing the article: "Angular Analysis of Price Movements: A Hybrid Model for Predicting Financial Markets"

 

Check out the new article: Angular Analysis of Price Movements: A Hybrid Model for Predicting Financial Markets.

What is angular analysis of financial markets? How to use price action angles and machine learning to make accurate forecasts with 67% accuracy? How to combine a regression and classification model with angular features and obtain a working algorithm? What does Gann have to do with it? Why are price movement angles a good indicator for machine learning?

Thousands of candles are born every day on charts of currency pairs, stocks and futures. They compose patterns, form trends, and create resistances and supports. But behind these familiar pictures lies a mathematical entity that we rarely notice, namely angles between successive price points.

Take a look at the regular EURUSD chart. What can you see? Lines and bars? Now imagine that each segment between two consecutive points forms a certain angle with the horizontal axis. This angle has an exact mathematical value. A positive angle means an upward movement, and a negative angle means a downward movement. The larger the angle, the steeper the price movement.

Sounds simple? But this simplicity hides an amazing depth. Because angles are not equal to each other. They form their own pattern, their own melody. And this melody, as it turns out, contains keys to the future market movement.


Author: Yevgeniy Koshtenko

Yevgeniy Koshtenko - Koshtenko - Trader's profile
Yevgeniy Koshtenko - Koshtenko - Trader's profile
  • 2026.02.06
  • www.mql5.com
Trader's profile
 

3 publications in a row, I am amazed, "fools have similar thoughts" :-)

we do approximately the same thing, simultaneously and independently.

similar squabbles with corners, but only the horse before the cart (the only thing predicted is personal balance, quotes do not care):

I will not screenshot about Gan, but in my opinion - everything is not bad there and there angle=typical volatility of natural cycles.
intuitively, by personal experience and having what is at hand, Gan deduced what he deduced. but more objective than MACD :-)

 
and 24 bars is just an example?
 

One more question, if you can answer.

When uploading the results to ONNX and implementing the EA, a problem arose. When transferring data with dimension {1,31} to the first classification model there are no problems, I get the values

2025.04.22 19:47:28.268 test_gann (ORDIUSDT,M5) directionUpDn = 1 directionStrength=0.44935011863708496


But when passing the same data to the second model, I keep getting the following error: ONNX: parameter is empty, inspect code '° :àh½5E' (705:10). None of the passed parameters is 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: parameter is empty, inspect code '° :àh½5E' (705:10)

2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) Execution error: 5805

Maybe you can help me with the error (the vastness of the Internet did not help)




 

in netrona the model itself is displayed normally

Files:
 

Metrics for bar back = 60, forward = 30

Train Accuracy: 0.9200 | Test Accuracy: 0.8713 | GAP: 0.0486

Train F1-score: 0.9187 | Test F1-score: 0.8682 | GAP: 0.0505


At short distances CatBoost does not do any good, the model is overtrained

 
When executing the code, it requires seaborn to be installed:
import seaborn as sns