1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/EliteQuant-EliteQuant_Cpp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 07:41 fba76cb

EliteQuant_Cpp: C/C++ высокочастотная платформа для количественной торговли


Платформа

EliteQuant — это открытая и бесплатная унифицированная платформа для количественных трейдеров. Она написана самими количественными трейдерами и предназначена для них. EliteQuant доступен на GitHub и Gitee.

Слово «унифицированный» имеет два значения:

  1. Унификация бэктестинга и реальной торговли. Нужно только поменять источник данных между бэктестингом и реальной торговлей, чтобы максимально сохранить стабильность и достоверность стратегии.
  2. Многоязычная платформа обеспечивает согласованность в структуре торговли и оценке производительности. Это упрощает обмен идеями и стратегиями с другими трейдерами, а также копирование и общение по вопросам производительности.

Проекты, связанные с EliteQuant:

  • Ресурсы для количественного трейдинга (Gitee).
  • C++ (Gitee).
  • Python (Gitee).
  • Matlab (Gitee).
  • R (Gitee).
  • C# (Gitee).
  • Excel (Gitee).
  • Java (Gitee).
  • Scala (Gitee).
  • Go (Gitee).
  • Julia (Gitee).

Проект

EliteQuant_Cpp — это многопоточная параллельная высокочастотная торговая платформа на основе C/C++ 11. Она следует современным шаблонам проектирования, таким как событийно-управляемая архитектура, серверная/клиентская архитектура, внедрение зависимостей и слабосвязанная устойчивая распределённая система. Её можно использовать отдельно или в качестве сервера других проектов EliteQuant.

Участие в разработке

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

Установка проекта

Не нужно устанавливать проект, просто скачайте код и используйте его.

Самый простой способ — загрузить скомпилированный файл из корневого каталога проекта и запустить программу с именем eqsever.exe. Перед запуском этого исполняемого файла необходимо изменить несколько настроек конфигурации. По умолчанию программа считывает конфигурацию из config.xml в том же каталоге. Откройте файл конфигурации:

  1. Если вы используете IB, откройте окно «Файл / Глобальная конфигурация / API / Настройки» в торговом рабочем столе (TWS), отметьте «Включить ActiveX и клиент сокета» и снимите флажок «Только для чтения API».
  2. В файле конфигурации измените идентификатор учётной записи на свой; обычно его можно найти в правом верхнем углу окна TWS.
  3. Если вы используете CTP, соответствующим образом измените информацию о своём брокерском счёте и адрес CTP.
  4. Создайте папки log_dir и data_dir для хранения журналов работы и данных за период соответственно.

IB — это самый популярный брокер среди розничных трейдеров. Многие розничные торговые платформы, такие как Quantopian и Quantconnect, поддерживают IB. Если у вас нет счёта IB, но вы хотите попробовать, они предоставляют демонстрационный счёт edemo и пароль demouser. Просто скачайте торговый рабочий стол (TWS) и войдите в систему с этими учётными данными. Обратите внимание, что идентификатор учётной записи будет меняться каждый раз при входе в систему через демонстрационный аккаунт, поэтому вам необходимо соответствующим образом изменить файл конфигурации EliteQuant.

CTP — это фактический стандарт китайского фьючерсного рынка, включая товарные и финансовые фьючерсы. Они также предоставляют бесплатный демонстрационный счёт SimNow. После регистрации вы получите учётную запись, пароль, brokerid, рыночные данные и адреса для торговли. Замените соответствующие позиции в файле конфигурации EliteQuant.

Среда разработки

Вот наша текущая среда разработки:

  • Visual Studio 2017 Community Edition на Windows.
  • CodeLite 11.0.6 на Linux.

Visual C++ — популярная IDE для Windows. CodeLite — бесплатная IDE для Linux, которая очень похожа на Visual Studio с точки зрения пользовательского опыта. Другие варианты включают CLION и CMake.

Среда разработки на Linux

Вы можете установить необходимые сторонние библиотеки и собрать этот проект на последней 64-битной системе Ubuntu с помощью cmake следующим образом:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install aptitude git cmake 
sudo aptitude install zlib1g-dev rapidjson-dev python3-dev libboost-all-dev libsodium-dev \
                      libyaml-cpp-dev libwebsocketpp-dev libnanomsg-dev libzmq3-dev

