Торговый робот для QUIK — Defender
«Defender» — в переводе «Защитник» и имя легендарного внедорожника. Я выбрал это название для торгового робота потому, что его две основные и единственные функции выставлять тэйкпрофит и стоплосс в виде стоп-заявок при открытии вручную позиции. Т.е. открываем длинную позу по определенному инструменту, как только заявка исполняется полностью — наш торговый робот отправляет в систему два стопордера на продажу с ценой стопа — N пунктов от цены совершения сделки для стопа, и + N пунктов соответственно для тэйкпрофита. Все параметры этого торгового робота настраиваемые. Меньше слов — больше кода (редакция кода от 29 января 2010 года):
Код на QPILE доступен только зарегистрированным пользователям.
Сразу предупреждаю, торгового робота я не проверял, возможно понадобятся доработки «под себя», и если Вы внимательные читатели моих уроков
вы без труда справитесь с этими доработками. Скачать торговый робот можно в виде файла. Кстати, посмотрите предложения спонсоров, встречаются очень интересные!
Спасибо за код:)
Пордскажите ,пожалуйста, безопасный способ тестировать роботов на текущих торгах. Как-то страшно открывать и чужой и свой код на реальном счете, вдруг какой портак и появятся убытки или куча каких-нибудь неадыкватных заявок. Вчера прочитала на quik.ru как один чел тестировал свой код и у него программа выставила 12 тыс заявок — его счет заблокировал брокер потом.
Вариант конечно оставить маленькую сумму на площадке на которой тестируешь робота, но вот с брокером это косяков не решает.
Самый безопасный — это открыть учебный счет. Да там котировки несколько отличаются от реальных, но тем не менее алгоритмы можно проверить. Что касается торгов на РТС вот ссылка: www.rts.ru/a14068 там перечень компаний которые оказывают услуги по предоставлению учебного доступа. От себя рекомендую БК «Открытие», у них можно попросить определенный инструмент, лимит. и пр. Я всегда всех роботов вначале тестирую на их учебных счетах. Удачи!
Евгений Reply:
июня 5, 2009 at 13:52
ой, не в ту ветку отправил.
П.С. 12 тыс. заявок — это круто:)
по-моему,при TP<0 (т.е при короткой позиции) STOP логичнее прибавить к PRICE,а ТЭЙК отнять.))
Евгений Reply:
июня 6, 2009 at 18:47
Согласен, логичнее
:):) На самом деле код написал минут за 15, на это внимания не обратил. Щас поправлю.
ругается на 40 строку, unknow identifier TP
Евгений Reply:
июня 9, 2009 at 11:51
После TPROFIT=200 вставьте TP=0
Евгений, а можно в двух словах: какие преимущества у выставления 2-х лимитных заявок перед стопом со связанной заявкой?
Евгений Reply:
июня 9, 2009 at 11:51
да никаких, кому как удобнее.
про ТР=0 уже догадался , но скрипт все равно не работает, ошибка пропала, время в таблицу и дату выводит а заявки не ставит
да, действительно, defender,не выставляет заявки, посмотрите Евгений, в чем проблема, программа нужная для начинающих
Выложил новую версию.
Добавил в таблицу параметры цена сделки — появляется тогда, когда есть хоть одно сделка.
Цена для стопа и цена для тэйкпрофита — появляются тогда. когда робот отработал одно из условий. Особое внимание на правильность заполнения полек с аккаунтами, их можно взять из окна ввода новой заявки, или из таблицы ограничений по счетам (ФОРТС). Бывает так, что в коде аккаунта есть буква «О» а при переписывании ее меняют на ноль — проблема.
ругается на строку 6 — неверный формат описания портфеля, — отсутствует символ завершения формулы расчета ?
Евгений Reply:
июня 11, 2009 at 13:21
Проверьте версию своего Квика, скорее всего она старая.
5.12.0.130
Евгений Reply:
июня 11, 2009 at 13:48
Очень странно. Сейчас подгрузил в свой квик — не ругаецца, все нормально. Проверьте, может скопировали из окна неправильно? В окне кода есть справа вверху первая кнопка «view source» -она открывает код в текстовом редакторе, оттуда скопируйте... БОльше ничего предположить не могу. Отпишитесь по результату.
Сергей Reply:
июня 15, 2009 at 12:00
Здравствуйте,Евгений!Загрузил, -работает. Но по прежнему, время, дату,текущие чистые позиции ставит,а вот расчитывать цену стопа и тейкпрофита ставить не хочет (ноль стоит), проверил заполнение полек аккаунта, -все верно.На вашем квике эта программа работает?, — выставляет стопы и тейкпрофиты?
Евгений Reply:
июня 15, 2009 at 13:48
Эти цены (тэйк и стоп) он заполняет тогда, когда текпоз не равен нулю, иначе говоря это цены уже ВЫСТАВЛЕННЫХ лимитов стопов и тейкпрофита.
Евгений Reply:
июня 15, 2009 at 13:56
И еще. В квике есть огромный функционал условных заявок, это в т.ч. и стоплосс, и тэйкпрофит со следящей функцией, и с уловиями привязки к определенной заявке. Это пример торгового робота — лишь пример организации построения алгоритмической схемы на QPILE, которую по аналогии можно доработать под свои нужды. Даже в этом рассматриваемом случае более эффективно вместо лимита для стоп-лосса нужно использовать классическую стопзаявку Квика.
Проект HI ROBOT — образовательный, и задача которую я ставлю перед собой это донести основы и технические решения стандартных вопросов, которые возникают при программировании торговых роботов.
Сергей Reply:
июня 15, 2009 at 14:11
ну да, я понимаю так,совершаю сделку текпоз=1 по определенной цене, которая указывается в цене сделке, а в поле стопа и тейка должны отображаться цены с учетом дельты, которая указана в коде программы?но при тестировании при текпоз=1 цены стопа и тейка ноль.Извините Евгений за назойливость, но хочется разобраться.
Евгений Reply:
июня 15, 2009 at 14:25
Не надо извинений — тут как раз рабочий процесс))
Уже нашел у себя ошибку: переменные PRICETPROFIT=0 и PRICEFORSTOP=0 — надо делать глобальными, ибо они каждый раз при итерации обнуляются. Обнулять их нужно в блоке где обнуляется FLAG.
Вы тестировали в реале? Заявки выставляет, мессаги пишет?
Сергей Reply:
июня 15, 2009 at 14:30
Тестирую на учебном счете,при совершении сделки, заявки не выставляет ни стоп, ни тейк.
Евгений Reply:
июня 15, 2009 at 14:32
А мессагу MESSAGE («ВЫСТАВЛЯЮ СТОП И ТЭЙКПРОФИТ»,1) выкидывает?
Сергей Reply:
июня 15, 2009 at 14:34
нет
Евгений Reply:
июня 15, 2009 at 20:48
А при открытии позиции ТР в таблице меняет свое значение? Если меняет значит ОБЯЗАТЕЛЬНО выкинет мессагу. Каким инструментом работаете?
Вообще я на днях перепишу весь код, с учетом замечаний и вместо лимитов поставлю условные заявки, так будет правильнее.
Выложил версию 1.3. Теперь выставляются стопордера, это более правильно. Учтен ряд замечаний. Если вы используете тестовый счет, то у например «Открытия» инструмент должен называться не «RIU9» а «RTS-9.09» иначе не работает. Обязательно правильно настроить аккаунты, на тестовом счетет «Открытия» они оба одинаковы и их лучше скопировать из окна ввода заявки.
Тестируйте и пишите результаты, так быстрее научитесь
Потестировал версию 1.3. на учебном счете в «Открытие», инструмент распознает «RIU9» (при «RTS-9.09» тишина) аккаунты проверял и оба одинаковы ,и разные, при открытии позиции ТР меняет свое значение, мессага не выкидывается, цена сделки выставляется, а стопордера нет.
Евгений Reply:
июня 16, 2009 at 12:47
Мне уже самому интересно стало)) Завтра на учебном счете протестирую сам.
Насчет инструмента — буквально вчера пробовал другого робота своего с РИМ9 — не видит, увидел только «RTS-9.09», как-то странно. У нас ведь не могут счета работать по разному.
Виталий Reply:
июня 16, 2009 at 17:10
Отзывается только на RTS-9.09 цена сделки есть, количество текущей чистой позиции есть, цена стопа и тп ноль. Брокер Алор
Как обещал — новая версия. Протестировал на учебном счете «Открытия». Проблема заключалась в том, что видимо на учебном/ых счете/ах несогласованно название инструмента: когда мы получаем ТР надо указывать «RIM9» (указал в коде явным образом, можно назначить переменную), а в отправле транзакций «RTS-9.09». Этот код при открытии позиции у меня выставляет два стоп-лимита. Обратите внимание, что при срабатывании какого-то стоп лимита. второй не снимается. Как я говорил раньше этот код — шаблон, который необходимо дорабатывать под себя.
П.С. Обратите внимание на спонсоров проекта
Евгений,потестировал на учебном счете,единственно после выставления стоп-лимитов цена сделки обнуляется,а так же стопы выставляются по результатам одной сделки, а уже следующую сделку,совершенную через некоторое время не обрабатывает(стопы не выставляет, хотя величина чистой позиции изменяется).Большое спасибо за помощь, (сегодня или завтра отправлю на кошелек спонсорскую помощь).А на реальном счете будет ли что-нибудь менятся в коде программы (по кодам торгуемых инструментов?)
Робот после обнуления позиции и отсутствии активных заявок, при открытии новой также будет выставлять два стоп лимита.
При торговле на реальном счете скорее всего нужна будет корректировка наименований инструментов и номеров аккаунта.
За помощь спасибо, но можно не перечислять а ознакомиться с информацией спонсоров
Например на главной странице.
Виталий Reply:
июня 18, 2009 at 17:17
Друзья. У меня так и не получилось попробывать. Ситуация таже. Цена сделки меняется а заявки не ставятся...
Евгений Reply:
июня 18, 2009 at 19:52
Счет тестовый? Какой брокер? Коды инструментов менять пробовали? Аккаунт правильный?
Код 100% рабочий — гарантирую.
Счет реал. Брокер Алор. Работает только с RTS-9.09. Аккаунт правильный. В работоспособности кода я не сомневаюсь, понимаю, что проблема во мне и неспособности его настроить.
Евгений Reply:
июня 18, 2009 at 20:32
Как вы определили что работает с RTS-9.09? Попробуйте поставить апостроф перед INSTRUMENT="RTS-9.09" чтоб так получилось: ' INSTRUMENT="RTS-9.09" и запустить робота снова.
Не отображается цена сделки.
Евгений Reply:
июня 18, 2009 at 21:15
В смысле не отображается? Если вы поставили апостроф — это не влияет на отображение цены сделки...
Давайте с начала: загружаете свежую версию робота, открываете окна заявки, сделки и стопзаявки. Вручную открываете позу по указанному в коде инструменту, что происходит в таблице робота и в таблицах квика?
Виталий Reply:
июня 18, 2009 at 22:07
Все сделал.В таблицах квика сделка проходит. Ни каких дополнительно заявок нет и в таблице робота только время идет. Даже не отображается цена. Может ли влиять на портфель то что я пользуюсь приводом кликовым с выводом по DDE
Евгений Reply:
июня 19, 2009 at 20:57
DDE никак не влияет. У вас проблема с названием инструмента. Пробуйте варианты с названием. В строке 21 название указано явным образом, можно заменить на переменную.
Сделайте так:
INSTRUMENT1="RIU9"
INSTRUMENT2="RTS-9.09"
и эти переменные подставляйте в коде вместо INSTRUMENT. Таких мест всего 3: 21 строка, 50, 88. Я просто не знаю как брокер «Алор» выставляетс требования к названиям. Например у меня в реал «БКС», так везде надо указывать «RIU9», а на «Открытии» по другому немного.
Внутри кода нужно, что то менять помимо размера стоплосса и тейпрофита. Вот к примеру мне нужно 80 и 40, я правильно понял, что я просто их подставляю в соответствующие строчки?
Евгений Reply:
июня 19, 2009 at 20:51
Да, просто подставить. Менять нудно только аккаунты и код инструмента.
программа хорошая, но нужно, как то вопрос с проскальзыванием решать на стопе.
Евгений Reply:
июня 19, 2009 at 21:00
Вопрос с проскальзыванием можно решить только одним методом — выставлять лимит по нужной цене и всеми средствами дожидаться его полного исполнения. Это либо исполнять заявку по существующей котировке в противоположной части стакана с нужным количеством, либо самоубийственно ждать исполнения своей заявки.
В случае с нашим роботом — это шаблон, который показывает алгоритм выставления заявок, который надо подгонять под себя. Задавайте в форуме конкретный вопрос, будем совместно разбирать. Удачи!
Defender 1.7 что-то неработает. в таблицу выводится только время, все остальное по нулям. есть где-то описание, как прогу правильно подключить? Хотя, думаю, что дело в коде... демо счет в БКС.
Евгений Reply:
сентября 24, 2009 at 12:27
Думаю проблема в наименовании инструмента. В коде два варианта, попробуйте оба варианта.
Хотел бы поинтересоваться, на тестовом счете реально ли запустить вообще какой-нибудь бот? Какой именно следует вводить инструмент?
Евгений Reply:
ноября 19, 2009 at 19:10
Не только можно. но и нужно!
Я настоятельно рекомендую начинать использовать любого робота вначале на тестовом счете. Разница между тестовым счетом и реальным:
1. Виртуальность денег и расчетов
2. Небольшая разница в котировках
В остальном это такой же квик.
я ранее никогда не пользовался роботами, да и не пробовал программировать на qpile. Сейчас ситуация такая, что зарегистировал виртуальный счет прям на сайте quik по акциям Лукойла. Привинчиваю instrument=lokh, account свой также, если это необходимо. Почему-то ни один робот не работает.
Евгений Reply:
ноября 21, 2009 at 0:21
Лукойл на ММВБ — LKOH, а не «лох»
Проверьте также код площадки.
Столкнулся с такой проблемой! Все цены расчитывает, все показывает, НО, ставит только одну заявку! Ставит ту котороя первее, т.е. если в коде сначала пропишсать всё для короткой позы, то и поставиться заявка толька для короткой! Вторая никак не хочет работать! Как можно справиться с данной проблемой?
Евгений Reply:
декабря 15, 2009 at 19:29
Не понял вопроса...Зачем в коде прописывать что-то для направления сделки?
Отправка транзакций в коде идет друг за другом. и если выставлется одна то 100% выставится и вторая.
Нет я ничего не прописывал) У меня ставиться одна заявка и всё! Вторую жду 5-10 минут, безтолку((
Евгений Reply:
декабря 15, 2009 at 19:57
Ничего не прописывать вы не могли — код бумаги то все равно прописывали? Смотрите настройки.
Ну я имел ввиду код программы не менял! Только инструмент и всё в этом роде. Вот сейчас все перепроверил, запустил! ЕСть позиция, одну стоп-заявку ставит, а вторую нет((
Евгений Reply:
декабря 15, 2009 at 20:47
Возможно баланса не хватает на две заявки.
а вот ещё такой вопрос! есть позиция, робот ее стопит, но во время этого я добираю еще один лот. его уже не трогает. почему? он же должен повторять свои действия?
Евгений Reply:
декабря 18, 2009 at 17:54
Читайте внимательнее код. Робот Дефендер выставлет заявки один раз, то очем вы говорите — это активный трейлинг-стоп: www.hirobot.ru/200908torg...ishhet-xozyaina/
Евгений — Вы Гений!!! Большое спасибо Вам, за Ваших роботов!
Я если, честно сомневался, что такое возможно!
Всем кто ещё не зарегистрировался, советую! Евгений настоящий профессионал, поможет решить любую проблему!