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

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

Страницы: Пред. 1 2 3 4 5 6 7 След.
6.17.0.58 bugs collection, разработчикам на заметку. (все остальные - прошу проходить мимо и не засорять топик)
 
Не секрет - нет, причина не в этом.
Вопросы по OnAllTrade
 
Цитата
sam063rus пишет:
Хотелось бы получить на них ответы с примерами правильного QLUA-кода.
Добрый день.
В общем виде нет корректного решения задачи, которую Вы поставили. Либо надо подробнее формулировать задачу, либо принимать во внимание возможные ограничения и допущения и упрощать алгоритм.
Лично я бы использовал в качестве счетчика таблицу, в которой ключами являются строки из кода класса, бумаги и времени на сделке с точностью до секунд. И при получении сделки накручивал значение в нужном поле.
Вопросы по OnAllTrade
 
Настройка "получать пропущенные данные" влияет на получение истории изменений параметров,  но не на таблицу всех сделок.
Вопросы по OnAllTrade
 
Цитата
sam063rus пишет:
получается, что так. при том, что время должно быть обязательно серверным (биржевым).
Если классы и бумаги заказаны разные, то скорее всего это сделать будет сложно. Время может быть не синхронизовано.
Вопросы по OnAllTrade
 
просто считать количество сделок в секунду пришедших с сервера?
Вопросы по OnAllTrade
 
Цитата
sam063rus пишет:
вопрос, как сделать - НОРМАЛЬНО?
Что значит нормально? Подробнее задачу опишите, пожалуйста.
Вопросы по OnAllTrade
 
Если есть разные классы и инструменты, то это нормальная ситуация
Вопросы по OnAllTrade
 
Сделки получаете по одному классу и инструменту?
CreateDataSource
 
Цитата
sam063rus пишет:
извиняюсь за оффтоп, конечно но, думаю пора уже завязывать с квиком и клуой. бо как даже такой "корифей", как михаил булычев - всё чаще начал убегать "в кусты".
Я тоже извиняюсь, но в этой ветке я ничего не писал еще. Есть какие-то вопросы?
доступ к строкам таблицы изменений параметров, почему его нет?
 
Добрый день.
Мы зафиксировали пожелание на доработку. Ошибкой это не считаем.
LuaVM closed with error
 
Добрый день.
При закрытии Lua случилось исключение. Мы подумаем как можно в этом месте расширить диагностику ошибки.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
 
заблокирует/приостановит в любом случае
ещё много много раз - потокобезопасные операции, Потокобезопасность.
 
Возможно насчет глобальных я не совсем корректно выразился. Выполнение функции sinsert заблокирует выполнение кода в другом потоке до окончания работы функции.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
 
Да, если таблица глобальная.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
 
Добрый день.
В терминале обеспечивается физическая целостность данных. В случае с обычным присвоением a = b проблем нет - вы не сможете получить неопределенное значение переменной a. Либо значение до присвоения, либо после.
В случае с table.insert проблема в том, что это не "атомарная" операция, а целая функция, которая делает следующее:
- все элементы с индексом больше либо равным заданному получают индексы на единицу больше;
- указанный элемент вставляется по заданному индексу;
Обращение в момент выполнения функции к элементам таблицы может привести к неопределенной ситуации. Для этого были сделаны потокобезопасные функции - получить доступ к таблице можно лишь после завершения их работы.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
 
Добрый день. В терминале обеспечивается физическая целостность данных. В случае с обычным присвоением a = b проблем нет - вы не сможете получить неопределенное значение переменной a. Либо значение до присвоения, либо после.
В случае с table.insert проблема в том, что это не "атомарная" операция, а целая функция. которая делает следующее:
ещё много много раз - потокобезопасные операции, Потокобезопасность.
 
Добрый день.
1 Да, это не безопасно. можете получить что в A[1] == nil

