Главная > Скальпинг, Торговый робот > Торговый робот «Black Hole»

Торговый робот «Black Hole»

14 декабря 2009

Торговый роботКогда закончил работу над торговым роботом «Модифицированный стакан», начал искать как использовать его потенциал в реальной торговле. Для начала попробовал представить вообще механизм ценоформирования в стакане, в частности найти причину расширения спреда. И пришел к такому выводу, что спред расширяется в основном, когда пошло сильное движение, и встречные «рыночные» заявки трейдеров начинают сметать очередь ожидающих заявок. Те рыночные заявки которые успели найти «очередника» — исполнились и соответственно изменили цену последней сделки на свою, те кто не успел — встают в очередь со своим направлением, тем самым сокращая спред. И как только сила движения иссякла — спред возвращается к своим средним значениям. Внимательно следя за «модифицированным стаканом», я заметил, что иногда за самой лучшей заявкой в стакане образуется пустота на 5-6-7 шагов цены, и как только эту заявку кто-нибудь «съедает» спред резко расширяется в эту сторону, и в большинстве случает провоцирует сужение так же в эту сторону. Пригла в голову идея, отслеживать такие пустоты, съедать эту заявку и сразу же выставлять заявку-тэйкпрофит на 10 п выше (в случае первоначальной покупки), в расчете на то, что сужающийся спред (а это ничто иное как встречные заявки) исполнят этот тэйкпрофит, т.к. пустота за первоначальной одинокой заявкой в стакане была больше чем размер тэйкпрофита. Теория-скальпинг получилась стройная и интересная, и я приступил к работе. В результате родился код.

Код доступен только зарегистрированным пользователям:

Код несколько сумбурный, т.к. делался для себя. Но постоянные посетители, после прочтения и осваивания предыдущих уроков разберутся :)

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

Кстати, обратите внимание на условие исполнения ордеров — FILL_OR_KILL, сейчас оно закомментарено, но попробуйте с ним и без него. В общем вот такая идея, если у вас возникнут соображения каким образом довести ее до логического стабильного результата — пишите в личку.

Евгений Скальпинг, Торговый робот ,

  1. panzernik
    27 Январь 2010 в 12:28 | #1

    А можно узнать судьбу комментария?

    Евгений Reply:

    Ответил вам в почту! :)

  2. alex_davyd
    11 Февраль 2010 в 13:07 | #2

    Евгений добрый день,юзаю робота три дня ,увеличел тек профит и лосс чтоб на шумах не срывало лосс,раньше профита уменьшил разнецу в лоссе между стопом и ценой исполнения, пробовал разные значения,пока остановился так:профит 50,лосс 300 разница между стоп ценой и ценой в лосс =0,не могу добится чтобы тек профит всегда выстовлялся равный заданному, в данном случае 50,выставляется 50,50,50,и вдруг 150,а цена доходитдо 135,из 10 лосей 7 таких.добится четкого выстовления задонного профита,и можно подключать на реал,

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

    Евгений Reply:

    Привет.

    я думаю 50 это очень большой ТП для этой стратегии, 10 самое то. В роботе алгоритм такой:

    если находится пустота. значит покупаем крайнюю заявку и сразу выставляем ордер на продажу по цене покупки плюс 10. Откуда берется тройной отступ как в вашем случае не понимаю. Скорее связь тут свою лепту вносит...

  3. alex_davyd
    11 Февраль 2010 в 19:55 | #3

    после обеда пошли сплошные лоси,судя по сделкам бот все делал наоборот, может поменять бай с селом,

  4. Сон
    12 Февраль 2010 в 04:39 | #4

    Привет.

    Раз уж вы заговорили о связи, какой она должна быть? :)

    я думаю что «скорость» в килобайтах тут значения не играет, а важен пинг

    до сервера.

    Понятно, что gprs и спутники отпадают сразу из-за большого пинга, а у проводных соединений пинг будет меньше 100мс. Как считаете 100мс это хорошо или плохо?

    Евгений Reply:

    Тут сложно сказать. Чем быстрее тем лучше!

  5. alex_davyd
    12 Февраль 2010 в 20:14 | #5

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

  6. alex_davyd
    15 Февраль 2010 в 12:59 | #6

    Привет,Евгений на учебном счете наверно эту стратегию не доведеш до стабильно прибыльной,порядок исполнения заявок не позволяет,алогоритм проверить можно,наверно все быстрые стратегии надо доводить на реале,да и по сделкам я сегодня подклучил реал и тест с одними параметрами,за 30 минут работы на реал 5 сделок, на тесте штук 50,

  7. MikhailZ
    1 Март 2010 в 23:53 | #7

    Евгений,

    А не могли бы вы закомментировать каждый блок. Хотя бы что за что отвечает. Так будет гораздо проще разобраться. Моя манера написания программ на qpile несколько отличается от вашей.

    + возник вопрос, а достаточно ли обновления одного раза в секунду для подобного робота??

    Как быстро выставляются заявки??? Успевает ли бот своевременно исполнять их?

    Евгений Reply:

    Привет.

    Со временем сделаю — сейчас завал.

    1 секунда конечно маловато для такого робота, но тем не менее он работает. Заявки исполняет не робот, а сервер биржи. Успевает.

  8. vladislav
    9 Март 2010 в 00:13 | #8

    А как можно узнать комментарии к 91,95,190,201,204,215,как работает FILL_OR_KILL

    Евгений Reply:

    Это строки кода?

    vladislav Reply:

    ДА

    Евгений Reply:

    91 — получаем из стакана значение бида

    95 — оффера.

    Эти два параметра можно еще получить из таблицы текпараметров.

    190 — код функции покупки.

    стоп...вы про символ «'»??? Это обозначение комментария. т.е. если поставить символ апострофа перед строкой то робот ее не обрабатывает.

    как работает FILL_OR_KILL лучше прочитать в руководстве по квику:

    ● «Немедленно или отклонить» – заявка исполняется только полностью, т.е. при наличии в торговой системе встречных заявок по цене, не хуже указанной и с количе-ством бумаг, превышающим объем заявки.

    vladislav Reply:

    Спасибо,

  9. Positive
    12 Май 2010 в 11:39 | #9

    Добрый день, Евгений! Вы написали алгоритм робота — если находится пустота, значит покупаем крайнюю заявку и сразу выставляем ордер на продажу по цене покупки плюс 10. Я понял, что основная часть алгоритма в строках 105-186. А можно прокомментировать их с описанием переменных? Мне не понятно из кода, где мы становимся на эту крайнюю заявку.

  10. Positive
    17 Май 2010 в 15:23 | #10

    Добрый день, Евгений! Подскажите, пожалуйста, как можно «поймать» событие совершения сделки. Существует ли такой признак? Может есть функция, которая возвращает это событие?

    Евгений Reply:

    Привет. Каждую итерацию (исполнение) программы отслеживать текущую позицию. Если этого недостаточно, то почитайте в описании функция отправки транзакций может возвращать результат операции, т.е. отправили рыночную заявку, функция ответила что транзакция удовлетворена — вот вам факт сделки.

    Positive Reply:

    Спасибо, Евгений! Ваш ответ мне помог.

Необходимо войти на сайт, чтобы написать комментарий.