#java #multithreading #trading #algorithmic-trading
#java #Многопоточность #Торговля #алгоритмическая торговля
Вопрос:
Как вы знаете, торговые стратегии выполняют действия на основе потока в реальном времени, например, при изменении ставки или цены последней сделки. Поставщик потока данных передает котировки в наше настольное приложение асинхронно в отдельном потоке от основного потока. Этот поток подачи данных создается, когда вы делаете запрос поставщику канала данных, и он существует до тех пор, пока вы явно не отправите запрос на остановку потоковой передачи.
В нынешнем виде поток подачи данных выполняет торговые стратегии, потому что большинство из них предназначены для ввода или обновления ордеров по тиковым данным. Видите ли вы какие-либо проблемы с этим подходом? Распространен ли такой дизайн в торговых приложениях?
Я использую Java.
Ответ №1:
Вы определенно не хотите выполнять торговую стратегию в потоке подачи данных, особенно если выполнение занимает некоторое время. Это выполнение должно происходить в другом потоке. Я не очень хорошо знаком с Java, но я предполагаю, что вы могли бы использовать там пул потоков. В C # очень мощным способом распределения работы по нескольким потокам было бы использование задач.
Еще одна вещь, о которой вы, возможно, захотите подумать, — это что делать, когда появляются новые тики для инструмента, в то время как вы все еще обрабатываете предыдущий тик. Во многих случаях имеет смысл обрабатывать только самую последнюю. Я написал небольшой пост о том, что я назвал самым последним шаблоном обновления с примером реализации на C #. Может быть, вы сочтете это полезным.
Ответ №2:
В нынешнем виде поток подачи данных выполняет торговые стратегии, потому что большинство из них предназначены для ввода или обновления ордеров по тиковым данным.
Не совсем. Поток подачи данных запускает выполнение торговых стратегий. Вы не хотите, чтобы какая-либо другая обработка замедляла поток подачи данных.
Комментарии:
1. Спасибо, должен ли я создавать новый поток для выполнения торговой стратегии для каждого тика данных?
2. @Tom Tucker: Мой ответ будет в некоторой степени зависеть от того, какой язык вы используете. Поток подачи данных должен посылать сигнал для каждого тика в поток супервизора, который определяет, является ли этот тик элементом одной из ваших торговых стратегий. Если это так, поток супервизора определит, все ли элементы конкретной торговой стратегии на месте. Если это так, поток супервизора запускает торговый поток для выполнения конкретной торговой стратегии. Поток супервизора должен ставить тики в очередь, поэтому он не теряет никаких данных о тиках при определении того, какие торговые потоки выполнять.
3. Спасибо. Кстати, я использую Java.