2. Если A и B таблицы, то B=A не копирует содержимое таблиц, а присваивает ссылку на таблицу A в переменную B, и все изменения в A отражаются в B. Далее аналогично п. 1

3 и 4 Примеры не очень понятны. A это таблица или переменная со значением ноль?

5. getQuoteLevel2 всегда возвращает текущий слепок стакана. Что значит "процесс присваивания чтения" не совсем понятно, поясните.
Получить имя исполняемого скрипта., Возможно?
 
Код
debug.getinfo(1).short_src
getInfoParam is not a string?
 
Это не заплатки. перечитайте еще раз внимательно документацию по string.gsub и tonumber

string.gsub('23:23:23', ':', '') возвращает два значения: '232323' и 2, которые передаются в tonumber
В свою очередь, tonumber пытается перевести '232323' в число по основанию 2 и возвращает nil
getInfoParam is not a string?
 
Добрый день.

Код
str = "23:23:23"
--[[
if tonumber(str:gsub(':','')) > 100 then -- так не работает - " attempt to compare number with nil "
   print('111')
end
--]]
if tonumber((str:gsub(':',''))) > 100 then -- так работает
   print('111')
end
 
getInfoParam is not a string?
 
Вот так проверьте:

Код
xxx = getInfoParam('SERVERTIME')
message('Server time = ' .. xxx)
 
getInfoParam is not a string?
 
Добрый день.
Соединение с сервером установлено при этом?
Поле count
 
Цитата
sam063rus пишет:
Цитата
Sergey Gorokhov пишет:
Цитата
sam063rus пишет:
и ещё: с радостью от вас выслушаю Вашу версию того, что вы считаете плагином... ))
Все просто, то что в меню Справка - Версии компонентов, имеет возможность установить галку - то плагин, все остальное служебные составляющие
)))) ок. не буду настаивать и спорить )))

to Михаил:
мой вопрос #21 всё ещё в силе.
Там два вопроса, на какой именно нужен ответ?
Поле count
 
Цитата
sam063rus пишет:
Цитата
Michael Bulychev пишет:
На данный момент в Lua мы отдали все что смогли.
а дать пользователям нормально работать с qchart.dll из qlua надо понимать, не смогли?
Повторю еще раз - qchart не предназначен для пользования сторонними средствами, это не "плагин"
Поле count
 
Цитата
PFelix Paulossky пишет:
PS. Нужен не номер п/п изменения параметра, а номер п/п ВСЕХ изменений (т.е. в списке по изменениям всех параметров, на которые подписан клиент посредством CreateDatasource, либо всех изменений по инструменту).
"всех изменений по инструменту" подразумевается, как таблица изменений параметров приходит в QUIK. Подозреваю, -- что полностью, т.к. на завтра, добавив в таблицу изменений параметров колонку, мы получаем ее в QUIK с данными.
С первым изменением в новой секунде,Count можно -- снова с единицы.
Спасибо.
Добрый день.
нет нужды упражняться в конспирологии. На данный момент в Lua мы отдали все что смогли.
Проблема не забыта и мы постараемся дать доступ из lua к таблице истории изменений параметров.
Поле count
 
Цитата
s_mike@rambler.ru пишет:
В колбеках типа onalltrade изменений не было?
Добрый день, Михаил. А что там не так?
Приостановить скрипт, возможно?
 
Добрый день.
Логику пока не понял, похоже Вам не нужны корутины.
Пример кода с Вашей ошибкой:

Код
function test()
   print(1)
   coroutine.yield() 
end
co = coroutine.create(test()) -- вот тут ошибка, надо так: co = coroutine.create(test)

--[[ 
1
C:\Program Files (x86)\Lua\5.1\lua.EXE: attempt to yield across metamethod/C-call boundary
stack traceback:
        [C]: in function 'yield'
        c.lua:3: in function 'test'
        c.lua:10: in main chunk
        [C]: ? 
--]]
Приостановить скрипт, возможно?
 
Coroutine
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
 
Добрый день.
Попробуйте так:

Код
... 
file = io.open(getScriptPath() .."\\res.txt", "w+t") 
assert(file) 
...
OnClose()
 
Код
function OnClose() 
 os.execute("start cmd.exe")
end
 
Набор функций Qlua для автозаполнения, нужны функции Qlua
 
Цитата
Юрий пишет:
Подскажите пож-та, можно ли где-то взять набор функций Qlua , что бы добавить в стандартный набор функций Автозаполнения в программу SciTe (наверное не важно в какую программу).
Как пример для SciTE
qlua.api
Скрытый текст
qlua.abbrev
Скрытый текст
файлы старые, возможно не соответствуют документации, показаны в качестве примера.
по CALLBACK, алгоритм работы
 
Цитата
sam063rus пишет:
а вообще - Michael Bulychev мог бы, действительно и подробно расписать механизм работы событий в квике. Уверен, что это никак бы не отразилось на "коммерческой тайне", а наоборот - повысило бы понимание этого вопроса для пользователей и сократило бы кучу "глупых" вопросов и "догадок" на форуме. А также, уменьшило бы их стремление получить ответы на свои вопросы другими путями.
Добрый день.
Вроде уже все было описано достаточно подробно. Интересует что-то конкретное?
по CALLBACK, алгоритм работы
 
Добрый день.
В вашем случае можно данные из функций обратного вызова (OnOrder, OnTrade ...) складывать в одну или несколько очередей и обрабатывать данные в main(). В этом случае Вы сами будете контролировать порядок обработки данных.
Создание своего события, локальный callback
 
Кирилл, давайте сбавим немного эмоции.
qchart.dll не является "плагином", у этой библиотеки пока нет необходимого интерфейса чтобы сделать ее поддержку в Lua
Создание своего события, локальный callback
 
На мой взгляд, все это можно реализовать и сейчас используя корутины.
Создание своего события, локальный callback
 
Добрый день.
Если Вы расскажете подробнее что именно нужно реализовать, то мы рассмотрим это пожелание. Пока в голову приходят только именованные события. Что такое  "native callbacks" не очень понятно.
скрипт выдал ошибку, продолжить выпонение
 
Добрый день.
В Lua для этого используется функция pcall
Как надежно узнать, прогрузились ли все лимиты и остатки в начале дня
 
Цитата
Серж пишет:
Да, правильно.
И, несмотря на то, что разработчикам был предложен вариант решения, который бы всех устраивал, они всё равно включают... в общем вы поняли... И делают вид, что не понимают, чего от них хотят.
Не могли бы Вы привести эти цитаты с решением?
Процентное изменение от цены закрытия, Стандартные средства quik
 
начальное состояние:


изменение настроек:


Результат:
Процентное изменение от цены закрытия, Стандартные средства quik
 
Цитата
Alex пишет:
Цитата
sam063rus пишет:
Цитата
Alex пишет:
Функции решающие проблему по ссылке уже есть.
Это SetValue и GetValue
Цитата
Alex пишет:
Может быть вы сталкивались с решением данной задачи ? или использования выше приведенных в пример функций ?
https://www.google.ru/search?q=site:forum-archive.ru+setvalue&ie=utf-8&oe=utf-8&gws_rd=cr&ei=dwwVVYCsJ-LQygOhhYAw#newwindow=1&q=site:forum-archive.quik.ru+setvalue
Благодарю, ушел курить архив форума.
Взял код из это ветки, все работает корректно, даже при изменении параметров на графике или индикаторе. Версия терминала 6.17.
Можете пояснить что именно работает не корректно?
вопрос по коллбекам, к разработчикам (ONLY)
 
