Обсуждение статьи "Нейросети — это просто (Часть 28): Policy gradient алгоритм"

 

Опубликована статья Нейросети — это просто (Часть 28): Policy gradient алгоритм:

Продолжаем изучение методов обучение с подкреплением. В предыдущей статье мы познакомились с методом глубокого Q-обучения. В котором мы обучаем модель прогнозирования предстоящей награды в зависимости от совершаемого действия в конкретной ситуации. И далее совершаем действие в соответствии с нашей политикой и ожидаемой наградой. Но не всегда возможно аппроксимировать Q-функцию. Или её аппроксимация не даёт желаемого результата. В таких случаях используют методы аппроксимации не функции полезности, а на прямую политику (стратегию) действий. Именно к таким методам относится policy gradient.

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

Тестирование DQN

Оценивая сделку на графике инструмента, нельзя не согласиться, что модель четко определила глобальный тренд и открыла сделку в его направлении. Сделка прибыльная, но открыт вопрос — сможет ли модель вовремя закрыть такую сделку? На самом деле мы обучали модель на исторических данных за 2 последних года. И все 2 года на рынке преобладает медвежий тренд по анализируемому инструменту. Поэтому возникает вопрос, сможет ли модель вовремя закрыть сделку.

И тут надо сказать, что при использовании жадной стратегии модель policy gradient дает схожие результаты. А помните, начиная изучение методов обучения с подкреплением, я неоднократно акцентировал внимание на необходимости правильного выбора политики вознаграждения. И тут я решил поэкспериментировать с политикой вознаграждения. В частности, чтобы исключить пересиживание в позиции убытков было принято решением о повышении штрафов за убыточность позиций. И, соответственно, дообучил модель policy gradient с учетом новой политик наград. После нескольких экспериментов с гиперпараметрами модели мне удалось добиться 60% прибыльных операций. График тестирования представлен ниже.

Среднее время удержания позиции составляет 1 час 40 минут.

Автор: Dmitriy Gizlyk

 

Доброго времени суток.


Дмитрий а где взять функции values.Assign и MathRandomNormal ? Ваши скрипты не собираются и ссылаются на отсутствие этих функций. Ругается на файл VAE.mqh

 
Viktor Kudriavtsev #:

Доброго времени суток.


Дмитрий а где взять функции values.Assign и MathRandomNormal ? Ваши скрипты не собираются и ссылаются на отсутствие этих функций. Ругается на файл VAE.mqh

Добрый день, Виктор.

По поводу values.Assign попробуйте обновить терминал. Это встроенная функция недавно добавленная в MQL5. А MathRandomNormal входит в стандартную библиотеку из поставки терминала и добавлена в файле "\MQL5\Include\Math\Stat\Normal.mqh"

 


Дмитрий у меня терминал версии 3391 от 5 августа 2022 (последняя стабильная версия). Сейчас попробовал обновиться до бетта версии 3420 от 5 сентября 2022. Ошибка с values.Assign ушла. А вот с MathRandomNormal не уходит. Библиотечка с этой функцией есть у меня по пути как вы написали. Но в файле VAE.mqh у вас нет ссылки на эту библиотечку, а в файле NeuroNet.mqh у вас указывается эта библиотечка так:


namespace Math

{

#include <Math\Stat\Normal.mqh>

}


Но так оно у меня не собирается. :(

PS: Если напрямую в файл VAE.mqh указать путь на библиотечку. Так можно сделать? Я не очень понимаю как у вас задана библиотечка в файле NeuroNet.mqh, не будет ли конфликта?

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

Я попробовал напрямую в файле  VAE.mqh  добавить строку  #include <Math\Stat\Normal.mqh> Но это не дало результата. Компилятор всё равно пишет 'MathRandomNormal' - undeclared identifier VAE.mqh 92 8. При этом если эту функцию стереть и начать набирать заново, то появляется всплывающая подсказка с этой функцией, что как я понимаю , говорит о том что по идее она видна с файла  VAE.mqh.

Вообще я уэе попробовал на другом компе с другой даже версией винды, и результат тот же - не видит функцию и не компилируется. мт5 последней версии бетта 3420 от 5 сентября 2022.

Дмитрий а у вас никаких настроек в редакторе не включено?

 
Viktor Kudriavtsev #:

Я попробовал напрямую в файле  VAE.mqh  добавить строку  #include <Math\Stat\Normal.mqh> Но это не дало результата. Компилятор всё равно пишет 'MathRandomNormal' - undeclared identifier VAE.mqh 92 8. При этом если эту функцию стереть и начать набирать заново, то появляется всплывающая подсказка с этой функцией, что как я понимаю , говорит о том что по идее она видна с файла  VAE.mqh.

Вообще я уэе попробовал на другом компе с другой даже версией винды, и результат тот же - не видит функцию и не компилируется. мт5 последней версии бетта 3420 от 5 сентября 2022.

Дмитрий а у вас никаких настроек в редакторе не включено?

Попробуйте закомментировать строку  "namespace Math"

 
Viktor Kudriavtsev #:


Дмитрий у меня терминал версии 3391 от 5 августа 2022 (последняя стабильная версия). Сейчас попробовал обновиться до бетта версии 3420 от 5 сентября 2022. Ошибка с values.Assign ушла. А вот с MathRandomNormal не уходит. Библиотечка с этой функцией есть у меня по пути как вы написали. Но в файле VAE.mqh у вас нет ссылки на эту библиотечку, а в файле NeuroNet.mqh у вас указывается эта библиотечка так:


namespace Math

{

#include <Math\Stat\Normal.mqh>

}


Но так оно у меня не собирается. :(

PS: Если напрямую в файл VAE.mqh указать путь на библиотечку. Так можно сделать? Я не очень понимаю как у вас задана библиотечка в файле NeuroNet.mqh, не будет ли конфликта?

3445 от 23 сентября - тоже самое. 

 

Здравствуйте.

Нужен совет  :) Только присоединился  после переустановки терминал,  хочу  провести обучение и выдает ошибку 

Файлы:
tti_le9fr8.jpg  269 kb
 
Borys Ivanov #:

Здравствуйте.

Нужен совет  :) Только присоединился  после переустановки терминал,  хочу  провести обучение и выдает ошибку 

Добрый день! У вас получилось решить проблему?