Как протестировать торговый робот на исторических данных в QUIK
Если гора не идет к Магомеду — Магомед собирается, подпоясывается и матерясь выдвигается в сторону горы. В статье «Как получить котировки из QUIK» я уже сетовал на то, что в QPILE не предусмотрено получение котировок определенного бара по его номеру. Отсюда. думаю, и растут ноги невозможности тестирования роботов на исторических данных стандартными методами. Но настоящие герои всегда идут в обход!
Итак, дано: торговый робот, исторические данные;
Задача: тест прибыльности.
Качаем тиковые данные в www.finam.ru в формате DATE, TIME, LAST:
Тиковые данные нужны именно для детального теста. Полученный текстовый файл формата:
05/05/09;10:30:00;83805.00000 05/05/09;10:30:00;83805.00000 05/05/09;10:30:00;83805.00000 05/05/09;10:30:00;83800.00000 05/05/09;10:30:00;83780.00000
экспортируем в эксель, разбиваем дату, время и цену на разные колонки, удаляем колонки с датой и временем, выделяем колонку с ценой, и сочетанием клавиш CTRL-H (поиск с заменой) меняем точку на запятую, либо заменяем последовательность .00000 на «ничто». Сохраняем полученные данные так же в формате ТХТ:
83805 83805 83805 83800 83780
Нам нужна информация только о цене. Есть и другой вариант, о котором чуть позже.
Итак, мы получили нужные нам данные, теперь приступим к модификации робота, например нашего «Торговый робот пробойный». Во первых нам нужно в самом начале, в первой части переменной PRICE присвоить значение из полученного нами файла с данными. Это делается с помощью функции READ_LINE:
Код на QPILE доступен только зарегистрированным пользователям.
который после теста мы также подгружаем в эксель, и проводим анализ прибыльности. Продвинутые пользователи, этот анализ также могут проводить внутри алгоритма, и выводить результат прибыльности при достижении конца файла с данными.Таким способом можно проверить большинство торговых стратегий, но скальпинг — увы, надо проверять в реале.
В общем основу я дал, экспериментируйте!

Кстати, подобным образом можно протестировать любого робота в реал-тайме! Дерзайте!
Если тестировать в реале, в основном коде надо что нить менять?
Всмысле он рабочий?
Да, и почему нет комментариев?
Или народ так увлекся рублей капусты по средством (Пробойного), что нет времени черкнуть пару строк? )
Кто нить выскажитесь работает — не работает?
Евгений Reply:
мая 25, 2009 at 16:04
При тесте реал-тайм в основном коде, вместо торговых приказов, нужно описанным методом записывать в файл действие и цену предполагаемого входа. Затем также подгрузить в эксель и проанализировать полученные данные.
Евгений Reply:
мая 25, 2009 at 16:05
Да, и по поводу рубли капусты, на всех страничках, справа есть замечательная кнопочка « Оказать поддержку проекту»!
А как же тестировать работу с индикаторами??? Например, со скользящими средними? Как учитывать мин. и макс. цены. Все это довольно проблематично при таком подходе.
Евгений Reply:
июня 4, 2009 at 20:37
Андрей, что Вы имеете в виду?
Если у вас алгоритмы входов-выходов основаны на показателях индикаторов — то их все равно описывать, что для теста что для реальной торговли. Ведь по сути, мы заменяем торговые приказы записями в лог файлах, на индикаторы и мин. макс. цены это значения не оказывает. Подробнее опишите вопрос свой.
Евгений Reply:
июня 4, 2009 at 20:39
Добавлю, что это один из немногих вариантов «прогона» готовых роботов. Еще как вариант можно делать цикл по номерам баров в самом квике.
немного офтопик: постепенно и когда есть свободное верям пишу программку на VBA для тестирования по историческим данным. В идеале будет следующее — программке кормится файл с тиковыми данными (в приведенном примере используется только цена, на самом деле необходим еще, например объем(если моя позиция велика — для меня это существенно) значение времени (для формирования свечи)), программка пробегает по файлу и строит 1-секундные свечки, если данных нет, строит нулевую свечку, с учетом естественно рабочих дней и времени работы площадки. Далее секундные свечки достаточно просто преобразовать в любые минутные, часовые, дневные и т.д. вопрос лишь времени. После данных пассов имеем свечки заданного тайминга. Далее. Далее эти свечки сгружаем в .xls файл, либо внутри программки же считаем необходимые нам индикаторы и задаем условия открытия позиций, ожидания, закрытия и стоп-ограничений. На данном этапе есть та часть, которая формирует секундные свечки.
Olesya Reply:
июля 25, 2009 at 15:11
Есть программа тех. анализа -Wealth-lab. Там уже все это написано. Данные берутся для metastock и тестируются
indikator Reply:
июля 29, 2009 at 11:05
Олеся, все великолепно, но есто одно но, а именно, сама программа metastock, а скорее всего и Wealth-lab стоят определенных денег...по большому счету, можно и не описывать торговые стратегии на qpile а воспользоваться тем же метастоком для формирования сигналов и отправки транзакций...
Уважаемый, indikator, интересуюсь аналогичной проблемой, пока правда никуда не продвинулся (думал, что есть готовый вариант). Хочу поинтересоваться, а процесс прохождения заявки через торговую систему Вы как-то имитируете? т.е. если говорить о Квике, то это таблица заявок, таблица сделок и пр...???
Пока до этого не дошел, однако, раз это будет система проверки МТС, то естественно будет имитация (какая либо) исполнения, ожидания, снятия заявок...без этого комплексно не оттестировать...имхо
Добрый вечер Евгений.
Опишите кратко другой вариант получения исторических данных.
Спасибо
Евгений Reply:
октября 16, 2009 at 20:34
Привет.
Вообще у меня есть два основных подхода получения исторических данных: первый это качать историю в тестовом виде с финама и т.п. ресурсов, второй это писать робота, который будет сам себя тестировать на исторических данных из квика. Второе сложнее, т.к. в чистом виде в квике эта история недоступна для просмотра, но ей можно воспользоваться откатывая дату назад. Т.е. мы говорим квику дай нам хай свечи за 21 апреля 2009 года на минутках. Т.е. в этом роботе должен быть сложный модуль перебора даты и времени назад, в принципе он у нас уже есть — посмотрите робот Мувинг, и читайте статью «получиение данных по номеру бара». Здесь еще надо брать в расчет сколько истории хранится по каждому инструменту в квике. Вобщем подход геморойный. Проще всего тестировать стратегию — в программах теханализа, а робота на тестовом счете, чтоб не изобретать велосипед!
Удачи!
Я так и предполагал. Спасибо
Подскажите, а какие изменения нужно внести в приведенный здесь пример тестирования на текстовом файле, если не удалять дату и время, а файл будет иметь вид:
Дата,время,O,H,L,C,V.
Это бывает нужно, если в роботе есть сигналы, использующие эти данные.
Евгений Reply:
октября 28, 2009 at 20:29
Привет.
Если не удалять дату и время, то после функции чтения строки, функцией SUBSTR надо посимвольно вырезать отдельно дату, время. и цену. Предварительно нужно завести для них всех свои переменные. Тогда после чтения каждой строки у вас будут доступны все данные. О функции SUBSRT почитайте в руководстве по языку.
Походу не надо менять точку на запятую, у меня если стоит запятая, то считывается только целая часть, если точка, то и все после нее
Евгений Reply:
ноября 7, 2009 at 20:46
В купайле в коде точка — разделитель целой и дробной части числа.
be10 Reply:
ноября 8, 2009 at 1:23
Вот и я про то, кажется мы друг друга поняли