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

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

Страницы: Пред. 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 47 След.
График история, На графике не сохраняется последний день истории.
 
Цитата
Imersio Arrigo написал:
скриншот где видно 3000 свечей включая торговый день. И сегодняшние вошли в эти три тыщи
Согласно скриншоту дата торгов - 23.04. И "сегодняшние" от 23.04 вошли в эти три тыщи
Надо делать так, как надо. А как не надо - делать не надо.
График история, На графике не сохраняется последний день истории.
 
Цитата
Imersio Arrigo написал:
А в чем тогда вопрос?
Вроде, понятно написал:
https://forum.quik.ru/messages/forum13/message54921/topic5037/#message54921
Надо делать так, как надо. А как не надо - делать не надо.
График история, На графике не сохраняется последний день истории.
 
Imersio Arrigo, ключевая фраза
Цитата
Старатель написал:
сервер даёт
Всё, что свыше, было загружено и сохранено раннее.
Закройте график, удалите dat-файл в папке archive и откройте график заново.
Надо делать так, как надо. А как не надо - делать не надо.
График история, На графике не сохраняется последний день истории.
 
Сегодня, в СБ2 24.04, сервер даёт всего 3000 свечей, включая текущую от 23.04
Надо делать так, как надо. А как не надо - делать не надо.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
swerg написал:
Цитата
Старатель написал:
В 7-м квике не зависает даже более примитивный код:
Мне все лень было проверить, но вот тоже такое впечатление, что в Lua 5.1 более грамотно были сделаны локи многопоточности. А в 5.3 совсем халтуру какую-то сделали.
По всей видимости в 5.1 на каждой итерации цикла вызывались lua_unlock/lua_lock.
А в 5.3 этого нет, если в цикле только байткод, что значительно уменьшает время вычислений таких циклов.
Если цикл продолжительный, чтобы не было зависаний, можно вставить внутрь цикла любую с-функцию (не обязательно sleep). Причём, вставлять можно не на каждую итерацию, а через заданное количество циклов. Это позволит не подвешивать основной поток и при этом сохранить скорость вычислений байткода в циклах.
Т.ч., нельзя назвать эти изменения в 5.3 "халтурой."
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Цитата
Roman Azarov написал:
У себя подобного за целый день не увидели

Roman Azarov, вот тест, который воспроизводит ошибку практически сразу после перезаказа обезличенных сделок.
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
График история, На графике не сохраняется последний день истории.
 
Egor Zaytsev, сейчас уже 3000 + текущая сессия.
Дело в том, что я смотрел в ВС 18.04. Дата торгов при этом отображалась 16.04. Если я правильно понимаю, текущая сессия сохраняется в info.log, а все предыдущие - в dat-файлах в папке archive. Так вот, в dat-файле было около 2000 свечей и в сумме с последней сессией 16.04 получалось всего 3000. TQBR и SPBFUT.
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Артем, джентльмены соглашаются только с тем, кто прав. А умников, которые считают себя "профи" в каждом вопросе, а по факту даже не понимают сути обсуждаемого, надо на место ставить.

Цитата
Артем написал:
а кто-то берет и обосновывает
Что вы там обосновали? Про "небо голубое"? Аргументов от вас лично я так и не увидел.

Цитата
Артем написал:
просто не работайте с одной и той же памятью из разных тредов
Спасибо, кэп, без вас бы не разобрались.
Ветка про другое. Второй поток вообще может не знать про таблицу в первом, или может знать, но не работать с ней.
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Цитата
Артем написал:
удалять значения из массива в цикле по этому же массиву это плохая практика
В Lua не запрещено, из Reference Manual:
Цитата
The behavior of next is undefined if, during the traversal, you assign any value to a non-existent field in the table. You may however modify existing fields. In particular, you may set existing fields to nil.

Ошибка, обсуждаемая в ветке, может возникнуть при работе с таблицей в одном потоке. При чём здесь вообще потокобезопасные функции, которые к тому же, не работают с ассоциативными массивами?

Цитата
Артем написал:
Очистить стол
Столы - в мебельном. А здесь - таблицы, и в таблице могут очищаться не все значения:
Код
for k, v in pairs(t) do
  if exp then t[k] = nil end
