/hftbattle

Данные для локального тестирования стратегий

Primary LanguageC++

#Пакет для локальной разработки

Мы подготовили пакет для локальной разработки стратегий на C++. Он включает в себя набор библиотек и файлов, достаточный для разработки и тестирования стратегий на вашем компьютере.

Пакет опубликован на GitHub. Его можно скачать следующей командой (должен быть установлен Git):

git clone https://github.com/hftbattle/hftbattle.git

Также можно скачать образ виртуальной машины, на котором уже настроены необходимые зависимости и установлен CLion.

Подробнее об использовании пакета для локальной разработки:

Виртуальная машина

Самый простой способ начать разрабатывать в локальном пакете – скачать подготовленный образ Ubuntu 14.04 для VirtualBox.

На нем уже имеетcя пакет для локальной разработки и установлены необходимые зависимости. Пользователь: user, пароль: hftbattle.

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

Также на виртуалке имеется скачанный CLion с 30-дневным периодом бесплатного использования. Для запуска CLion выполните команду ./clion/bin/clion.sh из домашней директории. Подробнее о запуске симулятора в разделе Запуск стратегии.

##Установка зависимостей

Для установки зависимостей на Ubuntu можно запустить скрипт packages_ubuntu.sh, находящийся в корне репозитория:

./packages_ubuntu.sh

Скрипт устанавливает:

  • Компилятор g++ 4.9,

  • CMake 2.8.4 и выше:

sudo apt-get install cmake

Для установки зависимостей на Mac OS X можно запустить скрипт packages_mac.sh, находящийся в корне репозитория:

./packages_mac.sh

Скрипт устанавливает:

  • Компилятор Apple LLVM 6.0 и выше (подробное описание процедуру установки здесь):
xcode-select --install
  • Менеджер пакетов Homebrew:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • CMake 2.8.4 и выше:
brew install cmake

Для запуска под Windows необходимо иметь:

Необходимо установить скачанный компилятор с настройками:

--rev=0 --bootstrap --jobs=4 --threads=posix --exceptions=seh --arch=x86_64

Затем следует добавить файл с бинарниками в переменную окружения path:

setx path "%path%;YOUR_PATH_TO_MINGW\x86_64-4.9.2-posix-seh-rt_v3-rev0\mingw64\bin"
  • CMake 2.8.4 и выше:

Например, можно поставить CLion, CMake будет в комплекте. Далее необходимо добавить путь до cmake.exe в переменную окружения PATH.

  • Python 2.7 и выше. Можно скачать здесь.

Биржевые данные

В репозитории пакета находится папка data, в которой содержатся данные за несколько часов работы биржи (строка в конфиге "date": "2015.09.29") для торгового инструмента контеста – ES.

Этого достаточно для того, чтобы:

  • убедиться, что ваш код компилируется,
  • отладить вашу стратегию.

Однако чтобы проверить саму идею стратегии, вы можете скачать данные за один полный торговый день 2015.12.23 по этой ссылке.

Это можно сделать вручную или с помощью скрипта download.py, лежащего в корне репозитория:

./download.py

Скрипт скачает файл data.zip и разархивирует его в папку data.

Для тестирования стратегии на полном дне нужно изменить строку с датой в конфиге на 2015.12.23:

"date": "2015.12.23"

Запуск стратегии

По умолчанию ваша стратегия должна быть реализована в одном файле user_strategy.cpp. Соответствующий стратегии конфиг называется user_strategy.json.

Далее нужно скомпилировать стратегию:

./build.py

В результате для вашей стратегии будет собрана библиотека в папке build.

Для запуска симуляции нужно выполнить команду

./run.py strategies/user_strategy/user_strategy.json

Для запуска из CLion необходимо

  • задать исполняемый файл: для этого заходим в Run > Edit configurations, там задаем в качестве Executable исполняемый файл, соответствующий вашей платформе. Например, для Mac OS X исполняемый файл называется mac_launcher и лежит в корне репозитория.

  • прописать путь до конфига в аргументах командной строки: для этого в той же вкладке Run > Edit configurations в строчке Program arguments пишем относительный путь до конфига вашей стратегии от корня репозитория, например:

./strategies/user_strategy/user_strategy.json
  • сбилдить проект, выполнив Run > Build.
  • запустить симуляцию, нажав кнопку Run.

##Добавление стратегии

Со временем у вас может возникнуть необходимость разрабатывать одновременно несколько различных стратегий или идей. При этом держать все в рамках одного файла user_strategy.cpp станет неудобно. Расскажем, как нужно добавлять новые стратегии в пакете для локальной разработки.

1. Создать cpp и json файлы

Каждая стратегия это пара файлов: [strategy_name].cpp и [strategy_name].json. Имя стратегии [strategy_name] должно быть уникальным среди всех ваших стратегий и примеров, находящихся в репозитории по умолчанию.

Стратегия должна лежать в поддиректории каталога strategies, будь то strategies/user_strategy или любая другая созданная вами директория strategies/my_strategy_dir. При этом в одной поддиректории можно создавать сколько угодно стратегий.

2. Зарегистрировать стратегию

При этом если конфиг для новой стратегии можно просто скопировать из user_strategy.json, то cpp-файл придется немного подправить. А именно, нужно зарегистрировать свою новую стратегию следующей командой в конце cpp-файла:

REGISTER_CONTEST_STRATEGY(UserStrategy, [strategy_name])

Например, если вы назвали файл-стратегию best_strategy_ever.cpp, то вам нужно добавить следующую строку в конец файла best_strategy_ever.cpp:

REGISTER_CONTEST_STRATEGY(UserStrategy, best_strategy_ever)

Необходимость регистрировать новую стратегию вызвана особенностями динамической линковки стратегий с симулятором. При этом на арену [{{ book["contest.arena.name"] }}]({{ book["contest.arena.url"] }}) вы можете посылать код стратегий, не заботясь о регистрации, система сделает это за вас, даже если вы послали со своей регистрацицей.

3. Перезагрузить CMake

После добавления новой стратегии, нужно дать знать стратегии и симулятору друг о друге. Для этого нужно перезагрузить CMake.

Для тех, кто работает из консоли, это означает, что нужно просто заново выполнить скрипт build.py:

./build.py

Если же вы работаете из CLion, то нужно выполнить Tools > CMake > Reload CMake Project. После чего сбилдить проект с помощью Run > Build.

Далее вы можете запускать новую стратегию:

./run.py strategies/best_strategy_ever/best_strategy_ever.json

Для тех, кто работает из CLion, следует не забыть поменять аргументы командной строки на путь до конфига новой стратегии.