Нейросети и трейдинг. Часть 3: прогнозируем биток на 1 час вперед -3


AliExpress RU&CIS

В прошлой статье была попытка показать весь процесс обучения, отбора и тестирования моделей на торговой паре EUR/USD. В Google Colab работала схема: обучаем модели->тестируем->рисуем на графике. Попытка оказалась неудачной. Стремление не тащить в Colab тонну кода, а максимально все упростить привело к очень низкому качеству обучения. Сигналы выглядели неубедительно и кучковались в очевидных местах.

С тех пор утекло много воды, исследования продолжались. Об этом и расскажу + очередной Colab, на этот раз проще и нагляднее.

Двигаемся дальше

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

В прошлой статье об этом было подробно, а здесь просто напомню, что нейросеть отвечает на вопрос куда пойдет цена "вверх" или "вниз" и не отвечает на вопрос насколько сильно будет движение. Ответ бинарный: 1 - вверх, 0 - вниз. Т.е. если после опроса вернулся ответ [0.8, 0.2] это значит "пойдет вверх", а [0.4, 0.6] "наверно пойдет вниз, но это не точно". Разница внутри этих бинарных ответов характеризует степень уверенности сети, +0.6 в первом случае и -0.2 во втором. Чем больше эта разница стремится к 1 (или -1), тем выше качество прогноза.

"Степень уверенности" при которой ответ можно считать сигналом, индивидуальна для каждой модели и определяется при прогоне на тестовых данных. Более того, этот порог различен для сигналов "вверх" и "вниз". Модели, которые будут загружены в колаб, имеют название файла типа BTCUSD_M6_0.66_0.75.h5
Последние два значения и есть эти лимиты. Перед опросом модели из ее названия вынимаются значения срабатывания и сравниваются с ее ответом.

На практике, такой подход привел к тому, что нейросеть оказалась хитрым и ленивым созданием. Она может долго молчать не давая внятных ответов, а потом в очевидном месте выдать десяток сигналов подряд как бы говоря "вы хотели много сигналов? вы их имеете!", а то, что по сути это один сигнал ее не волнует. Такое поведение как раз и объясняется тем, что "сигналом" является переход вышеупомянутого порога. Поэтому, подряд идущие ответы со значениями выше порога дают кучу точек в одном месте на графике.

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

Когда эта задачка решилась, возникла необходимость всю эту красоту нарисовать и выставить напоказ. Сегодня браузер является самым массовым средством доставки. Беру открытую библиотеку которая рисует свечи а-ля TradingView, добавляю туда свои сигналы, быстро все это собираю "на коленке" и готово... таков был первоначальный наивный план. На практике, после питона вникать в JavaScript + Vue + NodeJS оказалось погружением в ад. В итоге, сайт заработал, но тормозит и периодически подвисает, зато график BTC/USD на свечах 5m похож на новогоднюю елку.

Google Colab

В колабе к этой статье будет следующее:

  1. установим/подключим все нужные библиотеки

  2. загрузим уже обученные модели

  3. скачаем данные по паре BTC/USD за последние две недели, в данных будет время, цена и вектор для опроса моделей (подробнее было в предыдущей статье).

  4. нарисуем графики с прогнозами, каждый прогноз на, примерно, 1 час вперед.

"Муть какая-то..." скажет внимательный читатель. "Ты даешь нам готовые модели + данные из истории. А может модели переобучены на этих данных? Поэтому и прогнозируют".

Читатель был бы прав если бы не одно "но". Модели не меняются, а вот данные подгружаются с биржи самые последние разбитые на свечи 6м, т.е. каждые 6 минут добавляется новый блок данных, всего 3000 блоков. Через сутки график обновится примерно на 10%, а через две недели на 100%. Последний раздел колаба дает возможность скачать архив моделей. Потом архив можно вернуть обратно и проверить результат спустя сутки или более.

Google Colab можно найти по этой ссылке. Не забудьте сначала залогиниться в свою учетную запись на Google (или Gmail).

Копируйте «ноутбук» себе.

Если выпрыгнет предупреждение типа
Warning: This notebook was not authored by Google
соглашайтесь и продолжайте, никакие данные не собираются, весь код открыт.

Теперь нужно последовательно запускать блоки сверху вниз...
На этом все.

P.S. Не пытайтесь заработать на реальном рынке, 97% начинающих теряют депозит. Цель исследования - решить интересную задачу.