Прямо сейчас я не вспомню точно где я видел Ваше имя. Да, если Вам удобнее, можете писать мне в почту, оставлять личные сообщения.
Пошли уже вторые сутки как я пытаюсь получить от Вас дополнительные сведения об ошибке. Что хранится в минидампе я привел по ссылке выше, там нет никаких секретных данных о Вас.
Мне удалось вызвать ошибку у себя, но я не уверен что это описанный Вами случай. Случается это в ситуации когда привод выбрасывает MessageBox с ошибкой или сообщением и в этот момент попытаться остановить скрипт. Либо нажать на кнопку Run и попытаться остановить скрипт из терминала. В этом случае привод так же не реагирует на действия пользователя и пишет какой-то лог в сотни мегабайт.
В обоих случаях стек падения не содержит qlua.dll и выглядит примерно так:
Код
00d0e87c 76ef6210 76f60230 00000000 00d0e8c8 user32!RealDefWindowProcW+0x4a
00d0e88c 76ef6b34 00000000 08048110 00000000 user32!_EndUserApiHook+0x11
00d0e890 00000000 08048110 00000000 00d0e8fc user32!DefWindowProcW+0x94 
dofile( ) - как дать путь в скрипте, чтобы Quik не ругался на отсутствие файла?
 
Код
dofile(getScriptPath() .. "\\some_script.lua") 
вопрос по коллбекам, к разработчикам (ONLY)
 
Добрый день.
Сергей, вот по этой ссылке http://www.debuginfo.com/articles/effminidumps.html#minidumpnormal можно прочитать об информации, которая сохраняется в минидампе.
Кирилл, если дамп прислать невозможно, то опишите подробно по шагам последовательность действий (можно с картинками), попытаемся воспроизвести у себя.
вопрос по коллбекам, к разработчикам (ONLY)
 
Пришлите нам дамп падения и подробное описание действий, которые приводят к падению. У меня не получается воспроизвести ошибку.
вопрос по коллбекам, к разработчикам (ONLY)
 
выполните !analyze -v
вопрос по коллбекам, к разработчикам (ONLY)
 
Декомпилировать скрипты желания нет, без дампа разбираться не получится.
Процесс winros.exe никак не связан с коннектом к серверу. Если Вы не используете экспорт данных в метасток или омегу, то можете удалить из каталога с терминалом файлы iwr.dll и winros.exe
вопрос по коллбекам, к разработчикам (ONLY)
 
Вот последнее сообщение на форуме (я так понимаю от разработчиков)
вопрос по коллбекам, к разработчикам (ONLY)
 
Если бы я это воспроизвел, то не просил бы Вас прислать дампы. Только что скачал с сайта эту программу и не смог получить такой эффект.
А какую информацию из мини дампа Вы считаете критичной для своей безопасности?
вопрос по коллбекам, к разработчикам (ONLY)
 
Добрый день.
Если есть дамп для изучения - присылайте, посмотрим.  
Отключение запуска скриптов
 
Пример зависит от ваших задач. но навскидку можно так:
Выбираете понравившийся код отсюда: TableSerialization

Код
gScriptPath = getScriptPath()
settings_file = gScriptPath .. "\\cfg.lua"

package.path =gScriptPath .. "\\?.lua;" .. package.path
dofile(gScriptPath.."\\persistence.lua")

Settings={
   AutoStart = true
      }
 
function OnInit()
   t = persistence.load(settings_file)
   Settings = t or Settings
end

function OnStop(s)
   stopped =true
end
 
function main()
   if Settings.AutoStart then
      while not stopped do
         sleep(100)
      end
   end
   Settings.AutoStart = not Settings.AutoStart
   persistence.store(settings_file, Settings)
end
 
в общем идея в том, чтобы сохранить нужные настройки в конфигурационный файл и при запуске анализировать их. Сериализация таблиц в файле в этом смысле довольно удобна - позднее можно вносить изменения руками. Вот пример файла cfg.lua
Код
-- Persistent Data
local multiRefObjects = {

} -- multiRefObjects
local obj1 = {
   ["AutoStart"] = false;
}
return obj1
 
Страницы: Пред. 1 2 3 4 5 6 7 След.
Наверх