end
Создавать новую таблицу под каждое очищаемое значение - это бред.

Артем, если вы, кроме "патамушта гладиолус небо голубое", не можете ничем аргументировать, то у меня к вам нет вопросов.
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Цитата
Старатель написал:
для ассоциативного массива
Цитата
Артем написал:
sinsert sremove

Ну ляпнули вы ерунду один раз. Зачем дальше-то показывать свою глупость?
К вам вопросов больше не имею.
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Цитата
Артем написал:
удалять/добавлять значения надо потокобезопасными
Какой, например, функцией для ассоциативного массива? И почему?
Цитата
Артем написал:
удалять значения из массива в цикле по этому же массиву это плохая практика
Цитата
Артем написал:
просто создать пустой - это не только надежнее и проще
Можете обосновать каждое своё утверждение?
Надо делать так, как надо. А как не надо - делать не надо.
Отладка QUIK 8.13
 
Цитата
Евгений написал:
что тут не так

Используйте
Код
io.popen(prog):read('*a')
Надо делать так, как надо. А как не надо - делать не надо.
Удаление элемента из массива, который прошёл проверку
 
Цитата
Старатель написал:
Вариант 1 неожиданно может дать  ошибку
Прошу прощения. Та ошибка касается только ассоциативных массивов.
В текущей постановке задачи, когда таблица с целочисленными ключами, можно использовать оба варианта.
Надо делать так, как надо. А как не надо - делать не надо.
Удаление элемента из массива, который прошёл проверку
 
Цитата
Старатель написал:
Вариант 1:
Вариант 1 неожиданно может дать ошибку, т.ч. лучше пользоваться вариантом 2 или делать обход через next
Надо делать так, как надо. А как не надо - делать не надо.
График история, На графике не сохраняется последний день истории.
 
Цитата
Egor Zaytsev написал:
На каждом интервале хранится 3000 свечей + текущая торговая сессия. Это то, что транслируется с сервера брокера.
У меня почему-то получается, что с сервера можно скачать не более 3000 свечей вместе с текущей торговой сессией.
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Цитата
Артем написал:
нужно пользоваться потокобезопасными функциями
Хотелось бы увидеть пример потокобезопасной функции для обхода ассоциативного массива. Или вы предлагаете весь цикл в ssort запихать?

Не знаю, какие "столы", но с сообщения #8 работа с таблицей - в одном потоке. Впрочем, это по коду видно.
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Придётся вот таким "изящным" способом обходить:
Код
repeat
  local k, v = next(t)
  if k == nil then break end
  t[k] = nil
until false
Надо делать так, как надо. А как не надо - делать не надо.
Изменить версию Lua с 5.4.1 до 5.4.2
 
QUIK 8.13.1.16, Lua 5.4
Получил очередную ошибку
Цитата
invalid key to 'next'
в древнем скрипте
Код
local ID = {}
function main()
  ...
  for TableName, id in pairs(ID) do
    ID[TableName] = nil
    DestroyTable(id)
  end
  ...
end
Надо делать так, как надо. А как не надо - делать не надо.
Как читать диаграмму "Глубина рынка"?, Не понимаю изменений суммарного объема на диаграмме.
 
Это ошибка. Суммарный объём должен расти на том уровне, где есть заявки, а не раньше.
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Артем, а ещё можно перезаказать обезличенные сделки на боевом квике.
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Артем,
https://arqatech.com/ru/products/quik/basic-sets/quik-broker-training-copy/#anchor-link
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Цитата
Anton написал:
если этот кусок таки окажется атомарным, то от зависания мы не ушли, получается?
О каком "зависании" речь?
Функция Claster у меня получается атомарной, но это не точно.

Скрытый текст

Цитата
Anton написал:
получается, функцию Claster надо намеренно сделать неатомарной? Или я перемудрил уже?
Перемудрил. Зависнуть нам не даст getItem.
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Тогда это тоже атомарная операция:
Код
Volume[alltrade.price] = (Volume[alltrade.price] or 0) + alltrade.qty

