timber (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
Цитата
timber написал:
В итоге я забиваю на проблему.
Жаль. У меня тоже есть дллки без прилинкованного луа и даже без сишного рантайма. Я их всех тут перепробовал по тридцать раз в 8.6 после вашего сообщения и ничего такого не обнаружил. Поэтому хотелось понять, как вы такого эффекта добились.
От Квик никто не ответил. Я склоняюсь, что это моя ошибка где-то. Не хочу теребить о несуществующих проблемах разрабов. Если будет кто-то еще со схожей проблемой, я попробую что-то нарыть.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
Цитата
timber написал:
Нет, я только скомпилировал с хидером, чтобы отойти от меняющихся наборов функций.
Как вы это сделали? Если заинклюдить lua.h и потом вызвать хоть одну функцию из него, не линкуясь с lua53.lib, линкер скажет unresolved external. Значит, вы объявляете указатели на луа-функции и потом их инициализируете ручками через GetProcAddress, верно? И откуда берете хэндл lua53.dll? Через GetModuleHandle("lua53.dll"), так? И на этом этапе получаете периодически NULL, так? Или иначе как-то?
Спасибо за информацию и расвитие кругозора. Может быть у меня ошибка, может быть в Квик. Не знаю, надо долго разбираться. В итоге я забиваю на проблему. Оно работает, в принципе. И мне этого достаточно. Будет дискомфорт продолжу. Или программисты Арки что-то сами найдут.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
Цитата
timber написал:
Это же динамическая библиотека, и мой скрипт загружается в процесс как и эта dll. А скрипт написан на C и слинкован с хидером. Раньше были экспортные функции, но решил, что хидер надежнее.
Не понял. Вы включили lua.h, но не линковали с lua53.lib, так? Тогда это ваша задача, искать или загружать lua53.dll и тащить из нее функции через GetProcAddress, хидер сам по себе ничего такого не делает.

Цитата
timber написал:
А проблема в том, что иногда при старте скрипта пишется ошибка что lua53.dll не найдена (видимо еще не загружена в процесс). А если закрыть окно с управлением скриптов и открыть, и еще раз запустиь - магически dll уже будет находится.
Этого не может быть, потому что не может быть никогда (про не загружена в процесс). Это раньше была заглушка lua5.1.dll и весь луа по факту сидел в qlua.dll, теперь все иначе, весь луа в lua53.dll находится, и если квик вообще смог ваш скрипт запустить, это стопроцентно означает, что lua53.dll уже загружена и должна находиться через GetModuleHandle.

Мысль пришла - вы, часом, весь луа в своей длл не продублировали?

1) Я и делаю через GetProcAddress
2) Я новый код уже перекомпилировал под qlua.dll обратно и пробую на 8.2. Работает как часы. Думаю, что глюка у Арки. В добаков в 8.5, 8.6 так же работает, но со второй попытки. Думается, ребята что-то перемудрили.

Нет, я только скомпилировал с хидером, чтобы отойти от меняющихся наборов функций.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
Цитата
timber написал:
DLL с LUA загружается
Непонятно, об чем речь. Если о qlua.dll, то при старте загружается, если ее убрать, квик стартанет без пункта меню с луа-скриптами и ничего запустить в принципе не получится. Если о lua53.dll, то в любом случае ДО запуска вашего скрипта, опять же скрипт физически невозможно запустить без нее. Если о какой-то своей подгружаемой длл, то она грузится явно вызовом package.loadlib и на нее действует обычное правило сборки мусора, то есть если она из области видимости вышла и никаких ссылок на нее не осталось (вроде глобальных функций из нее), то будет выгружена. Видимо, вот этот последний вариант и имеется в виду, тогда смотрите, каким образом теряете все ссылки на длл.
Это же динамическая библиотека, и мой скрипт загружается в процесс как и эта dll. А скрипт написан на C и слинкован с хидером. Раньше были экспортные функции, но решил, что хидер надежнее. Это вкратце, как сделано.

А проблема в том, что иногда при старте скрипта пишется ошибка что lua53.dll не найдена (видимо еще не загружена в процесс). А если закрыть окно с управлением скриптов и открыть, и еще раз запустиь - магически dll уже будет находится.

Подозреваю, что lua53 не грузится на старте. Поэтому и глюк такой. А скрипт у меня не тянет их dll, так как скомпилирован с хидером.

Перемудрили они видимо с lua53. Заглушка эта не используется самим терминалом. Поэтому скрипты могут попадать на такие пакости.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
На 8.2 работает без сбоев. Видимо что-то намудрили.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
DLL с LUA загружается при старте, или при каком-то событие к программе? Иногда она не загружена в память и это приводит к ошибкам в скрипте.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Andrey Bezrukov написал:
timber,

