Есть простая, но эффективная торговая стратегия, которую уже много лет используют трейдеры. На ЛЧИ она попадалась. Торгуют её, в основном, руками, потому что временной период принятия решения малый, это обычно первые час-два торгов.
Глазами пробегаемся по акциям, фьючерсам и если попадается сигнал на покупку, то открывают позицию. Сразу же выставляем тейк-профит и стоп-лосс. Дальше просто ждем автоматическое закрытие позиций когда цена дойдет до любой из наших стоп-заявок.
Но, сколько руками не торгуй, всё равно приходит время когда появляется желание чтобы за тебя эту работу выполнял кто-нибудь другой. Например, торговый робот.
Наработки под торговый терминал QUIK не пригодились, так как Тинькофф не поддерживает QUIK.
TSLab поддерживается, но здесь есть абонентская плата, 4000 рублей, которую не все люди готовы ежемесячно платить.
Оба терминала мне нравятся. Функционал у них разный. Дополняя друг друга они позволяют решать практически весь спектр трейдерских задач.
Но, вот незадача, у брокера Тинькофф нет торгового терминала, который поддерживал бы работу со скриптами/роботами по аналогии того как это реализовано в QUIK или TSLab. То есть, модуля для алготрейдинга нет. Но есть API, с помощью которого можно выставлять и снимать заявки, а также отслеживать открытые позиции.
Я решил запрограммировать робота на Python. Преимущество такого решения в том, что это будет компактное ПО, быстрое и лёгкое. И если что-нибудь потребуется улучшить, подкрутить, обновить, то это можно будет сделать быстро. Не нужно ждать днями и неделями техподдержку торговых терминалов. И абонентской платы нет. Красота!
Из минусов то, что придется программировать практически весь функционал самому. Помимо торгового алгоритма нужно будет и терминальную обвязку реализовывать. Библиотеку готовых функций, аналогично той что есть под QUIK, я не нашел. Поэтому придется самому писать и эту библиотеку тоже.
Ну что же, план есть и можно приступать.
Благо, есть песочница (демо-счет) у Тинькофф, думал я. И можно будет в ней тестировать роботов.
Чтобы подключиться к песочнице или к боевому счету нужно создать токен.
Я сразу создал два токена. К боевому контуру (брокерский счёт) я подключился без проблем. А вот к песочнице нет подключения. Ошибка вылетает. Как выяснилось позже, это по причине того, что демо-счёта нет! И его нужно создать. Но на странице с токенами об этом ничего не сказано и кнопки для создания демо-счета нет!
Техподдержка в части API у Тинькофф оказалась ужасная. Они просто отвечают что не оказывают поддержку. Жесть. Как такое может вообще быть?! Я в шоке. Я недоволен. Ну ладно, идём дальше.
Изучая документацию я нашел информацию о том, что нужно с помощью специального метода создать новый счёт для песочницы. Правда этот метод называется не CreateAccount, а OpenAccount ))
Как можно открыть то, чего не существует?! Мне не понятно. Вот такие программисты в Тинькофф писали API.
Итак, демо-счет в песочнице открыт. С помощью специального метода я пополнил этот счёт. Всё, можно приступать к тестам!
Я написал скрипт на Python, который получает информацию по счету и выводит ее на экран.
После этого пробуем выставлять заявки, открывать позиции и выставлять стоп-заявки (тейк-профит и стоп-лосс).
И вот тут начинаются новые проблемы.
Как оказалось, песочница не поддерживает работу со стоп-заявками. И ещё кучу всего не поддерживает. А функционал для работы с песочницей реализован через отдельный класс по работе с именно с песочницей.
Ну и зачем это надо?! Мы ведь не сможем потом перенести готовый код на боевой контур и не можем проверить работоспособность всего функционала торгового робота.
Итог, песочницу реализовывал некомпетентный руководитель проекта. Нужно было просто сделать клон боевого контура, изменить его название на demo, удалить/изменить функции по работе с реальными деньгами или переделать их на работу с баллами.
Тогда вполне можно было бы отлаживаться на demo. А сейчас это абсолютно бестолковая штука, которой пользоваться не имеет смысла. Видимо, по этой причине мало кто песочницей пользуется.
Руководителю проекта ставим неуд.
Жаль потраченное время проведенное на изучение песочницы. Но ваше время, я постарался сэкономить ))
Всё, мы забыли её как страшный сон и двигаемся дальше.
Будем тестировать скрипт сразу на боевом контуре.
Из недостатков этого подхода то, что торговля сразу идёт на реальные деньги и ошибки могут приводить к потерям. Но, можно открыть новый счёт и пополнить его на небольшую сумму. Так и сделал.
При разработке скрипта я столкнулся с такой сложностью, что в документации описаны методы по API, но нет практических примеров и нет информации о том как эти методы вызываются в Python. А названия методов отличаются значительно. Их можно найти только если влезать внутрь пакетов и модулей, и смотреть как именно реализованы нужные нам методы.
Документирование, в этой части, тоже реализовано ужасно. Или не реализовано. Пользоваться неудобно.
Снова вспоминаем руководителя проекта и желаем ему довести проект до образцового состояния!
Как оказалось дальше, при выставлении заявок, нельзя просто передать цену в обычном формате типа 345.67 руб.
В системе используется тип Quotation, в котором целая часть числа хранится отдельно и дробная тоже отдельно. Там есть своя специфика. Функции перевода из обычного формата (float) в Quotation представленные в документации работают ПОЧТИ ВСЕГДА ПРАВИЛЬНО. Потому что накапливается погрешность и при выставлении заявки мы получаем ошибку не соответствия цены точности минимальному шагу цены инструмента. Заявка не выставляется, соответственно.
Хотя, программисты Тинькофф могли бы автоматически округлять цену до порядка шага цены и пропускать заявку на выставление, но нет. Все проблемы должны ложиться на разработчиков! Это Тинькофф, детка! Здесь всё по-взрослому, в режиме хард! Чтобы не скучно было! ))
На форумах выяснилось, что сторонние программисты лепят костыли, придумывают свои функции перевода в этот формат данных.
Решается проблема таким образом:
Сначала мы переводим число(сумму) в строку(текст), затем в формат Decimal, а уже затем в Quotation. Только в этом случае не будет возникать погрешность связанная с использованием формата float.
Пользуйтесь! ))
А ещё, вместо того чтобы на стороне брокера пытаться как-то корректно обработать ошибки или недочёты, на сайте в Тинькофф просто есть страничка с описанием сотни таких ошибок. Полезная, конечно, штука, но лучше бы этих ошибок было меньше и список был бы покороче. По началу это была самая посещаемая мной страница! ))
Но, как известно, терпение и труд могут привести к тому, что в итоге ошибки все будут исправлены, баги устранены и скрипт будет стабильно работать.
Я реализовал цикл, в котором робот пробегает по всем указанным в настройках инструментах (там можно выбрать секцию биржи и рублёвые или валютные инструменты), каждый инструмент обрабатывается не чаще чем через 1 секунду, чтобы нас не забанили за DDoS-атаку. Скрипт анализирует состояние текущей цены и если есть сигнал на покупку, то выставляет заявку на открытие позиции. Позже, если позиция открыта, автоматически выставляются заявки стоп-лосс и тейк-профит. Их настройки тоже задаются пользователем заранее.
Можно также задать максимальное количество позиций, лимит для одной позиции (например, чтобы не покупать слишком дорогие активы).
Есть Черный список инструментов, которые будут игнорироваться роботом. И есть Белый список инструментов: можно задать инструменты, и только они будут торговаться роботом.
За неделю тестирования робот отторговал на двух счетах в прибыль. И это радует!
Так появился мой первый робот под Тинькофф на Python!
Если Вам интересны разработки под Мосбиржу или под криптобиржи,
обращайтесь! Помогу, подскажу.
С уважением, Денис
Telegram: @iScalper
email: robot-scalper@mail.ru
P.S. Торговля на биржах сопряжена с риском потери денег. И не важно с помощью роботов вы торгуете или руками. Цена в любой момент может пойти против вашей позиции. Нужно держать риск под контролем. Нужен опыт.
Как я создавал робота под Тинькофф на Python
14 апреля 202314 апр 2023
127
6 мин
2