Старатель (Автор тем)

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

Страницы: 1 2 3 След.
ParamRequest и CancelParamRequest в индикаторах, ACCESS VIOLATION
 
Код
Settings = {
  Name = 'ParamRequest',
  line = {
    { Name = 'ParamRequest' }
  }
}

function Init()
  return #Settings.line
end

local class_code, sec_code
function OnChangeSettings()
  OnDestroy()
  local DSI = getDataSourceInfo()
  class_code = DSI.class_code
  sec_code = DSI.sec_code
  PrintDbgStr(tostring(sec_code))
  ParamRequest(class_code, sec_code, 'LAST')
end

function OnCalculate(index)
  if index == 1 then
    ParamRequest(class_code, sec_code, 'LAST')
  end
  return nil
end

function OnDestroy()
  if sec_code then
    CancelParamRequest(class_code, sec_code, 'LAST')
  end
end

При добавлении / удалении индикатора возникают ошибки:
Цитата
Function OnChangeSettings: ACCESS VIOLATION at address 000007FC524B89CC
ACCESS VIOLATION at address 000007FC524B89CC

Что не так?
Надо делать так, как надо. А как не надо - делать не надо.
Метки в индикаторе, При перезапуске Квика получается наслоение меток
 
Индикатор:
Код
local Labels = {}
function OnCalculate(index)
  if index == 1 then
    OnDestroy()
  end
  ...

  local Label = AddLabel(Settings.tag, Param)
  if Label and Label > 0 then
    Labels[#Labels+1] = Label
  end

  ...
end

function OnDestroy()
    for i = 1, #Labels do
      PrintDbgStr('DelLabel(' .. Labels[i] .. '): ' .. tostring(DelLabel(Settings.tag, Labels[i])))
    end
    Labels = {}
end

При закрытии Квика срабатывает OnDestroy, но метки с графиков не удаляются. И при следующем запуске индикатор ставит новые метки поверх старых, что есть не хорошо.
Так и было задумано или же ошибка?
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Кривое автомастабирование на графиках с отрицательными ценами
 
QUIK 9.5.0.42
При включённой настройке

график цены прижимается к нижнему краю и обрезаются минимумы свечей:

Это тот же график, сжатый по оси цены вручную:
Надо делать так, как надо. А как не надо - делать не надо.
Сохранение настроек в файл, Подмена папки для сохранения настроек
 
Сделайте уже, наконец, чтобы при сохранении настроек в файл из меню QUIK открывал по умолчанию ту папку, в которой находится info.exe, а не ту, в которой что-то делали в ДРУГОМ квике.
Реально, чтобы сохранить настройки, надо пройти целый квест с кучей проверок, как бы не затереть настройки другого квика.
И ещё можно утилизировать старый паровоз, а на его место поставить кнопку "Сохранить настройки".
Надо делать так, как надо. А как не надо - делать не надо.
KILL_ALL_FUTURES_ORDERS
 
Через Lua отправляю транзакцию на удаление заявок по фьючерсам {TRANS_ID=trans_id, ACTION="KILL_ALL_FUTURES_ORDERS", ACCOUNT=account, CLASSCODE="SPBFUT", BASE_CONTRACT=base_contract}
Но удаляются также заявки и по спредам (FUTSPREAD) с тем же базовым активом.
Что я делаю не так?

В шлюзе SPECTRA Plaza-2 для метода DelUserOrders есть маска группы инструментов:
Цитата
• Параметр instrument_mask является битовой маской:
0x1 Фьючерсы
0x2 Опционы
0x4 Инструменты-связки
Как в Lua задать, чтобы удалялись заявки по маске инструментов, например только фьючерсы?
Надо делать так, как надо. А как не надо - делать не надо.
sleep
 
sleep с отрицательным числом, видимо длится бесконечно долго.
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
По данному инструменту разрешено только закрытие позиции, Ошибка библиотеки расчёта лимитов
 
Брокер по своему усмотрению может ограничить список инструментов, по которым можно открывать новые позиции.
В какой таблице QUIK можно ознакомиться с актуальным списком инструментов с установленными на них ограничениями?
Надо делать так, как надо. А как не надо - делать не надо.
Вы не можете заменить заявку ..., так как ее обработка еще не завершена.
 
Срочный рынок. Через Lua подаётся транзакция MOVE_ORDERS.
В течение более 6 мин. сервер сыпет ошибки:
Вы не можете заменить заявку ..., так как ее обработка еще не завершена.
Код ошибки: -1065103584
Источник ошибки: Библиотека расчёта лимитов


Сервер не способен обработать заявку более 6 мин.?
Что за обработка такая? Зачем он вообще это делает?
Обработкой заявок занимается торговая система биржи.
А от терминала требуется передать транзакцию от пользователя в торговую систему и вернуть ответ от ТС в терминал пользователя. И сделать это желательно как можно быстрее.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Демонстрационный скрипт:
Скрытый текст

QUIK 9.3.1.11, Lua 5.4
Открыто, как минимум одно окно: стакан ликвидного инструмента.
Конечно, никто не запускает скрипты с тысячами функций, но при нескольких запущенных скриптах с десятками функций при высокой активности на бирже получаем нихилую загрузку CPU.

ЗЫ: У кого "один скрипт на все случаи жизни" с парой функций, может игнорировать эту тему.
Без флуда!
Надо делать так, как надо. А как не надо - делать не надо.
BUG: Subscribe_Level_II_Quotes возвращает true даже если подписка на Level II по инструменту невозможна
 
В квике есть неторговые, информационные классы, по которым Level II не транслируется.
Но Subscribe по инструментам из этих классов возвращает true.
Надо делать так, как надо. А как не надо - делать не надо.
BUG: SetSelectedRow работает некорректно при использовании пользовательских фильтров или сортировки
 
Добрый день.
Скрытый текст


Применить к таблице фильтр, как на скриншоте: "Row больше 1"
При нажатии на любую клавишу, нужно выделить строку с фактическим порядковым номером 2.
Но выделяется строка с номером 3, о чём сообщает событие QTABLE_SELCHANGED.

1. Как выделять строки по фактическому порядковому номеру, с учётом того, что скрипт понятия не имеет о применённых фильтрах и сортировках?
2. Да в руководстве указано: "Функция работает с видимым представлением таблицы, в котором учитываются пользовательские фильтры и сортировка." Но нафига оно онужно? Можете привести хоть один реальный пример, когда нужно выделить строку в таблице, в которой "учитываются пользовательские фильтры и сортировка", принимая во внимание, что скрипт понятия не имеет о применённых фильтрах и сортировках?
Надо делать так, как надо. А как не надо - делать не надо.
Масштабирование графика скролом мыши
 
Подглядел в другом терминале: с зажатым контролом скрол вниз уменьшает масштаб, скрол вверх - увеличивает.
При этом, масштабирование происходит таким образом, что свеча, над которой находится курсор остаётся на месте.
Надо делать так, как надо. А как не надо - делать не надо.
Ввод заявки из таблицы котировок
 
Открыто два стакана по одному инструменту.
В каждом стакане включена панель торговли. В ней выбран конкретный торговый счёт. Они разные в каждом стакане.
Как сделать, чтобы при открытии формы ввода заявки из стакана (двойной клик) в поле "Торговый счет" автоматически подставлялся тот торговый счет, который выбран в панели торговли?
Надо делать так, как надо. А как не надо - делать не надо.
getSecurityInfo, добавить тип опциона
 
Call / Put
Надо делать так, как надо. А как не надо - делать не надо.
Подсказка при наведении курсора на название колонки в QLUA-таблице
 
Добрый день.
Сделать возможным в QLUA-таблице создавать подсказки к заголовкам колонок, как в таблице «Клиентский портфель»
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Не отображается подсказка параметров свечи на графике вверху слева
 
QUIK 9.2.1.4
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] CreateDataSource не заказывает обезличенные сделки
 
