Блог им. robot-scalper

Как я создавал робота под Тинькофф на 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: [email protected]


P.S. Торговля на биржах сопряжена с риском потери денег. И не важно с помощью роботов вы торгуете или руками. Цена в любой момент может пойти против вашей позиции. Нужно держать риск под контролем. Нужен опыт.
★13
32 комментария
алго ветка оживает и это прекрасно )
avatar

Андрей К, алготрейдеров нужно поддерживать, тогда они с удовольствием будут делиться информацией и своим опытом. Раньше на этом сайте в комментариях очень много негатива было. Поэтому пропало желание здесь публиковаться. Вот, прошло время, и я решил написать статейку. Посмотрю на реакцию. Если людям понравится, то ещё напишу. Если нет, значит нет. Ничего страшного, пойду в другие соцсети ))

avatar
а сигнал на покупку какой?
avatar

vito333, сигнал настраивается пользователем. Есть файл настроек и в нем можно это делать. Если нужна более детальная информация, напишите в личку.

Более того, в робота можно добавить любые сигналы. Это не сложно. Всего лишь добавляется логическое условие. Всё остальное уже запрограммировано. Сложно всё с самого начала делать. А дорабатывать гораздо проще. Если нужно, обращайтесь в личку. Всё сделаем в лучшем виде! 

avatar
жесть какая. хорошо, что у меня не тиньков
avatar
OrinokoA, у каждого брокера есть свои плюсы и минусы. Тинькофф тоже развивается. API 1.0 вообще ужасный был. API 2.0 гораздо лучше. По крайней мере уже получилось создать рабочий продукт. 
avatar
Есть простая, но эффективная торговая стратегия, которую уже много лет используют трейдеры. Здесь, на Смартлабе, я её тоже встречал. 

 

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

avatar
Value, смотрим открытие рынка, смотрим фазу рынка, смотрим как инструмент торговался и закрылся вчера, если видим растущую динамику, то открываем лонг. Всё просто.
Тейк-профит ставим сильно больше, чем стоп-лосс, чтобы терять меньше, а зарабатывать больше. 
avatar
Robot-Scalper.ru, спасибо!
avatar
Robot-Scalper.ru, да, бывают недели, когда инструмент по 2-3 дня растёт, но с начала марта 22го года как MOEX открыли, я наблюдаю совсем обратную логику. Предыдущий день пампили, потом сливают весь день и следующий день могут сливать. Я вам на почту и в Телеграм написал. Гляньте, пожалуйста, когда будет время.
avatar
Плюс-то я поставил, но топик не несет никакой информации, кроме той, что у Тинькофф все плохо.
А кто бы сомневался? Не жили хорошо и привыкать не надо. ©
avatar

3Qu, почему это не несет информации? А если кто-то захочет написать свой скрипт и решит делать это под песочницу? По тем же граблям пройдется. А тут, прямая дорожка показана. И траблы с форматом Quotation разобраны и рецепт приведен качественный! 

Конечно, если вы не планируете программировать под Тинькофф или заниматься многими другими делами, то 99% информации размещенной в интернете для вас не будет нести никакой ценности ))

avatar
Robot-Scalper.ru, под Тинькофф действительно не планирую. А ежа с ужом Квик скрестить с Питоном или чем угодно другим проблем не представляет.
avatar
3Qu, QUIK в Тинькофф не поддерживается. Поэтому данное решение не подходит.
avatar
Robot-Scalper.ru, можно просто не пользоваться тинкофф, и проблема отпадает.
avatar
Luk, задача была написать робота именно под Тинькофф.
avatar
чем торговали? если не секрет
avatar
Andrey, российскими акциями. Мониторинг проводится по всем рублевым акциям, за малым исключением абсолютного неликвида. Какие попадались акции по сигналам, те робот и покупал. 
avatar
На ютубе есть канал «azzrael code».Там куча кода по тинькофф апи на питоне. Я начал было программировать, тема реально рабочая. Сделал приложуху с кнопкой с помощью библиотеки Tkinter, при нажатии на кнопку покупался актив, при нажатии на другую-продавался. Но до алгоритмов торговли не дошло, ибо в черепной коробке пустовато. Да и торговать особо нечем было уже. 
avatar
Енот наш!, главное начать! С опытом всё придет. И стратегии будут появляться, и наработки будут накапливаться. 
avatar
Под что вы ещё пишете? Прямой доступ есть?
avatar