Как верно отметил Anton - сама функция lua_remove была уделена из LUA 5.3 в чистом виде, но осталось в виде макроса:
Код
   # define lua_remove(L,idx)   (lua_rotate(L, (idx),  -  1 ), lua_pop(L,  1 ))  


В состав предлагаемой нами библиотеки lua53.dll данный макрос добавлен не был. При необходимости использовать функционал lua.5.1 - Вы можете самостоятельно добавить такой макрос в ваш скрипт/программу, либо использовать какой-либо иной подход, с использованием стандартных функций lua5.3.
Понял, спасибо вам и Антону.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
Цитата
timber написал:
Я не знал, что у вас не оригинальный LUA. Глянул в вашу dll в дистрибутиве с вашего сайта. Нет такой функции в вашей dll.
У них оригинальный луа с точностью до внутренних деталек. Если бы вы также глянули в lua.h (строка 371), то увидели бы, что в 5.3 это макрос.
Это ответ на мой вопрос, зачем удалили данную функцию?
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
timber написал:
Цитата
Andrey Bezrukov написал:
Здравствуйте,  timber .

Функции lua_remove не было и нет в функционале QLUA.
В LUA5.1 и LUA5.3, используемых в терминале до версии 8.5 и начиная с версии 8.5 - данная функция также присутствует.

Просьба уточнить, на основании чего возник такой вопрос?
В том, что выдает ошибку теперь, что не найдена функция.

Я не знал, что у вас не оригинальный LUA. Глянул в вашу dll в дистрибутиве с вашего сайта. Нет такой функции в вашей dll.
lua53 - там нет.
lua5.1 - еще есть.

Функция из спецификации LUA языка. Вы зачем ее удалили?
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, timber.

Функции lua_remove не было и нет в функционале QLUA.
В LUA5.1 и LUA5.3, используемых в терминале до версии 8.5 и начиная с версии 8.5 - данная функция также присутствует.

Просьба уточнить, на основании чего возник такой вопрос?
В том, что выдает ошибку теперь, что не найдена функция.

Я не знал, что у вас не оригинальный LUA. Глянул в вашу dll в дистрибутиве с вашего сайта. Нет такой функции в вашей dll.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Раньше была функция lua_remove теперь её нет. На что заменили?
QUIK 8.0 x64: что нужно знать перед обновлением на новую версию
 
А уже есть список брокеров, которые перешли на 64 бит? У меня Сбербанк. До сих пор 32 бита.
Каков реальный сценарий вызова OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete()?
 
Цитата
Sergey Gorokhov написал:
Цитата
timber написал:
 
Цитата
Sergey Gorokhov  написал:
 
Цитата
 timber   написал:
)) Смешно. Ну скажите тогда, как при этом неудобстве через LUA понимать какой лимит пришел?
Что именно смешно? Если Вы хотите конструктивный диалог, извольте говорить предметно.
И что именно в LUA Вам мешает проверить лимит?
Или Вам в принципе не понятно зачем нужен Тх лимит?
Куда уж конструктивнее? Написал сразу - нужна информация по лимитам. Работаю через LUA. Согласно вашей (не брокера) документации определением позиции идет по коду инструмента и типу лимита. Вот с последним беда. Не может он правильно определить, потому что он дублируется для разных типов лимитов. Я про числовое значение. А строковое у вас не получить через LUA. Виноваты разумеется все (брокер, мы-трейдеры), кроме вас.

Т.е. проблема в том что для Тх лимита параметр limit_kind равен 0?
Простите но из Вашего первоначального обращения это не очевидно.
Естественно такой проблемы не должно быть, для Тх лимитов limit_kind должен быть равен 365.
ниже скриншот доказывающий что это так:
 

От Вас нужен пример кода на котором воспроизводится проблема и уточните версию терминала.
у вас на картинке T365. А у брокер Tx. И в документации так же.
Каков реальный сценарий вызова OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete()?
 
Цитата
Sergey Gorokhov написал:
Цитата
timber написал:
)) Смешно. Ну скажите тогда, как при этом неудобстве через LUA понимать какой лимит пришел?

Что именно смешно? Если Вы хотите конструктивный диалог, извольте говорить предметно.
И что именно в LUA Вам мешает проверить лимит?
Или Вам в принципе не понятно зачем нужен Тх лимит?

