Обсуждение статьи "Нейросети — это просто (Часть 47): Непрерывное пространство действий"

 

Опубликована статья Нейросети — это просто (Часть 47): Непрерывное пространство действий:

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

В наших предыдущих работах мы обучали агента лишь определению направления торговли. Спектр действий Агента ограничивался лишь 4 вариантами:

  • купить, 
  • продать, 
  • удерживать/ожидать,
  • закрыть все позиции.

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

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

Примерно после 3000 проходов мне удалось получить модель, способную генерировать прибыль на обучающей выборке. За период обучения в 5 месяцев модель совершила 334 сделки. Более 84% из них были прибыльные. В результате была получена прибыль в размере 33% от первоначального капитала. При этом просадка по балансы составила менее 1%, а по Эквити — 7,6%. Профит фактор превысил значение 26, а фактор восстановления составил 3.16. На представленном ниже графике видна тенденция к росту баланса. И линия баланса практически постоянно ниже линии Эквити, что свидетельствует об открытии позиций в правильном направлении. В то же время нагрузка на депозит составляет около 20%. Это довольно высокий показатель, но не превышает накопленную прибыль.

Результаты обучения модели

Результаты обучения модели

К сожалению, вне обучающей выборки результаты работы советника были скромнее.

Автор: Dmitriy Gizlyk

 
Здравствуйте. Советник после 30-50 проходов перестаёт открывать сделки совсем. Это нормально или что-то надо править? Я сделал 5-7 попыток с новых файлах модели. Когда то чуть больше проходов продолжает открывать сделки, а когда то чуть меньше. Но всё равно перестаёт открывть сделки. Я пробовал одну из моделей тренировать в 4000 проходов. Результат один - прямая линия.
 
Viktor Kudriavtsev #:
Здравствуйте. Советник после 30-50 проходов перестаёт открывать сделки совсем. Это нормально или что-то надо править? Я сделал 5-7 попыток с новых файлах модели. Когда то чуть больше проходов продолжает открывать сделки, а когда то чуть меньше. Но всё равно перестаёт открывть сделки. Я пробовал одну из моделей тренировать в 4000 проходов. Результат один - прямая линия.

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

Обучение модели довольно длительный процесс. В библиотеки установлен коэффициент обучения на уровне 3.0e-4f. Т.е. если вы будете обучать модель только на 1 примере, она сможет его выучить примерно за 4000 итераций. Столь малый коэффициент обучения используется, чтобы модель могла усреднить веса для максимального соответствия обучающей выборки.

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

 

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

      float reward = (account[0] - PrevBalance) / PrevBalance;

      if(account[0] == PrevBalance)
         if((buy_value + sell_value) == 0)

            reward -= 1;

Пробовал такие варианты

      float reward = (account[0] - PrevBalance) / PrevBalance;

      if(account[0] == PrevBalance)

         if((buy_value + sell_value) == 0)

            reward -= 1;

      if(buy_profit<10) 

         reward -= 1;

      if(buy_profit>10) 

         reward += 1;   

      if(sell_profit<10) 

         reward -= 1;

      if(sell_profit>10) 

         reward += 1;

Не помогло. Подскажите, что делать, плиз.

Файлы: