Submit Search
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
0 likes
•
1,024 views
P
Platonov Sergey
Boost.Asio в алгоритмической торговле
Software
Read more
1 of 20
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
More Related Content
What's hot
(20)
PDF
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
Atsushi Tadokoro
PPT
JavaScript
Aleksandr Motsjonov
DOCX
Image Fundamental
Lusiana Diyan
PPTX
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
Ho Kim
PPTX
JavaScript Assíncrono
Natã Barbosa
PPTX
Александра Калинина "Trojan War: SinonJS"
Fwdays
PDF
The core of javascript
springuper
PDF
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
devCAT Studio, NEXON
PDF
Menguak Misteri Module Bundler
Riza Fahmi
PDF
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Loïc Knuchel
PDF
数式を構文解析した話
y1r96 Ueno
PDF
JUG.ua 20170225 - Java bytecode instrumentation
Anton Arhipov
PDF
Hyrje openmp
L Dr
PDF
Writeup ctf online idsecconf 2017
idsecconf
PPTX
Java лаб13
Enkhee99
PPTX
Java осень 2012 лекция 6
Technopark
PDF
D2D Pizza JS Игорь Ковган "Koa поможет"
Dev2Dev
PDF
Java Thread Cronometro
jubacalo
PDF
المحاضره 6 & 7 c#
nermeenelhamy1
KEY
珠三角技术沙龙新语言场 C++11
翀 周
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
Atsushi Tadokoro
JavaScript
Aleksandr Motsjonov
Image Fundamental
Lusiana Diyan
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
Ho Kim
JavaScript Assíncrono
Natã Barbosa
Александра Калинина "Trojan War: SinonJS"
Fwdays
The core of javascript
springuper
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
devCAT Studio, NEXON
Menguak Misteri Module Bundler
Riza Fahmi
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Loïc Knuchel
数式を構文解析した話
y1r96 Ueno
JUG.ua 20170225 - Java bytecode instrumentation
Anton Arhipov
Hyrje openmp
L Dr
Writeup ctf online idsecconf 2017
idsecconf
Java лаб13
Enkhee99
Java осень 2012 лекция 6
Technopark
D2D Pizza JS Игорь Ковган "Koa поможет"
Dev2Dev
Java Thread Cronometro
jubacalo
المحاضره 6 & 7 c#
nermeenelhamy1
珠三角技术沙龙新语言场 C++11
翀 周
Viewers also liked
(20)
PPTX
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Platonov Sergey
PPT
Евгений Крутько, Многопоточные вычисления, современный подход.
Platonov Sergey
PPTX
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Sergey Platonov
PPTX
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Sergey Platonov
PPTX
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
PPTX
Григорий Демченко, Универсальный адаптер
Sergey Platonov
PDF
Parallel STL
Evgeny Krutko
PDF
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
PDF
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
PDF
Fuzzing: The New Unit Testing
Dmitry Vyukov
PDF
Антон Бикинеев, Reflection in C++Next
Sergey Platonov
PDF
Clang tidy
Yury Yafimachau
PDF
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Yauheni Akhotnikau
PPTX
Фитнес для вашего кода: как держать его в форме
Ilia Shishkov
PPTX
C++ Core Guidelines
Sergey Zubkov
PPTX
Quality assurance of large c++ projects
corehard_by
PPTX
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017
Mikhail Matrosov
PDF
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Sergey Platonov
PDF
Догнать и перегнать boost::lexical_cast
Roman Orlov
PDF
Конверсия управляемых языков в неуправляемые
Platonov Sergey
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Platonov Sergey
Евгений Крутько, Многопоточные вычисления, современный подход.
Platonov Sergey
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Sergey Platonov
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Sergey Platonov
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
Григорий Демченко, Универсальный адаптер
Sergey Platonov
Parallel STL
Evgeny Krutko
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
Fuzzing: The New Unit Testing
Dmitry Vyukov
Антон Бикинеев, Reflection in C++Next
Sergey Platonov
Clang tidy
Yury Yafimachau
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Yauheni Akhotnikau
Фитнес для вашего кода: как держать его в форме
Ilia Shishkov
C++ Core Guidelines
Sergey Zubkov
Quality assurance of large c++ projects
corehard_by
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017
Mikhail Matrosov
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Sergey Platonov
Догнать и перегнать boost::lexical_cast
Roman Orlov
Конверсия управляемых языков в неуправляемые
Platonov Sergey
Ad
More from Platonov Sergey
(20)
PPTX
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Platonov Sergey
PDF
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
Platonov Sergey
PDF
Дмитрий Кашицын, Вывод типов в динамических и не очень языках I
Platonov Sergey
PDF
QML\Qt Quick на практике
Platonov Sergey
PDF
Визуализация автомобильных маршрутов
Platonov Sergey
PDF
Функциональный микроскоп: линзы в C++
Platonov Sergey
PDF
C++ exceptions
Platonov Sergey
PPTX
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Platonov Sergey
PDF
HPX: C++11 runtime система для параллельных и распределённых вычислений
Platonov Sergey
PPTX
Ranges calendar-novosibirsk-2015-08
Platonov Sergey
PDF
Использование maven для сборки больших модульных c++ проектов на примере Odin...
Platonov Sergey
PDF
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Platonov Sergey
PDF
One definition rule - что это такое, и как с этим жить
Platonov Sergey
PDF
DI в C++ тонкости и нюансы
Platonov Sergey
PPTX
Аскетичная разработка браузера
Platonov Sergey
PDF
Concepts lite
Platonov Sergey
PDF
Денис Кормалев Метаобъектная система Qt
Platonov Sergey
PDF
Максим Хижинский Lock-free maps
Platonov Sergey
PPT
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...
Platonov Sergey
PDF
High quality library from scratch
Platonov Sergey
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Platonov Sergey
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
Platonov Sergey
Дмитрий Кашицын, Вывод типов в динамических и не очень языках I
Platonov Sergey
QML\Qt Quick на практике
Platonov Sergey
Визуализация автомобильных маршрутов
Platonov Sergey
Функциональный микроскоп: линзы в C++
Platonov Sergey
C++ exceptions
Platonov Sergey
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Platonov Sergey
HPX: C++11 runtime система для параллельных и распределённых вычислений
Platonov Sergey
Ranges calendar-novosibirsk-2015-08
Platonov Sergey
Использование maven для сборки больших модульных c++ проектов на примере Odin...
Platonov Sergey
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Platonov Sergey
One definition rule - что это такое, и как с этим жить
Platonov Sergey
DI в C++ тонкости и нюансы
Platonov Sergey
Аскетичная разработка браузера
Platonov Sergey
Concepts lite
Platonov Sergey
Денис Кормалев Метаобъектная система Qt
Platonov Sergey
Максим Хижинский Lock-free maps
Platonov Sergey
Владислав Шаклеин. Смешивание управляемого и неуправляемого C++ кода в Micros...
Platonov Sergey
High quality library from scratch
Platonov Sergey
Ad
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
1.
Boost.Asio в алгоритмической
торговле Тененёв Анатолий
2.
Содержание ● Торговля на
финансовых ранках ● Boost.Asio ● Алгоритмическая торговля https://github.com/bytefury/trading_robot_2 https://github.com/bytefury/asio_examples
3.
Торговля на ФР Параметры
заявки ● Buy/Sell ● Цена ● Объём
4.
Операции и события ●
add_order – добавить заявку ● cancel_order – отменить заявку ● move_order – переместить заявку ● on_change_order – изменение статуса заявки ● on_tick – новая сделка по инструменту ● on_stocks – стакан котировок инструмента
5.
Boost.Asio Библиотека для разработки
асинхронных приложений. Плюсы: ● Библиотека для С++ ● Простая и удобная ● Поддержка корутин
6.
● io_service ios; ●
ios.post([]() { ... }); ● ios.run(); ios.run_one(); ● ios.poll(); ios.poll_one(); ● ios.reset(); ● io_service::work work(ios);
7.
#include <iostream> #include <boost/asio.hpp> #include
<boost/date_time/posix_time/posix_time.hpp> using namespace std; namespace asio = boost::asio; namespace pt = boost::posix_time; namespace bs = boost::system; int main() { asio::io_service ios; // (1) asio::deadline_timer timer(ios, pt::seconds(3)); // (2) timer.async_wait([](bs::error_code){ cout << "Hello World!n"; }); // (3) ios.run(); // (4) return 0; } Пример 1
8.
#include <iostream> #include <boost/asio.hpp> #include
<boost/asio/spawn.hpp> #include <boost/date_time/posix_time/posix_time.hpp> using namespace std; namespace asio = boost::asio; namespace pt = boost::posix_time; namespace bs = boost::system; int main() { asio::io_service ios; // (1) asio::spawn(ios, [&ios](asio::yield_context yield) { // (2) asio::deadline_timer timer(ios, pt::seconds(3)); // (3) timer.async_wait(yield); // (4) cout << "Hello World!n"; }); ios.run(); // (5) return 0; } Пример 2
9.
Пример 3 int main()
{ asio::io_service ios; async_wait(ios, 1, [](bs::error_code, pt::ptime time) { // (1) cout << "Hello World 1: " << time << "n"; }); asio::spawn(ios, [&ios](asio::yield_context yield) { pt::ptime time = async_wait(ios, 3, yield); // (2) cout << "Hello World 2: " << time << "n"; }); ios.run(); return 0; }
10.
Продолжение template<typename Token> typename boost::asio::async_result <typename
boost::asio::handler_type<Token, void(bs::error_code, pt::ptime)>::type >::type // в С++14 заменяем на auto async_wait(asio::io_service& ios, int seconds, Token&& token) // (3) { using handler_type = typename asio::handler_type <Token, void(bs::error_code, pt::ptime)>::type; // (4) handler_type handler(std::forward<Token>(token)); // (5) asio::async_result<handler_type> result(handler); // (6) ios.post([&ios, handler, seconds]() mutable { // (7) asio::spawn(ios, [&ios, handler, seconds](asio::yield_context yield) mutable { // (8) asio::deadline_timer timer(ios, pt::seconds(seconds)); timer.async_wait(yield); handler(bs::error_code(), pt::second_clock::local_time()); // (9) }); }); return result.get(); // (10) }
11.
Пример 4 class ScopeGuard
{ // (1) public: ScopeGuard() {} ~ScopeGuard() { cout << "Good bye, Scope!n"; } };
12.
Продолжение int main() { unique_ptr<asio::io_service>
ios1{new asio::io_service}; // (2) unique_ptr<asio::io_service> ios2{new asio::io_service}; // (3) asio::spawn(*ios1, [&ios1](asio::yield_context yield) { ScopeGuard sg; // (4) asio::deadline_timer timer(*ios1, pt::seconds(999999)); // (5) timer.async_wait(yield); cout << "Will it be printed?n"; // (6) }); asio::spawn(*ios2, [&ios1, &ios2](asio::yield_context yield) { asio::deadline_timer timer(*ios2, pt::seconds(3)); // (7) timer.async_wait(yield); ios1.reset(); // (8) cout << "Coroutine finishn"; // (9) }); while (true) { // (10) if (!ios1 || !ios2) break; // (11) ios1->poll(); // (12) ios2->poll(); // (13) } cout << "Exitn"; // (14) return 0; }
14.
Пример 5 int main()
{ unique_ptr<asio::io_service> ios1{new asio::io_service}; unique_ptr<asio::io_service> ios2{new asio::io_service}; asio::spawn(*ios1, [&ios1](asio::yield_context yield) { ScopeGuard sg; async_wait(*ios1, 999999, yield); // (1) cout << "Will it be printed?n"; }); asio::spawn(*ios2, [&ios1, &ios2](asio::yield_context yield) { async_wait(*ios2, 3, yield); // (2) ios1.reset(); cout << "Coroutine finishn"; }); while (true) { if (!ios1 || !ios2) break; ios1->poll(); ios2->poll(); } cout << "Exitn"; return 0; }
16.
Пример 6 int main()
{ unique_ptr<asio::io_service> ios1{new asio::io_service}; unique_ptr<asio::io_service> ios2{new asio::io_service}; asio::spawn(*ios1, [&ios1](asio::yield_context yield) { ScopeGuard sg; CustomTimer timer(*ios1, pt::seconds(999999)); // (1) timer.async_wait(yield); cout << "Will it be printed?n"; }); asio::spawn(*ios2, [&ios1, &ios2](asio::yield_context yield) { CustomTimer timer(*ios2, pt::seconds(3)); // (2) timer.async_wait(yield); ios1.reset(); cout << "Coroutine finishn"; }); while (true) { if (!ios1 || !ios2) break; ios1->poll(); ios2->poll(); } cout << "Exitn"; return 0; }
17.
class CustomTimer :
public asio::basic_io_object<TimerService> { // (3) public: CustomTimer(asio::io_service& ios, const pt::time_duration& td) : basic_io_object(ios) // (4) { auto& impl = get_implementation(); // (5) impl.datetime = pt::second_clock::universal_time() + td; // (6) } template<typename Token> auto async_wait(Token&& token) { // (7) using handler_type = typename asio::handler_type <Token, void(bs::error_code)>::type; handler_type handler(std::forward<Token>(token)); asio::async_result<handler_type> result(handler); get_service().async_wait(get_implementation(), std::move(handler)); // (8) return result.get(); } }; Продолжение
18.
class TimerService :
public asio::io_service::service { // (9) public: struct implementation_type { // (10) pt::ptime datetime; }; typedef implementation_type impl_type; TimerService(asio::io_service& ios) : service(ios) {} // (11) ~TimerService() {} static asio::io_service::id id; // (12) void construct(impl_type&) {} // (13) void destroy(impl_type&) {} // (14) template<typename Handler> void async_wait(impl_type& impl, Handler&& handler) { // (15) unique_ptr<asio::deadline_timer> timer{new asio::deadline_timer(get_io_service(), impl.datetime)}; // (16) timer->async_wait([this, &impl, _handler=std::move(handler)](bs::error_code) mutable { // (17) get_io_service().post([this, &impl, _handler]() mutable { // (18) _handler(bs::error_code()); // (19) m_timers.erase(&impl); // (20) }); }); m_timers[&impl] = std::move(timer); // (21) } private: unordered_map<void*, unique_ptr<asio::deadline_timer>> m_timers; // (22) void shutdown_service() {} // (23) }; asio::io_service::id TimerService::id;
19.
Boost.Asio в алготорговле class
IMarket { public: virtual ~IMarket() {} virtual void add_order(const Order& order) = 0; virtual void del_order(int64_t order_id) = 0; virtual void move_order(int64_t order_id, int64_t new_order_id, double price, int volume) = 0; virtual void req_securities() = 0; virtual void ordlog_handler(const OrdLogHandler& handler) = 0; virtual void order_handler(const OrderHandler& handler) = 0; virtual void order_error_handler(const OrderErrorHandler& handler) = 0; virtual void tick_handler(const TickHandler& handler) = 0; virtual void stock_handler(const StockHandler& handler) = 0; virtual void security_handler(const SecurityHandler& handler) = 0; virtual std::vector<Quote> stocks(int64_t isin_id) = 0; virtual pt::ptime datetime() = 0; }; Бэктестер while(true) { backtester.process(); ios.poll; } Торговля ios.run();
20.
Вопросы? Christopher Kohlhoff -
Library Foundations for Asynchronous Operations, Revision 2
Download