И можно не заморачиваться и остановиться варианте #21
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Цитата
Anton написал:
Вот так, ежли ничего не упустил опять
Код
if N >= 0 then N = N + 1
Это атомарная операция?
Не может получиться такой порядок?
Код
-- N = 0
[OnAllTrade] if N >= 0 then
[main] N = N - 1        --> N = -1
[main] while N >= 0 do  --> Выход из цикла
[OnAllTrade] N = N + 1  --> N = 0
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Цитата
Anton написал:
Цитата
Старатель написал:
считать объёмы внутри table.ssort
А оно ведь тоже подвесит на первом же колбеке?
Смотря что подразумевать под "подвесит". Сложить два числа и положить в табличку под локом - это одно. А посчитать все накопленные на текущий момент сделки в OnInit - это совсем другое.
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Цитата
Anton написал:
мейн по событию просыпается и вытаскивает все, чего еще не видел.
Так это понятно, в одном потоке: OnInit + OnAllTrade или main only
А так, чтобы от OnAllTrade не отказываться и не подвешивать терминал, если скрипт запущен не в начале дня? В голову приходит только считать объёмы внутри table.ssort  :smile:
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Цитата
Старатель написал:
И первичный поиск можно и main делать, чтобы не подвешивать терминал.
Код
local run = true
function OnStop()
  run = nil
end

local Volume = {}
local function Claster(alltrade)
  if alltrade.sec_code == sec and alltrade.class_code == class then
    Volume[alltrade.price] = (Volume[alltrade.price] or 0) + alltrade.qty
  end
end

local N
function OnInit()
  N = getNumberOf("all_trades")
end

function OnAllTrade(alltrade)
  Claster(alltrade)
end

function main()
  for i = 0, N-1 do
    Claster(getItem("all_trades", i))
  end
  while run do sleep(500) end
end

Сразу возник вопрос. Существует ненулевая вероятность неверного расчёта объёмов, если в OnAllTrade и main одновременно будут рассчитываться объёмы по одной цене.
Сходу не придумал, как это исключить. Есть идеи?
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
И первичный поиск можно и main делать, чтобы не подвешивать терминал.
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Цитата
s_mike@rambler.ru написал:
индикатор будет подвешивать терминал
Насколько я понял, ТС интересует простой скрипт, не индикатор.

Цитата
s_mike@rambler.ru написал:
в случае запуска на ликвидном инструменте
На скорость поиска влияет не ликвидность инструмента, а количество записей в таблице.

А про SearchItems я написал, как замену цикла
Код
for i = 0, getNumberOf("all_trades")-1 do
при первичном запуске.
Надо делать так, как надо. А как не надо - делать не надо.
Получать объемы сделок
 
Проще самому написать.

Цитата
Глебов Александр написал:
суммарные  обновляемые объемы сделок для каждого ценового уровня внутри дня
Как-то так:
Код
local Volume = {}
local function Claster(alltrade)
  if alltrade.sec_code == sec and alltrade.class_code == class then
    Volume[alltrade.price] = (Volume[alltrade.price] or 0) + alltrade.qty
  end
end

function OnInit()
  for i = 0, getNumberOf("all_trades")-1 do
    Claster(getItem("all_trades", i))
  end
end

function OnAllTrade(alltrade)
  Claster(alltrade)
end

Можно SearchItems задействовать для боле быстрого поиска.
Надо делать так, как надо. А как не надо - делать не надо.
Кривые шибки в QLua
 
QUIK v.8.13.0.106, Lua 5.4

Очередная ошибка
Цитата
attempt to call a nil value (method 'pop')
Скрипт:
Скрытый текст
Queue работает годами в разных скриптах. И (условно) раз в год (или реже) скрипты ругаются на nil. Было в 7-й или 6-й версии квика. Какое тогда было сообщение об ошибке не помню.

Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Ноли в значении тренда в индикаторе
 
А мужики-то не знали:
https://forum.quik.ru/messages/forum13/message35242/topic4129/

Цитата
Евгений написал:
Возможно что ошибка только в этом индикаторе
Косяк на большинстве индикаторов. Просто на индикаторах, значения которых сопоставимы с ценой, этого не видно.
Надо делать так, как надо. А как не надо - делать не надо.
Вертикальное масштабирование графика
 
Цитата
Евгений написал:
Как его отключить это авто масштабирование?


