Robot-Scalper.ru
Robot-Scalper.ru личный блог
14 апреля 2023, 15:41

Как я создавал робота под Тинькофф на Python

Tinkoff, Тинькофф, прибыльные торговые роботы

Есть простая, но эффективная торговая стратегия, которую уже много лет используют трейдеры. Здесь, на Смартлабе, я её тоже встречал. И на ЛЧИ она попадалась. Торгуют её, в основном, руками, потому что временной период принятия решения малый, это обычно первые час-два торгов.
Глазами пробегаемся по акциям, фьючерсам и если попадается сигнал на покупку, то открывают позицию. Сразу же выставляем тейк-профит и стоп-лосс. Дальше просто ждем автоматическое закрытие позиций когда цена дойдет до любой из наших стоп-заявок.

Но, сколько руками не торгуй, всё равно приходит время когда появляется желание чтобы за тебя эту работу выполнял кто-нибудь другой. Например, торговый робот.

Наработки под торговый терминал 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. Торговля на биржах сопряжена с риском потери денег. И не важно с помощью роботов вы торгуете или руками. Цена в любой момент может пойти против вашей позиции. Нужно держать риск под контролем. Нужен опыт.
32 Комментария
  • Андрей К
    14 апреля 2023, 15:53
    алго ветка оживает и это прекрасно )
  • vito333
    14 апреля 2023, 16:17
    а сигнал на покупку какой?
  • OrinokoA
    14 апреля 2023, 17:07
    жесть какая. хорошо, что у меня не тиньков
  • Value
    14 апреля 2023, 17:27
    Есть простая, но эффективная торговая стратегия, которую уже много лет используют трейдеры. Здесь, на Смартлабе, я её тоже встречал. 

     

    Можете рассказать суть стратегии? =)

      • Value
        14 апреля 2023, 17:43
        Robot-Scalper.ru, спасибо!
      • Xakauga
        30 июня 2023, 15:03
        Robot-Scalper.ru, да, бывают недели, когда инструмент по 2-3 дня растёт, но с начала марта 22го года как MOEX открыли, я наблюдаю совсем обратную логику. Предыдущий день пампили, потом сливают весь день и следующий день могут сливать. Я вам на почту и в Телеграм написал. Гляньте, пожалуйста, когда будет время.
  • 3Qu
    14 апреля 2023, 21:40
    Плюс-то я поставил, но топик не несет никакой информации, кроме той, что у Тинькофф все плохо.
    А кто бы сомневался? Не жили хорошо и привыкать не надо. ©
      • 3Qu
        14 апреля 2023, 18:03
        Robot-Scalper.ru, под Тинькофф действительно не планирую. А ежа с ужом Квик скрестить с Питоном или чем угодно другим проблем не представляет.
          • Luk
            15 апреля 2023, 10:14
            Robot-Scalper.ru, можно просто не пользоваться тинкофф, и проблема отпадает.
  • SVG
    14 апреля 2023, 17:57
    чем торговали? если не секрет
  • Чей Херсон?
    14 апреля 2023, 19:04
    На ютубе есть канал «azzrael code».Там куча кода по тинькофф апи на питоне. Я начал было программировать, тема реально рабочая. Сделал приложуху с кнопкой с помощью библиотеки Tkinter, при нажатии на кнопку покупался актив, при нажатии на другую-продавался. Но до алгоритмов торговли не дошло, ибо в черепной коробке пустовато. Да и торговать особо нечем было уже. 
  • dk777
    15 апреля 2023, 00:25
    Под что вы ещё пишете? Прямой доступ есть?
  • ✔  ⓈⒺⓇⒼⒾⓄ:Ⓩ
    15 апреля 2023, 13:03
    странно, на гите есть огромная ветка по айпишке тиньковской, коммиты  на почту сыпятся каждый час по огромной пачке…
  • Константин Кутузов
    15 апреля 2023, 13:58
    Ничего не понятно, но очень интересно
      • Константин Кутузов
        15 апреля 2023, 15:10
        Robot-Scalper.ru, да так-то всё грамотно написано, просто я, к сожалению, не программист
  • Serega Belichenko
    15 апреля 2023, 21:59
    Помню писал робота для альфадирект все прекрасно, но сидеть его контролить дома я не могу на работе тоже, в итоге он работал дома с компа, пока я работал на работе, сперва появилась проблема перебой со связью, поставил альтернативный канал интернета и чтоб автомаьически переходило на него, потом вдруг перебой с элетричествлм дома, ну чтож тут запуск с ноутбука у него батарея, но потом произошло то, на что я повлиять никак не могу, а именно от брокера пришли не те данные, то есть цена на рынке не опускалась так низко, а данные на торгуемом таймфрейме сервер возвращал некорректные, хотя на другом таймфрейме ошибки не было, брокер ответил, что да так бывает, но ответственности за это он само собой не несет, далее оставалось только поставить в проге везде проверки истинности данных, если мол они подтвердятся на других таймфреймах, но подумал это совсем уже беспредел и на этом завязал с этим…
      • Serega Belichenko
        17 июля 2023, 09:46
        Robot-Scalper.ru, спасибо! А корректность состояния стратегии это что, если не проверка согласованности стат распределения результатов с результатами тестирования на историяеских данных и оценка допустимости степени отклонения? То есть это что-то в моем понимании, что происходит не вовремя как бы торговли, а после уже получения результатов по ней, если конечно не очень высокочастотная торговля.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн