Блог им. empenoso
Самое главное, что никакого отношения к слову алко
это не имеет. В течении нескольких лет я торговал в связке программы технического анализа AmiBroker + торговый терминал QUIK через .tri и .trr файлы в основном на фьючерсах на срочном рынке. Не могу сказать что это было неудачным опытом, но со временем я узнал про распределение активов (Asset allocation) и понял что очень сложно соревноваться с бенчмарком в виде фондового индекса.
В теории это означает что можно купить индекс и забыть об этом, заниматься своими делами, бизнесом, семьёй — а индекс растёт (ну или падает, смотря какое время) и для этого не нужно прикладывать никаких действий. А за связкой AmiBroker + QUIK постоянно нужно было присматривать, следить не отвалился ли адаптер импорта через .tri файл. А ещё иметь несколько виртуальных машин с установленными копиями Windows на каждой виртуалке на одном физическом компьютере для разных брокеров. Возможна была установка только одной пары AmiBroker + QUIK на одну винду. Всё это мне не особо нравилось.
В 2024 году захотелось что-то лёгкое — без Windows и современное — через API интерфейс. Желательно бесплатное для пользователя. Несколько лет назад я уже пытался узнать появились ли у российских брокеров API для работы с ними, но так и не собрался. Этой осенью я стал активно искать информацию — какой брокер имеет АПИ для работы с физлицами. Не смог найти никакой сводной таблицы и нашёл только три варианта:
По субъективным причинам я выбрать работать с T‑Bank Invest API (это бывший Тинькофф) через среду выполнения JavaScript Node.JS.
AmiBroker – это платформа для технического анализа, которая позволяет пользователям создавать свои собственные индикаторы и скрипты. Она также может интегрироваться с другими программами, такими как MetaTrader, NinjaTrader и даже с торговыми терминалами, включая QUIK.
AmiBroker 3D Optimization Chart
В AmiBroker'е мне очень нравилась его функция 3D Optimization Chart. На мой взгляд она позволяла избежать переподгонки показателей под кривую истории. Оптимизация в бэк-тестере поддерживалась функцией optimize. Синтаксис этой функции был следующий:
<code>переменная = optimize("Описание", default , min , max , step );</code>
переменная
— это обычная переменная их языка AFL, которой присваивается значение, возвращаемое функцией оптимизации. В режиме оптимизации функция optimize возвращает последовательные значения от минимума до максимума (включительно) с пошагово."Описание"
— это строка, которая используется для идентификации переменной оптимизации и отображается как имя столбца в списке результатов оптимизации.default
— это значение по умолчанию, которое оптимизирует возврат функции в режимах исследования, индикатора, комментария, сканирования и обычного бэктеста.min
— минимальное значение оптимизируемой переменнойmax
— максимальное значение оптимизируемой переменнойшаг
— это интервал, используемый для увеличения значения от минимума до максимума.
QUIK – это торгово-информационная система, предназначенная для предоставления участникам фондового рынка доступа к биржевым данным в реальном времени. Она используется многими брокерами и трейдерами для совершения операций на фондовых рынках.
Когда AmiBroker подключался к QUIK, он получал данные в реальном времени от торговой системы QUIK и использовал их для построения графиков, создания индикаторов и выполнения других аналитических задач. Пользователь мог также настроить систему так, чтобы она автоматически исполняла сделки через QUIK на основе определенных условий.
Для подключения AmiBroker к QUIK необходимо было установить соответствующий плагин или модуль. Это позволяло платформе AmiBroker получать данные от QUIK и обрабатывать их для дальнейшей работы.
Пример логов работы:
<code>09.10.2009 11:00:31: [2208:2212] Получено уведомление о выполнении транзакции , TRANS_ID=807263520;CLASSCODE=SPBFUT;ACTION=NEW_ORDER;SECCODE=GMZ9;ACCOUNT=SPBFUT0087W;PRICE=37692;QUANTITY=2;OPERATION=S;CLIENT_CODE=48560/48560;TYPE=L;EXECUTION_CONDITION=;CHECK_LIMITS=;MARKET_MAKER_ORDER=;STATUS=3;TRANS_NAME="Ввод заявки"; DESCRIPTION="[FORTS] Заявка N 761722396 успешно зарегистрирована"; ORDER_NUMBER=761722396; 09.10.2009 14:04:30: [2208:1172] Получено уведомление об отправке транзакции , TRANS_ID=2087816784;CLASSCODE=SPBFUT;ACTION=NEW_ORDER;SECCODE=VBZ9;ACCOUNT=SPBFUT0087W;PRICE=6333;QUANTITY=12;OPERATION=S;CLIENT_CODE=48560/48560;TYPE=L;EXECUTION_CONDITION=;CHECK_LIMITS=;MARKET_MAKER_ORDER=;STATUS=0;TRANS_NAME="Ввод заявки"; DESCRIPTION="Отправлена транзакция"; 09.10.2009 14:04:30: [2208:2212] Получено уведомление о выполнении транзакции , TRANS_ID=2087816784;CLASSCODE=SPBFUT;ACTION=NEW_ORDER;SECCODE=VBZ9;ACCOUNT=SPBFUT0087W;PRICE=6333;QUANTITY=12;OPERATION=S;CLIENT_CODE=48560/48560;TYPE=L;EXECUTION_CONDITION=;CHECK_LIMITS=;MARKET_MAKER_ORDER=;STATUS=3;TRANS_NAME="Ввод заявки"; DESCRIPTION="[FORTS] Заявка N 763167846 успешно зарегистрирована"; ORDER_NUMBER=763167846; 09.10.2009 15:10:10: [2208:1172] Завершен процесс отправления транзакций из файла , Входной файл-"C:\Program Files\Quik5\MTS\input.tri", Выходной файл-"C:\Program Files\Quik5\MTS\output.tro", Файл с журналом-"C:\Program Files\Quik5\MTS\log.trr", отправлено транзакций-3, выполнено транзакций-3</code>
Насколько я понимаю AmiBroker (создан в Польше) уже несколько лет не обновляется: последний выпуск в 2015 году, а обновления в 2017 году.
QUIKом я уже очень давно не пользовался, но по скриншотам на сайте я понял что программа внешне за последние годы не особенно изменилась.
Раньше я был активным пользователем форума КБ ПАУК. Вот даже нашёл файл HTML файл с интересующей меня темой, который пролежал 20 лет:
Форум форекс кб паук http://forex.kbpauk.ru/ (в 2024 уже не работает)
Я много изучал тему посвященную AmiBroker'у. И спрашивал там (привет Олег 000). Выкладывал примеры из бумажного журнала Technical Analysis of STOCKS & COMMODITIES.
Сейчас, в 2024 году форум недоступен, но если кто-то хочет ностальгии, то нашёл его архивную копию.
Форум форекс кб паук http://forex.kbpauk.ru/ (в 2024 уже не работает)
Правда архивная копия немного бесполезна, потому что самые интересные разделы открывались только после входа по логину и паролю.
Примерная структура робота
Осенью 2024 года решил написать торгового бота, создать структуру программы которая будет работать через API брокера.
Торговый робот должен содержать:
Решил пока не лезть в срочный рынок и попробовать поработать с самими оборотистыми акциями на Московской бирже. Остаётся только их найти.
В этой статья я распишу как создал два модуля на Node.js:
API<code>tinkoffClient.js
<code>searchTradingVolumes.js
Проект представлен на Гитхабе: https://github.com/empenoso/SilverFir-TradingBot.
Модуль <code>tinkoffClient.js
Вот его функциональность:
<code>callApi()
<code>getCandles()
Модуль <code class="inline-code">searchTradingVolumes.js
Вот подробный обзор функций модуля:
Moment.js
: используется для манипулирования датами, в частности для генерации временных диапазонов (три месяца) для запросов исторических данных.TinkoffClient
: это выделенный клиент бота для взаимодействия с API Tinkoff Invest, облегчающий коммуникацию, необходимую для получения данных по акциям и свечам.<code>2024-10-06 07:25:48 [INFO]: Отфильтрованных акций 170 штук. 2024-10-06 07:25:50 [INFO]: Топ 15 акций по объему за последние три месяца: [ { "ticker": "GRNT", "figi": "TCS10A0JV532", "totalVolume": 7092179306 }, { "ticker": "VTBR", "figi": "BBG004730ZJ9", "totalVolume": 5906896857 }, { "ticker": "MTLR", "figi": "BBG004S68598", "totalVolume": 5047115732 }, { "ticker": "UWGN", "figi": "BBG008HD3V85", "totalVolume": 4423660125 }, { "ticker": "RNFT", "figi": "BBG00F9XX7H4", "totalVolume": 1775061013 }, { "ticker": "EUTR", "figi": "TCS00A1002V2", "totalVolume": 1270913208 }, { "ticker": "SNGSP", "figi": "BBG004S681M2", "totalVolume": 1092911599 }, { "ticker": "GAZP", "figi": "BBG004730RP0", "totalVolume": 1027429605 }, { "ticker": "ROSN", "figi": "BBG004731354", "totalVolume": 983187493 }, { "ticker": "SBER", "figi": "BBG004730N88", "totalVolume": 940111321 }, { "ticker": "SGZH", "figi": "BBG0100R9963", "totalVolume": 929574444 }, { "ticker": "AFLT", "figi": "BBG004S683W7", "totalVolume": 632806638 }, { "ticker": "VKCO", "figi": "TCS00A106YF0", "totalVolume": 595704137 }, { "ticker": "RUAL", "figi": "BBG008F2T3T2", "totalVolume": 542242519 }, { "ticker": "TATN", "figi": "BBG004RVFFC0", "totalVolume": 538004844 } ] 2024-10-06 07:25:50 [INFO]: Вставка в config.js: 2024-10-06 07:25:50 [INFO]: securitiesToMonitorTikerArray: ["GRNT","VTBR","MTLR","UWGN","RNFT","EUTR","SNGSP","GAZP","ROSN","SBER","SGZH","AFLT","VKCO","RUAL","TATN"] 2024-10-06 07:25:50 [INFO]: securitiesToMonitorFigiArray: ["TCS10A0JV532","BBG004730ZJ9","BBG004S68598","BBG008HD3V85","BBG00F9XX7H4","TCS00A1002V2","BBG004S681M2","BBG004730RP0","BBG004731354","BBG004730N88","BBG0100R9963","BBG004S683W7","TCS00A106YF0","BBG008F2T3T2","BBG004RVFFC0"] 2024-10-06 07:25:50 [INFO]: Для использования в скрипте download_md.sh в одну колонку: TCS10A0JV532 BBG004730ZJ9 BBG004S68598 BBG008HD3V85 BBG00F9XX7H4 TCS00A1002V2 BBG004S681M2 BBG004730RP0 BBG004731354 BBG004730N88 BBG0100R9963 BBG004S683W7 TCS00A106YF0 BBG008F2T3T2 BBG004RVFFC0</code>
Проект представлен на Гитхабе: https://github.com/empenoso/SilverFir-TradingBot. Новые модули будут загружаться по мере написания и тестирования.
Модуль <code>tinkoffClient.js
Автор:Михаил Шардин
7 октября 2024 г.
Вот еще нашел недавно один сайт algotradinglib.com/en/soft/ там более бохато, но там всё вместе.
API это не решение а интерфейс.
Просто вы написали про готовые решения, но я не хотел пользоваться квиком. И смог найти только три АПИ от брокера.
Может быть можно как-то было выйти напрямую на биржу, но я начинаю с небольших денег и не хочу платить за аренду и доступ.
Ну и для Node.js вариантов не было. Поэтому стал писать.
Все верно, нюанс только в том, что вы платите временем, правда меняете его на опыт, что неплохо.
Купить, продать, узнать статус можно банально отправив запрос через, скажем, postman. Никаких промежуточных прокладок
У них, правда давно, были какие-то проблемы с несколькими счетами на аккаунте, не знаю, сейчас исправили или нет.
PS про autotrade впервые узнал, спасибо
PPS сам Т-АПИ сейчас не использую, хватает совсем простых инструментов, но с интересом слежу, что люди делают, например, впечатлила связка гугл-докс и т-апи, готовая табличка
алготрейдинг это не про программирование. ТС пишет, что вернулся в алго, но это не совсем так, точнее сказать совсем не так :)
Дмитрий Овчинников, да это так. Но без механизма подачи заявок никак. Вот я его себе и создаю.
А алгоритмы чуть позже. Но чем проще тем лучше наверное. На мой взгляд вопрос именно в постоянстве механизированного исполнения.
это типичная ошибка выжившего, тем более давно минувших лет. сайт набит программистами и где же успешный успех?
ох уж эти теоретики :)
неофициальный SDK Node.JS а потом эта чешуя сольет твои апи и сама для себя все продаст и купит.
Легальная или кряк?
yurikon, и всё таки их только три по РФ — если без клиентского софта брокер.
Вроде БКС ещё своё АПИ разрабатывает. Но на тестинг уже новых не берут.
Но плюсик, за старание)
Мои 6 брокеров не берут с меня за Quik ни копейки.
Так ли нужен ли доступ к живым торгам для тестирования? Когда-то была доступна история торгов в тиках даже для очереди заявок
www.qscalp.ru/download
erinrv.qscalp.ru/
www.qscalp.ru/store/qsh.pdf
PS Quik+Lua все «Основные функции» из статьи реализует элементарно.
«Без Windows» — это всё прямо на смартфоне? — Ну тогда да…
Хотя планшет-раскладушка с Windows не такая уж диковинка.
АПИ (API — Application Program Interface) — это что угодно. Что в этом уникального и ранее небывалого?
PS Я когда-то делал замеры на Quik'е из Церих-капитал. Подтверждение заявки приходило через 0.1 сек после отправления и ещё через 0.1 сек она помещалась в таблице заявок Quik'а на моём ПК в Питере.
PPS Кстати, не так уж давно я видел предложения разместить свой виртуальный Quik со своим торговым роботом на Lua именно на сервере брокера.
Нужен просто механизм который запустил и он стабильно работает вот и всё. Пусть у тебя дома или на удаленном сервере.
Если нет — никакое преимущество в скорости доступа на биржу не имеет смысла.
И есть ли в самом деле такое преимущество?
PS И как же это тебе не везло, что только теперь, после многих лет, ты добрался до брокера со стабильно работо-способным сервисом.
Я 5 лет не мог собраться, чтобы что-то такое подобное сделать.
Выставлять заявки это прекрасно, но надо еще контролировать их исполнение, снимать неисполненный остаток или всю часть. Следить, чтобы алгоритм повторно не выставлял заявки, а для этого нужно делать логические блокировки. Все алгоритмы должны работать независимо друг от друга, не нагружая систему. Там еще писать и писать. Энтузиазм легко может снова сойти на нет.
Когда смотрел тарифы брокеров, Тинькова сразу отбросил, посмотрев на комиссии на срочном рынке
Всего несколько операций длятся несколько секунд. Ужасно долго для робота, но очень быстро для человека.
мне всегда было интересно почему для десктопа — «Отображение информации, скорее всего через веб-сервер.»? и какой информации?
Вроде вот такого: daily.dev/blog/setup-nodejs-express-project-a-beginners-guide
Извините на русском не смог сразу найти
Неправильно понимаете, программа обновляется, последний релиз был в августе 2024
https://www.amibroker.com/news.html