После ручного удаления бумаги из списка получения информации по обезличенным сделкам невозможно заказать сделки по этой бумаге через скрипт.
Надо делать так, как надо. А как не надо - делать не надо.
Утечка памяти при использовании SetUpdateCallback
 
Код
local class, sec_code = "SPBFUT", "SiU1"

local run = true
function OnStop()
  run = nil
end

function main()
  local ds = assert(CreateDataSource(class, sec_code, 1))
  ds:SetUpdateCallback(function (index)
    if index < ds:Size() then return end
    for i = 1, index do
      ds:T(i)
      ds:O(i)
      ds:H(i)
      ds:L(i)
      ds:C(i)
      ds:V(i)
    end
  end)
  while run do sleep(1000) end
end

За несколько минут объём занимаемой скриптом памяти вырастает с 300 Кб до Гигабайтов.

Если график раннее не заказывался и убрать строку
Код
if index < ds:Size() then return end
, то сразу при запуске будет 2Гб.
Надо делать так, как надо. А как не надо - делать не надо.
Инструкция по работе с условными (стоп–) заявками, Обсуждение
 
Добрый день.

Вы бы в инструкцию включили пример, когда в результате срабатывания Тейк–профита в ТС может выставиться лимитированная заявка с ценой на 954 п. ниже максимума, при том, что отступ+спред = 8.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Пляшущие графики
 
