Авторы: Huaian (технический руководитель), Siqi, Gu Geng, Jia Xuan, Hong Po

Введение

Почему рынок Форекс?

Рынок форекс отличается очень высокой волатильностью. Это крупнейший финансовый рынок в мире с ежедневным объемом до 6,6 трлн. Это дает больше возможностей для алгоритмической торговли, которая выявляет модели на рынке и учится на них для получения прибыльных сделок. Существуют различные причины, по которым алгоритмическая торговля на Форекс будет работать.

  1. Более справедливый рынок
    - В отличие от фондового рынка, рынком форекс очень трудно манипулировать одной отдельной стороне. Например, для того, кто обладает властью стать маркет-мейкером, сумма капитала, которую он имеет, невообразима.
  2. Высокая ликвидность
    - Ликвидность предоставляет нашему алгоритму множество торговых возможностей.

Что мы прогнозируем?

Чтобы решить задачу машинного обучения для рынка форекс, мы должны очень четко определить нашу цель. Вопрос, на который мы хотим ответить: какова метка для наших обучающих данных? Мы видели, как многие алгоритмические трейдеры ставили очень сложные цели обучения. Цели обучения часто многомерны, они должны не только предсказать направление ценового момента, но и величину движения. В этом проекте мы определяем более простую цель обучения, поэтому наши прогнозы будут бинарными:

Либо +1, либо -1.

Положительная метка определяется как движение цены конкретной валютной пары более чем на 20 единиц в положительном направлении. Отрицательная метка определяется как то же самое, но в противоположном направлении. Почему 20 пунктов? 80% рынков форекс были сделаны с использованием алгоритмов. Таким образом, если мы рассмотрим достаточно малый масштаб, мы сможем (вернее, наш алгоритм сможет) найти закономерности.

Как это работает?

В этом проекте есть три основных компонента:

  1. Удаление данных
  2. Обучение модели
  3. Исполнение

Для удаления данных мы в основном используем простые средства очистки, такие как BS4, и запрашиваем библиотеку из Python для удаления функций с связанных веб-сайтов. Скрапперы должны запускаться каждые 20 секунд, это гарантирует, что мы получим самые свежие данные для обучения наших моделей.

Для обучения моделей мы просто обучаем модели, используя данные, которые мы удалили. Модели были созданы таким образом, чтобы обеспечить масштабируемость. Мы можем обусловить или отфильтровать функции, которые нам не нужны для определенных моделей. Также чрезвычайно просто добавить в модель дополнительные функции.

Исполнительная часть алгоритма просто проверяет, выдает ли модель положительный или отрицательный сигнал, и соответственно входит в сделку. В этом проекте мы требуем, чтобы модель выдавала точность не менее 93% на тестовом наборе, чтобы она могла совершать какие-либо реальные сделки.

Какого брокера мы выбрали?

Мы используем Oanda в качестве брокера для нашего торгового бота. Причины следующие:

  1. Oanda предлагает относительно более низкий спред. Это важно для нашего проекта. Поиск подходящего спреда очень важен, поскольку он определяет минимальный объем сделки, который мы можем совершить. Чем ниже объем сделки, тем более подходит для работы наш алгоритм (как упоминалось ранее, мы хотим смотреть на достаточно малый масштаб, и мы действительно не хотим, чтобы величина спреда была больше, чем допустимая). скажем, 20% нашего торгового объема.
  2. У Oanda простой для понимания API
    — у Oanda очень хорошая документация по API, это значительно ускоряет наш процесс разработки/отладки.

Мы начали использовать 1 000 000 виртуальных кредитов, а закончили с потерей 20 000 в течение примерно 3 торговых недель. Однако это не означает, что у наших моделей все не так хорошо. На самом деле, некоторые модели имели выдающиеся характеристики.

В следующих частях статьи мы рассмотрим очень важный компонент этого проекта — выбор функций.

(Обратите внимание, что в этом проекте мы работаем только с самой волатильной, на наш взгляд, валютной парой — парой GBP/JPY)

Выбор функции

Выбор функций является критическим процессом этого проекта. Без выбора правильных характеристик любой модели было бы очень сложно работать. Мы потратили большую часть первой части этого проекта на тщательное изучение функций, которые, по нашему мнению, окажут наибольшее влияние на GBP/JPY. Полный список функций приведен в приложении.

