Блог им. empenoso
Нахожусь в процессе написания механизма торгового робота, работающего на Московской бирже через API одного из брокеров. Брокеров имеющих своё АПИ для МосБиржи катастрофически мало — мне известно только о трёх. При этом, когда я стал публиковать модули робота (и полностью выложу готовый механизм робота на GitHub), то стал получать непонимание — например, мне писали в комментариях — зачем придумывать велосипед, когда уже есть QUIK — популярная российская платформа для биржевых торгов. В Квике уже есть готовый функционал «импорт транзакций из файла» или таблица «карман транзакций». В тех же комментариях предлагали даже рассмотреть использование платформы 1С для робота, но оказалось, что торговля все равно будет осуществляться через импорт .tri-файла
в Квик.
Лично мне Квик не очень нравится тем, что это программа для Windows. Хочется иметь механизм торгового робота, который был бы кроссплатформенным и легким — это позволит использовать его даже на «слабом» сервере. К тому же, много лет назад, когда Квик был единственной альтернативой для частного лица, невозможно было внутри одной Windows без использования виртуальной машины запустить несколько копий программы технического анализа с разными системами — для того, чтобы каждая из этих копий отправляла свои сигналы на покупку и продажу в соответствующий Квик. Это было нужно для разных торговых стратегий.
По субъективным причинам я стал писать торгового робота в среде исполнения JavaScript Node.js, но для тестирования на истории пришлось использовать Python и его библиотеки.
Вообще именно этот модуль пришлось пару раз переписывать, потому что не смог сразу отладить его. Проблема была в том, что вызов модуля записи и обновления позиций осуществлялся сразу из нескольких мест и одни результаты перезаписывали другие. Но удалось разобраться и теперь всё протестировано и работает.
Дополнительно использую библиотеки csv-parser
и json2csv
— это популярные инструменты Node.js для обработки данных CSV, каждая из которых служит различным целям:
Установка этих библиотек:
Этот код определяет модуль для взаимодействия с CSV-файлом для управления финансовыми торговыми позициями. Служит для загрузки, сохранения, обновления и удаления финансовых позиций, хранящихся в CSV-файле.
fs
: для операций файловой системы, таких как чтение и запись файлов.csv-parser
: для анализа CSV-файлов в объекты JavaScript.json2csv
: для преобразования объектов JavaScript в формат CSV для сохранения.path
: для управления путями к файлам.logService
) и получения имен функций для лучшей отладки.path
для поиска CSV-файла, хранящего данные о позиции: ../../data/+positions.csv
.loadPositions():
savePositions(positions):
removePosition(figi):
updatePosition(newPosition):
loadPositions
, updatePosition
и removePosition
для использования в других частях робота.Этот модуль важен для обеспечения согласованности данных между локальным CSV-файлом и текущими позициями, полученными из T‑Bank Invest API. Он проверяет наличие несоответствий, которые могут привести к ошибкам в торговых операциях, и останавливает робота, если обнаруживаются несоответствия.
csvHandler
.Сравнивает позиции:csvPosition.quantity * lotSize
).Проект полностью представлен на Гитхабе: https://github.com/empenoso/SilverFir-TradingBot. Новые модули будут загружаться по мере написания и тестирования.
Автор:Михаил Шардин
27 ноября 2024 г.
А вообще, удачи в вашем начинании.
Сохранение не потокобезопасное — будут ошибки при синхронной записи и считать. Очередь поможет.
И новые функции лучше разрабатывать через тесты — тестирование позволит делать менее связанный код, его потом легче поддерживать и модифицировать. Ну а тесты позволят прогонять функционал и быть более уверенным, что работает.
Из простых решений еще можно ESLint добавить в проект — он будет помогать ошибки находить и стиль поддерживать.
Сам JS для бота сложный выбор. Проще питон подучить и на нем делать. Там хотя бы pandas и numba с Jit копиляцией есть и мультипроцессорность понятная.
PS логи и данные в проекте — зло.
У гуты-банка, у Цериха, у Атона, у Альфы, у Айти-инвеста, был еще нет-трейдер и это неполный список. И, насколько я знаю, из под линукса на квике торгуют.
Что касается авторского проекта, если рассматривать его как рабочий макет, то все здорово. Осталось понять косяки, учесть принципиальные недостатки и написать заново.
Автор, как я понимаю, пишет быстро, так что все в его руках.