Торговый робот «Black Hole»
Когда закончил работу над торговым роботом «Модифицированный стакан», начал искать как использовать его потенциал в реальной торговле. Для начала попробовал представить вообще механизм ценоформирования в стакане, в частности найти причину расширения спреда. И пришел к такому выводу, что спред расширяется в основном, когда пошло сильное движение, и встречные «рыночные» заявки трейдеров начинают сметать очередь ожидающих заявок. Те рыночные заявки которые успели найти «очередника» — исполнились и соответственно изменили цену последней сделки на свою, те кто не успел — встают в очередь со своим направлением, тем самым сокращая спред. И как только сила движения иссякла — спред возвращается к своим средним значениям. Внимательно следя за «модифицированным стаканом», я заметил, что иногда за самой лучшей заявкой в стакане образуется пустота на 5-6-7 шагов цены, и как только эту заявку кто-нибудь «съедает» спред резко расширяется в эту сторону, и в большинстве случает провоцирует сужение так же в эту сторону. Пригла в голову идея, отслеживать такие пустоты, съедать эту заявку и сразу же выставлять заявку-тэйкпрофит на 10 п выше (в случае первоначальной покупки), в расчете на то, что сужающийся спред (а это ничто иное как встречные заявки) исполнят этот тэйкпрофит, т.к. пустота за первоначальной одинокой заявкой в стакане была больше чем размер тэйкпрофита. Теория-скальпинг получилась стройная и интересная, и я приступил к работе. В результате родился код.
Код доступен только зарегистрированным пользователям:
Код несколько сумбурный, т.к. делался для себя. Но постоянные посетители, после прочтения и осваивания предыдущих уроков разберутся
В итоге у меня случился аврал на основной работе и я так толком и не смог протестировать этого робота. Он у меня заработал, отслеживал стакан, находил эти одинокие заявки. но вот сделать его стабильно прибыльным у меня не хватило времени.
Кстати, обратите внимание на условие исполнения ордеров — FILL_OR_KILL, сейчас оно закомментарено, но попробуйте с ним и без него. В общем вот такая идея, если у вас возникнут соображения каким образом довести ее до логического стабильного результата — пишите в личку.
А можно узнать судьбу комментария?
Евгений Reply:
января 27, 2010 at 13:44
Ответил вам в почту!
Евгений добрый день,юзаю робота три дня ,увеличел тек профит и лосс чтоб на шумах не срывало лосс,раньше профита уменьшил разнецу в лоссе между стопом и ценой исполнения, пробовал разные значения,пока остановился так:профит 50,лосс 300 разница между стоп ценой и ценой в лосс =0,не могу добится чтобы тек профит всегда выстовлялся равный заданному, в данном случае 50,выставляется 50,50,50,и вдруг 150,а цена доходитдо 135,из 10 лосей 7 таких.добится четкого выстовления задонного профита,и можно подключать на реал,
грешу на связь, тест подключен на средне скоростной канал,бывают тормоза и видно сразу три заявки , потом срабатывает профит или лосс,и ценна несется дальше,а заявка на покупку ,продажу остается не использовонной.
Евгений Reply:
февраля 11, 2010 at 22:31
Привет.
я думаю 50 это очень большой ТП для этой стратегии, 10 самое то. В роботе алгоритм такой:
если находится пустота. значит покупаем крайнюю заявку и сразу выставляем ордер на продажу по цене покупки плюс 10. Откуда берется тройной отступ как в вашем случае не понимаю. Скорее связь тут свою лепту вносит...
после обеда пошли сплошные лоси,судя по сделкам бот все делал наоборот, может поменять бай с селом,
Привет.
Раз уж вы заговорили о связи, какой она должна быть?
я думаю что «скорость» в килобайтах тут значения не играет, а важен пинг
до сервера.
Понятно, что gprs и спутники отпадают сразу из-за большого пинга, а у проводных соединений пинг будет меньше 100мс. Как считаете 100мс это хорошо или плохо?
Евгений Reply:
февраля 12, 2010 at 19:05
Тут сложно сказать. Чем быстрее тем лучше!
Привет, по поводу связи ,канал по любому должен быть скоростной при любой торговли. а при скальпенге тем более,у меня сейчас на тесте из за тормозов по связи сработала заявка ТП,и пошел нарезаться убыток,стоп стоит, но сдругой стороны,так что скорость в килобайтах играет и существенно,при сильных движениях заявки не виснут,кстати и прислабом тоже.
Привет,Евгений на учебном счете наверно эту стратегию не доведеш до стабильно прибыльной,порядок исполнения заявок не позволяет,алогоритм проверить можно,наверно все быстрые стратегии надо доводить на реале,да и по сделкам я сегодня подклучил реал и тест с одними параметрами,за 30 минут работы на реал 5 сделок, на тесте штук 50,
Евгений,
А не могли бы вы закомментировать каждый блок. Хотя бы что за что отвечает. Так будет гораздо проще разобраться. Моя манера написания программ на qpile несколько отличается от вашей.
+ возник вопрос, а достаточно ли обновления одного раза в секунду для подобного робота??
Как быстро выставляются заявки??? Успевает ли бот своевременно исполнять их?
Евгений Reply:
марта 2, 2010 at 18:43
Привет.
Со временем сделаю — сейчас завал.
1 секунда конечно маловато для такого робота, но тем не менее он работает. Заявки исполняет не робот, а сервер биржи. Успевает.
А как можно узнать комментарии к 91,95,190,201,204,215,как работает FILL_OR_KILL
Евгений Reply:
марта 9, 2010 at 18:11
Это строки кода?
vladislav Reply:
марта 9, 2010 at 21:31
ДА
Евгений Reply:
марта 9, 2010 at 21:43
91 — получаем из стакана значение бида
95 — оффера.
Эти два параметра можно еще получить из таблицы текпараметров.
190 — код функции покупки.
стоп...вы про символ «'»??? Это обозначение комментария. т.е. если поставить символ апострофа перед строкой то робот ее не обрабатывает.
как работает FILL_OR_KILL лучше прочитать в руководстве по квику:
● «Немедленно или отклонить» – заявка исполняется только полностью, т.е. при наличии в торговой системе встречных заявок по цене, не хуже указанной и с количе-ством бумаг, превышающим объем заявки.
vladislav Reply:
марта 11, 2010 at 2:08
Спасибо,
Добрый день, Евгений! Вы написали алгоритм робота — если находится пустота, значит покупаем крайнюю заявку и сразу выставляем ордер на продажу по цене покупки плюс 10. Я понял, что основная часть алгоритма в строках 105-186. А можно прокомментировать их с описанием переменных? Мне не понятно из кода, где мы становимся на эту крайнюю заявку.
Добрый день, Евгений! Подскажите, пожалуйста, как можно «поймать» событие совершения сделки. Существует ли такой признак? Может есть функция, которая возвращает это событие?
Евгений Reply:
мая 19, 2010 at 19:26
Привет. Каждую итерацию (исполнение) программы отслеживать текущую позицию. Если этого недостаточно, то почитайте в описании функция отправки транзакций может возвращать результат операции, т.е. отправили рыночную заявку, функция ответила что транзакция удовлетворена — вот вам факт сделки.
Positive Reply:
мая 21, 2010 at 10:17
Спасибо, Евгений! Ваш ответ мне помог.