Обсуждение статьи "Нейросети — это просто (Часть 29): Алгоритм актер-критик с преимуществом (Advantage actor-critic)"

 

Опубликована статья Нейросети — это просто (Часть 29): Алгоритм актер-критик с преимуществом (Advantage actor-critic):

В предыдущих статьях данной серии мы познакомились с 2-мя алгоритмами обучения с подкреплением. Каждый из них обладает своими достоинствами и недостатками. Как часто бывает в таких случаях, появляется идея совместить оба метода в некий алгоритм, который бы вобрал в себя лучшее из двух. И тем самым компенсировать недостатки каждого из них. О таком методе мы и поговорим в этой статье.

В качестве преимущества дообучения моделей из предыдущих статей можно отнести тот факт, что для проверки результатов их обучения мы можем использовать тестовые советники из предыдущей статьи. Этим я и воспользовался. После обучения модели я взял модель дообученной политики и запустил в тестере стратегий советник "REINFORCE-test.mq5" с использованием упомянутой модели. Алгоритм его построения был описан в предыдущей статье. А с полным его кодом можно познакомиться во вложении.

Ниже приведен график баланса советника в процессе тестирования. Следует отметить довольно равномерный рост баланса в процессе тестирования. Обратите внимание, что тестирование модели осуществлялась на данных, не входящих в обучающую выборку. Что говорит о состоятельности подхода для построения торговой системы. Для чистоты проверки работы именно модели все операции были совершены с фиксированным минимальным лотом без использования стоп-лосса и тейк-профита. Использование такого советника крайне не рекомендуется для реальной торговли, но хорошо демонстрирует работу обученной модели.

График тестирования обученной модели

На ценовом графике можно заметить, как быстро закрываются убыточные сделки и немного выдерживаются прибыльные позиции. Здесь надо обратить внимание, что все операции совершаются при открытии новой свечи. При этом можно заметить несколько торговых операций совершенных практически на открытии разворотных (фрактальных) свечей.

Автор: Dmitriy Gizlyk

 

Hello,

Nice work! I have been actively working on reinforcement learning based trading algorithms, and I like your articles on the subject.

I have a question regarding the results. I can see that you are just showing the trading performance of the first 10 days (2022-09-01 till 2022-09-10). Was the EA losing after the 10th day?

/Rasoul

 

Здравствуйте Дмитрий

Большое спасибо за исчерпывающую и очень поучительную серию статей. Действительно хорошо сделано.