Кривая реальной доходности казначейства США [1]:

Кривая доходности казначейских облигаций демонстрирует взаимосвязь между доходностью и сроками погашения текущих казначейских ценных бумаг с фиксированным доходом. Его можно использовать для получения процентных ставок в США, что имеет большое значение для финансов не только США, но и Великобритании и Японии. Необработанные данные о таких ставках разной срочности в 5, 7, 10, 20, 30 лет использовались в качестве признаков в надежде, что алгоритм машинного обучения сможет самостоятельно подобрать закономерность среди них. Тем не менее, это может быть сделано лучше, если ряд предустановленных паттернов (Нормальная, Перевернутая и Горбатая кривая) будет проанализирован перед тем, как использоваться в качестве единственной функции, чтобы дать более точный и, следовательно, более значимый вклад в определение тренда ценообразования.

Цена золота

Эта функция была выбрана, поскольку пара GBP/JPY имеет отрицательную корреляцию с ценой на золото, где цена золота падает, когда пара GBP/JPY растет, поскольку цена золота положительно коррелирует с иеной. Положительная корреляция между ценой на золото и японской иеной может быть связана с тем, что обе валюты считаются безопасными убежищами. Безопасные убежища — это активы, которые не коррелируют или имеют отрицательную корреляцию с другими активами или портфелями в периоды рыночного стресса.

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

новозеландский доллар

NZDUSD имеет высокую положительную корреляцию с GBPJPN. NZD не полностью считается риском для такой валюты, как CAD и AUD, но по-прежнему сильно коррелирует с упомянутыми валютами, что характерно для фунта стерлингов. Кроме того, JPY и USD считаются валютами без риска, поэтому обе пары имеют общую характеристику риска/риска. В качестве характеристик предоставляется как цена, так и спред NZDUSD — GBPJPY. Распространение было предоставлено как функция, чтобы попытаться зафиксировать сигналы на основе отклонения распространения от среднего значения.

Рейтинг подразумеваемой волатильности QQQ, SPY, IWV

QQQ: Отслеживает 100–100 крупнейших нефинансовых компаний NASDAQ, зарегистрированных на NASDAQ.

SPY: Отслеживает ведущие компании S&P 500–500, акции которых торгуются на бирже.

IWV: обеспечивает доступ ко всему рынку США — 3000 крупнейших американских акций (97% всех акций США).

Рейтинг подразумеваемой волатильности (IVR) относится к тому, где текущая подразумеваемая волатильность ценной бумаги оценивается по отношению к ее подразумеваемой волатильности за последний 1 год. Таким образом, IVR обеспечивает хорошую оценку волатильности ценной бумаги по сравнению с ее исторической подразумеваемой волатильностью и рисует более точную картину настроения ценной бумаги. Например, IV 50 может быть высоким для ценной бумаги со средним IV 40, но низким для ценной бумаги со средним IV 80. Были выбраны QQQ, SPY и IWV, поскольку они были хорошими индикаторами экономики США и косвенно мировой экономики, поскольку это крупнейшая экономика мира по номинальному ВВП и важный торговый партнер большинства стран. Кроме того, США являются крупнейшим торговым партнером Великобритании и вторым по величине торговым партнером Японии.

Цена на нефть марки Brent

Япония в значительной степени зависит от импорта сырой нефти и природного газа для удовлетворения внутренних потребностей в энергии. Существует сильная связь между ценой японской иены и ценой на энергоносители. Исторические данные показывают, что когда глобальные цены на энергоносители меняются, иена обычно движется вместе с ними. Более того, поскольку Великобритания является одной из основных стран-экспортеров сырой нефти, цена на нефть на рынке также влияет на курс фунта стерлингов. Это оказывает косвенное влияние на курс GBP/JPY.