QUIK Junior 9.1.3.11
После смены сессии открыл дневной график:

Переключился на другой таймфрейм и снова на дневной:
Надо делать так, как надо. А как не надо - делать не надо.
События на закрытие QLua-таблицы
 
1. https://forum.quik.ru/messages/forum10/message57044/topic475/#message57044
В целях корректной обработки события закрытия таблицы предлагаю вызывать OnClose, когда только дана команда главному окну терминала на закрытие (нажат крестик, Alt+F4 или "Система -> Выход") до QTABLE_CLOSE.
Тогда OnClose можно будет использовать, чтобы определить, что таблица закрыта не пользователем.

2. https://forum.quik.ru/messages/forum10/message22786/topic2591/#message22786
В аналогичных целях предлагается добавить колбек, вызываемый до QTABLE_CLOSE при запуске процедуры замены инструментов с истекающим сроком обращения

Либо предложите свой вариант.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Контекстное меню в стакане при включенном режиме drag-and-drop
 
Когда стакан не активен, то клик правой клавишей мыши по заявке в стакане не вызывает контекстное меню.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] QUIK самовольно меняет код клиента
 
К логину было подключено два кода клиента. Скрипт работал по обоим нормально.
Потом один код был отключен брокером или пользователь зашел с логина, где подключен только один клиент, не суть.
В результате вместо того, чтобы выдать ошибку, что у пользователя нет прав для работы с отключенным кодом клиента, QUIK стал молча подменять его на другой.
Т.е., скрипт отправляет транзакцию с CLIENT_CODE = client2//brokerref, а заявка приходит с client_code = client1, brokerref = client1//client2//brokerref
Это косяк.
Надо делать так, как надо. А как не надо - делать не надо.
Беззвучный режим
 
Что такое "Беззвучный режим" в настройках "Звуки"?
При установленной галке "Беззвучный режим" звуковые сигналы продолжают воспроизводиться.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] CreateDataSource выдает успех, если реальная подписка не осуществлена
 
Подробности здесь:
https://forum.quik.ru/messages/forum10/message54698/topic6407/#message54698
https://forum.quik.ru/messages/forum10/message54707/topic6407/#message54707
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] getFuturesHolding: ошибка в работе
 
По мотивам этой темы.
Скрипт 1
Скрытый текст

Скрипт 2
Скрытый текст

Запускаем скрипт 1 и несколько скриптов 2 по разным бумагам. Любуемся результатом.

Возможно, другие функции getЧегоТоТам также работают нестабильно. Проверяйте сами.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Фильтры инструментов и параметров
 
Если в настройках получения параметров по инструментам вручную задать классы/инструменты,

то при построении графиков будут доступны только эти выбранные классы/инструменты:
Надо делать так, как надо. А как не надо - делать не надо.
Какой формат записи ячеек с типом QTABLE_DATETIME_TYPE, чтобы работали сортировка и фильтры?
 
Сабж
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Пропадает текст в таблицах
 
При задании цвета для всей таблицы, если один из цветов указан QTABLE_DEFAULT_COLOR, текст во всех ячейках пропадает.
Примеры:
Код
SetColor(id, QTABLE_NO_INDEX, QTABLE_NO_INDEX, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR)
SetColor(id, QTABLE_NO_INDEX, QTABLE_NO_INDEX, QTABLE_DEFAULT_COLOR, 0, 0, 0)
SetColor(id, QTABLE_NO_INDEX, QTABLE_NO_INDEX, 0xFFFFFF, 0, 0xFFFFFF, QTABLE_DEFAULT_COLOR)
Надо делать так, как надо. А как не надо - делать не надо.
Гарантийное обеспечение в окне ввода заявки, Окно ввода заявок , Объем ГО
 
У кого-нибудь показывает Объем ГО в окне ввода заявки календарных спрэдов?
Надо делать так, как надо. А как не надо - делать не надо.
CreateDataSource возвращает неверные данные
 
Добрый день.

Иногда CreateDataSource возвращает неверные данные.
Демонстрационный скрипт:
Скрытый текст

Графики должны быть закрыты. Можно запустить несколько скриптов с разными инструментами.
Через некоторое время будет сообщение вида:
Скрытый текст

