Блог им. 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 г.
API это не решение а интерфейс.
Просто вы написали про готовые решения, но я не хотел пользоваться квиком. И смог найти только три АПИ от брокера.
Может быть можно как-то было выйти напрямую на биржу, но я начинаю с небольших денег и не хочу платить за аренду и доступ.
Ну и для Node.js вариантов не было. Поэтому стал писать.
Все верно, нюанс только в том, что вы платите временем, правда меняете его на опыт, что неплохо.
Купить, продать, узнать статус можно банально отправив запрос через, скажем, postman. Никаких промежуточных прокладок
У них, правда давно, были какие-то проблемы с несколькими счетами на аккаунте, не знаю, сейчас исправили или нет.
PS про autotrade впервые узнал, спасибо
PPS сам Т-АПИ сейчас не использую, хватает совсем простых инструментов, но с интересом слежу, что люди делают, например, впечатлила связка гугл-докс и т-апи, готовая табличка