Вначале эта характеристика измерялась и представлялась годовой информацией о сырой нефти марки Brent, такой как самая высокая цена за год, самая низкая цена за год, цена закрытия за год и средняя цена за год. Однако эта функция не внесла значительного вклада в мощность прогнозирования модели, потому что ежегодные изменения не чувствительны к изменениям цен GBP/JPY каждые 20 секунд. В результате годовые информационные характеристики были затем удалены из скребка, а ежедневные цены на акции Brent Crude Oil были добавлены в виде скорректированной цены закрытия от Yahoo Finance. Тем не менее, эту функцию можно было бы улучшить, если бы можно было отказаться от движения цены GBP/JPY в реальном времени, что внесет более значительный вклад в прогнозирующую способность нашей модели.

Выбор модели

Мы включили несколько вариантов моделей, чтобы исследовать различные характеристики для разных спецификаций моделей.

Мета-оценщик упаковки [2]:

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

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

Однако, судя по наблюдениям за единственную неделю торговли с использованием модели Bagging Methods (неделя, начинающаяся с 2021–12–13), производительность и сравнения привели к довольно запутанному результату: модель Bagging (зеленый цвет) в целом работает лучше, чем обученная AdaBoost. на данных 3k (синий цвет) и все же сгенерировал аналогичную линию тренда с AdaBoost, обученным на данных 4,5k (оранжевый цвет). И один очень интригующий факт о графике заключается в том, что график модели мешков почти напоминает график RandomForest, который имеет дело с дисбалансом классов.

В результате это не приводит нас к каким-либо окончательным суждениям, поскольку влияние размера обучающих данных на модели повышения не является для нас детерминированным. Таким образом, проверка общей сложности нашей модели по-прежнему требует дальнейшего изучения, чтобы определить, является ли сложность нашей модели относительно сильной или слабой. Кроме того, оглядываясь назад, можно сказать, что существует много тесно связанных характеристик, таких как 5 кривых реальной доходности казначейских облигаций США с различными сроками погашения, которые вместе образуют значимую модель по отношению к модели сами по себе. И последнее, но не менее важное: виртуально перекрывающиеся графики модели хвастовства и RandomForest, которые касаются дисбаланса классов, также заслуживают дальнейшего изучения.

Случайный лес и Adaboost:

Мы также использовали Random Forest, метод ансамблевого обучения, чтобы делать прогнозы движения цены пары GBP/JPY. Мы использовали случайный лес вместо деревьев решений, поскольку он использует пакетирование путем начальной загрузки выборок данных для независимого обучения деревьев решений, прежде чем агрегировать эти деревья решений для прогнозирования. Это помогает уменьшить дисперсию результатов сделанных прогнозов, поэтому вместо использования отдельного дерева решений был выбран случайный лес. Кроме того, алгоритм мешков, используемый Random Forest, отличается от обычных алгоритмов мешков, где ансамбль обученных деревьев решений может иметь высокую корреляцию в своих прогнозах, что может привести к систематической ошибке. В алгоритме мешков, используемом для случайного леса, ансамбль деревьев решений обучается таким образом, чтобы их прогнозы имели меньшую корреляцию, что приводит к меньшему смещению в модели случайного леса. Возможно, поэтому наша самая эффективная модель — случайный лес.

Мы также использовали Adaboost, еще один метод машинного обучения, использующий повышение. Adaboost отличается от Random Forest, где классификаторы обучаются последовательно адаптивным способом, в отличие от Random Forest, где классификаторы обучаются независимо. Модель Adaboost обучается последовательно на каждом этапе, определяя точки с более высокими весами, которые были неправильно классифицированы на предыдущем этапе. Это позволяет классификаторам, вводимым на каждом этапе, придавать больший вес этим ошибочно классифицированным экземплярам и меньшему весу тем, которые уже были правильно классифицированы предыдущими классификаторами.

Однако наши результаты показали, что модель Random Forest оказалась наиболее эффективной моделью. Хотя и Random Forest, и Adaboost являются методами ансамблевого обучения, Random Forest в этом случае показал лучшие результаты при прогнозировании ценового движения пары GBP/JPY. Это может быть связано с тем, что модель случайного леса с меньшей вероятностью будет переоснащена обучающими данными по сравнению с моделью Adaboost. Для модели случайного леса при каждом разбиении выбирается только подмножество всех признаков, чтобы уменьшить корреляцию. Это важно для предотвращения присутствия сильного предиктора во всех деревьях, что может привести к высокой корреляции всех деревьев.

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

Логистическая регрессия

