文章 "神经网络在交易中的应用:时间序列的概率预测(结论)"

新文章 神经网络在交易中的应用:时间序列的概率预测(结论)已发布:

我们诚邀您了解 K²VAE 框架以及如何将所提出的方法集成到交易系统中。您将了解到混合 Koopman-Kalman-VAE 方法如何助力构建自适应且可解释的模型。本文最后将展示使用所实现方案的实际应用结果。

如前所述,该模型分两个连续阶段进行训练。首先,我们使用 EURUSD 货币对在 H1 时间周期上的 15 年历史数据进行离线训练。该数据集涵盖了所有类型的市场状况:从长期横盘整理到急剧趋势,从平静期到波动性飙升。正因如此,该模型才能学习到市场行为的多样性。Encoder 学会了识别关键模式,并将市场状态转换为简洁而信息丰富的表示,这成为 Agent 进行决策的基础。与此同时,Actor 利用 Critic 和 Director 的反馈,​​制定了一套能够在各种条件下有效发挥作用的稳健策略。

接下来是第二阶段 — 使用 2024 年数据在 MetaTrader 5 策略测试器中进行的在线训练。在这里,该模型以近乎实时的方式运行,一次分析一根 K 线,从而分析市场。它遇到了实时市场特有的噪音、随机波动和失真。这种方法不仅可以对模型进行微调,还可以使其行为适应现实世界的动态变化,改进其策略,并增强其在不确定性面前的鲁棒性。

训练完成后,我们在新数据(2025 年1 月至 3 月的报价)上测试了该模型,同时保持训练期间使用的所有参数不变。测试结果如下所示。

测试结果表明,该模型在选定的历史时期内实现了盈利。初始存款为 $100.0,总净利润达到 $821.90,表明资本有所增长。然而,值得注意的是,利润因子为 1.06,表明利润仅略高于亏损。


作者:Dmitriy Gizlyk

我最近在使用 VAE.mqh 时遇到了一些问题,发现以下方法能很好地解决这个问题。

bool CVAE::calcInputGradients(CNeuronBaseOCL *NeuronOCL)
  {
   if(!OpenCL || !NeuronOCL)
      return false;
//---
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_input, NeuronOCL.getOutput().GetIndex()))
      return false;
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_inp_grad, NeuronOCL.getGradient().GetIndex()))
      return false;
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_random, m_cRandom.GetIndex()))
      return false;
   if(!OpenCL.SetArgumentBuffer(def_k_VAECalcHiddenGradient, def_k_vaehg_gradient, Gradient.GetIndex()))
      return false;
   if(!OpenCL.SetArgument(def_k_VAECalcHiddenGradient, def_k_vaehg_kld_mult, m_fKLD_Mult))
      return false;
      
   // 计算合适的作业规模
   uint neurons_count = (uint)Neurons();
   uint local_size = 64;  // 或 32、128、256,具体取决于您的显卡
   
   // 将全局大小向上取整,使其能被本地大小整除
   uint global_size = ((neurons_count + local_size - 1) / local_size) * local_size;
   
   uint work_offset[] = {0};
   uint work_size[] = {global_size};
   uint local_work_size[] = {local_size};
   
   if(!OpenCL.Execute(def_k_VAECalcHiddenGradient, 1, work_offset, work_size, local_work_size))
      return false;
  //--- 
   return true;
  }
我也尝试了相同的测试流程:首先使用Study基于历史数据进行了1000000次学习,并生成了相应的nnw文件;随后使用StudyOnline学习了一年的数据(此时没有任何收益,10000美元的账户很快就耗尽了,运行结束后更新了部分nnw文件)。最后使用Test进行测试,结果与StudyOnline基本一致(没有任何盈利)