Обсуждение статьи "Нейросети в трейдинге: Вероятностное прогнозирование временных рядов (Окончание)"

 

Опубликована статья Нейросети в трейдинге: Вероятностное прогнозирование временных рядов (Окончание):

Приглашаем вас познакомиться с фреймворком K²VAE и вариантом интеграции предложенных подходов в торговую систему. Вы узнаете, как гибридный подход Koopman–Kalman–VAE помогает строить адаптивные и интерпретируемые модели. А в завершении статьи представлены практические результаты использования реализованных решений.

Как уже упоминалось, обучение модели осуществляется в два последовательных этапа. Сначала мы провели офлайн-обучение на 15-летней истории пары EURUSD с таймфреймом H1. Этот массив данных охватывает все типы рыночных ситуаций: от длительных боковиков до резких трендов, от спокойных периодов до всплесков волатильности. Благодаря этому, модель смогла изучить разнообразие рыночного поведения. Энкодер научился выделять ключевые закономерности и преобразовывать состояние рынка в компактное, но информативное представление, которое стало основой для принятия решений Агентом. Актёр же, используя обратную связь от Критика и Режиссёра, формировал устойчивую стратегию, способную эффективно работать в разных условиях.

Далее последовал второй этап — онлайн-обучение на данных 2024 года, организованному в тестере стратегий MetaTrader 5. Здесь модель работала в режиме, приближенном к реальному времени, анализируя рынок свеча за свечой. Она сталкивалась с шумами, случайными колебаниями и искажениями, характерными для живого рынка. Такой подход позволил не просто дообучить модель, но и адаптировать её поведение к реальной динамике, улучшить стратегию и повысить устойчивость при неопределённости.

По завершении обучения, мы провели тестирование на новых данных — котировках за Январь–Март 2025 года, с сохранением всех параметров, используемых при обучении. Результаты тестирования приведены ниже.

Результаты тестирования показывают, что модель продемонстрировала положительную прибыль на выбранном историческом периоде. Общий чистый доход составил $821.90 при начальном депозите $100.0, что говорит о росте капитала. При этом следует отметить, что коэффициент прибыльности (Profit Factor) находится на уровне 1.06 — это указывает на незначительное превосходство прибыли над убытками.

Автор: Dmitriy Gizlyk

 

I've been having a few issues VAE.mqh and have found the following works around the issue quite well.

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;
      
   // Calculate proper work sizes
   uint neurons_count = (uint)Neurons();
   uint local_size = 64;  // or 32, 128, 256 depending on your GPU
   
   // Round up global size to be divisible by local size
   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的结果基本一致(没有任何盈利)