Чтобы выполнить нашу алгоритмическую торговлю с использованием количественных данных без приоритетного распределения, мы внедрили логистическую регрессию для торговли по цене GBP/JPY в качестве отправной точки. Логистическая регрессия — это контролируемый метод машинного обучения, который выводит одну вероятностную или количественную зависимую переменную для принятия бинарных решений. Он не делает предположений о распределении классов пространственных объектов и может быть легко обобщен в регрессию с несколькими классами. Кроме того, логистическая регрессия предоставляет информацию о значимости признаков и направлении связи по характеристикам коэффициентов признаков. Начиная с линейного уравнения и заканчивая сигмовидной функцией, логистическая регрессия отличается от линейной регрессии требованиями к функциям и выходной переменной.

В нашей модели логистическая регрессия учитывала количественные характеристики и обучала их, используя в качестве зависимой переменной цену GBP/JPY в реальном времени. Затем он выводит коэффициенты функций, чтобы определить силу и направление влияния каждой функции на цену GBP/JPY. Наконец, применив логистическую регрессию на практике, мы смогли спрогнозировать цену GBP/JPY и выполнить следующий шаг в бизнес-практике для получения прибыли.

МЛП

Мы также исследовали модель многоуровневого персептрона. MLP состоит из слоев нейронов, которые полностью связаны с предыдущими слоями нейронов. Активация нейронов основана на взвешенных связях от предыдущих слоев нейронов и функции активации, в которую подаются эти связи. Существует входной слой, выходной слой и любое количество скрытых слоев между входным и выходным слоями. Функции передаются во входные слои, которые последовательно активируют следующие слои, пока не будет достигнут выходной слой. После каждого прохода сети веса корректируются в соответствии с ожидаемой активацией выходного слоя на основе метки.

Поскольку мы использовали функции, которые логически и статистически имеют достоверную связь с движением GBPJPN, MLP предоставил нам способ попытаться сгенерировать прогнозы сигнала с помощью функции ввода и справиться с нелинейным характером нашего набора данных. Входной слой нашей модели — это объекты, которые мы очистили, а выходной слой — соответствующая метка, увеличение или уменьшение на 20 пунктов. Модель была построена с 3 скрытыми слоями по 8 нейронов в каждом и активировалась с помощью нелинейной функции активации relu.

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

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

Общая производительность

Таким образом, мы совершили наибольшее количество сделок с RandomForest_3000, однако RandomForest_4500 дает значительно большую прибыль при меньшем количестве сделок. Только один вариант Adaboost работал хорошо (AdaBoost_4500), другие варианты были ответственны за большую часть потерь, которые мы понесли.

Поэтому неудивительно, что у RandomForest_4500 самый высокий показатель точности — 66%, за которым следует RandomForest_3000. Поэтому очевидно, что модели случайного леса имеют лучшую производительность по сравнению с другими моделями.

Области для улучшения

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

  1. Использование дня недели в качестве функции обучающих данных
    . Во время нашей торговли мы понимаем, что еженедельные эффекты сезонности очень распространены. Например, производительность моделей всегда падает в определенный день недели. Этому можно было бы помочь, если бы мы использовали День недели как часть обучающих функций. Вы можете обратиться к RandomForest в разделе выбора модели для получения дополнительной информации.
  2. A/B-тестирование
    . Можно было бы провести более тщательное A/B-тестирование. Это было в основном ограничено аппаратными возможностями, которые у нас были. Однако у нас также не было хорошего конвейера A/B-тестирования. Это можно было бы сделать, чтобы помочь с выбором лучших функций.
  3. Технические ошибки
    . Несмотря на то, что AWS работает относительно стабильно, у нас по-прежнему случались перебои в работе сети. В результате некоторые торговые данные, которые мы собрали, могут быть нерепрезентативными.

Мы надеемся, что эта статья даст вам некоторое представление об автоматической торговле на Форексе. Если у вас есть какие-либо сомнения, не стесняйтесь обращаться в отдел NUS Fintech ML, чтобы связаться с членами нашей команды.

Приложение:

[1] https://www.investopedia.com/articles/investing/110714/understanding-treasury-yield-curve-rates.asp

[2] https://scikit-learn.org/stable/modules/ensemble.html