Цитата
Евгений написал:
Если на графике есть индикаторы
Цитата
Евгений написал:
Сделайте возможность отключения автомасштабирования


Оно?
Надо делать так, как надо. А как не надо - делать не надо.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Цитата
Старатель написал:
даже если CreateDataSource, вызванный в момент подключения до OnConnected(), не вернул ошибку, то Size так и останется нулевым.
Цитата
Старатель написал:
в предыдущих версиях, просто вместо ошибки возвращалась пустая DataSource.

Вместо тысячи слов:
Скрытый текст

Никто не говорит, что это нормально. Просто факт: отсутствие ошибки ещё не гарантирует удачный заказ графика.
Надо делать так, как надо. А как не надо - делать не надо.
IMOEX - сильные различия формы свечей в quik и tradingview, почему так?
 
Цитата
Roman Azarov написал:
Имелась в виду именно разница в показателях свечи.
Касательно свечи до начала торгов, проблема изучается.
Именно этот тик до начала торгов рисует Open дневной (и часовых) свечи и влияет на её вид.
Надо делать так, как надо. А как не надо - делать не надо.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Цитата
Артем написал:
раньше работало.
Вы заблуждаетесь. У вас стоит 10-секундное ожидание после подключения, поэтому часть DataSource может быть запрошена уже после OnConnected.
Ещё если графики были открыты до запуска скрипта, то DataSource по ним сразу будут иметь ненулевой размер (при наличии свечей, естественно).
Вот специально написал демонстрационный скрипт:
Скрытый текст

Запускаем при установленном соединении - работает нормально.

Если запустить при неустановленном соединении а затем подключиться, то скрипт так и будет висеть в ожидании.
Кроме того, если после этого открыть диаграмму с графиком из списка list (если не был открыт до запуска скрипта), то график будет пустой. Свечи появятся только после разрыва соединения.

Проверялось в 8.13 и 8.1
Надо делать так, как надо. А как не надо - делать не надо.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Просто наблюдение: сначала isConnected() меняется на 1, затем через некоторое время вызывается OnConnected.
Если в это время вызвать CreateDataSource, то он завершится неудачей.
Есть подозрение, что так было и в предыдущих версиях, просто вместо ошибки возвращалась пустая DataSource. Можете проверить их Size().

Кстати, обнаружилась ещё одна неприятность:
В 8.13 даже если CreateDataSource, вызванный в момент подключения до OnConnected(), не вернул ошибку, то Size так и останется нулевым.
Suport, обратите внимание.
Надо делать так, как надо. А как не надо - делать не надо.
Использование данных по фьючерсам, вышедшим из обращения
 
Цитата
Andrey Bezrukov написал:
Данное пожелание было реализовано как функционал склейки графиков
Это совсем не то. Это какое-то другое пожелание.

Долго пытался разобраться, как склейку реализовали.
В итоге оказалось, что склеить можно только те инструменты, которые остались в открытой ТТТ или других окнах.
Если инструмент из таблиц был удалён, то даже при наличии сохранённой истории в dat-архиве склеить невозможно.
Надо делать так, как надо. А как не надо - делать не надо.
Использование данных по фьючерсам, вышедшим из обращения
 
Цитата
Andrei2016 написал:
Станислав, зарегистрируйте.

Если я правильно понимаю, как работает терминал, то главная проблема именно в исключении необращающихся фьючерсов из списка доступных инструментов. Технически данные графика содержатся в папке архива. Но даже при их нахождении там, в файле, содержащем перечень доступных инструментов после подключении к актуальной сессии идентификаторы и внутренние ссылки исчезают.
Было бы очень хорошо, если бы появился такой функционал:
в панель выбора инструмента добавить еще один раздел "Архив", в котором и появлялись бы те инструменты, срок обращения которых истек, но данные по которым для терминала доступны.

Цитата
Zoya Skvorcova написал:
Ваше пожелание было реализовано в версии 7.18.1 терминала QUIK.

Где же это всё?
Надо делать так, как надо. А как не надо - делать не надо.
IMOEX - сильные различия формы свечей в quik и tradingview, почему так?
 