Один вопрос: после загрузки всего кода из вложения вашей последней статьи (#29), я не могу скомпилировать из-за отсутствия определения класса CBufferDouble, которое, как я предполагаю, должно быть внутри

NeuroNet_DNG\NeuroNet.mqh

но его нет.

Я что-то упустил?

Спасибо!

С наилучшими пожеланиями

Паоло

 
Paolo Miocchi #:

Здравствуйте Дмитрий

Большое спасибо за исчерпывающую и очень поучительную серию статей. Действительно хорошо сделано.

Один вопрос: после загрузки всего кода из вложения вашей последней статьи (#29), я не могу скомпилировать из-за отсутствия определения класса CBufferDouble, который, как я полагаю, должен находиться внутри

NeuroNet_DNG\NeuroNet.mqh

но его нет.

Я что-то упустил?

Спасибо!

С наилучшими пожеланиями

Паоло

Привет, в последней статье я изменил CBufferDouble на CBufferFloat. Это помогает запускать библиотеку на GPU без типа double.

 

Привет, Дмитрий,

Отличная серия, я большой поклонник этой работы. Я также попробовал скомпилировать советник Reinforce и увидел, что ему также нужен аунто-кодер (конечно же), поэтому я добавил последнюю версию (из поста 22) VAE.mqh, однако по какой-то причине он не может найти определения Normal.mqh:


Я уверен, что сделал что-то не так, надеюсь, вы сможете помочь.

Будьте здоровы!

 
Eric Ruvalcaba #:

Привет, Дмитрий,

Отличная серия, я большой поклонник этой работы. Я также попробовал скомпилировать советник Reinforce и увидел, что ему также нужен аунто-кодер (конечно же), поэтому я добавил последнюю версию (из поста 22) VAE.mqh, однако по какой-то причине он не может найти определения Normal.mqh:


Я уверен, что сделал что-то не так, надеюсь, вы сможете помочь.

Будьте здоровы!

Здравствуйте, загрузите последнюю версию в этой статье https://www.mql5.com/ru/articles/11804.

Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция
Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция
  • www.mql5.com
Продолжаем изучение алгоритмов распределенного Q-обучения. В предыдущих статьях мы рассмотрели алгоритмы распределенного и квантильного Q-обучения. В первом мы учили вероятности заданных диапазонов значений. Во втором учили диапазоны с заданной вероятностью. И в первом, и во втором алгоритме мы использовали априорные знания одного распределения и учили другое. В данной статье мы рассмотрим алгоритм, позволяющей модели учить оба распределения.
 
Dmitriy Gizlyk #:

Здравствуйте, загрузите последнюю версию этой статьи https://www.mql5.com/ru/articles/11804.

Спасибо Дмитрию за быстрый ответ, помощь и драгоценное время, однако я все еще получаю тот же результат.


Казалось бы, FQF-обучение вызывает FQF.mqh


Который, в свою очередь, вызывает NeuroNet...


И, конечно же, последний вызывает VAE.mqh.


И единственная версия, которую я смог найти, это версия из поста 22...

Использование этой версии приводит к тому, что VAE не находит ссылки на функции Normal.mqh.


Может быть, дело в моей версии редактора?

Спасибо.

 

...По какой-то причине либа Normal недоступна в VAE.mqh, если ее вызвать из NeuroNet, я не знаю, почему (я пробовал на 2 разных сборках)...

Поэтому я решил эту проблему, добавив вызов Normal непосредственно в VAE и Neuronet, но мне пришлось избавиться от математического пространства в FQF:



странно... но это сработало:



 

Инициализация завершилась неудачей из-за отсутствия файла EURUSD_PERIOD_H1_REINFORCE.nnw при выполнении следующих операторов

if(!Actor.Load(ACTOR + ".nnw", dError, temp1, temp2, dtStudied, false) ||

!Critic.Load(CRITIC + ".nnw", dError, temp1, temp2, dtStudied, false))

возвращается INIT_FAILED;


Как решить эту проблему? Спасибо.


 

Другое решение для предупреждения "... скрытый вызов метода ..."

В строке 327 файла Actor_Critic.mq5:


Я получаю предупреждение "устаревшее поведение, скрытый вызов метода будет отключен в будущей версии компилятора MQL":

Это относится к вызову "Maximum(0, 3)", который должен быть изменен на:

Таким образом, в данном случае необходимо добавить "CArrayFloat::", чтобы указать означенный метод. Метод Maximum() перезаписывается классом CBufferFloat, но этот метод не имеет параметров.

Хотя вызов должен быть однозначным, так как у него два параметра, компилятор хочет, чтобы мы были сознательными ;-)

 
Zhongquan Jiang #:

Инициализация завершилась неудачей из-за отсутствия файла EURUSD_PERIOD_H1_REINFORCE.nnw при выполнении следующих операторов

if(!Actor.Load(ACTOR + ".nnw", dError, temp1, temp2, dtStudied, false) ||

!Critic.Load(CRITIC + ".nnw", dError, temp1, temp2, dtStudied, false))

return INIT_FAILED;


Как решить эту проблему? Спасибо.


В этих строках загружается структура сети, которая должна быть обучена. Перед запуском этого эксперта необходимо построить сеть и сохранить ее в именованном файле. Вы можете использовать, например, инструмент построения модели в статье № 23

https://www.mql5.com/ru/articles/11273

Neural networks made easy (Part 25): Practicing Transfer Learning
Neural networks made easy (Part 25): Practicing Transfer Learning
  • www.mql5.com
In the last two articles, we developed a tool for creating and editing neural network models. Now it is time to evaluate the potential use of Transfer Learning technology using practical examples.