насчёт мс и мкс - я сохранил данные таблиц в текстовые файлы, потом выгрузил в эксель. Но при сохранении в текстовый файл штатными средствами квика - почему-то не сохранились все поля таблицы. да это по сути и не особо важно бо как даже при таком представлении - все отсчёты в ТВС - реально показаны. Насчёт срезов - скажу так, имхо: параметры "время" в ТВС и TIME в ТТП - насколько я себе это представляю, - одинаковые по определению. и именно по ним построены таблицы. Так о каких тогда срезах можно говорить?
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
29.05.2015 01:37:55
повторюсь - мой скрипт вполне даже себе уверенно и правильно считает. местами... )) потом - хреново считает (такое ощущение, что идёт прогрузка данных) потом - опять замечательно считает.
Мне надо - чтоб он считал -ВСЕГДА и не итог, а именно то, что мне надо: количество сделок в секунду.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
29.05.2015 01:34:17
проверьте на "боевом", на фортс, фьючерс SiM5. То, что Вы показали - не объясняет почему в OnParam не было изменения параметра за 21:18:19. К тому же, как Вы можете видеть - мои таблицы - тоже не дадут мне соврать - визуально видно, что нет сходимости в данных.
Кто как решил вопрос уведомления о сделках?
Пользователь
Сообщений: Регистрация: 01.02.2015
29.05.2015 00:32:55
тогда и брокерам за смс-уведомление платить непришлось бы. всё - одно - экономия! ))))))))))
Кто как решил вопрос уведомления о сделках?
Пользователь
Сообщений: Регистрация: 01.02.2015
29.05.2015 00:32:01
Цитата
Sergey Gorokhov пишет: Только это делается через СМС провайдеров, которые иногда могут быть платными.
а может у вас там где-нибудь завалялся примерчик с бесплатным смс-провайдером? ))))))))
Кто как решил вопрос уведомления о сделках?
Пользователь
Сообщений: Регистрация: 01.02.2015
29.05.2015 00:23:50
первый толковый пример с LuaSocket.
ещё бы смс также просто отправлять было))
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 22:56:22
Цитата
sam063rus пишет: т.е. время: 21:18:19 - попросту отсутствует.
для справки: я также на всякий случай делал анализ нарастающего итога по сделкам в ТВС - всё равно не сходится. (с временным гистерезисом в одну секунду - тоже)
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 22:49:42
Убрал пока что из скрипта все расчёты:
Код
actNumTrades = 0
lastNumTrades = 0
lastTime = 0
actTime = 0
is_run = true
function OnParam(class_code, sec_code)
if class_code == "SPBFUT" and sec_code == "SiM5" then
actNumTrades = tonumber(getParamEx(class_code, sec_code, "NUMTRADES").param_value)
actTime = tonumber(getParamEx(class_code, sec_code, "TIME").param_value)
message(tostring(actTime) .. " " .. tostring(actNumTrades))
end
end
function main()
while is_run
do
sleep(100)
end
end
function OnStop()
is_run = false
return 1000
end
В общем, причина не работы моего скритпа была в том, что в OnParam почему-то теряются некоторые параметры, а точнее, сам коллбек - теряется. т.е. под апдейт невсегда всё попадает. Так, по ТВС ясно просматриваются реальные сделки по SiM5:
т.е. время: 21:18:19 - попросту отсутствует. И это ещё безобидный пример. Дальше - хлеще. Но, это уже, километры листинга. И хоть нам тут говорят, что мол, инфа копится и ничего не забывается. Но, что-то незаметно. Хотя, возможно для OnAllTrade - это работает.
В итоге, имеем то, что имеем....
Прошу tech support пояснить.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:53:14
, большое спасибо за пример. Посмотрю.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:48:26
Цитата
Дмитрий пишет: Пример кода сейчас писать некогда, но для OnAllTrade могу сказать, что в пределах одной торговой площадки там сделки поступают строго в порядке увеличения времени, поэтому считать можно по ним. При этом надо запоминать время самой последней сделки из этой секции биржи и если придет сделка с более ранним временем с той же секции, то просто игнорировать ее (такое может быть если не включена галка "получать информацию по всем сделкам с текущего момента" и сделки по какому-то инструменту были заказаны спустя какое-то время после начала торгов - тогда сначала придут все сделки по этому инструменту, совершенные с начала торгов до текущего момента).
тут мы опять имеем "галки" - для моей задачи - это неприемлемо.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:44:52
с другой стороны, если с биржи в квик каким-то образом приходит биржевое время и разработчики вдруг (ну а вдруг?) согласятся сделать коллбек OnMarketTimeChange - то многие задачи отпадут сами собой (и эта в том числе)
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:38:54
последняя реплика, разумеется - не моя ("мне читать все топики лень,").
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:38:00
Цитата
Николай Камынин пишет: Поэтому предлагаю написать вариант через onAllTrade и изложить претензии к такому решению (желательно с примерами)
Николай Камынин пишет: код увидел. Мне читать все топики лень, поэтому я выскажусь, возможно что кто-то уже это сказал. 1) Работа через onParam - самый плохой вариант. Там и хранилище очень тяжелое и данный колбек на каждый чих срабатывает при этом если срез не пришел и не актуальный то он вообще потеряется. Т е через этот колбек Вы обязательно недосчитаетесь сделок когда-нибудь --------------------------------- 2) Поэтому данную задачу полагаю надо решать через onAllTrade По крайней мере решение через onAllTrade будет полным, но возможно что есть и более быстрое но не полное. Поэтому решение через onAllTrade должно быть базовым а остальные, если они будут быстрее надо сравнивать с базовым.
-------------------------------- Поэтому предлагаю написать вариант через onAllTrade и изложить претензии к такому решению (желательно с примерами)
sam063rus пишет: задам провокационный тогда вопрос: серверное время (время в поле "TIME" в ТТП) == биржевое (время заключения сделки)?
Это время последней сделки. Наверняка, это время биржи.
стало быть, сравнение ТВС иТТП по этому параметру имеет место быть.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:31:30
В любом случае, если у Вас (обращение ко всем пользователям) есть свои примеры кода, как можно сделать счётчик - буду искренне рад.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:29:51
скажу по другому, думаю, у меня бы вообще не возникло проблем, используй я и дальше OnAllTrade, если бы сделки на фортс были с микросекундной точностью
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:26:57
Цитата
Старатель пишет: Другими словами, между этими величинами не обязательно будеn разница ровно в 1 сек. И не обязательно они будут принадлежать к началу этих секунд, как вы делаете в OnAllTrade
будет ровно одна секунда - т.к. в рамках одного тикера - последовательность сохраняется (что ранее было уже проверено в другой теме)
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:24:58
Цитата
Старатель пишет: sam063rus , как я помню, в OnAllTrade вы считаете количество сделок за 1 секунду. Здесь же вы считаете разницу между двумя неизвестными величинами
Код
act_numTrades - last_numTrades
где единственным условием является то, что, возможно, эти величины относятся к "временным срезам" на разных секундах.
просто именно благодаря данной особенности ТТП - я нашёл решение, как попытаться уйти от тех проблем, которые у меня были с OnAllTrade (в ТТП - уже есть счётчик сделок - оставалось только воспользоваться предоставленной возможностью его опроса через фиксированный интервал)
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:20:55
если "Да" - то, должна быть полная синхронизация по этому параметру между ТТП иТВС (бо как на самом деле - источник один - биржевой шлюз)
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:19:33
задам провокационный тогда вопрос: серверное время (время в поле "TIME" в ТТП) == биржевое (время заключения сделки)?
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:16:38
к тому же, интересует - именно "на лету", а не на истории.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:15:32
Цитата
Дмитрий пишет: А если и сопоставлять, то сравнивать их с учетом какой-то заранее заданной допустимой погрешности.
пробовал и так и так (в предыдущих топиках). насчётпогрешности - в корне не согласен - это живые деньги и они, как известно: любят счёт.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:14:00
чувствуется. что из всего форума к данной теме, интерес ограничивается только тремя людьми, - что печально. Хотя, анализ таких тонкостей позволил бы на порядок повысить понимание QLUA.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:09:54
Цитата
Дмитрий пишет: Это нормально, т.к. в скрипте берутся данные из ТТП, а они представляют всего лишь временные срезы информации о числе сделок и прочих параметрах, которые формируются через определенные промежутки времени. А сделки в ТВС поступают в отдельном потоке, никак не синхронизированном с потоком данных ТТП.
с другой стороны, тут можно не согласиться - бо как за основу взято именно серверное время
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 18:08:50
остаётся тогда вопрос: Как быть? :))
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 17:57:19
в разные промежутки времени, число сделок в ТВС и число сделок в скрипте - не соответствует по времени времени (ни на инкремент по времени ни на декремент)
sam063rus , вы одолжение нам делаете или что? Вы просили помощи. Так извольте привести необходимые данные. Пока вопрос ваш не понятен.
имелось ввиду, что проще было это всё смотреть и анализировать у себя в квике - на то скрипт и дан, а не через форум.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 17:24:20
как уже писал ранее - это всего лишь "винтик". никаким "граалем" тут и не пахнет. Впоследствии, как удастся наладить стабильную реализацию с помощью коллбека - буду пытаться реализовать тоже самое без коллбеков. Что-нибудь на основе CreateDataSource etc.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 17:16:17
последняя редакция скрипта:
Скрытый текст
Код
act_numTrades = 0
last_numTrades = 0
lastTime = 0
actTime = 0
is_run = true
function OnParam(class_code, sec_code)
if class_code == "SPBFUT" and sec_code == "SiM5" then
act_numTrades = tonumber(getParamEx(class_code, sec_code, "NUMTRADES").param_value)
actTime = tonumber(getParamEx(class_code, sec_code, "TIME").param_value)
if act_numTrades <= last_numTrades and actTime <= lastTime then do return nil end end
message(tostring(act_numTrades - last_numTrades) .. " " .. tostring(actTime))
last_numTrades = act_numTrades
lastTime = actTime
end
end
function main()
while is_run
do
sleep(100)
end
end
function OnStop()
is_run = false
return 1000
end
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 17:15:24
Таблицу Всех Сделок - не привожу - она у вас и так есть. У себя - я её отфильтровал условным форматированием по: Бумага = SiM5
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 17:14:08
сами напросились:
Скрытый текст
Скрытый текст
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:53:17
он выводится у меня в комбобоксе квика функцией: message
поэтому это малось проблематично.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:40:03
загрузите скрипт - посмотрите. просто листинг здесь приводить - он получится длинным.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:38:08
пояявляются совершенно непонятые взятые "с потолка" отсчёты. Потом, вроде нормализуется, потом - опять.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:20:26
Цитата
Дмитрий пишет: Скорей всего изредка приходят опоздавшие обновления ТТП, в которых время или количество сделок отстали от текущих значений. Попробуйте сделать проверку - если число сделок стало меньше, чем было в предыдущий раз, и время меньше предыдущего или равно ему - то просто не учитывайте пришедшие значения.
ну в принципе и я о том же
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:19:10
но мы отклонились:
Цитата
sam063rus пишет: в общем, пока приходит на ум, что одно и з: "время" или "число сделок" - уже изменилось, а другое - соответственно - нет. В таком случае, как задать правильно условие (с учётом специфики OnParam)?
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:18:05
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:17:16
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:15:01
Цитата
Дмитрий пишет: "Программа / Сохранение данных / Получать пропущенные данные" - галочка включена?
конкретно по этой "галке" - она у меня всегда включена.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:13:44
если бы задача была такой просецкой - я бы наверно её здесь не приводил.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:12:08
если уж "арка" с галками ничего не хочет делать по этому поводу:
в таком случае, моя задача обеспечить в своём скрипте, как говорится полны иммунитет от всех этих галочек. -> т.е. добится стабильности, вопреки.
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 16:09:12
давайте сразу договоримся: "Без галочек".
Я являюсь последовательным сторонником того, что скрипт должен сам решать и управлять потоком нужных ему данных, а не так как щас - непонятно в какой последовательности и в каком количестве понаставлено куча галок, да ещё и забыта половина. Это не работа.
Разработка торговых роботов, Разработка торговых роботов
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 15:16:18
Цитата
Николай Камынин пишет: Если у Вас интересный алгоритм , то протестирую его в Амиброкере бесплатно Если алгоритм удачный, то отдам скрипт для амиброкера бесплатно
а можно сам Amibroker - бесплатно? (почему нет такого варианта?) и тогда алгоритм будет интересным и удачным)))))))))
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 15:12:38
в общем, пока приходит на ум, что одно из: "время" или "число сделок" - уже изменилось, а другое - соответственно - нет. В таком случае, как задать правильно условие (с учётом специфики OnParam)?
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 15:02:23
Цитата
Николай Камынин пишет: хорошо бы увидеть код(алгоритм), а то с нуля как-то лень начинать.
а вы разве не заметили спойлер?
Счётчик числа сделок в секунду по одному тикеру
Пользователь
Сообщений: Регистрация: 01.02.2015
28.05.2015 14:41:54
Решил выделить из другой темы:
Сам код:
Скрытый текст
Код
act_numTrades = 0
last_numTrades = 0
lastTime = 0
actTime = 0
is_run = true
function OnParam(class_code, sec_code)
if class_code == "SPBFUT" and sec_code == "SiM5" then
act_numTrades = getParamEx(class_code, sec_code, "NUMTRADES").param_value
actTime = getParamEx(class_code, sec_code, "TIME").param_value
if act_numTrades == last_numTrades and actTime == lastTime then do return nil end
else message(tostring(act_numTrades - last_numTrades) .. " " .. tostring(actTime)) end
last_numTrades = act_numTrades
lastTime = actTime
end
end
function main()
while is_run
do
sleep(100)
end
end
function OnStop()
is_run = false
return 1000
end
В общем, бывают моменты - когда он в течении продолжительного времени вполне стабильно и правильно считает, но потом - "всё портится". Такое ощущение, что это как-то связано с кешированием или докачкой данных. если бы код "был неправильным" - он бы даже частично правильно не считал.
У кого есть какие идеи?
ещё много много раз - потокобезопасные операции, Потокобезопасность.