Надо делать так, как надо. А как не надо - делать не надо.
Пакетное получение данных, Все сделки приходят не по одной, а пакетами от 1 до xx штук
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 13:20:00
Цитата
Sergey Gorokhov пишет: Я честно сам не готов дать объяснение в технологических терминах, но суть такая, что есть установленный минимальный размер пакета. в него влезает некоторое количество информации, если информации меньше чем размер пакета, то она попадает в буфер в котором в течении некоторого времени ждет дополнения, пока размер пакета не будет полным. Если по истечении этого времени новые данные не поступят то пакет отправляется не полным. Какой это промежуток времени и какой размер пакета зависит от настроек, в том числе и от настроек на Вашей сетевой карте.
Что-то подсказывает мне, что настройки сетевой карты на клиенте играют незначительную роль в данном случае, т.к. данные, в т.ч. все сделки, приходят пачками с сервера изначально. Я прав?
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 12:04:52
Цитата
Michael Bulychev пишет: Согласитесь, что пример немного не жизненный?
Я что-то не понял, с чем вы спорите? Вы можете привести "жизненный пример", когда использование потокобезопасной функции в одном скрипте "никак не влияет" на другие скрипты?
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 11:42:35
Цитата
Старатель пишет: Это говорит о том, что использование потокобезопасных функций оказывает влияние на все запущенные скрипты.
Независимо от потока, в котором они были вызваны.
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 11:41:36
Цитата
Michael Bulychev пишет: Для чего мы завели такие функции и чего они позволяют избежать я уже объяснял. В Вашем примере использование ssort совершенно не к месту. Используйте просто sort.
Вы, наверное, не поняли: это псевдокод. Таким образом, я показал вам, что утверждение
Michael Bulychev пишет: Похожего эффекта можно достичь и другими способами
Какими? (Речь сейчас не идёт про длительную обработку колбека.)
Надо делать так, как надо. А как не надо - делать не надо.
Показывать последнее значение на графике цены
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 11:20:26
Цитата
Sergey Gorokhov пишет: Поменять графики местами. Например через параметры текущего окна, секция Порядок графиков
О, спасибо!
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 11:16:31
У меня такое ощущение, что это я вам рассказываю, как работает ваш программный продукт. Хотя наоборот было бы гораздо эффективней.
Скрипт 1:
Скрытый текст
Код
local bRun, sTime = true
local sClassCode, sSecCode = "QJSIM", "SBER"
function main()
while bRun do
PrintDbgStr("main1")
sleep(1000)
end
end
function OnStop()
bRun = nil return 0
end
function OnParam(class_code, sec_code)
if not bRun then return end
if sec_code ~= sSecCode or class_code ~= sClassCode then return end
local Time = getParamEx(class_code, sec_code, 'TIME').param_image
if Time ~= sTime then
PrintDbgStr("1: "..Time)
sTime = Time
end
end
Скрипт 2:
Скрытый текст
Код
local bRun, sTime
local sClassCode, sSecCode = "QJSIM", "SBER"
function main()
local t, n = {}, 5000000
for i = 1, n do t[i] = n - i end
PrintDbgStr("start")
bRun = true
table.ssort(t)
PrintDbgStr("end")
while bRun do sleep(100) end
end
function OnStop()
bRun = nil return 0
end
function OnParam(class_code, sec_code)
if not bRun then return end
if sec_code ~= sSecCode or class_code ~= sClassCode then return end
local Time = getParamEx(class_code, sec_code, 'TIME').param_image
if Time ~= sTime then
PrintDbgStr("2: "..Time)
sTime = Time
end
end
Запускаем - делаем выводы.
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 10:58:42
Michael Bulychev, мне кажется или вы потеряли основную мысль обсуждения?
Цитата
Старатель пишет: С колбеками, вроде, понятно: если в колбеке одного скрипта вызывается потокобезопасная функция, то работа основного потока QUIK и дополнительного main этого скрипта "замораживается" на время выполнения функции. А если потокобезопасная функция вызывается в main, окажет ли это влияние на потоки других скриптов?
Надо делать так, как надо. А как не надо - делать не надо.
Показывать последнее значение на графике цены
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.06.2015 10:45:17
Как сделать, чтобы последнее значение цены отображалось над значением индикатора?
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Но пока выполняется потокобезопасная функция основной поток терминала "заморожен", информация с сервера не поступает, колбеки не вызываются. Это вы называете "никак не влияет"?
Надо делать так, как надо. А как не надо - делать не надо.
Речь про все рынки. При выборе кода клиента вываливается весь список, независимо от класса инструмента и выбранного счёта.
Надо делать так, как надо. А как не надо - делать не надо.
Автомасштабирование графиков
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.06.2015 21:35:24
Цитата
swerg пишет: почему масштаб вы именно такой сделали, а не крупнее/мельче? я про формальный признак, а не "мне так удобно"
В данном случае, масштаб я выбрал по признаку "мне так удобно". Но можно сделать, например, таким образом, чтобы, в границы диаграммы попадал индикатор за крайние 20 свечей. Вы можете предложить свой вариант.
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.06.2015 16:09:13
С колбеками, вроде, понятно: если в колбеке одного скрипта вызывается потокобезопасная функция, то работа основного потока QUIK и дополнительного main этого скрипта "замораживается" на время выполнения функции. А если потокобезопасная функция вызывается в main, окажет ли это влияние на потоки других скриптов?
Надо делать так, как надо. А как не надо - делать не надо.
Ввод заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.06.2015 15:39:48
Цитата
Zoya Vdovina пишет: 1) Никак.В терминал приезжает весь список кодов клиентов. 2) Правильно ли мы понимаем, что Вы хотите в форме ввода заявки выбирать Торговый счёт и что бы по торговому счёту подставлялся нужный клиентский код?
Пусть "приезжает" весь список кодов, я что, против? Я просто хочу, чтобы в поле "Код Клиента" вываливался не весь доступный список кодов (а иногда и старых), а только тех, что соответствуют выбранному Торговому Счёту. Если в QUIK нет чёткого соответствия Код Клиента - Торговый Счёт (хотя, как же нет, когда есть такая настройка "Указывать счет депо по коду клиента"), то сделайте настройку через ini-файл:
Код
Торговй_Счёт=Список_Кодов_Клиентов
Надо делать так, как надо. А как не надо - делать не надо.
Контроль данных в МТС, Создание отказоустойчивой автоматизированной торговой системы
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.06.2015 14:11:39
Задача: Есть робот, торгующий по индикатору, рассчитываемому на основе графика цены. Нужно сделать контроль данных с графика на случай "потери" части свечей сервером (такое иногда случается). Кто как контролирует этот процесс? Или все полагаются на "авось"?
Надо делать так, как надо. А как не надо - делать не надо.
Цена заявки не соответствует установленному диапазону
биржа уже транслирует предельные границы цен на фондовом рынке. Осталось выяснить, как узнать эти границы? Сотрудники ARQA могут помочь в этом вопросе?
Надо делать так, как надо. А как не надо - делать не надо.
Цена заявки не соответствует установленному диапазону
Для фондового рынка они транслируются? У меня нет таких параметров для инструментов фондового рынка.
Надо делать так, как надо. А как не надо - делать не надо.
Что приходит в OnTransReply ?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.06.2015 09:01:08
Цитата
Sergey Gorokhov пишет: в OnTransReply едут ответы на все транзакции и не важно от куда они до этого отправлялись.
Ерунда! OnTransReply не приходят на транзакции, поданные вручную.
Надо делать так, как надо. А как не надо - делать не надо.
Цена заявки не соответствует установленному диапазону
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.06.2015 08:56:15
Цитата
Alexey Ivannikov пишет: Ошибка, описанная в старттопике - есть диагностика сервера QUIK, не торговой системы. Брокер сам по собственному усмотрению может устанавливать ограничения цен в заявках, и диагностическое сообщение будет именно таким, как описал автор темы.
Тогда тем более не понятно, почему нельзя узнать диапазон цен, установленных брокером на сервере?
Цитата
Alexey Ivannikov пишет: А это уже биржевое сообщение, означающее что Вы не попали в ценовой диапазон торговой системы.
Цитата
Старатель пишет: Какой параметр ТТП показывает это значение?
Короче, каким образом, можно узнать диапазон допустимых цен?
Надо делать так, как надо. А как не надо - делать не надо.
Ввод заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.06.2015 22:18:30
Как сделать, чтобы в окне ввода заявки в поле "Код клиента" отображались только те коды, которые соответствуют выбранному торговому счёту? И как сделать, чтобы, если выбранному торговому счёту соответствует только один код клиента, то этот код автоматически подставлялся в соответствующее поле?
Надо делать так, как надо. А как не надо - делать не надо.
Цена заявки не соответствует установленному диапазону
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.06.2015 18:06:31
Цитата
Alexey Ivannikov пишет: Такого параметра не предусмотрено. Данное сообщение появляется тогда, когда цена не попадает в диапазон, установленный брокером, не биржей
А это чьё сообщение?
Цитата
ОШИБКА: (579) Для выбранного финансового инструмента цена должна быть не меньше 63.85
Какой параметр ТТП показывает это значение?
Цитата
geradigger пишет: 1. Возможности новой версии 1. Параметры «Макс/Мин возможная цена» на фондовом рынке. Добавлена возможность трансляции параметров «Максимально возможная цена» и «Минимально возможная цена» на всех возможных режимах торгов фондового рынка."
Это возможности новой версии чего? У меня в списках нет таких параметров для фондового рынка.
Надо делать так, как надо. А как не надо - делать не надо.
Автомасштабирование графиков
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.06.2015 13:30:20
Добрый день. Сделайте функцию "интеллектуального автомасштабирования" по оси Y графика с наложенным индикатором таким образом, чтобы в область диаграммы попадал график цены и правая часть индикатора. Чтобы было понятно:
Скрытый текст
По центру - текущая реализация автомасштабирования - график цены слишком сильно сжат. Справа - график масштабирован таким образом, чтобы в области диаграммы были видны график цены и правая часть индикатора
Надо делать так, как надо. А как не надо - делать не надо.
6.17.0.58 bugs collection, разработчикам на заметку. (все остальные - прошу проходить мимо и не засорять топик)
Дмитрий пишет: В итоге в (отдельном) окне с индикатором отображается шкала по вертикали от 9 до 24 и все первые 8 значений индикатора не видны.
Описанная ошибка будет исправлена в одной из ближайших версий программы.
А я предлагаю добавить отдельную опцию для индикаторов "Автоматически масштабировать" - иногда требуется видеть только близкие к цене значения индикатора, а далёкие от графика цены - не важны.
Надо делать так, как надо. А как не надо - делать не надо.
Цена заявки не соответствует установленному диапазону
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.06.2015 23:22:55
Какой параметр для фондовой секции показывает значения цен этого диапазона?
Надо делать так, как надо. А как не надо - делать не надо.
Узнать таймфрейм графика
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.06.2015 22:11:10
Цитата
Дмитрий пишет: Можно в начале работы получить время самой первой и второй свечи
Да, спасибо. Для моей задачи (отслеживание изменения таймфрейма на втором графике) можно запомнить время первых двух свечей с помощью getCandlesByIndex. Если время любой свечи изменилось - значит изменён таймфрейм. Правда есть вероятность, что при изменении таймфрейма время свечей не изменится. Но она не велика.
Надо делать так, как надо. А как не надо - делать не надо.
Я думал об этом... Довольно не надёжное решение, к тому же слишком затратное, если нужно мониторить, не изменился ли таймфрейм.
Задача стоит следующая: построить индикатор, рассчитанный по значениям с графика 1) на который индикатор наложен 2) и с другого, заданного идентификатором tag
Так вот, при изменении таймфрейма второго графика индикатор должен автоматически пересчитаться.
Надо делать так, как надо. А как не надо - делать не надо.
Узнать таймфрейм графика
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
06.06.2015 23:12:30
Как узнать таймфрейм графика с заданным идентификатором?
Надо делать так, как надо. А как не надо - делать не надо.
Индикаторы
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.06.2015 23:51:29
Надо делать так, как надо. А как не надо - делать не надо.
Перекодировка в LUA
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.06.2015 23:16:27
Цитата
Viktor MMM пишет: Что за парсер вас интересует? В смысле, вытащить отдельно % потерь или еще чего? Скажите, сделаю.
Напишите кусок кода, который у вас получится, который сохраняет результат в лог. А то самому в лом писать. ;-)
Надо делать так, как надо. А как не надо - делать не надо.
Депозит на демо, Нужно обновить
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.06.2015 22:45:06
Сбербанк на демке теперь нельзя шортить?
Надо делать так, как надо. А как не надо - делать не надо.
Перекодировка в LUA
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.06.2015 19:52:14
При выполнении команды
Код
io.popen('echo |chcp 1251|echo тест')
я получаю через раз, то
Цитата
тест
то
Цитата
вҐбв
Как это можно объяснить?
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: Биржа отправляет всем брокерам одинаковые параметры? Т.е. временные "срезы" для всех брокеров одни?
нет, разные
Получается на бирже ведётся таблица истории для каждого подключённого к ней аккаунта?
Надо делать так, как надо. А как не надо - делать не надо.
Таблциа Истории
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.06.2015 13:02:00
Цитата
Sergey Gorokhov пишет: Раз в период, с биржи приезжает кучка параметров. Эта кучка отправляется от сервера клиенту. Клиент в свою очередь, обновляет только те данные которые приехали, а те которые не приехали оставляет в предыдущем значении. раз в промежуток между срезами были изменения, то биржа отправит эту самую кучку.
Биржа отправляет всем брокерам одинаковые параметры? Т.е. временные "срезы" для всех брокеров одни?
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: добавить в функцию OnParam(STRING class_code, STRING sec_code) еще один параметр, сообщающий, изменение значений каких именно параметров ТТП привело к вызову этой функции
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
А пока данное пожелание не реализовано, разумно ли вместо OnParam использовать функции CreateDataSource и SetUpdateCallback на каждый из отслеживаемых параметров? Не окажет ли это негативного влияния на производительность?
Надо делать так, как надо. А как не надо - делать не надо.
Старатель пишет: Переключился на тиковый интервал: секунды появились. Но милисекунды не транслируются.
А теперь переключитесь с демо спотана демо фортс или на боевые торги.
Я имел ввиду для параметров из ТТП. На боевом сервере мс не транслируются для параметров.
Ещё такой вопрос.
Код
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [main] true
Код
local bRun, tDS = true
function OnStop()
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [main] nil
Код
local bRun, tDS = true
function OnStop()
message('[OnStop] '..tostring((tDS:Close())), 2)
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
end
Результат: [OnStop] nil
Код
local bRun, tDS = true
function OnStop()
message('[OnStop] '..tostring((tDS:Close())), 2)
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [OnStop] nil [main] false
Можете объяснить результаты?
Надо делать так, как надо. А как не надо - делать не надо.
Узнать дату последней сделки
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
31.05.2015 13:15:16
Цитата
sam063rus пишет: TRADE_DATE_CODE DOUBLE Дата торгов
Кстати, откуда вы взяли, что строковый параметр TRADE_DATE_CODE типа DOUBLE ?
Надо делать так, как надо. А как не надо - делать не надо.