Редакция D’ принимает участие в конкурсе трейдеров, который проводит ММВБ на срочном рынке. После того как был отрыт брокерский счет, мы посмотрели на ценовой график фьючерса на индекс ММВБ и увидели, что на торгах периодически происходят "проливы" (резкие продажи) или "выкосы" (покупки). Купленные дешево или проданные дорого контракты в таких ситуациях принесли бы очень быструю прибыль.

То, что мы видим на рисунке, похоже на систематические ошибки робота. Возможно, что его уже отремонтировали, но мы попросили Дениса Колодина, который специализируется на программировании торговых стратегий, написать нам такого робота на языке QPILE — его легко подключить к системе QUIK и поймать ошибки соперника: покупать дешево или продавать дорого.

Денис запрограммировал алгоритм, который мы уже начали тестировать, и написал нам статью про созданного им робота. Скачать скрипт Дениса Колодина (©) можно по ссылке www.algomarkets.ru/software/qpile/Basetrading.qpl. Разумеется, пользоваться им следует на собственный страх и риск.

Константин Илющенко


 

БЕЙСТРЕЙДИНГ

Охота на торгового робота, который завелся на срочном рынке ММВБ, с помощью редакционного робота, который создан в системе интернет-трейдинга QUIK

Бейсджампинг

Разница в цене между базовым активом (например, индексом) и фьючерсом на этот индекс все время меняется. Иногда она больше, иногда меньше, но игра на этой разнице может быть неплохим способом подзаработать. Главное сохранять терпение во время торгов и иметь молниеносную реакцию. Это похоже на бейсджампинг: забираетесь на платформу повыше и прыгаете вниз.

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

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

 

Сделка против рынка

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

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

Важный вопрос: а как узнать, что резкое отклонение цены временное и сформировался шип (прокол, или spike в техническом анализе)? Сформулируем признаки прокола: цена не вернется обратно, если индекс также резко изменяется в том же самом направлении, что и фьючерс. Другая закономерность: чем резче отклонение цены, тем выше вероятность ее возврата. Или плавные изменения цены, вероятнее всего, будут продолжаться.

 

База стратегии

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

Первое, что должен делать робот, — это определять цену последней сделки и выставлять две заявки. Если заявки выставлять с разницей от цены последней сделки 500 пунктов, то это будет выглядеть так. Например, цена последней сделки с фьючерсом составила 131 500 пунктов, и тогда выставятся две заявки: bid (на покупку) с ценой 131 000 пунктов и ask (на продажу) по 132 000. Если заявки пересчитаются (об этом далее) по цене последней сделки 131 600, то пара bid = 131 100, ask = 132 100.

Следует обязательно обратить внимание на частоту переоценки заявок, так как рыночная цена постоянно меняется.

Если робот будет непрерывно переставлять заявки, отталкиваясь от рыночной цены, то при резком изменении последней робот мгновенно переставит bid и ask, и сделок не совершится. А вот если этот период будет большим, то сделки будут заключаться и на плавных движениях. Так вы совершите множество бесперспективных сделок.

Удвоенное время формирования шипа и будет приблизительным значением периода преставления заявок.

Более совершенный способ основан не на периодическом пересчете заявок относительно цены последней сделки, а на расчете ускорения цены. Для этого, кстати, предназначен целый класс индикаторов — осцилляторы. Можно вычислить три последних значения осциллятора и посмотреть на относительное изменение: если ускорение растет с каждым новым значением, то заявки следует заморозить, а если начало уменьшаться, следует переставить заявки по новым ценам.

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

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

 

Переходим к прыжкам

В качестве примера я создал простого робота на QPILE. Встроенный язык терминала QUIK выбран для того, чтобы вы могли поэкспериментировать с кодом: так как он интерпретируемый, вы легко сможете вносить изменения в него. Робот предназначен для демонстрации. Для реальной торговли потребуется дополнить алгоритм «ремнями безопасности». Тем не менее основные элементы уже работоспособны.

Перед запуском вы вносите в код свои параметры: бумага, базовый актив, величина отклонения, период повторного выполнения заявок и т. п. Все необходимые параметры перечислены в комментариях в коде. Если вы не знаете, как запустить сценарий QPILE, обратитесь к документации на сайте quik.ru.

Очевидно, что алгоритм должен работать в цикле, но запустить сценарий QPILE в бесконечном цикле невозможно. Можно лишь задать периодичность его выполнения. Это ограничение ввели разработчики QUIK от ресурсоемких программ. Но запускать портфель нужно с довольно высокой периодичностью (это не повлияет на скорость пересчета заявок, разве только косвенно) для того, чтобы исключить задержку между входом в позицию и выставлением заявки на выход из нее. Если этого не сделать, программа выставит заявки и остановится, она даже не узнает, что заявка исполнилась, и не сможет отреагировать на это.

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

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