← Voltar

Тестирование робота

Здравствуйте, Михаил.

В этой ветке хотелось бы обсудить такой насущный вопрос как тестирование написанного робота. К решению проблемы можно подходить следующим образом:

  1. Открыть демо счет и погонять на нем. Но здесь я столкнулся с проблемой, что демо фортс работает как-то криво. Я просто загрузил настройки с реального квика в демо и не увидел ни таблицы всех сделок ни параметров торговли фьючерсом, хотя графики есть.
  2. Тестировать на реальном счете одним контрактом. Но тестировать так значит терять деньги, чего не хотелось бы. Михаил, не могли бы вы осветить этот вопрос, если можно. P.S. Что-то на стокпортале начались проблемы, поэтому наверное лучше обсудит все здесь.

Comentários (63)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

gravi
gravi

А тестировать, что!? Сам алгоритм, или взаимодействие с торг.терминалом. Взаимодействие, легко, Quik-Junior.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Тестировать - все! и взаимодействие и алгоритм. Мне например нужен ФОРТС. А вот судя по этойhttp://forum.finam.ru/index.php?showtopic=2635

ссылке это невозможно.

skzuev
skzuev

Добрый день,

Алгоритм лучше заранее протестировать на истории. Даже если он обладает возможностью к самообучению. В противном случае возможны очень неприятные сюрпризы.

Сергей.

gravi
gravi

Ну если быстрый робот , то только на реале. А так обычно на истории тестируют) Вот здесь фортс вроде есть. Хотя сам не побывал.

http://quik.ru/user/client/quik/how-to-start/

skzuev
skzuev

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

На каком таймфрейме робот работает?

Dmitri Kaptsov
Dmitri Kaptsov Autor

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

http://www.bullstime.ru/2009/08/robots/brokertest.htmlПопробую в открытии открыть учебный счет.

skzuev
skzuev

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

Если мне не изменяет память, переставлены местами код и название контракта.

И лучше часть стратегии оставить в том средстве, в котором она тестировалась, реализовав на S# только исполнительные механизмы - меньше ошибок будет.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Я Quik Junior там и брал, данных по Фортс к сожалению, кроме графиков нет:( Можно ставить заявки, но ничего больше. Даже стандартный пример со скользящими не работает, если добавить RIH0 в таблицу инструментов, и соответственно в примере поменять LKOH на RIH0. Кроме того для Фортс в нем не исторических данных, данные генерируются только для сегодняшнего дня.

Dmitri Kaptsov
Dmitri Kaptsov Autor

А предоставляет ли Открытие исторические данные? Я тестировал стратегию в Омеге, а качество сопряжения ее с квиком мне не очень нравится. У Михаила судя по описанию все должно стабильнее работать.

skzuev
skzuev

Про историю, честно говоря, не помню. Исторические данные тестового ФОРТС могут отличаться от реальных. Можно сделать сопряжение Омеги не с QUIK, а с S#. Омега умеет писать в файлы или использовать COM объекты?

gravi
gravi

В принципе можно какую нить заглушку написать на RegisterOrder, некий эмулятор, и в логи писать результаты. Причем в методе эмуляторе, можно и временные задержки включать и отключения связи симулировать и т.д). Этакий синтетический стресс тест)) Может автор S#, реализует идею??))

gravi
gravi

Про историю тоже не понял, зачем нужна в реалТайме? А так идем на Финам, и качаем любые данные.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Да сами данные мне не очень интересны пусть они и вымышленными будут, лишь бы порядок цифр совпадал:) Можно омегу сопрягать и с S#, но думаю, что система от этого стабильнее не станет, лучше уж все через S# делать имхо. А com объекты есть только у SmartTrade с его SmartCom, но по отзывам он тоже глюковат.

Dmitri Kaptsov
Dmitri Kaptsov Autor

У Михаила в примере SamplesSMA реализована загрузка исторических данный из файла в формате финама, но ведь там не текущих цен, только OHLC. Хотя думаю и этого может хватить если стратегию немного изменить. А вот использовать вместо RegisterOrder недостаточно, нужно чтоб и котировки шли соответствующие. В общем как вы правильно сказали внешний бы эмулятор, чтоб в идеале работал так: читал данные из файла finam'a но генерировал свои тики для загружаемого бара. Вот это было бы здорово.

Dmitri Kaptsov
Dmitri Kaptsov Autor

А что с этими данными делать, как применить при тестировании робота?

gravi
gravi

Так, я тоже не понял, зачем Вам исторические данные из квика. А в случае тестирования на истории то Финам -> WLD, оп крайней мере я так делаю.

skzuev
skzuev

Ну если полностью переписывать робота на S# то и кормить его надо историческими данными видимо.

gravi
gravi

Полный эмулятор это круто, но и c RegisterOrder, можно брать реальные котировки из DDE, как сейчас и реализовано , а исполнение ордеров эмулировать..

Dmitri Kaptsov
Dmitri Kaptsov Autor

Для тестирования на истории я беру Финам->Omega. В идеале хотелось бы протестировать робота на истории. Чтоб сопоставить результаты и быть уверенным, но вот пока даже идей нет как это сделать.