Возможно, большое количество свечей повышает вероятность ошибки. Но это не точно.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Криво работает поиск, Найти далее [F3]
 
QUIK 8.12.0.41
Если в таблице несколько строк, удовлетворяющих параметрам поиска, то по F3 будут показываться значения только в пределах одной строки.
В 8.1 поиск осуществлялся по всем строкам таблицы.
Надо делать так, как надо. А как не надо - делать не надо.
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Пример
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Сортировка в таблицах
 

Вроде как значок сортировки показывает увеличение, а по факту - убывание.
Надо делать так, как надо. А как не надо - делать не надо.
FAQ: Оптимизация производительности клиентского места QUIK, Обсуждение
 
https://forum.quik.ru/forum1/topic1539/
Цитата
Заказ полного набора всех сделок происходит все зависимости от установленных в таблице обезличенных сделок фильтров или открытого тикового графика по конкретному инструменту.
Прошу техподдержку прокомментировать, что сие значит.
Надо делать так, как надо. А как не надо - делать не надо.
Доступные скрипты, Некорректное поведение в режиме "Показывать на всех вкладках"
 
Видео
Описание:
Две вкладки, на каждой открыто по окну, в данном случае ТТТ, а также окно "Доступные скрипты", которое перекрывается первым окном. "Доступные скрипты" делаю "Показывать на всех вкладках".
Когда активирую окно "Доступные скрипты" на одной вкладке, то на другой положение (перекрывание) окон сохраняется. Но когда запускаю Lua скрипт с созданием окна, этот порядок нарушается.
На видео окна на Вкладке 1 расположил в следующем порядке (сверху вниз): Lua-окно, ТТТ, Доступные скрипты.
Далее переключился на вкладку 2 и активировал окно "Доступные скрипты". Возвращаюсь на вкладку 1, порядок поменялся: Lua-окно, Доступные скрипты, ТТТ.
Надо делать так, как надо. А как не надо - делать не надо.
Highlight с дробным timeout, не работает, но возвращает true
 
QUIK 8.9
Если задано дробное значение timeout, то Highlight не работает, но возвращает true
Надо делать так, как надо. А как не надо - делать не надо.
Снятие/перемещение заявок в стакане
 
Добрый день.

1. Перемещать мышкой заявку в стакане транзакцией "Переставить заявки" ("Изменение заявки"), если доступен данный тип транзакции для инструмента.
Если по одной цене стоят несколько заявок, то применять операцию для последней выставленной заявки (для двух последних на FORTS).

2. Снимать заявки (панель снятия заявок по условию в стакане) транзакцией "Удалить все заявки по условию", если доступна.
Надо делать так, как надо. А как не надо - делать не надо.
Кривые шибки в QLua
 
Здесь будут публиковаться кривые ошибки, возникающие, очевидно, из-за двухпоточной схемы работы QLua.
Некоторые ошибки указаны здесь: Потокобезопасные функции в Lua 5.3
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Добрый день.

QUIK 8.8.4.3. Стандартная схема оформления.
Иногда после нескольких дней работы зависает. При этом загрузка ЦП процессом 0
Сначала грешил на потокобезопасные функции. Но анализ логов показывает, что зависании происходит вне потокобезопасных функций (но это не точно ))
Можно ли по стеку определить последнюю вызванную QLua функцию?
Надо делать так, как надо. А как не надо - делать не надо.
SetCell
 
SetCell стал ругаться false на такую конструкцию для строковых ячеек:
Код
SetCell(id, row, col, tostring(value), tonumber(value) or 0)
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
Скрипт 1:
Скрытый текст

Скрипт 2:
Скрытый текст

При запущенных обоих скриптах изредка в строке
Код
while #AllTrades > 0 do
возникает странная ошибка:
Цитата
attempt to compare number with function
Для воспроизведения можно Получить заново данные по обезличенным сделкам.
Надо делать так, как надо. А как не надо - делать не надо.
Получение данных из таблиц при автостарте
 
Добрый день.

Есть скрипт, который стартует автоматически при запуске QUIK. В самом начале идёт поиск заданного торгового счета:
Код
function main()
  local Index = SearchItems("trade_accounts", 0, getNumberOf("trade_accounts")-1, function(trdaccid) return trdaccid == Account end, "trdaccid")
  ...
end

В настройках стоит "Очищать данные после смены даты: На сервере (при установлении связи)". Т.е., при первичном старте скрипт берёт данные из кэша.
Запуск QUIK происходит долго, открыто несколько тиковых графиков и индикаторов.
Но обычно скрипт работает нормально. Но сегодня SearchItems не нашла торговый счёт и вернула nil. Повторный запуск скрипта вручную (до подключения к серверу) отработал корректно.

