#Пакет для локальной разработки
Мы подготовили пакет для локальной разработки стратегий на C++. Он включает в себя набор библиотек и файлов, достаточный для разработки и тестирования стратегий на вашем компьютере.
Пакет опубликован на GitHub. Его можно скачать следующей командой (должен быть установлен Git):
git clone https://github.com/hftbattle/hftbattle.git
Подробнее об использовании пакета для локальной разработки:
Для установки зависимостей на 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 необходимо иметь:
- Компилятор MinGW-w64 4.9 и выше:
Необходимо установить скачанный компилятор с настройками:
--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 станет неудобно. Расскажем, как нужно добавлять новые стратегии в пакете для локальной разработки.
Каждая стратегия это пара файлов: [strategy_name].cpp и [strategy_name].json. Имя стратегии [strategy_name] должно быть уникальным среди всех ваших стратегий и примеров, находящихся в репозитории по умолчанию.
Стратегия должна лежать в поддиректории каталога strategies, будь то strategies/user_strategy или любая другая созданная вами директория strategies/my_strategy_dir. При этом в одной поддиректории можно создавать сколько угодно стратегий.
При этом если конфиг для новой стратегии можно просто скопировать из 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"] }}) вы можете посылать код стратегий, не заботясь о регистрации, система сделает это за вас, даже если вы послали со своей регистрацицей.
После добавления новой стратегии, нужно дать знать стратегии и симулятору друг о друге. Для этого нужно перезагрузить CMake.
Для тех, кто работает из консоли, это означает, что нужно просто заново выполнить скрипт build.py:
./build.py
Если же вы работаете из CLion, то нужно выполнить Tools > CMake > Reload CMake Project. После чего сбилдить проект с помощью Run > Build.
Далее вы можете запускать новую стратегию. Для тех, кто работает из CLion, следует не забыть поменять аргументы командной строки на путь до конфига новой стратегии.