Цитата
Roman Azarov написал:
Выполните, пожалуйста, перезаказ архива данных для построения графиков.
Результат тот же: на графиках индексов присутствует левый тик в 5ч, значение которого равно закрытию предыдущего дня.

Цитата
Roman Azarov написал:
У себя дневную свечку по IMOEX за 15.03.21 видим вот так:
А на М4?
Это где у себя? Я не вижу индексов на вашем Junior
Надо делать так, как надо. А как не надо - делать не надо.
Неверная дата и время, Стандартные функции Lua возвращают неверное время сервера
 
Цитата
sysdate

Функция возвращает системные дату и время с точностью до микросекунд.


Цитата
Roman Azarov написал:
Данное поведение обусловлено, дополнительным вызовом функции конвертации, в которой происходит округление миллисекунд, в os.sysdate().
Это как? Что во что конвертируется и по каким правилам округляется?
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Пропадает текст в таблицах
 
Цитата
Владимир написал:
близок к идеальному
Если не считать злоупотребление метками вкупе с пробелами по темам типов и области видимости переменных.
Но дискутировать на эту тему у меня нет ни малейшего желания. Мне по барабану будете ли вы искать ошибку.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Пропадает текст в таблицах
 
Владимир, учитывая ваш стиль программирования, это наиболее вероятная причина.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Пропадает текст в таблицах
 
Или так, чтобы не пропустить ошибку:
Код
local SetColor_ = SetColor
function SetColor(t_id, row, col, b_color, f_color, sel_b_color, sel_f_color)
  if row == -1 and col == -1 and (b_color == -1 or f_color == -1 or sel_b_color == -1 or sel_f_color == -1) then
    message(debug.traceback(), 3)
  end
  return SetColor_(t_id, row, col, b_color, f_color, sel_b_color, sel_f_color)
end
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Пропадает текст в таблицах
 
Владимир, возможно вы где-то вызываете
Код
SetColor(id, -1, -1, b_color, f_color, -1, -1)
При этом b_color и f_color могут быть любыми.

Можете сделать проверку передаваемых параметров в SetColor, например, так:
Код
local SetColor_ = SetColor
function SetColor(t_id, row, col, b_color, f_color, sel_b_color, sel_f_color)
  if row == -1 and col == -1 and (b_color == -1 or f_color == -1 or sel_b_color == -1 or sel_f_color == -1) then
    message(debug.traceback(), 3)
    return nil
  else
    return SetColor_(t_id, row, col, b_color, f_color, sel_b_color, sel_f_color)
  end
end
Надо делать так, как надо. А как не надо - делать не надо.
Несчастное окно
 
Цитата
Roman Azarov написал:
Правильно понимаем, что под пустым полем Вы имеете в виду самую правую колонку таблички "Загруженные скрипты"?
Правильно.

Цитата
Roman Azarov написал:
при каких условиях (в какой версии терминала) окно открывается с пустым полем?
8.13. При открытии окна или запуске QUIK, если оно было открыто раннее.
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
IMOEX - сильные различия формы свечей в quik и tradingview, почему так?
 
Для сравнения как выглядит дневной график в QUIK

и на официальном сайте биржи:


Многие другие индексы также кривые в квике.
Скрытый текст

Это не считая объёмов, которые в QUIK показывают не пойми что.
Надо делать так, как надо. А как не надо - делать не надо.
Не работают горячие клавиши
 
Anna Lozenko, в 8.13.0 по-прежнему
Цитата
Старатель написал:
При активном окне "Доступные скрипты" не работают никакие горячие клавиши.
Надо делать так, как надо. А как не надо - делать не надо.
Несчастное окно
 
Цитата
Старатель написал:
сделать, чтобы окно сохраняло  ширину колонок в списке скриптов
Или хотя бы убрать это пустое поле при открытии окна. Уже будет "прогресс"
Как на скрине в руководстве QLua:
Надо делать так, как надо. А как не надо - делать не надо.
Несчастное окно
 
Такое ощущение, что дизайн этого окна отдали на аутсорс школьникам.

Что надо сделать, чтобы окно сохраняло свои координаты (при закрытии и повторном открытии) и ширину колонок в списке скриптов?
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: Пред. 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 47 След.
Наверх