# Скачать SimNow CTP tradeapi для Linux
cd ~          # Или выберите другой каталог
wget http://simnow.sfit.com.cn/download/api/v6.3.5_20150803_tradeapi_linux64.tar
tar xvf v6.3.5_20150803_tradeapi_linux64.tar
cd v6.3.5_20150803_api_tradeapi_linux64/
sudo cp thostmduserapi.so /usr/lib/libthostmduserapi.so
sudo cp thosttraderapi.so /usr/lib/libthosttraderapi.so
cd ~        # Или выберите другой каталог        
git clone https://github.com/EliteQuant/EliteQuant_Cpp.git
cd EliteQuant_Cpp/source
mkdir build
cd build
cmake ..
make -j2

# Запустить программу
cd eqserver
cp ../../eqserver/config.yaml .
mkdir log data
./eqserver             # Перед этим измените config.yaml

При завершении работы eqserver с помощью Ctrl + C на Linux вы можете столкнуться с ошибкой double free or corruption (!prev). Один из способов подавить это предупреждение — добавить переменную MALLOC_CHECK_ = 0 в вашу среду:

sudo vim ~/.bashrc          # Редактировать системный файл конфигурации
export MALLOC_CHECK_=0      # Добавить эту строку в конец файла
source ~/.bashrc            # Перезагрузить конфигурацию

Структура проекта

Микросервисы

Сервис Протокол Порт Связка или подключение
MarketData PUB 55555 Да
Brokerage PAIR 55556 Да
DataManager/BarAggregator PUB 55557 Да
TickRecording SUB 55555 Нет
DataBoard SUB 55555 Нет
ApiServer PAIR 55556 Нет
ApiServer SUB 55557 Нет
ApiServer PAIR 55558 Да

Протокол сообщений

Сообщения разделены символом «|». Например:

  • Новый рыночный ордер: o|учётная запись|API|номер клиентского ордера|MKT|AAPL STK SMART|100[|флаг ордера]
  • Новый лимитный ордер: o|учётная запись|API|номер клиентского ордера|LMT|AAPL STK SMART|100|170.00[|флаг ордера]
  • Статус торгового приказа: s|учётная запись|API|служебный номер|номер клиентского ордера|номер ордера брокера|статус ордера
  • Сделка: f|учётная запись|API|служебный номер|номер клиентского ордера|номер ордера брокера|номер сделки|время сделки|код акции|цена сделки|количество сделки
  • Отменить приказ: c|учётная запись|API|служебный номер|номер клиентского ордера|номер ордера брокера
  • Данные за период: AAPL STK SMAR|время|тип данных|цена|размер|глубина
  • Все данные за период: AAPL STK SMART|время|3|цена|размер|1|купить один|купить один объём|продать один|продать один объём|невыкупленный объём|открыть|максимум|минимум|вчерашняя цена|стоп-цена покупки|стоп-цена продажи

Типы сообщений:

  • k: данные за период

  • p: последняя цена

  • z: последний объём сделки

  • o: новый ордер

  • c: отменить ордер

  • s: статус ордера

  • n: запрос баланса

  • m: общая информация

  • b: K-линия

  • h: исторические данные

  • e: тестовое сообщение Символы используются для идентификации, полный код состоит из групп символов, разделённых пробелами. Общая схема: «локальный код тип сделки биржа коэффициент».

  • Акции: SPY STK SMART.

  • Фьючерсы: ESZ7 FUT GLOBEX 50.

  • Валюты: EUR.USD CASH IDEALPRO.

  • Валютные фьючерсы: 6BU1 FUT GLOBELX.

  • Опционы: GOOGL_140920P00535000 OPT SMART 100.

  • Фьючерсные опционы: EWQ4_C1730 FOP GLOBEX 50.

Статус заказа

enum OrderStatus {
        OS_NewBorn = 0,         // NewBorn
        OS_PendingSubmit = 1,
        OS_PendingCancel =2 ,
        OS_Submitted = 3,           // submitted
        OS_Acknowledged = 4,        // acknowledged
        OS_Canceled = 5,            // Canceled
        OS_Filled = 6,              // Filled
        OS_Inactive = 7,
        OS_PartiallyFilled = 8      // PartiallyFilled
    };

    enum OrderFlag {            // for CTP offset flag
        OF_OpenPosition = 0,
        OF_ClosePosition = 1,
        OF_CloseToday = 2,
        OF_CloseYesterday = 3
    };

Структура кода

![Код структуры](/resource/code_structure_cn.png?raw=true «Структура кода»).

План разработки

  • Графический интерфейс QT: в настоящее время временно выполняется через командную строку; планируется добавить поддержку пользовательского интерфейса.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/EliteQuant-EliteQuant_Cpp.git
git@api.gitlife.ru:oschina-mirror/EliteQuant-EliteQuant_Cpp.git
oschina-mirror
EliteQuant-EliteQuant_Cpp
EliteQuant-EliteQuant_Cpp
master