Здравствуйте, Михаил.
В этой ветке хотелось бы обсудить такой насущный вопрос как тестирование написанного робота. К решению проблемы можно подходить следующим образом:
- Открыть демо счет и погонять на нем. Но здесь я столкнулся с проблемой, что демо фортс работает как-то криво. Я просто загрузил настройки с реального квика в демо и не увидел ни таблицы всех сделок ни параметров торговли фьючерсом, хотя графики есть.
- Тестировать на реальном счете одним контрактом. Но тестировать так значит терять деньги, чего не хотелось бы. Михаил, не могли бы вы осветить этот вопрос, если можно. P.S. Что-то на стокпортале начались проблемы, поэтому наверное лучше обсудит все здесь.
Comentários (63)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
А тестировать, что!? Сам алгоритм, или взаимодействие с торг.терминалом. Взаимодействие, легко, Quik-Junior.
Тестировать - все! и взаимодействие и алгоритм. Мне например нужен ФОРТС. А вот судя по этойhttp://forum.finam.ru/index.php?showtopic=2635
ссылке это невозможно.
Добрый день,
Алгоритм лучше заранее протестировать на истории. Даже если он обладает возможностью к самообучению. В противном случае возможны очень неприятные сюрпризы.
Сергей.
Ну если быстрый робот , то только на реале. А так обычно на истории тестируют) Вот здесь фортс вроде есть. Хотя сам не побывал.
http://quik.ru/user/client/quik/how-to-start/
Если робот очень быстрый, то может не хватить скорости работы QUIK и надо будет подключаться к биржевому шлюзу напрямую.
На каком таймфрейме робот работает?
Действительно предварительно стратегию я обкатал и оптимизировал на истории, затем создал робота на основе библиотеки S#. Теперь его бы хотелось посмотреть в рабочем режиме, а не бежать с ним на биржу, так как уверен ошибки есть. Вот статейка на тему:
http://www.bullstime.ru/2009/08/robots/brokertest.htmlПопробую в открытии открыть учебный счет.
В Открытии тестовый счет дают без проблем, только там коды фьючерсов отличаются от реальных.
Если мне не изменяет память, переставлены местами код и название контракта.
И лучше часть стратегии оставить в том средстве, в котором она тестировалась, реализовав на S# только исполнительные механизмы - меньше ошибок будет.
Я Quik Junior там и брал, данных по Фортс к сожалению, кроме графиков нет:( Можно ставить заявки, но ничего больше. Даже стандартный пример со скользящими не работает, если добавить RIH0 в таблицу инструментов, и соответственно в примере поменять LKOH на RIH0. Кроме того для Фортс в нем не исторических данных, данные генерируются только для сегодняшнего дня.
А предоставляет ли Открытие исторические данные? Я тестировал стратегию в Омеге, а качество сопряжения ее с квиком мне не очень нравится. У Михаила судя по описанию все должно стабильнее работать.
Про историю, честно говоря, не помню. Исторические данные тестового ФОРТС могут отличаться от реальных. Можно сделать сопряжение Омеги не с QUIK, а с S#. Омега умеет писать в файлы или использовать COM объекты?
В принципе можно какую нить заглушку написать на RegisterOrder, некий эмулятор, и в логи писать результаты. Причем в методе эмуляторе, можно и временные задержки включать и отключения связи симулировать и т.д). Этакий синтетический стресс тест)) Может автор S#, реализует идею??))
Про историю тоже не понял, зачем нужна в реалТайме? А так идем на Финам, и качаем любые данные.
Да сами данные мне не очень интересны пусть они и вымышленными будут, лишь бы порядок цифр совпадал:) Можно омегу сопрягать и с S#, но думаю, что система от этого стабильнее не станет, лучше уж все через S# делать имхо. А com объекты есть только у SmartTrade с его SmartCom, но по отзывам он тоже глюковат.
У Михаила в примере SamplesSMA реализована загрузка исторических данный из файла в формате финама, но ведь там не текущих цен, только OHLC. Хотя думаю и этого может хватить если стратегию немного изменить. А вот использовать вместо RegisterOrder недостаточно, нужно чтоб и котировки шли соответствующие. В общем как вы правильно сказали внешний бы эмулятор, чтоб в идеале работал так: читал данные из файла finam'a но генерировал свои тики для загружаемого бара. Вот это было бы здорово.
А что с этими данными делать, как применить при тестировании робота?
Так, я тоже не понял, зачем Вам исторические данные из квика. А в случае тестирования на истории то Финам -> WLD, оп крайней мере я так делаю.
Ну если полностью переписывать робота на S# то и кормить его надо историческими данными видимо.
Полный эмулятор это круто, но и c RegisterOrder, можно брать реальные котировки из DDE, как сейчас и реализовано , а исполнение ордеров эмулировать..
Для тестирования на истории я беру Финам->Omega. В идеале хотелось бы протестировать робота на истории. Чтоб сопоставить результаты и быть уверенным, но вот пока даже идей нет как это сделать.
У Михаила реализована загрузка информации из файла финама, может как- то можно их использовать для тестирования на истории?
Да исполнение ордеров мне не так важно, по крайней мере на первом этапе. Гораздо важнее оттестировать правильность расчет входа и выхода. Если с ними все в порядке, то останется только уже физически ордера выставлять и все. Кстати у меня пришла идея, что это можно протестировать с какой-нибудь бумагой на ММВБ.
Для такого тестирования придется сделать эмулятор QUIK и биржи :-) Который будет принимать заявки/стоп-заявки, исполнять их и сообщать результат.
Сегодня получил доступ к тестовому серверу Открытия на месяц. Там все есть: и фортс и история! Поэтому похоже можно обойтись без супер эмулятора:)
Расскажите, что и как вы собираетесь тестировать на истории из квика? Правда интересно. И в открытии данные торгов реальные, или учебные от РТС?
Точно также как в омеге. То есть робот получает данные в виде свечек и в случаи наступления условий виртуально выставляет заявку (например просто сохраняет данные о входе/выходе в бд).
Данные с РТС похожи на реальные.
Поделитесь потом результатами, если не сложно. Хотя бы на качественном уровне получилось-не получилось.
Хорошо, постараюсь рассказать все, что удалось сделать. Вот сейчас столкнулся с проблемой: quik от открытия версии 5.15 и похоже с ним уже S# работать не хочет. Пытаюсь в оригинальный quik junior 5.16 запихнуть ключи от открытия, чтоб все заработало.
У них на сервере М10 лежит 5.16, если мне память не изменяет
С уважением, Сергей Зуев
Точно, взял с сервера обычный quik и все заработала. Правда и с тестовым должно все работать, я похоже напутал с выводом из quik. В любом случаи спасибо.
"Если мне не изменяет память, переставлены местами код и название контракта." Самое интересное, что каждому брокеру кажется его стиль именования единственно правильным. И таких единстрвенных набирется такое количество... Вообщем, я все названия (коды, классы и т.д.) храню в конфиг файлах. Это позволяет делать роботов, не завязанных на инструменте. Я перенес робота в боевой режим - поменял пару строчек в конфиге. Тоже самое делаю и с путями к квику, и со счетами. Удобно.
Идеи были, есть и будут. Вопрос только в том, когда. Вот если бы кто взялся, да сделал бы. Пусть даже коммерческое (если, конечно, он не такой клевый чувак как я!). Я бы помог направлением. Тем более, что сам S# под это уже готов. BaseTrader - и вперед.
Аналогично. Действительно очень удобно и сильно упрощает жизнь. Всем рекомендую внешние конфиги. У меня их даже два - отдельно технические вещи ( путь к QUIK и т.п.), отдельно торговые параметры. Что раздражает в QUIK - я так и не научился вводить логин/пароль иначе как в окошко при входе. Приходится эмулировать ввод с клавиатуры для автозапуска системы. Может кто поделится более изящным решением?
Кстати, а зачем? У них есть функция реконнета + расписание подключения к серверу. Тоеретически, Квик можно запустить аж на всю неделю (а может и больше). Кто-нибудь уже пробовал?
Чтобы робот был полностью автономен. Пробовал на три дня - работало. Теоретически можно и на выходные оставлять.
Автономный или автоматическим? Думаю, что второе. Так вот отсюда и вопрос, зачем делать дополнительно в проге, если эту часть автоматизации уже Квик делает? Или я не что-то уловил.
А как QUIK принимает логин и пароль, кроме окошка при старте? может я пропустил что-то?
Никак по другому. Но я имел ввиду то, что Квик можно один раз запустить. Соответственно и пароль один раз ввести. Или Вы хотите, чтобы и робот сам Квик запускал а логин пароль вводил?
Ну он и сейчас сам его запускает и пароль вводит. Сделать это было несложно. Просто ввод через окошко накладывает некоторые ограничения, да и лучше было бы API использовать или командную строку.
А пароль так же в конфиге храните? Я бы порекомендовал его или шифровать http://msdn.microsoft.com/ru-ru/library/ms254494.aspx), или NTFS безопасность навесить на папку/файл.
Вопрос с безопасным хранением пароля решен, но немного другим способом.
Добрый день, Подскажите, а как вы вводите данные для автоматического входа в quik?
Доброго времени суток, Наконец-то оттестировал робота и в ближайшее время буду выпускать зверька на биржу. Тестировал используя quik от открытия. Сервер работает стабильно и разрешает подключаться в любое время. Но вот quik у них удалось найти только 5.15. А он уже не работает с s# 1.7:( И еще, в отличии от остальных у них действительно есть история, например в Quik-Junior каждый день работал с чистого листа, как будто биржу только сегодня открыли, что для меня было неудобным. Но вот котировки по RIM0 идут нереальные (хотя по RIH0 вроде бы шли реальные), кроме того маленькая ликвидность и как следствие очень большие спреды, но опять же для меня это не было проблемой. Если что-то заинтересует спрашивайте. С уважением Дмитрий Капцов
http://www.autoitscript.com/autoit3/index.shtml
<http://www.autoitscript.com/autoit3/index.shtml>вот эта софтина хорошо помогает.
Функций QUIK я для этого не нашел
С уважением, Сергей Зуев
Спасибо за программу. Похоже действительно интересное решение.
С уважением Дмитрий Капцов
Судя по тому, что написано здесь -http://quik.ru/user/download/как раз начиная с 5.15 и должен работать, не ниже. S# главное, чтобы новое АПИ работало. Если оно не хочет работать с 5.15, то нужно спросить уже у квиковцев - почему.
Кстати, насчет тестирования. Историческое тестирование на мой взгляд очень критично к алгоритму. Если алгоритм опирается на скорость выставления заявки - все, история уже не подойдет. Я вот думаю в сторону real-time тестирования. Когда тестировать нужно на реальных деньгах, но при этом не выставлять заявки на самом деле. Чем это лучше. Тем, что есть стакан, по которому с большей или меньшей долей вероятности можно сказать, выполнится заявка или проскользит. На истории такое не получить (если конечно не скринить стакан, что так же бессмысленно).
Я бы хотел в данном случае поделиться собственным опытом. Если торговая стратегия критична к скорости исполнения заявки и тестирование на минутном таймфрейме для нее неприемлемо, то советую присмотреться к задержкам самого QUIK. Вполне вероятно, что быстродействия серверов брокера может не хватить для корректной работы такого робота.
С уважением, Сергей Зуев
И что Вы сделали?
Я сделал другую стратегию. Для которой не критичны задержки в десятки секунд.
QUIK все же частенько притормаживает (Открытие+ADSL канал, но думаю у всех брокеров так, во всяком случае в БКС аналогично), задерживаются на 10-20-30 секунд котировки, информация о сделках и т.п.
Все это приводит к тому, что роботам, работающим на таймфреймах меньше минуты, становится не очень хорошо.
Эту проблему можно решить, подключившись напрямую к биржевому шлюзу, минуя QUIK. Также может помочь размещение сервера в датацентре рядом с биржевыми серверами. Но это сложный и дорогой путь, новую стратегию сделать проще.
Естественно, все сугубо ИМХО, если кто-то сделает/сделал робота, скальпящего через QUIK, я буду только рад и с удовольствием об этом узнаю. Но пока я таких разработок не видел.
С уважением, Сергей Зуев
10-20-30 секунд - это серьезные задержки, даже не для скальпинга. А с чем Вы сравнивали?
Не понял вопрос :( С чем я сравнивал что?
С уважением, Сергей Зуев
Чтобы узнать задержку, что она есть и что она составляет именно столько, нужно взять один продукт (эталон) и Квик. Вот я и хочу узнать, какой Вы брали эталон, чтобы и самому посмотреть.
Честно могу признаться, что точных измерений я не делал. Смотрел в основном на время заявки/сделки и время ее появления в QUIK. Например, сделка по моей заявке прошла в 12:00:01, а у меня появилась только в 12:01:00. Смотрел глазами и в логи робота. Понятно, что при "спокойном" рынке эта дельта минимальна, но при сильных движениях она начинает резко расти ( сервер брокера не справляется?).
С уважением, Сергей Зуев
Да квик 5.15 с 1.6 работает, но вот в версии 1.7 вы расширили таблицы инструментов для импорта и теперь не удается его настроить. Кроме того в новой версии вы изменили объектную модель. Поэтому пока сижу на 1.6. Она полностью устраивает, за исключением отсутствия MarketTimeOffset.
Точно так, скорость или роботов на основе стакана на истории не протестировать, здесь или эмулятор или реальные данные. Но у меня чисто алгоритмический робот, совершающий несколько сделок в месяц, поэтому не критично.
А почему не удается настроить?
В моей версии квика от открытия отсутствовала цена закрытия.
А почему? Это такая особенность версии, что в 5.15 ее еще не было (как то мало вероятно, но все же)? Может дело в настройках Связь Списки? На крайний случай, ее можно заменить любой другой колонкой с ценой. Просто тогда в программы Вы должны это учесть.
Не думаю что это особенность 5.15, видимо это особенность конкретной сборки. В списках я включил получение всех данных с сервера, и даже там не было ее. В любом случаи если можно заменить любой другой это меняет дело.
А к брокеру обращались? Может все решится одним звонком. Вдруг еще какие детали просветятся.
Обращался, говорят у них уже 5.16 давно, но для реала. Поэтому как открою у них счет так и погляжу что и как по настоящему.
Скачал последнюю версию каика с сайта Открытия, оказалась - 5.16. В ней спокойной загрузился файл настроек квика от S# 1.7 и все заработало нормально. Првада цену закрытия они так и не транслируют, ну и ладно.