if c ~= 0 then
a = b / c
print(a)
else print("Что я делаю?! Нельзя на ноль делить!") end
Надо делать так, как надо. А как не надо - делать не надо.
Сделайте на графиках разметку начала и конца торгового дня, нужны вертикальные линии, обозначающие время 10:00, 23:45
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.06.2015 13:14:53
С концом торгового дня проблем нет: последняя свеча в сутках - конец торгового дня.
Надо делать так, как надо. А как не надо - делать не надо.
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.06.2015 13:07:08
Цитата
sam063rus пишет: не чаще 1р/с происходит в данном случае получение сделки из твс, а оконные сообщения и возможный запрос на полную перерисовку - отправляется на каждый WM_PAINT
Не путайте ТВС с графиками. Повторяю: У меня цена последней сделки на графике обновляется не чаще 1 раза/сек.
Цитата
sam063rus пишет: происходит - только не отображается - иначе бы при переходе на вкладку - там была бы не актуальная информация в первоначальный момент, и к тому же - есть роботы, индикаторы - они привязаны к графикам -им абсолютно параллельно активна или свёрнута вкладка - им торговать надо.
Мы ведь сейчас говорим о визуальном обновлении графиков, так? Так вот, роботам без разницы, как расположены свечки на том или ином графике. Данные они берут не с самих "картинок".
Надо делать так, как надо. А как не надо - делать не надо.
Что предпочесть при выборе провайдера VDS ?, многоядерность или оперативки побольше
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.06.2015 12:51:58
Цитата
Дмитрий пишет: По-моему терминал всегда использует для работы только 1 ядро, независимо от их количества в процессоре (если не считать работы функций main() в скриптах - про них ничего не могу сказать).
Запустив несколько Lua-скриптов в терминале можно загрузить все доступные ядра процессора на полную. Но, поскольку все портфели QPILE работают в одном потоке (вот только не помню в основном с самим QUIK или для них создаётся дополнительный поток?), то в 4 ядрах нет никакой необходимости. 2 ядра - под вопросом?
Надо делать так, как надо. А как не надо - делать не надо.
Ограничение на количество отображаемых свечей на графиках
sam063rus пишет: положение всех свечек на графике пересчитываются при каждом приходе сделки на график, при масштабировании
Наверное, все-таки не всех, а только тех, которые видны на графике в данный момент. Обычно это меньше, чем 3000.
в этом, наверно соглашусь - бо как не знаю исходную реализацию.
Если это так, то снятие ограничения в 3000 свечей не должно повлиять на производительность, если только не показан весь график целиком.
Надо делать так, как надо. А как не надо - делать не надо.
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.06.2015 12:41:42
Цитата
sam063rus пишет: поверьте, в современных новомодных операционных системах - не одна сотня процессов/сервисов работает в системе - так что, от этого пока ещё никто не ушёл.
Не надо троллить - вы поняли о чём я. Большинство работающих в фоне процессов/сервисов отъедают менее 10Мб ОЗУ и 0% ЦП.
Цитата
sam063rus пишет: и не забываем, что положение всех свечек на графике пересчитываются при каждом приходе сделки на график, при масштабировании.
Ну, да, тут вы правы. Но это ничто по сравнению с полигональными моделями в 3D играх, ведь так? У меня к примеру графики обновляются не чаще 1 раза/сек. К тому же, возможно я ошибаюсь, но полагаю, что на неактивных вкладках или свёрнутых окнах обновления графиков не происходит.
Надо делать так, как надо. А как не надо - делать не надо.
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.06.2015 12:26:00
Цитата
sam063rus пишет: покажите мне современную игру - в которой одновременно 3000 "мобов" на уровне.
Под "мобом" вы подразумеваете самостоятельный объект, обладающий "интелектом" и состоящий из десятков а то и сотен полигонов? Какое это отношение имеет к статическому объекту типа "свеча"?
Надо делать так, как надо. А как не надо - делать не надо.
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
23.06.2015 11:47:53
Разумному человеку не придёт в голову запускать на компьютере одновременно сотню приложений, если на компьютере всего 1Гб памяти. Есть большая вероятность, что Windows, если не "упадёт", то, как минимум, "зависнет". Так и с QUIK. Вам дают инструмент, а как его использовать - решаете вы сами. Вы можете наоткрывать кучу таблиц/графиков, но если вы переоцените возможности своего компьютера, то результат будет соответствующий.
Надо делать так, как надо. А как не надо - делать не надо.
QLua-Indicators SandBox Internals
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.06.2015 19:54:06
Тогда можно предположить следующий алгоритм. Из документации:
Цитата
При выборе пункта меню Настройки/Сохранить настройки в файл, сохраняются все значения из таблицы Settings в wnd-файл. При загрузке настроек из файла, модуль qchart получает от модуля qlua список индикаторов и автоматически создает индикатор по его имени.
При этом имя самого файла Lua-индикатора не сохраняется. Поэтому при создании индикатора последовательно перебираются файлы из папки LuaIndicators, пока не будет найден индикатор с именем Settings.Name. Поиск, очевидно, происходит путём их запуска.
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.06.2015 18:58:15
Цитата
Олег Хуснутдинов пишет: теоретически, обновлён (дописан/удалён) может быть любой параметр, кроме ключевых (ключевые это Номер заявки, Дата торгов, Код класса).
Т.е., возможна такая ситуация, когда OnOrder может прийти, скажем, с незаполненным параметром account, balance или sec_code? И какое в этом случае будет значение параметра: nil или ""/0 в зависимости от типа? И в этом случае не стоит бить тревогу? Или стоит?
Цитата
Олег Хуснутдинов пишет: даже если OnTrade вызывается более одного раза по одной и той же сделке, такое тоже может быть и не является аномалией
То, что OnTrade может вызываться более одного раза - я в курсе: при переключении на другой сервер или очистке данных (файл trades.dat, как я понимаю). В каких ещё ситуациях OnTrade по одной сделке может вызываться более одного раза?
Надо делать так, как надо. А как не надо - делать не надо.
QLua-Indicators SandBox Internals
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.06.2015 18:32:02
Цитата
sam063rus пишет: т.е. - я вообще ничего не делал: я просто кинул его в папку LuaIndicators и включил квик - в итоге, не будучи ни на одном графике - он сам запустился.
Да, действительно. Если на графике добавлен хоть один Lua-индикатор, то при старте QUIK будут запускаться все скрипты из папки LuaIndicators. Причём столько раз, сколько открыто Lua-индикаторов. Это ещё один повод, чтобы вне колбеков ничего лишнего не размещать.
Цитата
sam063rus пишет: но он всё-равно запускается. И причём, несколько раз
Очевидно, у вас добавлено несколько Lua-индикаторов на графиках.
Надо делать так, как надо. А как не надо - делать не надо.
QLua-Indicators SandBox Internals
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.06.2015 16:22:55
Скрытый текст
Цитата
sam063rus пишет: чем не основа для вирусописательства?
А вообще, конечно, да. Пользователям нужно внимательно следить за тем, какие скрипты они помещают в папку LuaIndicators, т.к. с их помощью можно выполнять различные действия (в т.ч., отправку транзакций) без ведома пользователя. Только не при старте QUIK, а при добавлении индикаторов. Надеюсь это пофиксят. После прочтения - удалить.
Надо делать так, как надо. А как не надо - делать не надо.
QLua-Indicators SandBox Internals
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.06.2015 16:00:37
, глагол "добавлении" используется в настоящем времени несовершенного вида, т.е. указанные действия выполняются в момент добавления индикатора на график.
Надо делать так, как надо. А как не надо - делать не надо.
QLua-Indicators SandBox Internals
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.06.2015 15:53:49
Цитата
sam063rus пишет: Запускаются "автоматом", при старте квика (чем не основа для вирусописательства?)
Вы можете привести конкретный пример скрипта, который не будучи добавленным на график автоматически запускается при старте QUIK?
Надо делать так, как надо. А как не надо - делать не надо.
QLua-Indicators SandBox Internals
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.06.2015 15:18:23
1. Не стоит размещать в папке LuaIndicators никаких файлов, кроме самих индикаторов, поскольку при добавлении любого индикатора каждый файл в этой папке сканируется минимум два раза:
Цитата
При добавлении нового индикатора на график плагин qlua сканирует папку LuaIndicators, проверяет файлы с расширением lua и luac (скомпилированные скрипты lua) [брехня! проверяются все файлы. Примеч. автора, т.е. меня] на соответствие следующим требованиям
2. Не стоит делать в теле индикатора (вне функций) что-либо, кроме объявления таблицы Settings, поскольку эти действия также будут выполняться минимум два раза при добавлении любого индикатора. Лучше сделать инициализацию в Init()
3. Если очень хочется, то вместо getScriptPath() можно использовать
Код
getWorkingFolder().."\\LuaIndicators"
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
21.06.2015 20:57:20
Цитата
Николай Камынин пишет: Это результаты на моем реальном счете и соответственно рабочем сервере в реальном времени.
В таком случае, вам надо настроить интервал обновления данных, чтобы не вводить людей (и себя в первую очередь) в заблуждение своими тестами. Информация как настроить есть в указанной выше мной теме. Почитайте, не ленитесь. ;-)
Надо делать так, как надо. А как не надо - делать не надо.
Он самый. Вы можете скачать демку с сайта и сразу подключиться к демо-торгам.
Надо делать так, как надо. А как не надо - делать не надо.
Контроль данных в МТС, Создание отказоустойчивой автоматизированной торговой системы
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.06.2015 14:41:27
Цитата
sam063rus пишет: Если расхождение между локальным и серверным временем > 1 сек то это простой способ определить нагрузку на канал брокера.
Наблюдал расхождение между локальным временем и серверным более 40 сек. Это расхождение было не в течение какого-то короткого времени, а нескольких дней. Причём наблюдалось не только у меня. Так что считать разницу между локальным и серверным временем - это простой способ определить несинхронизованность локального времени вашего компьютера и времени сервера QUIK у брокера, не более.
Цитата
sam063rus пишет: Но, если параметры не соответствуют "ожиданиям" - то, нет смысла торговать в это время
По одному счёту могут быть запущены несколько торговых роботов. Либо вестись торговля руками. Так что, в общем случае, текущая позиция по счёту может и не совпадать с ожиданиями робота.
Надо делать так, как надо. А как не надо - делать не надо.
Индикатор адекватности системы биржа/Квик, давайте поразмыслим
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.06.2015 10:20:46
Цитата
lergen пишет: Не отображались изменения позиций по срочному рынку.
В смысле, при покупке/продаже контрактов не изменялись позиции по клиентским счетам? Такие проблемы на бирже часто случаются. Очевидно, текущую позицию нужно считать в каждом роботе самостоятельно, а не полагаться на биржу. И при большом расхождении значений отправлять уведомления по sms и e-mail. И копию отправлять брокеру и на биржу, чтоб не расслаблялись. :D
Надо делать так, как надо. А как не надо - делать не надо.
Контроль данных в МТС, Создание отказоустойчивой автоматизированной торговой системы
Старатель пишет: на случай "потери" части свечей сервером
а как робот поймёт, что это "потеря", а не неликвид?
А как человек это понимает (если заметит, конечно :) )? Наверное, надо прописать какой-то алгоритм. Хотелось бы услышать, какие варианты можно использовать.
Цитата
sam063rus пишет: для себя - сделал таблицу: критичных и некритичных параметров, а также контроль так сказать целостности данных на случай намеренного и ненамеренного "технического сбоя"
Можете подробнее описать, каким образом вы реализуете контроль целостности данных?
Цитата
sam063rus пишет: Также мониторится серверное время и локальное - при слишком большой разнице - некоторые алгоритмы - отменяются
Вот тут не понятно. Какие ошибки таким образом вы пытаетесь устранить?
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.06.2015 01:31:24
Там, если покопаться, много чего интересного можно найти. Вот, например, инструмент линейка, о котором пользователи QUIK просят несколько лет; процентная шкала:
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.06.2015 01:17:50
Цитата
Старатель пишет: установил терминал одного из "конкурентов" Квика, который является его ровесником. И что же? Визуально - тот же самый QUIK, только отстал на несколько лет...
Хотя и у "отсталого" терминала есть чему поучиться. Вот, например, как выглядит настройка свойств трендовой линиии:
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.06.2015 00:58:57
Цитата
sam063rus пишет: Хотя стать Вашим конкуреном - дело весьма небольшого времени.
Да вот, к сожалению, что-то не видно этих конкурентов-то. Каких вы можете назвать потенциальных конкурентов? По вашим оценкам, сколько нужно времени, чтобы создать конкурентоспособный программный продукт с нуля. И какие для этого потребуются финансовые ресурсы?
Не поленился: установил терминал одного из "конкурентов" Квика, который является его ровесником. И что же? Визуально - тот же самый QUIK, только отстал на несколько лет...
Цитата
sam063rus пишет: моя компания - мне прмо предложила - если сделаете софт нетолько для клиентов НО!!! и для брокеров - они поддержат.
sam063rus, вашу энергию, да, как говорится, в нужное русло. Вы могли бы объединить талантливых программеров-энтузиастов для разработки такого ПО. От себя могу предложить тестирование данного продукта. Думаю, сотрудники ARQA не в восторге от моих тестирований. :D Я уже сам сбился со счёта, сколько багов, они обещали мне исправить.
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.06.2015 00:28:30
Цитата
sam063rus пишет: поставлена задача - дать пользователям полный доступ из квика- к архивным данным (из папки Archive) - и что мы видим? А ыидим мы - тысячу и одну отговорок.
Видимо, функционал этот платный. И, если дать пользователям возможность работать с архивом графиков, то у брокеров отпадёт необходимость в его покупке.
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
20.06.2015 00:16:03
Цитата
Alexey Ivannikov пишет: Только не архивных, а "склеенных" *маленькое уточнение, с Вашего позволения.
Можете сделать скрин, как это выглядит?
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.06.2015 23:33:02
Цитата
Alexey Ivannikov пишет: На наш взгляд в данном случае имеется некоторое недопонимание, не более того
Значит, брокер не достаточно информирован об этой возможности. Я и говорю, донесите до сведения брокеров, что трансляция архивных графиков "на ваш взгляд не создаёт серьёзной нагрузки для серверов."
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: Но вот брокер не хочет этого делать, мотивируя тем, что это создаёт большую нагрузку на сервер. Это действительно так?
Большую или не большую - это оценочные категории. На наш взгляд в этом нет ничего критичного.
Либо вы лукавите про нагрузку на сервер, либо брокер откровенно врёт, чтобы не делать лишней для себя работы. Короче, кто-то из вас не прав.
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.06.2015 23:02:02
Цитата
Alexey Ivannikov пишет: На наш взгляд в этом нет ничего критичного.
В таком случае вы можете довести это до брокеров либо сделать возможным открывать графики в QUIK из архива?
Надо делать так, как надо. А как не надо - делать не надо.
Графики фьючерсов
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.06.2015 22:35:16
Цитата
Alexey Ivannikov пишет: Это не трудно - попросить Вашего брокера их "склеивать".
Ну, да, попросить не трудно. Но вот брокер не хочет этого делать, мотивируя тем, что это создаёт большую нагрузку на сервер. Это действительно так?
Надо делать так, как надо. А как не надо - делать не надо.
Какая последняя версия заявки (стоп-заявки) в Orders и OnOrder ?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.06.2015 09:18:47
В OnOrder всегда будет последняя "версия" заявки, имеющаяся в распоряжении клиентского терминала.
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.06.2015 08:34:42
Цитата
Николай Камынин пишет: Но вот простой пример, который дает на правильный ответ
Звучит, как "А сейчас я расскажу вам всю правду..." Ну, ну, ага. :D
Цитата
Николай Камынин пишет: Но делать вывод что onParam быстрее, когда вызов OnQuote в 2 раза чаще - это прикольно.
Это тем более забавно, когда вы делаете выводы на основе данных с игрового сервера.
Надо делать так, как надо. А как не надо - делать не надо.
не соответствует время
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
19.06.2015 07:58:36
Цитата
s_mike@rambler.ru пишет: когда вы спрашиваете сервертиме, то получаете время в момент прихода запроса на сервер. Далее оно возвращается вам.
Никакой запрос никуда не отправляется. "SERVERTIME" вы получаете вместе с приходом параметров из ТТП. И оно корректируется на разницу времени, прошедшего с момента его прихода. А в остальном всё верно. В этом легко убедиться, убрав из списков принимаемых параметров все "галки". Время сервера продолжит тикать синхронно с вашими часами. Но после переподключения к серверу "SERVERTIME" уже не отображается.
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.06.2015 18:46:26
Николай Камынин, это вы на демке тестили? :D Вот результаты на .
Надо делать так, как надо. А как не надо - делать не надо.
коды событий поворотов колеса мыши SetTableNotificationCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.06.2015 13:23:20
Цитата
Старатель пишет: Кстати, в строке 0 не работают события QTABLE_LBUTTONUP и QTABLE_RBUTTONUP
techsupport, вы бы как-то отреагировали что ли.
Надо делать так, как надо. А как не надо - делать не надо.
Не отображаются график
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.06.2015 13:15:29
Цитата
sam063rus пишет: можете также нажать правую кнопку мыши на легенде графика и выбрать "Заменить инструмент"
Не надо так. Лучше из "Параметров текущего окна"
Надо делать так, как надо. А как не надо - делать не надо.
Не отображаются график
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.06.2015 13:13:38
to techsupport: У меня в папке archive сохранились файлы SPBFUT_RIH5_Х.dat. Почему нельзя открыть графики по данному инструменту? Сделайте возможность открывать графики архивных инструментов.
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.06.2015 11:09:46
Ответ будет?
Цитата
Старатель пишет: Какие ещё параметры могут быть не заполненными в колбеках OnOrder, OnTrade? Можете отметить их в руководстве.
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
18.06.2015 10:27:32
Цитата
sam063rus пишет: Но, спрашивается, кому нужен стакан, несоответствующи реальному timestamp.
С одной стороны, да. А с другой, может кто-то сохраняет историю стакана. Может, стоит сделать настройку: если на сервере скопилась очередь OnQuote, то, в зависимости от этой настройки выдавать на рабочее место либо всю очередь в хронологическом порядке (как сейчас) либо только последнее состояние стакана.
Надо делать так, как надо. А как не надо - делать не надо.
SQL в Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.06.2015 21:07:11
Цитата
Старатель пишет: Сейчас использую SQLite 3 через .
Надо делать так, как надо. А как не надо - делать не надо.
SQL в Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.06.2015 20:35:19
Какую БД и библиотеку лучше использовать в Lua? Сейчас использую SQLite 3 через . Но есть проблемы при одновременном доступе к БД из разных потоков/скриптов даже при чтении.
Надо делать так, как надо. А как не надо - делать не надо.
Таблица всех сделок и классы, Не все классы стали отображаться в новых версиях. Как исправить?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.06.2015 11:05:17
Что за ошибка? Связана с какими-то частными настройками прав пользователя в Administrator? Или ошибка общего характера и проявляется у всех пользователей?
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.06.2015 10:56:12
Цитата
Alexandr Shumilin пишет: В общих чертах можно сказать, что "как правило" соблюдается следующий порядок рассылки на клиентские места QUIK — таблица текущих параметров, котировки, сделки, заявки, стоп-заявки, лимиты, графики, все-сделки.
Вот тут у меня есть сомнения: графики обновляются с большой задержкой по сравнению с ТВС. Хотя это может быть результатом частного случая настройки частоты обновлений графиков на сервере. В моём случае частота обновлений графиков - примерно 1 раз/сек.
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.06.2015 10:40:37
Цитата
Максим пишет: Так OnParam на кучу всего реагирует, так что частота не показатель.
Цитата
Максим пишет: И ещё, у вас же в скрипте хитрость - если между двумя вызовами OnQuote действительно стакан может несколько раз туда-сюда сходить, то вы на второй вызов ничего не напечатаете, т.к. best bid/offer "те же".
Частоту вызовов OnParam и OnQuote имеет смысл сравнивать только при изменении одинаковых параметров. В данном случае при изменении bid/offer. Поэтому я написал так, как написал - сравниваем только те колбеки, которые дают новую котировку bid/offer. По другому никак.
Цитата
Максим пишет: Может статься, что в OnParam показывается вообще не та же котировка, что потом покажется в OnQuote.
А по логу разве не видно, что в большинстве случаев OnQuote приносит туже котировку, что до этого нам показал OnParam?
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.06.2015 00:24:01
Цитата
Максим пишет: Сомнительные выводы из эксперимента (что непременно через OnParam надо котировки доставать). Там разница в пределах погрешности измерения + время на вызов колбека.
Ну наконец-то хоть кто-то решил оспорить мои выводы. Парирую: Да, действительно, в большинстве случаев разница небольшая. Среднее значение за рассматриваемый период порядка 22 мс. Но погрешность тут ни при чём: и без времени видно, что в большинстве случаев OnParam даёт котировку раньше.
Цитата
Максим пишет: Кроме того, в привидённом примере есть запись, противоречащая (по крайней мере на первый взгляд) утверждению о последовательности
Есть такая запись. Но это единственный случай из приведённого фрагмента лога, когда OnQuote оказывается "быстрее".
Очевидно, OnParam, как и OnAllTrade, приходят "пачками". Немного подчистил лог, удалив из него близкие по времени записи OnParam:
Не трудно заметить, что помимо того, что OnParam приходит раньше (в большинстве случаев), но и несколько чаще (незначительно, но факт). Уверен, это зависит от настроек сервера. Поэтому у каждого могут быть свои результаты. Но в моём случае, очевидно, работа с OnParam позволит раньше, пусть и ненамного, среагировать на изменение котировок.
Надо делать так, как надо. А как не надо - делать не надо.
коды событий поворотов колеса мыши SetTableNotificationCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.06.2015 17:30:41
Кстати, в строке 0 не работают события QTABLE_LBUTTONUP и QTABLE_RBUTTONUP
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.06.2015 14:08:54
Кстати, я специально даю фрагменты кода, чтобы каждый мог самостоятельно проверить на своём рабочем месте и опровергнуть мои доводы. Пока этого никто не сделал.
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.06.2015 14:04:38
Цитата
Старатель пишет: Какие ещё параметры могут быть не заполненными в колбеках OnOrder, OnTrade? Можете отметить их в руководстве.
Цитата
Michael Bulychev пишет: На практике такой схемы работы не встречается, но теоретически придумать ее возможно.
Озвучьте, пожалуйста свою мысль.
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.06.2015 12:02:19
Это значит, что после такого колбека обязательно должен прийти OnOrder с заполненным UID? Какие ещё параметры могут быть не заполненными в колбеках OnOrder, OnTrade? Можете отметить их в руководстве.
Надо делать так, как надо. А как не надо - делать не надо.
Скорость получения данных OnParam OnQuote
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
16.06.2015 10:49:37
Скрипт выводит в лог последнюю котировку bid/offer из OnParam и OnQuote:
Скрытый текст
Код
function OnQuote(class_code, sec_code)
if not bRun or sec_code ~= sSecCode or class_code ~= sClassCode then return end
local tStakan = getQuoteLevel2(class_code, sec_code)
local nBid_Count, nOffer_Count = tonumber(tStakan.bid_count), tonumber(tStakan.offer_count)
if nBid_Count ~= 0 then
local nBid = tonumber(tStakan.bid[nBid_Count].price)
if nBid ~= nBid_Q then
_toLog('[OnQuote] bid='..nBid); nBid_Q = nBid
end
end
if nOffer_Count ~= 0 then
local nOffer = tonumber(tStakan.offer[1].price)
if nOffer ~= nOffer_Q then
_toLog('[OnQuote] offer='..nOffer); nOffer_Q = nOffer
end
end
end
function OnParam(class_code, sec_code)
if not bRun or sec_code ~= sSecCode or class_code ~= sClassCode then return end
local nOffer = tonumber(getParamEx(class_code, sec_code, "OFFER").param_value)
local nBid = tonumber(getParamEx(class_code, sec_code, "BID").param_value)
if nBid ~= nBid_P then
_toLog('[OnParam] bid='..nBid); nBid_P= nBid
end
if nOffer ~= nOffer_P then
_toLog('[OnParam] offer='..nOffer); nOffer_P = nOffer
end
end