Комментарии (21):

  1. evg_dc
    /#23135540

    Как обычно, первые отрицательные оценки «за низкий технический уровень материала». Кто ставит эти оценки напишите в комментах где именно этот низкий уровень. Хочу подтянуться до нужного уровня ))

  2. Zmey56
    /#23136876

    Возьму код, есть пару идей его использовать для более длинных временных периодов, а на негативное голосование без комментов не обращай внимание. Пиши, интересно.

  3. happyman
    /#23136910

    Евгений, а можно где-то посмотреть ваш алгоритм формирования фич для моделей без метатрейдера или исходник ексеншена для МТ? Спасибо!

    • evg_dc
      /#23136916

      подготовку данных пока не готов раскрывать… может созрею чуть попозже, напишу об этом

      • happyman
        /#23136968

        Возможно, это также является причиной негативных оценок статьи. Ведь без знания, как фичи формировать - далеко не все (читать: "мало кто") смогут повторить технически ваши успехи в этой теме (так как модель просто не обучится). А это значит, что статьи, к сожалению, имеют скорее рекламную цель (для вашего сайта, телеграм канала и бота), чем образовательную. Могу быть не прав. Буду ждать вашей статьи на тему фич!

  4. OlegPatron92
    /#23137036

    Лучше прогноз твитов Илона Маска

  5. Voila2000
    /#23137508

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

    • evg_dc
      /#23137520

      спасибо за позитив,
      крипта лучше прогнозируется, форекс пробовал — качество ниже

      • Voila2000
        /#23137728

        Вам тоже спасибо за Гугол колаб. Раньше не пользовался, а сейчас сижу, играюсь :)

        крипта лучше прогнозируется, форекс пробовал — качество ниже

        А индексы, ну или акции американские с не самой высокой волатильностью?

  6. Lesage
    /#23137956

    А из каких соображений выбиралась именно такая модель выходного слоя (2 нейрона)?

    Почему например не 1 нейрон со значением -1 и 1, либо 2 нейрона, со значениям 0...1, какой больше зажёгся, туда и идёт цена?

    • evg_dc
      /#23138460

      Особо не задумывался. Все эти варианты по сути равны.

  7. Ardar
    /#23138462

    И какая accuracy score у модели на out of sample периоде ?

    Пробовали мульти классовую классификацию вместо бинарной ? Те предиктить не вверх/вниз, а вверх0.1%, вверх0.5%, ... вниз0.1%, вниз%0.5% .... те разбить форвардные доходности на сбалансированные классы по магнитуде изменения на заданном временном горизонте ?

    • evg_dc
      /#23138466

      Конечно пробовал, не работает. Чем больше на выходе нейронов тем сложнее обучить. Главная проблема прогноза движения цены в том, что данные на которых обучаешь это практически сплошной шум, содержательного там мало. Соответственно, шанс получить внятный ответ есть только тогда, когда задаешь очень простой вопрос.

      • Ardar
        /#23138876

        Так а точность какая на out if sample ?

        И на каком периоде обучали и на каком валидировали ?

        • evg_dc
          /#23139028

          не знаю, что такое «out if sample», модели из колаба обучались прогнозировать 1 час на свечах M6.
          на обучение подается примерно 300'000 примеров это около 3х лет, потом тестирую на участке длиной в 3-4 месяца это примерно 25'000 ответов модели, из ответов берется 1% лучших ответов (всмысле ответы с максимальной «уверенностью»), если в этом количестве больше 65% правильных ответов, то обучение считается удачным

  8. Zmey56
    /#23138484

    Ещё вопрос - а временные интервалы менял? Есть мысли, на каком лучше работает - минута, часовик, день и т.д.?

    • evg_dc
      /#23138636

      Пробовал прогнозы от 10 мин до 12 часов, лучше всего работает диапазон 30мин — 3 часа. На коротких слишком много хаоса, на длинных внешние факторы слишком влияют (новости и т.п.).

  9. YuriyTigiev
    /#23143606

    Очень хорошая и интересная статья и спасибо за пример кода!
    Пожалуйста, подскажите как нужно модифицировать текущий код (конкретные строчки), чтобы проноз делался не только по close, а для примера по нескольким входным параметрам (open, high, low, close, volume) и двум выходным (close, volume). Меня интересует как технически правильно делать прогноз по N входным параметрам для M выходных параметров.

    • evg_dc
      /#23143614

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

  10. YuriyTigiev
    /#23145922

    Планируется ли 4 статья, на тему использования multivariate time-series в части прогнозирования?

    habr.com/ru/post/495884