Новый робот

21 июня, 2013

Привет все посетителям.

Решил Вас порадовать новым творением.

Условия испытаний все те же.

Без плечей и без реинвестирования прибыли.

Период 3000 свечей с таймом 5 минут, т е май-июнь 2013

А вот и результаты:

sb_2013_004

 

 

 

 

 

 

 

sb_2013_001

 

 

 

 

 

 

 

 

sb_2013_002

 

 

 

 

 

 

 

 

 

Сравнительное быстродействие QLUA и DDE

10 июня, 2013

Появление в торговом терминале  QUIK встроенного скриптового языка LUA создает предпосылки разработки полноценных и универсальных торговых роботов на его основе. Однако, существенным недостатком любых скриптовых языков, реализованных с использованием виртуальных машин, является их относительно низкое быстродействие.

Язык LUA считается сравнительно быстродействующим скриптовым языком.

Однако, хотелось бы знать, насколько велики потери в скорости вычислений при его применении и имеет ли практический смысл использовать комбинированные способы реализации роботов на основе торгового терминала QUIK.

Для ответа на поставленные вопросы, я реализовал следующее тестовое решение.

Я написал на C++ API для QLUA два варианта получения информации из торгового терминала.

Полученные результаты полезнее рассматривать не в абсолютных величинах, а в относительных.

Вариант 1: 

Все функции обратного вызова ( OnAllTrade, OnQuote и т д) реализованы на С++.

На C++ реализованы таблицы для приема и хранения всех доступных на стороне виртуальной машины QLUA таблиц QUIK.

Скорость обращение к таблицам на С++ составляет не более 0.1 мкс на ячейку. Поэтому в дальнейших расчетах, их влиянием я пренебрегаю.

Вариант 2:

На стороне QLUA на С++ реализован сервер DDE.

Таким образом, получаем возможность  сравнить скорость  получения данных из торгового терминала QUIK через встроенные функции обратного вызова ( далее этот способ называется  QLUA ) и DDE.

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

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

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

В этом случае данные формируются на основе первичных данных QUIK и раньше  формирования информации для передачи по каналу DDE.

Информация для DDE формируется на основе данных подготовленных для отображения в экранных окнах торгового терминала QUIK.

Таким образом, потенциально на стороне торгового терминала QUIK мы имеем более высокую скорость подготовки данных для функций обратного вызова QLUA, по сравнению с DDE.

Казалось бы, что QLUA быстрее, чем DDE.

Увы, как показали эксперименты, скорость обработки информации на стороне QLUA полностью устраняет указанное преимущество.

 Эксперимент 1:

Передача таблицы всех сделок через  OnAllTrade QLUA показала время 15 мкс на строку таблицы для функций обратного вызова и 50 мкс для получения строки с использованием функции getItem.

Для механизма DDE  удалось достичь времени  приема и преобразования данных на стороне QLUA в 6- 11 мкс.

  Эксперимент 2:

Передача очереди заявок (стаканов)  через  OnQuote  QLUA показал время 480-500 мкс для функций обратного вызова. Основное время в этом случае затрачивается  на получение стакана функцией getQouteLevel2.

Для механизма DDE  удалось достичь времени  приема и преобразования данных на стороне QLUA в 6- 11 мкс.

Резюме:

1) В существующей реализации функций обратного вызова, в тех случаях, когда из QUIK в LUA передается таблица, содержащая строку таблицы QUIK ( к ним не относятся такие важные для создания робота  функции обратного вызова, как  OnParam, OnQuote)  , скорость получения информации через механизм функций обратного вызова сопоставим со скоростью  DDE .

2)  Но , скорость существенно меньше ( для OnQuote  в 40-50 раз ), если для получения строки таблицы QUIK приходится применять встроенные функции QLUA ( getQouteLevel2 и getItem ) .