Есть ли смысл в HFT пытаться параллельно обрабатывать ордера?

Ну, я предполагаю, что это больше теоретический вопрос для тех, кто знаком с hft. Я получаю заказы от FAST и обрабатываю их. Я получаю около 2 -3 тысяч заказов в секунду. Вопрос в том, должен ли я пытаться обрабатывать их синхронно или асинхронно.

Каждый раз, когда я получаю следующий заказ, мне нужно сделать следующее:

  • обновить стакан соответствующего инструмента
  • обновить индексы и индикаторы, которые зависят от этого порядка
  • обновить стратегии и при необходимости запланировать некоторые действия (купить/продать что-то и т. д.)

Чтобы сделать это синхронно, у меня есть около 200 -300 мкс (, чтобы иметь возможность обрабатывать 3000 заказов в секунду ). Этого должно быть достаточно, я думаю.

Просто чтобы запланировать асинхронную задачу я потратил думаю ~30 мкс

Плюсы и минусы:

Синхронный:

  • ++ не нужно синхронизировать вещи!
  • ++ задержка между «получением заказа» и «принятием мер» меньше, потому что не нужно планировать задачи или передавать данные/работу другому процессу (очень важно в hft! ).
  • --однако действие «заказ получен» может быть задержано, потому что мы можем ждать в буфере сокета, ожидая обработки предыдущего заказа

Асинхронный:

  • ++ возможность использовать мощность современных серверов (у моего сервера например 24 ядра)
  • ++ в некоторых сценариях быстрее, потому что не нужно ждать, пока обработается предыдущее сообщение.
  • ++ может обрабатывать больше сообщений или выполнять более «сложные» действия для каждого сообщения
  • --нужно многое синхронизировать, что может замедлить -программу

Пример синхронизации :Мы получаем обновление заказа MSFT, а затем обновление заказа INTC и обрабатываем их в разных потоках.В обоих случаях мы запускаем пересчет индекса NASDAQ. Поэтому расчет индекса NASDAQ должен быть синхронизирован. Однако эту конкретную проблему можно обойти, чтобы избежать синхронизации... Это просто пример возможной синхронизации.

Итак, вопрос в том, должен ли я обрабатывать обновления заказов синхронно или асинхронно. Пока я обрабатываю их асинхронно, и у меня есть выделенный поток для каждого инструмента. Потому что я могу обрабатывать асинхронно два обновления для разных инструментов (MSFT и INTC ), но два обновления для одного инструмента (MSFT )должны обрабатываться синхронно.

5
задан javapowered 3 July 2012 в 07:19
поделиться