Куда уж конструктивнее? Написал сразу - нужна информация по лимитам. Работаю через LUA. Согласно вашей (не брокера) документации определением позиции идет по коду инструмента и типу лимита. Вот с последним беда. Не может он правильно определить, потому что он дублируется для разных типов лимитов. Я про числовое значение. А строковое у вас не получить через LUA. Виноваты разумеется все (брокер, мы-трейдеры), кроме вас.
Каков реальный сценарий вызова OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete()?
 
Цитата
Sergey Gorokhov написал:
Цитата
В Вашем же случае, никакой ошибки не видно. Просто брокер у себя что то настроил а Вам это не удобно.
)) Смешно. Ну скажите тогда, как при этом неудобстве через LUA понимать какой лимит пришел?
Каков реальный сценарий вызова OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete()?
 
Цитата
Sergey Gorokhov написал:
Цитата
timber написал:
Визуально строчки располагаются отдельно.
При чем тут это?
При том, что значение числовым образом одинаковое. Не должно ли быть слияние строчек в этом случае.

Нормальный софт должен иметь проверку на дурака, и не дать вводить одинаковые значения для разных лимитов. Но так как мы имеем дело с Квик, тут всякое возможно :-) Поэтому лишний раз уточняю.
Каков реальный сценарий вызова OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete()?
 
Цитата
Sergey Gorokhov написал:
Цитата
timber написал:
Почему строчка с Tx имеют значение 0?

Это зависит от настроек на стороне сервера, рекомендуем задать вопрос брокеру.

Визуально строчки располагаются отдельно. Есть для каждого лимита по своей строке. Это точно из-за брокера, а не из-за ошибки в терминале?
Каков реальный сценарий вызова OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete()?
 
Цитата
Sergey Gorokhov написал:
Цитата
kroki написал:
В каких реальных случаях вызываются OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete() (первые два для limit_kind >= 0, внутренние не особо интересны)?  Кто-нибудь встречал эти вызовы в реале?

Они вызываются когда брокер удаляет лимит.
Необходимость удалить лимит возникает в случае если его неправильно задали, а это к счастью происходит крайне редко.
Цитата
kroki написал:
Кстати, а зачем вызываются ползовательские callbacks с limit_kind < 0?  Какие осмысленные действия он бы мог сделать (хотя бы в теории)?

Лимиты с limit_kind < 0 являются техническими и действительно для конечного пользователя не несут смысла.
Но тем не менее они есть и по этому колбеки срабатывают.

Почему строчка с Tx имеют значение 0?
Зависание при подпкиске на цены
 
Мое предположение, что метод CreateDataSource обращается к тем же данным, что и колбэк (раз он умеет сразу получать инфомацию о количество записей). Тут и происходит дедлок, по всей видимости, что приводит к зависанию программы. Итого, имеет два потока. Один пытается подписаться на данный. Другой пытается обработать новые данные. Так как первый поток лезет еще и к самим данным, то это приводит к зависанию.
Зависание при подпкиске на цены
 
Цитата
Sergey Gorokhov написал:
Цитата
Sergey Gorokhov   написал:
Если требуется точный диагноз, необходимо предоставить полную версию кода скрипта.
Скажите, и колбэки со свечами идут в том же потоке, что и обычные цены? Или тут отдельный поток?
Зависание при подпкиске на цены
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Такое может быть, если в каком-либо колбеке происходит зависание.
Например если в колбеке, используется какой-либо тяжелый цикл.
Или если выход из колбека предусмотрен только когда в другом колбеке что-то произойдет.
Или вовсе это бесконечный цикл.
Нельзя такого допускать, все подобные вещи должны быть в main()
В любом случае, гадать не лучший вариант для решения проблемы.
Если требуется точный диагноз, необходимо предоставить полную версию кода скрипта.
Все проще. Удалены все колбэки. Идет циклом подписка на данные. Если в середине цикла хотя бы одна подписка выдает ошибку, то все зависает.
Зависание при подпкиске на цены
 
Периодически Квик висит если делать подписку сразу на несколько инструментов. Скрипт пишет ошибку подписки на данные, и затем висит намертво программа. При этом висит только сам Квик. Скрипт продолжает работать и даже торгует.
CreateDataSource
 
Цитата
timber написал:
Ищу помощь в примере кода на luabind (или голый С) с CreateDataSource и установкой обработчика. Готов оплатить результат.
Вопрос решен.
CreateDataSource
 
Ищу помощь в примере кода на luabind (или голый С) с CreateDataSource и установкой обработчика. Готов оплатить результат.
HIGHVAL LOWVAL
 
Цитата
Sergey Gorokhov написал:
timber  ,

для INDX параметры называются MAX и MIN
т.е. нужно писать так:

local h = tonumber(getParamEx("INDX", "RTSSTD", "MAX").param_value);
local l = tonumber(getParamEx("INDX", "RTSSTD", "MIN").param_value);
1) Почему тогда в документации указано другое:
[TABLE][TR][TD]106[/TD][TD]HIGHVAL[/TD][TD]NUMERIC[/TD][TD]Максимальное значение (RTSIND)[/TD][/TR][TR][TD]107[/TD][TD]LOWVAL[/TD][TD]NUMERIC[/TD][TD]Минимальное значение (RTSIND)[/TD][/TR][TR][TD]108[/TD][TD]ICHANGE[/TD][TD]NUMERIC[/TD][TD]Изменение (RTSIND)[/TD][/TR][TR][TD]109[/TD][TD]IOPEN[/TD][TD]NUMERIC[/TD][TD]Значение на момент открытия (RTSIND)[/TD][/TR][/TABLE]
2) Есть ли где-то список актуальных значений?

3) Как получить текущее значение и цену открытия?
HIGHVAL LOWVAL
 
При этом данные в терминале выглядать вот так (выделенная строка - это rtsstd):
HIGHVAL LOWVAL
 
Цитата
Sergey Gorokhov написал:
LOWVAL

function OnParam(class, sec)
  if class == "INDX" and sec == "RTSSTD" then
     local h = tonumber(getParamEx("INDX",  "RTSSTD", "HIGHVAL").param_value);
     local l = tonumber(getParamEx("INDX",  "RTSSTD", "LOWVAL").param_value);

     ToLog("H = "..tostring(h));
     ToLog("L = "..tostring(l));
  end;  
end;

В лог выводит:

27-7-2017 12:12:32.567 H = 0
27-7-2017 12:12:32.567 L = 0
27-7-2017 12:12:33.556 H = 0
27-7-2017 12:12:33.557 L = 0
27-7-2017 12:12:34.428 H = 0
27-7-2017 12:12:34.428 L = 0
27-7-2017 12:12:36.9 H = 0
27-7-2017 12:12:36.9 L = 0
27-7-2017 12:12:39.794 H = 0
27-7-2017 12:12:39.794 L = 0
27-7-2017 12:12:45.805 H = 0
27-7-2017 12:12:45.805 L = 0
27-7-2017 12:12:46.909 H = 0
27-7-2017 12:12:46.909 L = 0
27-7-2017 12:12:48.79 H = 0
HIGHVAL LOWVAL
 
Почему не получается вытащить эти значения (всегда равны 0), хотя в таблице в Квике их вижу. Например по RTSSTD
Значение констант INTERVAL_NN
 
Цитата
timber написал:
Цитата
   s_mike@rambler.ru  написал:
Цитата
timber   написал:
Хочу написать на Си код вызова CreateDataSource. Скажите, какие числовые значения принимает параметр interval?
message(tostring(INTERVAL_M1))
1. А это разве строка? В документации написано, что NUMBER. Я думал, что это число.
2. Могли бы вы помочь выветси это значение? С Луа практически не знаком, я ради этого числа особого смысла нет начинать. Заранее благодарю.
Еще раз прочитал документацию и понял, что не взлетит.

Обработчики принимают только индекс, без указания источника. Тоесть одновременный запрос нескольких инструментов невозможен.
Значение констант INTERVAL_NN
 
Цитата
s_mike@rambler.ru написал:
Цитата
timber   написал:
Хочу написать на Си код вызова CreateDataSource. Скажите, какие числовые значения принимает параметр interval?
message(tostring(INTERVAL_M1))
1. А это разве строка? В документации написано, что NUMBER. Я думал, что это число.
2. Могли бы вы помочь выветси это значение? С Луа практически не знаком, я ради этого числа особого смысла нет начинать. Заранее благодарю.
Значение констант INTERVAL_NN
 
Хочу написать на Си код вызова CreateDataSource. Скажите, какие числовые значения принимает параметр interval?
Получить список счетов
 
Цитата
Sergey Gorokhov написал:
Цитата
timber   написал:
Как получить этот список средствами Луа.
Например из таблицы лимитов по бумагам.
Спасибо
Получить список счетов
 
Для транзакций, поле ACCOUNT + CLIENT_CODE. Как получить этот список средствами Луа. До этого всегда использовал хардкод, но хочу понять как это лучше сделать.
OnParam - узнать что изменилось
 
Сейчас в этот параметр не передается то, что изменилось. Поэтому из-за большого количества полей скрипт создает нагрузку при вызое getParamEx. Можно ли туда передавать как-то список изменений, что действительно поменялось.
Страницы: 1
Наверх