среда, 20 апреля 2011 г.

RoundTrip — простой модуль для QuikOrdersDOM для измерения времени раундтрипов

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

Итак, модуль RoundTrip написан на SDK для QuikOredersDOM. Он предназначен для измерения раундтрипа (проверки скорости канала связи с брокером). Программа отправляет заявку (не по рынку, чтобы она не исполнялась), дожидается подтверждения о выставлении (проверяет, чтобы статус стал OS_ACTIVE, OS_EXECUTED или OS_REJECTED), потом через таймаут снимает ее и дожидается подтверждения о снятии (чтобы статус стал OS_CANCELED, OS_EXECUTED или OS_REJECTED).

Измерение раундтрипа (roundtrip)

Раундтрипы особенно важны для скальперов и интрадей-трейдеров, когда скорость выставления заявки — чуть ли не главный козырь стратегии.

Как запустить модуль RoundTrip?


Запустить его очень просто (как, в принципе, и любой модуль в QuikOrdersDOM). Для этого его надо, в первую очередь, скачать, положить в папку QuikOrdersDOM/lib. Потом в запущенном приводе перейти на вкладку "Настройки" и выбрать dll в поле "Библиотека автотрейдинга". Кто одновременно запускает несколько разных модулей — пользуйтесь менеджером задач для QuikOrdersDOM (модуль TaskManager).

Настройки работы программы RoundTrip, которые можно задать через интерфейс


Максимальное количество транзакций


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

Задержка между транзакциями


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

Еще параметры:
- инструмент, по которому мы будем выставлять заявки (его название и класс);
- тип сделки (покупка или продажа);
- отступ от центральной цены, чтобы выставлять заявки (нам же не надо, чтобы они исполнялись).

После того, как тестирование завершится, можно будет вывести отчет на экран, нажав кнопку "Отчет". Автоматически этот отчет будет сохранен в файл в той же папке, в которой лежит dll модуля. Название файлов с отчетами будет формироваться по шаблону:

roundtrip_report_ddmmyy_hhmmss.txt

Где ddmmyy_hhmmss — время окончания тестирования.

Так вы сможете вернуться к результатам проведения тестов в любое время.

Вот пример. Запускаю модуль на 10 транзакций. Выставляются и снимаются заявки, всего 5 штук.
Работа модуля для измерения раундтрипа (roundtrip) в QuikordersDOM
Результат:
Всего сделано 10 транзакций: выставлений заявок = 5, снятий заявок = 5
Максимальный roundtrip = 2468
Среднее время выставления заявки = 1281,40
Среднее время снятия заявки = 1355,80
Общее среднее время = 1318,60


Время в результатах указывается в мс.

Ссылка для скачивания модуля RoundTrip.

Чтобы уменьшить погрешность измерений, можно на испытательный период поставить в настройках QuikOrdersDOM параметр CycleInterval поменьше (по умолчанию он, вроде, равен 500).

// Интервал опроса памяти QUIK в мс (очень маленькие интервалы сильно увеличивают загрузку процессора)
CycleInterval=50


Очень интересно было бы посмотреть на результаты тестов, запущенных на квиках разных брокеров. Делитесь в комментариях (или в своих блогах, а потом оставляйте в комментах ссылку) :)

** Если меня кто-нибудь читает ;DDD
___

Чтобы быть в курсе обновлений блога, подпишитесь на RSS. Если материал оказался интересным — поделитесь им с друзьями :)

7 комментариев:

  1. А Вы какой компонент использовали для измерения времени? Случайно не Timer?

    Александр.

    ОтветитьУдалить
  2. Не, никаких компонентов тут и не надо было использовать. В MainCycle запоминала время GetTickCount, потом проверяла на следующем цикле состояние заявки: если статус становился тот, который надо, - вычисляла разницу.
    Алгоритм простой, но ветвистый - именно поэтому все никак руки не дойдут его описать))

    ОтветитьУдалить
  3. Никакие таймеры и не нужны - главное получить количество миллисекунд, которое требуется на операцию :)

    ОтветитьУдалить
  4. Аа, ясно.
    Спасибо за быстрый ответ. :)

    Александр.

    ОтветитьУдалить
  5. А Вы сами занимаетесь трейдингом или только софт на заказ пишете?

    Буквально сегодня заинтересовался этой темой, а тут и Ваш блог в руки )

    Интересно, каков минимум знаний нужен для начала

    ОтветитьУдалить
  6. Aleks, конечно, занимаюсь :) В последнее время даже на заказ не пишу - все экспериментирую, Грааль ищу, как все трейдеры)))) Времени катастрофически на все не хватает, даже и блог вот давненько не обновляла...

    ОтветитьУдалить
  7. Можете сам проект RoundTrip выложить))) Интересно)))

    ОтветитьУдалить