文章 "开发交易机器人:Python与MQL5结合(第二部分):模型选择、创建与训练,以及Python自定义测试器" - 页 2

 

行价仍然是最好的筹码。

由于它们的非平稳性,我曾经对此持怀疑态度。但经过一些处理后,我也开始在这些特征上提取出像样的模型。

因此,从无知到有知,从有知到无知:)

 
Ivan Butko #:
有成果才有动力!
而且,正如我所意识到的,这不是提前一周,也不是提前一个月,而是正常情况下一年的工作量

非常感谢!是的,这给了我很大的动力!我会继续研究的)现在又是晚上了,我有一杯咖啡和我的代码想法)))))。

 
Maxim Dmitrievsky #:

总而言之,行价是最好的筹码。

由于它们的非平稳性,我曾经对它们持怀疑态度。但经过一些处理后,我也开始在这些特征上提取出像样的模型。

因此,从无知到有知,从有知到无知:)

我的婆婆是一位有 15 年以上经验的交易员,她一直说有必要在交易量上做筹码,她就是这样尝试的:)))https://www.mql5.com/zh/code/50133

Индикатор Price / Volume
Индикатор Price / Volume
  • www.mql5.com
Одна из простых фич для машинного обучения
 
Yevgeniy Koshtenko #:

我的婆婆是一位有 15 年以上经验的交易员,她一直说我们应该按成交量做筹码)))https://www.mql5.com/zh/code/50133

是的,确实更多的时候会加上波动率(如 std 指标),但这并不能给出太多。或者增量除以波动率。

 

尤金,从你的文章中我开始研究与交易有关的 ML,非常感谢你。

您能解释一下以下几点吗?

label_data 函数处理数据后,数据量会大幅减少(我们会随机得到 一组满足函数条件的条形图)。然后,数据会经过几个函数的处理,我们将其分为训练样本和测试样本。模型在训练样本上进行训练。然后,从测试样本中移除['标签'] 列,并尝试预测它们的值来估计模型。测试数据中没有概念替换吗?毕竟,在测试中,我们使用的是通过了label_data 函数的数据(即由一个考虑到未来数据的函数提前选择的一组非连续条)。然后在测试器中有一个参数 10,据我所知,这个参数应该是负责关闭交易的条数,但由于我们使用的是一组非连续的条形图,所以并不清楚我们得到了什么。

这就产生了以下问题:我错在哪里?为什么不使用所有 >= FORWARD 的条形图进行测试?如果我们不使用所有 >= 向前的柱状图,那么在不知道未来的情况下,我们如何选择预测所需的柱状图?

谢谢。

 
干得好,非常有趣、实用、朴实。很难看到一篇这么好的文章,里面有实际的例子,而不是只有理论而没有结果。非常感谢你们的工作和分享,我会继续关注和期待这一系列文章。
 
Eric Ruvalcaba #:
干得好,非常有趣、实用、朴实。很难看到一篇这么好的文章,里面有实际的例子,而不是只有理论而没有结果。非常感谢你的工作和分享,我会继续关注并期待这一系列文章。

非常感谢!是的,前面还有很多想法要实现,包括将这篇文章扩展翻译成 ONNX)。

 
使用 RandomForestClassifier 进行特征选择,使用 XGBclassifier 进行模型分类,有什么特殊原因吗?
 

重大缺陷:

  1. 防止数据泄漏的问题
    • 增强数据(augment_data)函数在训练集和测试集之间造成了严重的数据泄漏问题
    • 增强功能混合了不同时间段的数据
  2. 性能评估方法错误
    • 模型测试未考虑真实市场条件
    • 模型根据未来数据进行训练,根据历史数据进行测试,这是不可接受的
  3. 代码中的技术问题
    • generate_new_features()函数创建特征,但不返回特征(返回原始数据)
    • test_model() 使用 X_test.iloc[i]['close'],但在转换特征后,'close'可能会丢失。
  4. 数据处理不一致
    • 数据以不同方式标记了两次(markup_data() 和 label_data()
    • 聚类结果(cluster)未用于进一步训练
  5. 交易策略中的方法问题
    • 10 条后静态退出,而不是自适应策略
    • 没有风险管理(简单止损除外)
    • 不考虑交易成本(简单点差除外)
  6. 无效验证
    • 未在考虑时间结构的历史数据上验证模型(前向分析)
    • 对时间序列进行交叉验证,未考虑时间序列的特殊性

改进建议:

  1. 杜绝数据泄露--严格分离不同时间段的数据
  2. 实施适当的前向验证
  3. 实施更切合实际的测试,考虑到延迟和佣金问题
  4. 最终确定进入/退出头寸的逻辑
  5. 使用时间序列特定方法