Общая структура стратегий

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

В данной главе мы обсудим:

А также методы, подлежащие реализации:

Структура стратегий на языке C++

Рассмотрим класс-шаблон UserStrategy, предназначенный для написания стратегий. Он наследуется от класса-интерфейса ParticipantStrategy, где объявлены три виртуальные функции, которые вы можете реализовать в своей стратегии:

Сам класс выглядит следующим образом:

#include "participant_strategy.h"
#include <vector>

using namespace hftbattle;

namespace {

class UserStrategy : public ParticipantStrategy {
public:
  // В конструктор стратегии участника передается файл конфигурации.
  // В файл конфигурации из веб-интерфейса можно передать параметры стратегии.
  explicit UserStrategy(const JsonValue& config) { }

  // Вызывается симулятором при получении нового стакана торгового инструмента.
  void trading_book_update(const OrderBook& order_book) override { }

  // Вызывается симулятором при получении новых сделок торгового инструмента.
  void trading_deals_update(std::vector<Deal>&& deals) override { }

  // Вызывается симулятором при получении отчёта о сделке с участием вашей заявки.
  void execution_report_update(const ExecutionReport& execution_report) override { }
};

}  // namespace

REGISTER_CONTEST_STRATEGY(UserStrategy, user_strategy)

Структура стратегий на языке Python

Пустая стратегия выглядит следующим образом. Здесь также есть три функции, которые вы можете реализовать, а также функция init, которая позволяет получать информацию из файла конфигурации или из веб-интерфейса.

# -*- coding: utf-8 -*-

from py_defs import *
from py_defs import Decimal as Price
from common_enums import *


# Вызывается симулятором при получении новых сделок торгового инструмента.
def trading_deals_update(strat, deals):
    pass


# Вызывается симулятором при получении нового стакана торгового инструмента.
def trading_book_update(strat, order_book):
    pass


# Вызывается симулятором при получении отчёта о сделке с участием вашей заявки.
def execution_report_update(strat, execution_report):
    pass


# В конструктор стратегии участника передается файл конфигурации.
# В файл конфигурации из веб-интерфейса можно передать параметры стратегии.
def init(strat, config):
    pass

Обновление стакана

При торговле на бирже постоянно происходят какие-то события в стакане инструмента. Для информирования стратегии о произошедших изменениях используется функция trading_book_update. Она принимает на вход ссылку на OrderBook, который является обновлённой версией торгового стакана.

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

Обновление сделок

Помимо изменений стакана полезной информацией являются совершённые сделки. Для того, чтобы получать и обрабатывать эти изменения, применяется функция trading_deals_update, которая принимает в качестве аргумента вектор элементов класса Deal. Каждый элемент этого вектора хранит в себе информацию об одной совершённой сделке. Заметьте, что по каждой совершённой сделке информация о ней приходит ровно один раз. Однако, одна заявка может участвовать в нескольких сделках.

Отчёт об исполнении вашей заявки

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

results matching ""

    No results matching ""