文章 "价格走势角度分析:用于预测金融市场的混合模型"

 

新文章 价格走势角度分析:用于预测金融市场的混合模型已发布:

什么是金融市场角度分析?如何利用价格变动角度和机器学习实现准确率达 67% 的精准预测?如何将回归和分类模型与角度特征相结合,并获得一个可运行的算法?这与江恩理论有什么关系?为什么价格走势角度是机器学习的良好指标?

货币对、股票和期货图表上每天都会产生成千上万根 K 线。它们构成形态,形成趋势,并产生阻力和支撑。然而,在这些熟悉的图表背后,隐藏着一个我们很少注意到的数学实体,即连续价格点之间的角度。

请查看常规的 EURUSD 图表。你看到了什么?线条和柱?现在想象一下,连接两个相邻点的每条线段都与水平轴形成一定的夹角。这个角度具有精确的数学值。正角度表示向上运动,负角度表示向下运动。角度越大,价格变动的斜率就越陡。

听起来很简单?但这种简洁之下却蕴藏着惊人的深度。因为角度并不彼此相等。它们形成了自己的模式,自己的旋律。事实证明,这首旋律蕴含着未来市场走势的关键。


作者:Yevgeniy Koshtenko

 

连续出版了 3 本刊物,我很惊讶,"愚人有相似的想法"。:-)

我们做着大致相同的事情,同时又各自独立。

类似的争吵有棱角,但只是本末倒置(唯一预测的是个人平衡,报价并不重要):

我不会对 Gan 进行截图,但在我看来 - 那里的一切都还不错,那里的角度=自然周期的典型波动。
,凭直觉、个人经验和手头的东西,Gan 推断出了他所推断的东西。但比 MACD 更客观 :-)

 
24 小节只是一个例子?
 

还有一个问题,请回答。

在将结果上传到 ONNX 和执行 EA 时,出现了一个问题。将维度为 {1,31} 的数据传输到第一个分类模型时没有问题,我得到的值是

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


但在将相同数据传递给第二个模型时,我不断收到以下错误:ONNX:参数为空,检查代码'° :àh½5E'(705:10)。传递的参数中没有一个为 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:参数为空,检查代码'° :àh½5E' (705:10)

2025.04.22 19:39:38.482 test_gann (ORDIUSDT,M5) 执行错误:5805

也许您能帮我解决这个错误(浩瀚的互联网也无济于事)




 

在 netrona 中,模型本身显示正常

附加的文件:
 

条形图的度量标准:后退 = 60,前进 = 30

训练精度:0.9200 | 测试精度:0.8713 | 差距:0.0486

训练 F1 分数:0.9187 | 测试 F1 分数:0.8682 | 差距:0.0505


CatBoost 在短距离上表现不佳,模型训练过度

 
执行代码时,需要安装 seaborn:
import seaborn as sns
 

你好, 叶甫盖尼

非常好、非常有趣的作品。恭喜您。

请问您是否对整个数据集进行了回溯测试?在我看来,它也包括训练集,还是我弄错了?

 
Paolo Miocchi 回溯测试?在我看来,它也包括训练集,还是我弄错了?

请注意细节。


测试的时间范围是 4 个月,粗略计算为 161280 秒。总交易次数超过 17500 次,因此平均交易时间为 9 秒。考虑一下欧元兑美元在 9 秒内可能的平均走势。没有钱可赚。该模型在很大程度上预测了最后价格,就像任何使用价格序列作为输入的人工智能模型一样。人工智能模型在价格序列上的收敛性很差,这个模型也是如此。

 
Enrique Dangeroux #:

请注意细节。


测试时限为 4 个月,粗略计算为 161280 秒。总交易次数超过 17500 次,因此平均交易时间为 9 秒。考虑一下欧元兑美元在 9 秒内可能的平均走势。没有钱可赚。该模型在很大程度上预测了最后价格,就像任何使用价格序列作为输入的人工智能模型一样。人工智能模型在价格序列上的收敛性很差,这个模型也是如此。

通过查看代码,你会发现在回溯测试程序中,交易次数要比实际情况下多很多,因为作者没有加入检查条件,即预测交易的概率必须超过 0.6。因此,真实的交易次数要比这少得多。
 
Aliaksandr Kazunka # :

单杠后退 = 60,前进 = 30

训练精度:0.9200 | 测试精度:0.8713 | 差距:0.0486

训练 F1 分数:0.9187 | 测试 F1 分数:0.8682 | 差距:0.0505


在短距离内,CatBoost 的效果不佳,模型训练过度

你好 Aliaksandr

这段代码的问题在于在 train_test_splash 中使用了

shuffle=True

参数。

如果将其改为

shuffle=False

就会发现性能大幅下降。这是因为,即使测试集和训练集原则上是相互分割和不相交的,但分割非常 精细,因此两个集之间有很多非常 相似的 X "值"。事实上,每个 X[i] 和 X[i+1] 之间只有 1 个条形位移的差异,这使得训练集和测试集实际上非常相似。因此,我们看到的优异结果(shuffle=True)基本上是由于过度拟合造成的。如果去掉洗牌,测试集将由一定数量的连续条形图(最近的条形图)组成,CatBoost 分类器在其中的预测效果并不好,相反,在训练集中的预测效果却很好。这显然是过度拟合的表现。即使在测试集(未洗牌)中只有很小一部分条形图的情况下,也会出现这种情况,因此性能下降不能用市场条件的变化来解释。