По какой причине данный код мог дать сбой?
Надо делать так, как надо. А как не надо - делать не надо.
ParamRequest и getParamEx2, Как получить актуальные данные через getParamEx2?
 
Начну из далека.
При заказе таблицы котировок используем
Код
Subscribe_Level_II_Quotes(class, sec)  -- Для заказа котировок с сервера
getQuoteLevel2(class, sec)  -- Для получения котировок
Мы либо получаем актуальные котировки, если стакан открыт, либо незаполненную таблицу, если стакан закрыт или котировки ещё не подгрузились с сервера.
Если закрыть стакан (отменить заказ на получение котировок с сервера), то getQuoteLevel2 вернёт незаполненную таблицу.
Т.о., мы понимаем, что, если getQuoteLevel2 вернул данные, то они актуальны.
Использование простое:
Код
function main()
  Subscribe_Level_II_Quotes(class, sec)
  -- Получаем актуальные котировки, если они есть:
  Quotes = getQuoteLevel2(class, sec)
end
-- Дальнейшие изменения в стакане можно ловить в OnQuote:
function OnQuote(class, sec)
  Quotes = getQuoteLevel2(class, sec)
end


С getParamEx2 намного сложнее. Если getParamEx2 вернул данные, то они актуальные или старые? Может, пять часов назад их заказывали, потом подписку отменили, а данные остались в кеше.
Если же брать парамтры только в OnParam, то по неликвидному инструменту их можно ждать бесконечно долго.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] QUIK вешается при использовании DestroyTable из main
 
Ошибка плавающая. Причину установить не удалось.
Но замечено, что виснет с большей вероятностью, если одновременно с DestroyTable происходит какое-то событие.
Для воспроизведения написал следующий скрипт:
Код
function main()
  ID = {}
  for i = 1, 20 do
    ID[i] = AllocTable()
    CreateWindow(ID[i])
    SetTableNotificationCallback(ID[i], function(id, event)
      if event == QTABLE_CLOSE then
        run = false
      end
    end)
  end
  run = true
  while run do sleep(1) end
  for _, id in pairs(ID) do
    DestroyTable(id)
  end
end
Использование: Запустить скрипт без подключения к серверу. Чтобы посыпались события, установить соединение с сервером, и сразу закрыть одно из окон скрипта.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] При подключении под новым пользователем на графиках остаются сделки и заявки от предыдущего пользователя
 
Если залогиниться в QUIK под другим пользователем (не закрывая программу), то на открытых графиках остаются треугольники от сделок и линии заявок от предыдущего пользователя.
Надо делать так, как надо. А как не надо - делать не надо.
Доступные скрипты, Значки для скриптов с ошибками
 
Сделать другие значки для скриптов:
1) остановившихся в результате ошибки;
2) в которых возникла ошибка, но скрипт продолжил работу (ошибка в колбеке)
Надо делать так, как надо. А как не надо - делать не надо.
Lua: изменить название колонки
 
Сделать функцию для изменения названий колонок в QLua-таблицах.
Надо делать так, как надо. А как не надо - делать не надо.
Появляется лишняя строка в таблице
 
Демонстрационный скрипт:
Код
function OnStop()
  run = nil
  SetCell(id, 1, 1, string.format('Size: %u', GetTableSize(id)))  -- Почему-то попадаем в строку 2
end

local alltrade
function OnAllTrade()
  if not run then return end
  alltrade = true
  for i = 1, 30 do
    DeleteRow(id, 1)
    InsertRow(id, 30)
  end
end

function main()
  id = AllocTable()
  AddColumn(id, 1, 'Size', true, QTABLE_INT_TYPE, 15)
  CreateWindow(id)
  SetWindowPos(id, 0, 0, 100, 520)
  for i = 1, 30 do
    InsertRow(id, -1)
  end

  run = true
  while run do
    if alltrade then
      alltrade = nil
      SetCell(id, 30, 1, string.format('%u', GetTableSize(id)))
    else sleep(1) end
  end
end

Через некоторое время работы появляется 31 строка. Первая строка становится недоступна для редактирования.

Видео
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Не рассчитывается максимальное возможное количество лотов в заявке
 
Для BRK0 на момент написания этого поста не рассчитывалось количество при цене ниже 23,01
Возможно это связано с расширением планок.
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1 2 3 След.
Наверх