Dmitri Kaptsov
Dmitri Kaptsov Autor

У Михаила реализована загрузка информации из файла финама, может как- то можно их использовать для тестирования на истории?

Dmitri Kaptsov
Dmitri Kaptsov Autor

Да исполнение ордеров мне не так важно, по крайней мере на первом этапе. Гораздо важнее оттестировать правильность расчет входа и выхода. Если с ними все в порядке, то останется только уже физически ордера выставлять и все. Кстати у меня пришла идея, что это можно протестировать с какой-нибудь бумагой на ММВБ.

skzuev
skzuev

Для такого тестирования придется сделать эмулятор QUIK и биржи :-) Который будет принимать заявки/стоп-заявки, исполнять их и сообщать результат.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Сегодня получил доступ к тестовому серверу Открытия на месяц. Там все есть: и фортс и история! Поэтому похоже можно обойтись без супер эмулятора:)

gravi
gravi

Расскажите, что и как вы собираетесь тестировать на истории из квика? Правда интересно. И в открытии данные торгов реальные, или учебные от РТС?

Dmitri Kaptsov
Dmitri Kaptsov Autor

Точно также как в омеге. То есть робот получает данные в виде свечек и в случаи наступления условий виртуально выставляет заявку (например просто сохраняет данные о входе/выходе в бд).

Dmitri Kaptsov
Dmitri Kaptsov Autor

Данные с РТС похожи на реальные.

skzuev
skzuev

Поделитесь потом результатами, если не сложно. Хотя бы на качественном уровне получилось-не получилось.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Хорошо, постараюсь рассказать все, что удалось сделать. Вот сейчас столкнулся с проблемой: quik от открытия версии 5.15 и похоже с ним уже S# работать не хочет. Пытаюсь в оригинальный quik junior 5.16 запихнуть ключи от открытия, чтоб все заработало.

skzuev
skzuev

У них на сервере М10 лежит 5.16, если мне память не изменяет

С уважением, Сергей Зуев

Dmitri Kaptsov
Dmitri Kaptsov Autor

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

Mikhail Sukhov
Mikhail Sukhov

"Если мне не изменяет память, переставлены местами код и название контракта." Самое интересное, что каждому брокеру кажется его стиль именования единственно правильным. И таких единстрвенных набирется такое количество... Вообщем, я все названия (коды, классы и т.д.) храню в конфиг файлах. Это позволяет делать роботов, не завязанных на инструменте. Я перенес робота в боевой режим - поменял пару строчек в конфиге. Тоже самое делаю и с путями к квику, и со счетами. Удобно.

Mikhail Sukhov
Mikhail Sukhov

Идеи были, есть и будут. Вопрос только в том, когда. Вот если бы кто взялся, да сделал бы. Пусть даже коммерческое (если, конечно, он не такой клевый чувак как я!). Я бы помог направлением. Тем более, что сам S# под это уже готов. BaseTrader - и вперед.

skzuev
skzuev

Аналогично. Действительно очень удобно и сильно упрощает жизнь. Всем рекомендую внешние конфиги. У меня их даже два - отдельно технические вещи ( путь к QUIK и т.п.), отдельно торговые параметры. Что раздражает в QUIK - я так и не научился вводить логин/пароль иначе как в окошко при входе. Приходится эмулировать ввод с клавиатуры для автозапуска системы. Может кто поделится более изящным решением?

Mikhail Sukhov
Mikhail Sukhov

Кстати, а зачем? У них есть функция реконнета + расписание подключения к серверу. Тоеретически, Квик можно запустить аж на всю неделю (а может и больше). Кто-нибудь уже пробовал?

skzuev
skzuev

Чтобы робот был полностью автономен. Пробовал на три дня - работало. Теоретически можно и на выходные оставлять.

Mikhail Sukhov
Mikhail Sukhov

Автономный или автоматическим? Думаю, что второе. Так вот отсюда и вопрос, зачем делать дополнительно в проге, если эту часть автоматизации уже Квик делает? Или я не что-то уловил.

skzuev
skzuev

А как QUIK принимает логин и пароль, кроме окошка при старте? может я пропустил что-то?

Mikhail Sukhov
Mikhail Sukhov

Никак по другому. Но я имел ввиду то, что Квик можно один раз запустить. Соответственно и пароль один раз ввести. Или Вы хотите, чтобы и робот сам Квик запускал а логин пароль вводил?

skzuev
skzuev

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

Mikhail Sukhov
Mikhail Sukhov

А пароль так же в конфиге храните? Я бы порекомендовал его или шифровать http://msdn.microsoft.com/ru-ru/library/ms254494.aspx), или NTFS безопасность навесить на папку/файл.

skzuev
skzuev

Вопрос с безопасным хранением пароля решен, но немного другим способом.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Добрый день, Подскажите, а как вы вводите данные для автоматического входа в quik?

Dmitri Kaptsov
Dmitri Kaptsov Autor

