Разработка моделей процентов выплат нескольких брокеров

15 000 руб. за проект
12 июля 2019, 18:56 • 1 отклик • 54 просмотра
Задача:

Используя предоставленные данные о брокерах (intrade.bar, binary.com, OlympTrade) разработать для каждого брокера модель процентов выплат и оформить ее в виде класса header-only библиотеки.

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

Исходные данные:

intrade.bar

Самая проста модель процентов выплат у брокера intrade.bar, так как данный брокер имеет фиксированный процент выплат. Однако он имеет свои особенности:

С 0:00 до 3:00 по МСК данный брокер не принимает ставки. При разработке модели данное время перевести в GMT (С 21:00 до 0:00)

Начиная с 17 часов по МСК до 23 часов брокер запрещает торговать в начале часа, середине, и 1 минуту после часа. Например, во время 16:59, 17:00 и 17:01 нельзя открыть ставку, пока не наступит 17:02. Иными словами, как только наступает 16:59:00 целых три минуты идет блокировка ставки. Блокировка снимается ровно в 17:02. Такая история дальше повторяется с каждым часом (18, 19, до 23).

Начиная с 09-01-2019 было повышение процентов выплат. Эту настройку надо добавить в модель. При длине экспирации опциона 3 минуты размер выплаты был 80%, стал 82%. При длине экспирации от 4 минут до 500 минут размер выплаты был 77%, стал 79%. Также размер выплаты зависит от размера ставки. Если ставка меньше 5000 RUB или 80 USD, то выплата равна указанной ранее, если от 5000 RUB или 80 USD, то выплаты стала 85%(была 84%) вне зависимости от времени экспирации.

В выходные дни торговля не ведется

OlympTrade

Для данного брокера была собрана статистика процентов выплат, которую можно скачать здесь: https://github.com/NewYaroslav/olymptrade_historical_data

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

Предлагаю сделать следующее, составить графики зависимости процента выплат от часа\минуты\секунды дня. Данную зависимость нужно рассмотреть для всех валютных пар в отдельности. Для начала стоит изучить одну конкретную валютную пару, пусть это будет, например, AUDCAD.

На что будет похоже распределение процентов выплат? Например, в 5 часов утра на данной валютной паре в 60% случаев бывает 80% выплата, в 20% случаев бывает 78% выплата, в 10% случаев бывает 75%, и еще в 10% бывает 30% выплата. Если на этом все заканчивается, тогда просто собираем вероятности состояний процент выплат в конкретный момент времени дня для всех валютных пар и собираем все воедино в одну модель.

Однако, может быть так, что от размера процента выплат в 5 часов утра может зависеть процент выплаты в следующие часы. Или распределение процентов выплат разное в разные дни недели. Это стоит выяснить, можно проверить корреляцию. Обязательно обосновать выбор той или иной модели и подкрепить это цифрами и разъяснениями.

Корреляцию, и некоторые другие полезные инструменты для С++ можно найти в этом репозитории: https://github.com/NewYaroslav/binary-cpp-api/blob/master/include/CorrelationEasy.hpp

Некоторые особенности брокера:

  • С 0:00 до 3:00 по МСК данный брокер не принимает ставки. При разработке модели данное время перевести в GMT (С 21:00 до 0:00)
  • В выходные дни торговля не ведется для форекс валютных пар, для криптовалют торговля продолжается и в выходные дни
  • Процент выплат не зависит от ставки и длины экспирации
  • Процент выплат зависит от наличия ВИП аккаунта, если аккаунт не ВИП, то процент выплат ограничивается верхней планкой в 80%. Это можно прописать как условие в алгоритме.
Binary.com

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

Проверить корреляцию процента выплат для BUY и SELL с инструментами: индикатор RSI с разными периодами, начиная от 3 заканчивая 180. Возможно, что процент выплат можно получить, умножив значение индикатора RSI на некий коэффициент. Это конечно не отменяет также зависимости от времени торговли и дня недели, возможно что просто данный коэффициент может зависеть от времени торговли, и тогда уже стоит рассматривать распределение этого коэффициента от времени дня и дня недели.

Индикатор RSI можно найти тут: https://github.com/NewYaroslav/binary-cpp-api/blob/master/include/IndicatorsEasy.hpp

Исторические данные котировок можно взять здесь: https://github.com/NewYaroslav/binary_historical_data

Для чтения этих данных можно использовать класс:

MultipleCurrencyHistory

https://github.com/NewYaroslav/binary-cpp-api/blob/master/include/HistoricalDataEasy.hpp

Также просто проверить корреляцию с инструментом SMA с периодами от 3 до 180

Имеются только данные для экспирации опциона 3 минуты, поэтому рассматриваем только эту экспирацию

Общие требования:

Несмотря на различие между брокерами входящих данных для получения процентов выплат каждая модель должна иметь метод с одинаковым числом параметров, просто ненужные параметры не использовать внутри метода.

Метод должен возвращать процент выплат в виде дробного числа, т.е. например не 82%, а 0.82, использовать тип double

Для таких переменных, как размер ставки или значение цены использовать тип double

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

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

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

Требования к коду:

Код должен быть протестирован, для этого стоит написать тестовую программу

Код должен быть написан на С++ 11

Программа на С++ должна работать с компилятором mingw 7.3.0

Требования к оформлению кода:

Писать комментарии к коду на русском языке

Комментариями сопровождать все не понятные (сложные) места кода, а также сопровождать абсолютно все методы класса, функции, объекты класса.

Использовать в качестве отступа табуляцию длиной 4 символа

Делать комментарии к функциям, методам, объектам класса и пр. с использованием правил оформления кода для Doxygen

Статья про Doxygen: https://habr.com/ru/post/252101/

Использовать стиль CamelCase для имен классов, переменные и методы называть в стиле snake_case

Пример:
https://github.com/NewYaroslav/binary-cpp-api/blob/master/include/BinaryApi.hpp

https://github.com/NewYaroslav/olymptrade-cpp-api/blob/master/include/OlympTradeAPI.hpp

Реализовать код на С++ в виде header-only библиотеки, при этом для каждого брокера отдельный "репозиторий".

Попытаться реализовать весь С++ код header-only библиотеки в одном файле, т.е. не выделять под второстепенные классы по новому файлу

В остальном придерживаться правил оформления кода:

https://habr.com/ru/post/172091/

http://cpp-cpp.blogspot.com/2014/09/c.html