dk777, Под Мосбиржу (QUIK — Lua, TSLab), под криптобиржи (TSLab, Python)

Telegram: @iScalper
email: [email protected]

Другие контакты можно найти на сайтах:

Robot-Scalper.ru

DeskBot.net

avatar
странно, на гите есть огромная ветка по айпишке тиньковской, коммиты  на почту сыпятся каждый час по огромной пачке…
✔ ⓈⒺⓇⒼⒾⓄ:Ⓩ, гит я видел. Пользуюсь. Но, вы сами пробовали запрограммировать бота? И что, вообще никаких проблем и вопросов не возникало? Странно ))
avatar
Ничего не понятно, но очень интересно
Константин Кутузов, что именно не понятно? 
avatar
Robot-Scalper.ru, да так-то всё грамотно написано, просто я, к сожалению, не программист

Константин Кутузов, спасибо! Но, учиться никогда не поздно! ))

Программировать очень интересно. Сейчас технологии для этого есть разные и очень крутые! Один Python чего стоит, с его миллионом дополнительных модулей для всех случаев жизни! А если ещё и нейронку прикрутить, то вообще космос получится. В этом году идет всплеск нейронных технологий и огромный интерес у людей вызывает программирование. Совсем скоро мы увидим ещё более качественные IT-решения во многих областях жизнедеятельности. Так что, присоединяйтесь к этому тренду! Будет увлекательно! ))

avatar
Помню писал робота для альфадирект все прекрасно, но сидеть его контролить дома я не могу на работе тоже, в итоге он работал дома с компа, пока я работал на работе, сперва появилась проблема перебой со связью, поставил альтернативный канал интернета и чтоб автомаьически переходило на него, потом вдруг перебой с элетричествлм дома, ну чтож тут запуск с ноутбука у него батарея, но потом произошло то, на что я повлиять никак не могу, а именно от брокера пришли не те данные, то есть цена на рынке не опускалась так низко, а данные на торгуемом таймфрейме сервер возвращал некорректные, хотя на другом таймфрейме ошибки не было, брокер ответил, что да так бывает, но ответственности за это он само собой не несет, далее оставалось только поставить в проге везде проверки истинности данных, если мол они подтвердятся на других таймфреймах, но подумал это совсем уже беспредел и на этом завязал с этим…
avatar

Serega Belichenko, выделенный сервер можно было попробовать использовать. Там обычно всегда всё стабильно с интернетом. А по поводу некорректных данных, да, это десятилетняя проблема. В моих роботах проверок на качество входных данных и корректность состояния стратегии гораздо больше, чем код самого торгового алгоритма. Мало, сделать робота. Нужно ещё сделать так, чтобы он работал стабильно! Вы это тоже уже поняли. Настроить можно всё. Нужно лишь время на отлавливание ошибок. Но с годами эти наработки становятся стандартными и нового отказоустойчивого робота создавать уже проще. 

Не опускайте руки! Дорогу осилит идущий! Желаю успехов! 

С уважением, Денис

avatar
Robot-Scalper.ru, спасибо! А корректность состояния стратегии это что, если не проверка согласованности стат распределения результатов с результатами тестирования на историяеских данных и оценка допустимости степени отклонения? То есть это что-то в моем понимании, что происходит не вовремя как бы торговли, а после уже получения результатов по ней, если конечно не очень высокочастотная торговля.
avatar

теги блога Robot-Scalper.ru

....все тэги



UPDONW
Новый дизайн