Доброго времени суток, Наконец-то оттестировал робота и в ближайшее время буду выпускать зверька на биржу. Тестировал используя quik от открытия. Сервер работает стабильно и разрешает подключаться в любое время. Но вот quik у них удалось найти только 5.15. А он уже не работает с s# 1.7:( И еще, в отличии от остальных у них действительно есть история, например в Quik-Junior каждый день работал с чистого листа, как будто биржу только сегодня открыли, что для меня было неудобным. Но вот котировки по RIM0 идут нереальные (хотя по RIH0 вроде бы шли реальные), кроме того маленькая ликвидность и как следствие очень большие спреды, но опять же для меня это не было проблемой. Если что-то заинтересует спрашивайте. С уважением Дмитрий Капцов

skzuev
skzuev

http://www.autoitscript.com/autoit3/index.shtml

&lthttp://www.autoitscript.com/autoit3/index.shtml>вот эта софтина хорошо помогает.

Функций QUIK я для этого не нашел

С уважением, Сергей Зуев

Dmitri Kaptsov
Dmitri Kaptsov Autor

Спасибо за программу. Похоже действительно интересное решение.

С уважением Дмитрий Капцов

Mikhail Sukhov
Mikhail Sukhov

Судя по тому, что написано здесь -http://quik.ru/user/download/как раз начиная с 5.15 и должен работать, не ниже. S# главное, чтобы новое АПИ работало. Если оно не хочет работать с 5.15, то нужно спросить уже у квиковцев - почему.

Mikhail Sukhov
Mikhail Sukhov

Кстати, насчет тестирования. Историческое тестирование на мой взгляд очень критично к алгоритму. Если алгоритм опирается на скорость выставления заявки - все, история уже не подойдет. Я вот думаю в сторону real-time тестирования. Когда тестировать нужно на реальных деньгах, но при этом не выставлять заявки на самом деле. Чем это лучше. Тем, что есть стакан, по которому с большей или меньшей долей вероятности можно сказать, выполнится заявка или проскользит. На истории такое не получить (если конечно не скринить стакан, что так же бессмысленно).

skzuev
skzuev

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

С уважением, Сергей Зуев

Mikhail Sukhov
Mikhail Sukhov

И что Вы сделали?

skzuev
skzuev

Я сделал другую стратегию. Для которой не критичны задержки в десятки секунд.

QUIK все же частенько притормаживает (Открытие+ADSL канал, но думаю у всех брокеров так, во всяком случае в БКС аналогично), задерживаются на 10-20-30 секунд котировки, информация о сделках и т.п.

Все это приводит к тому, что роботам, работающим на таймфреймах меньше минуты, становится не очень хорошо.

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

Естественно, все сугубо ИМХО, если кто-то сделает/сделал робота, скальпящего через QUIK, я буду только рад и с удовольствием об этом узнаю. Но пока я таких разработок не видел.

С уважением, Сергей Зуев

Mikhail Sukhov
Mikhail Sukhov

10-20-30 секунд - это серьезные задержки, даже не для скальпинга. А с чем Вы сравнивали?

skzuev
skzuev

Не понял вопрос :( С чем я сравнивал что?

С уважением, Сергей Зуев

Mikhail Sukhov
Mikhail Sukhov

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

skzuev
skzuev

Честно могу признаться, что точных измерений я не делал. Смотрел в основном на время заявки/сделки и время ее появления в QUIK. Например, сделка по моей заявке прошла в 12:00:01, а у меня появилась только в 12:01:00. Смотрел глазами и в логи робота. Понятно, что при "спокойном" рынке эта дельта минимальна, но при сильных движениях она начинает резко расти ( сервер брокера не справляется?).

С уважением, Сергей Зуев

Dmitri Kaptsov
Dmitri Kaptsov Autor

Да квик 5.15 с 1.6 работает, но вот в версии 1.7 вы расширили таблицы инструментов для импорта и теперь не удается его настроить. Кроме того в новой версии вы изменили объектную модель. Поэтому пока сижу на 1.6. Она полностью устраивает, за исключением отсутствия MarketTimeOffset.

Dmitri Kaptsov
Dmitri Kaptsov Autor

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

Mikhail Sukhov
Mikhail Sukhov

А почему не удается настроить?

Dmitri Kaptsov
Dmitri Kaptsov Autor

В моей версии квика от открытия отсутствовала цена закрытия.

Mikhail Sukhov
Mikhail Sukhov

А почему? Это такая особенность версии, что в 5.15 ее еще не было (как то мало вероятно, но все же)? Может дело в настройках Связь Списки? На крайний случай, ее можно заменить любой другой колонкой с ценой. Просто тогда в программы Вы должны это учесть.

Dmitri Kaptsov
Dmitri Kaptsov Autor

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

Mikhail Sukhov
Mikhail Sukhov

А к брокеру обращались? Может все решится одним звонком. Вдруг еще какие детали просветятся.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Обращался, говорят у них уже 5.16 давно, но для реала. Поэтому как открою у них счет так и погляжу что и как по настоящему.

Dmitri Kaptsov
Dmitri Kaptsov Autor

Скачал последнюю версию каика с сайта Открытия, оказалась - 5.16. В ней спокойной загрузился файл настроек квика от S# 1.7 и все заработало нормально. Првада цену закрытия они так и не транслируют, ну и ладно.