
Мои знания общей разработки на Python и администрирования серверов Linux позволяют сопровождать проект от ранней стадии планирования, до стадии полноценного продукта без необходимости создавать штат персонала для поддержания проекта.
Альтернативные навыки помимо основных, помогают мне решать множество задач, возникающих по мере реализации продукта. Например, dashboards / интерфейсы для удаленного управления инфраструктурой, системы отчетности, получение данных через API, обновление БД и тому подобное.
Опыт
Я начал эксперименты с программированием еще в 9 классе школы, пробовал Си, Pascal, Delphi, и даже assembler. Это было скорее хобби, чем серьезное намерение стать разработчиком. Однако, когда я учился на экономическом факультете и сделал свою первую сделку в 2004 году, я быстро понял что мне крайне необходима алгоритмизация процесса принятия решений. После этого я начал процесс синергии своих навыков в финансах и программировании.
После длинного периода разработки на C#/C++ для торговых стратегий между 2007 и 2012, я открыл для себя Python, и с 2013 полностью создаю все свои проекты на этом языке. А с 2016 года начал профессиональную карьеру фрилансера в области анализа данных и разработки на Python.
Круг компетенций
- Торговые системы, фреймворки для алго-трейдинга. В течение последних десяти лет, я создал более 7 полноценных фреймворков для разработки, тестирования, оптимизации торговых стратегий на акциях, фьючерсах, опционах и композитных инструментах. Я знаю как создавать эффективную архитектуру, которая поддерживает не только разработку, но и бесшовный запуск новых стратегий в боевой режим.
- Системы управления ордерами / инфрастуктура данных. FIX протоколы, получение и обновление БД real-time данных, REST API, Interactive Brokers API, Quik API. Создание умных алгоритмических ордеров, VWAP/TWAP, исполнение multi-leg позиций, дельта хедж.
- Высокоскоростная обработка данных и БД. Знаю как оптимально подобрать нужные структуры хранения и обработки данных для достижения максимальной скорости бэктеста.
- Распределенная инфраструктура. Я сторонник построения инфраструктуры на основе микро-сервисов. Использую RabbitMQ и ZeroMQ для коммуникации между модулями, асинхронный (asyncio) Python код.
- Высокоскоростные вычисления Python. Хотя Python считается скриптовым языком, и поэтому достаточно медленным, при определенных знаниях можно добиться очень высокой скорости сопоставимой с C/C++. Использую Cython или Numba там где нужна скорость вычислений.
- Сервера Linux. Все мои проекты работают под Linux. Являюсь полноценным пользователем Linux с 2012, и способен настраивать и поддерживать Debian/Ubuntu сервера на любом хостинге.
Стек технологий
В течение последних лет я сталкивался со множеством библиотек Python, и прочими технологиями, в которых приходилось разбираться по разным причинам.
Уровень моей экспертизы варьируется, вот примерная легенда того как я оцениваю разные уровни своих знаний:
- low – базовый уровень, я понимаю принципы работы, могу понять как вносить изменения в готовое, или делать примитивные вещи
- mid – я делал проекты на основе этой технологии, но не использую ежедневно
- pro – использую очень часто, имею глубокое понимание нюансов, костылей и прочего
General coding
- Python 3.6+ (pro)
- Cython / Numba (pro) – высокоскоростной код на Python
- C (not ++) (mid) – речь про .с файлы, обычно все пишу на Cython, С вставки точечно
- Python asyncio (pro) – использую почти повсеместно в проектах
- Python multiprocessing (pro) – использую часто
Databases
- MongoDB (pro) — полное погружение (разработка на Python, запросы любой сложности, настройка, бэкапы, шардинг/репликация и т.п.)
- MySQL / MariaDB (mid) – знаю, могу, но не люблю
Networking / communication
- ZeroMQ (pro) – использую в HFT проектах
- RabbitMQ (pro) – использую в инфраструктурных скриптах для обмена информацией, сигналов
- Python Sockets (pro) – web-sockets / unit-sockets, в основном как база для API
- REST API (pro) – без проблем
Data-science stack
- NumPy / Pandas (pro) – использую ежедневно и повсеместно
- Machine-Learning (Scikit-learn) (mid/pro) – слишком большой проект, чтобы использовать все и сразу, часть из этого я адаптировал и переписал под нюансы задач, что решаю.
- NLTK (low) – фреймворк для процессинга синтаксиса языка (использовал для английского, и всего пару раз)
- Jupyter / Matplotlib / Plotly (pro) – база для разработки / визуализации в data-science
- Data Scraping (pro) – обычно использую Selenium + BeautifulSoup4 для скрейпинга
User interfaces / Dashboard
- Python Dash (pro) – использую для создания дашбордов, интерфейсов управления роботами, стратегиями, визуализации моделей.
- Django / flask (mid) – обычно пишу back-end, но в исключительных случаях могу сделать непубличный и потому страшный сайт.
- HTML / ReactJS / JS (low) – если нужно сделать кастомный компонент для Dash, или то что Dash не поддерживает (ужасный дизайн, полное отсутствие вкуса, цветовая гамма… хм, оттенки серого).
Linux servers / configuration
- Nginx / Apache
- Virtual Machine Supervisors: VMware, QEmu
- OpenVPN / SSH tunnels
- systemd / supervisord — for running scripts
- remote python / Jupyter environments
- remote X11 / VNC desktops
- MongoDB / MySQL
- Firewall configuration and security
- FIX tunnels
- Dropbox / FTP servers/clients / remote mounts via SSH fuse