您好,能否更好地解释一下我在 MT5 中看到的这些条形图是什么?谢谢
绿色和红色柱状图是由这段代码生成的:
ObjectSetInteger(0, obj_name, OBJPROP_COLOR, close > open ? clrGreen : clrRed);
绿色表示模型认为收盘价将高于开盘价(就像蜡烛图上的绿色柱状图)。红色表示收盘价将低于未来该小时的开盘价。
例如,我昨天为其他几个货币对训练了模型。我使用了图表中显示的指标,但 ONNX 模型是针对美元兑日元和澳元兑美元进行训练的。根据模型对美元兑日元的预测,我今早做了一笔 15R 的交易。当这一切发生时,我甚至都没有看图表。我只是在下午完成培训后进行了交易,并让头寸运行了一夜(我支付了掉期)。根据我的经验,到目前为止,我能够看出的是,你一般可以相信模型预测的方向。还要注意你可能看到的任何模式,例如,图表上更多的连续红柱表明模型认为价格会下跌。绿色柱形越多,说明模型认为价格会上涨。
正如您所看到的,根据模型预测,我在澳元兑美元上也损失了大约 1R,所以它并不完美。您仍需运用其他技能,如设置止损和止盈的供需区、宏观基本面、仓位大小和风险管理等。在我看来,使用训练有素的 PatchTST 模型会让你在一天中的正确时段或至少在正确的时段(亚洲、伦敦或纽约)进行交易时更精确、更有信心。下面的截图来自我目前正在进行的一个道具公司评估。
您好,这是一件了不起的作品!
感谢您对 ML 交易算法的兴趣和深思熟虑的评论!我很高兴您觉得这个想法很有趣。让我逐一回答您的问题:
- LSTM 与 PatchTST 的性能对比:
- 我发现 PatchTST 在预测趋势方面更准确。
- LSTM 在盘整期间似乎表现更好。
- 总体而言,PatchTST 在我的测试中胜率略高。
- 训练周期和时间范围:
- 我尝试了在不同的时间框架内进行训练。
- 根据我的经验,1 小时的时间框架似乎最有效。
- 我还没有特别尝试只在一个月内进行训练,因为更长的历史数据往往会产生更强大的模型。
- 结合模型和时间框架:
- 你将不同时间框架(如 H1 和 M15)的模型结合起来的想法很有趣。
- 这需要考虑一个权衡问题:使用较短的时间框架需要更多的数据点,会以指数形式增加训练时间。
- 例如,使用 15 分钟的时间框架所需的条形图数量是 1 小时时间框架训练数量的 4 倍,预测范围也增加了 4 倍。
- M1 上的剥头皮策略:
- 您建议在 M1 时间框架上创建一个剥头皮策略,使用预测作为过滤器,这个建议很有创意。
- 在买入时使用 7/10 个绿色柱状图,在波动时使用 5-6/10 个绿色柱状图,这是一个很好的策略起点。
- 这种方法有可能减少错误信号,改善入市时机。
- 当前工作和未来方向:
- 我目前正在研究一种三层方法:a) 一种预测 1 周时间框架内价格走势的模型 b) 另一种预测 1 天时间框架内价格走势的模型 c) 第三种预测 5 分钟时间框架内价格走势的模型。
- 这些都是针对特定时间框架的不同模型。
- 我们的目标是创建一个考虑多种时间跨度的更全面的交易系统。
- 其他考虑因素:
- 将多个时间框架和模型的预测结合起来,确实可以提高整体策略的表现。
- 但是,管理复杂性和避免过度拟合至关重要。
- 要验证任何组合方法的有效性,对样本外数据进行回溯测试和前瞻测试至关重要。
再次感谢您分享您的观点。它们为我正在进行的工作提供了一些新的视角。如果您有更多想法或问题,欢迎随时提出!
# Step 11: Train the model for epoch in range(num_epochs): model.train() total_loss = 0 for batch_X, batch_y in train_loader: optimizer.zero_grad() batch_X = batch_X.to(device) batch_y = batch_y.to(device) outputs = model(batch_X) outputs = outputs[:, -pred_length:, :4] loss = loss_fn(outputs, batch_y) loss.backward() optimizer.step() total_loss += loss.item() print(f"Epoch {epoch+1}/{num_epochs}, Loss: {total_loss/len(train_loader):.10f}")
RuntimeError: permute(sparse_coo): number of dimensions in the tensor input does not match the length of the desired ordering of dimensions i.e. input.dim() = 3 is not equal to len(dims) = 4
感谢您发表如此精彩的文章。我对 Python 很有经验,但对人工智能模型涉猎不多。
如果我想在 M1 数据而不是 H1 数据上进行训练,这是否是对训练脚本的合理修改?谢谢。
seq_length = 10080 # 1 周的 M1 数据 pred_length = 30 # 预测未来 30 分钟
感谢您的关注!是的,对参数的这些更改原则上是可行的,但在切换到 M1 数据时有几个重要的注意事项:
1.数据量:使用 10080 分钟(1 周)的 M1 数据进行训练意味着要处理比 H1 多得多的数据点。这将
- 大大增加训练时间
- 需要更多内存
- 可能需要 GPU 加速来提高训练效率
2.模型架构调整:在模型训练的第 8 步和预测代码的第 4 步,您可能需要调整其他参数,以适应更大的输入序列:
class Config: def __init__(self): self.patch_len = 120 # 为 M1 数据考虑更大的斑块尺寸 self.stride = 120 # 相应调整步幅 self.d_model = 128 # 可能需要更大的型号容量3.预测质量:虽然您可以获得更精细的预测,但要注意 M1 数据通常包含更多噪声。您可能需要尝试不同的序列长度和预测窗口,以找到最佳平衡点。

新文章 使用PatchTST机器学习算法预测未来24小时的价格走势已发布:
在本文中,我们将应用2023年发布的一种相对复杂的神经网络算法——PatchTST,来预测未来24小时的价格走势。我们将使用官方仓库的代码,并对其进行一些微小的修改,训练一个针对EURUSD(欧元兑美元)的模型,然后在Python和MQL5环境中应用该模型进行未来预测。
当我开始深入研究与时间序列预测相关的AI进展时,我在Huggingface.co上首次接触到了一个名为PatchTST的算法。对于任何使用过大型语言模型(LLMs)的人来说,Transformer的发明无疑是自然语言、图像和视频处理工具开发领域的一场革命。但时间序列呢?它是不是被遗忘了?还是说大部分相关研究都只是秘而不宣?事实证明,有许多新的模型成功地将Transformer应用于时间序列预测。在本文中,我们将探讨其中的一种实现。
PatchTST令人印象深刻之处在于其训练模型的快速性以及使用训练好的模型与MQL的便捷性。我坦诚地说,我对神经网络的概念还很陌生。但是,通过这个过程,并解决了本文中为MQL5概述的PatchTST的实施问题,我感觉自己在学习和理解这些复杂神经网络的开发、故障排除、训练和使用的道路上迈出了巨大的一步。这就像把一个刚学会走路的孩子放到一支职业足球队里,期望他在世界杯决赛中踢进致胜一球一样。虽然挑战巨大,但正是这种挑战促使我不断学习和成长。
作者:Shashank Rai