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

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

Страницы: Пред. 1 2 3 След.
getQuoteLevel2 Получение доходности облигаций
 
Пожалуйста добавьте возможность получения доходности облигаций в функцию getQuoteLevel2, в стаканах в самой программе она есть, но по видимому ее забыли добавить в getQuoteLevel2.
Дублируются пользовательские сообщения из скрипта lua
 
Порядок прихода сделок по возрастанию номера не гарантирован.
SearchItems не успевает обновить данные по заявкам при вызове в OnTrade
 
OnTrade как правило приходит раньше OnOrder.

Сама по себе сделка содержит номер транзакции, номер заявки и цену исполнения.

После получения всех сделок, информация о состоянии заявки, нам больше не нужна.
Помогите с lsqlite3
 
Установить Visual C++ Redistributable Runtimes
10.2.1.12 Таблица "Состояние счета" - некорректное отображение стоп-заявок
 
Проверил.
  1. Тип стоп-заявки не важен.
  2. С облигациями все тоже самое.
  3. Всегда происходит изменение значения в строке с "AGRO" вместо действительной бумаги.
  4. Таблица начинает отображать корректные значения если переключить режим (Тx/T2).
  5. Если выбрать режим T2 и выставить заявку, проблема сохраняется (не зависит от выбранного режима).
Настройки выставил как на рисунке, никаких изменений не заметил.
10.2.1.12 Таблица "Состояние счета" - некорректное отображение стоп-заявок
 
Брокер ВТБ, записывать видео не хочу.

Все еще интереснее, если снять эту заявку, то в таблице не обновляется значение, а по другой бумаге значение устанавливается в "-1"
Вот скриншот, активных заявок нет. Была снята стоп-заявка POLY, в результате имеем AGRO "-1"

10.2.1.12 Таблица "Состояние счета" - некорректное отображение стоп-заявок
 
После выставления стоп-заявки (тейк-профит) признак ее наличия (колонка стоп-заявки) в таблице "состояние счета" отображается для совсем другой бумаги, для бумаги для которой в реальности выставлен стоп - не отображается.
После перезаказа данных локальных справочников и перезапуска терминала отображение корректное.
Добавление флагов в скрипт
 
Цитата
Beginner написал:
Цитата
nikolz написал:
у вас flag всегда ноль.
а как правильно нужно?  
flag=0 --ИСХОДНОЕ ЗНАЧЕНИЕ ФЛАГА

Сейчас переменной присваивается значение 0 на каждой итерации цикла while. Очевидно, что инициализацию переменной нужно вынести за его пределы.
Дублируются пользовательские сообщения из скрипта lua
 
Функции обратного вызова вызываются по нескольку раз и это обычное поведение. Вызываются они не только после изменения свойств входящего параметра доступных внутри луа, но и свойств которые остаются "за кадром".
Последовательность обработки функций обратного вызова
 
Не нужно вставлять задержки в main, организуйте очередь задач и обрабатывайте их последовательно, возвращаясь к незавершенным (требующим ожидания) задачам уже после.
Последовательность обработки функций обратного вызова
 
Согласен, коллбеки нужно обслуживать максимально быстро, т.к. во время обслуживания копится очередь из других коллбеков.

В идеале нужно записывать данные в таблицу с индексом и сразу возвращать управление, всю обработку производить уже в main.
Не могу заставить работать функцию Subscribe_Level_II_Quotes()
 
Цитата
Alexander написал:
Что за ерунда такая?
Все так как и должно быть. Просто вы не учитываете, что процедура Subscribe_Level_II_Quotes выполняется асинхронно и требует значительного времени на выполнение.
Получить данные из колонки "Доступно" из таблицы "Позиции по инструментам"
 
currentbal "Текущий остаток" в getDepoEx
Luacom, Luacom
 
https://wdho.ru/f4704dc
Выгрузка библиотек
 
Цитата
Alexander написал:
Цитата
Станислав написал:
Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.
Как это сделать? Можно поподробней.
Напишите макрос для post-build события сборки, который будет переименовывать файл. Готового решения у меня нет.
Выгрузка библиотек
 
Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.
Как узнать доступность облигаций для неквалифицированных инвесторов, неквалифицированный инвестор офз
 
Еще можно по параметру "QUALIFIED" в таблице текущих торгов.
Как узнать доступность облигаций для неквалифицированных инвесторов, неквалифицированный инвестор офз
 
По коду класса?
Выгрузка библиотек
 
Цитата
Kalmar написал:
Цитата
paluke написал:
Вызвал сборщик мусора.
ЗЫ: а его можно явно вызвать? Он же вроде сам приходит когда считает нужным?
collectgarbage()
Запаздывание свечей. Что не так.?
 
Предположу, что процессор Ryzen, а компьютер вышел из гибернации.
Функция getCandlesByIndex() и закрытие свечки
 
Если использовать источником данных DataSource, то использовать SetUpdateCallback для получения информации о том, что появилась новая свеча можно.

При появлении новой свечи в OnDataSourceUpdate изменится index и время свечи, пример:


-- Функция вызывается при изменении свечки в таблице data_source
-- OnDataSourceUpdate(TABLE data_source, STRING class_code, STRING sec_code, NUMBER interval, STRING param, NUMBER index)
function OnDataSourceUpdate(ds, class_code, sec_code, interval, param, index)
...
local datetime = ds:T(index)

end

...

local ds, error = CreateDataSource(class_code, sec_code, interval, param)
if ds ~= nil then
ds:SetUpdateCallback(function (...) OnDataSourceUpdate(ds, class_code, sec_code, interval, param, ...) end)
end
Снятие заявки, server check failed
 
OnTransReply не всегда содержит поле с номером заявки order_num (параметр указан со звездочкой в руководстве). Номер заявки обычно поступает в одном из последних вызовов OnTransReply. Лучше всего номер заявки получать из таблицы заявок по trans_id транзакции.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
PineScript указал просто как пример. Рано или поздно он начнет выполняться на сторонних серверах как уже произошло с графиком.
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Цитата
nikolz написал:
Цитата
Станислав написал:
А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
Не видел торговых систем на их основе
Подключать к КВИКУ не планирую.
Вполне устраивает Lua, MQL5 и C.
PineScript, TradingView, терминал Тинькофф.  

Да я и не прошу его подключать к квик.
Сейчас молодежь со школы учат программировать на python, наверное, это был бы самый востребованный вариант в будущем. (сам не программирую на нем)
Вам такое не снилось!!!, LUA5.3 LUAJIT MQL5
 
Производительность не бывает лишней. Как вариант можно тестировать стратегию на истории прямо внутри квик ( т.к. появляется возможность запустить задачу в отдельном потоке)
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
А интерпретатор JavaScript в Node.js? По идее должна быть хорошая производительность.
can_buy из подтаблицы "Купить/Продать" таблицы "Клиентский портфель", Как мне получить can_buy при для фондового рынка?
 
Попробуйте использовать CalcBuySell
bid_count возвращает 0, при этом в стакане есть заявки.
 
Subscribe_Level_II_Quotes заказывает с сервера поток котировок (далеко не быстрая процедура)
Естественно getQuoteLevel2 вернет значения только для уже заказанных ранее стаканов (или открытых в quik)
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Впечатляет! Т.е улучшение производительности в 20 раз?
В таблице не хватает теста с Lua 5.4.1
Вызов функций С из DLL в скрипте Lua QUIK, информация к размышлению
 
Очень интересно, поздравляю с успехом коллега!

Не понимаю, где была инициализирована переменная  nk1?PS: К сожалению, не являюсь программистом на C/C++.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Выше написано все верно. От себя могу добавить что для обмена еще можно использовать сокеты (socket).
Мало кто об этом знает.
 
А что если каждые 100 элементов вызывать сборку мусора?
collectgarbage()
После вызова ds:Close() не работает callback при перезаказе данных
 
Цитата
NiKO написал:
Цитата
NiKO написал:
Не помогло.
Извиняюсь, добавление ds:SetEmptyCallback() помогло решить проблему.
Какая версия терминала?
КРАШ -ТЕСТ терминала
 
CalcBuySell сломали в версии терминала 10. Производительность снизилась на порядок в сравнении с версией 9.
После вызова ds:Close() не работает callback при перезаказе данных
 
Как решить эту проблему? Терминал 10.0.1.18
Отписка от колбека SetUpdateCallback и сразу же подписка
 
Цитата
Anton Belonogov написал:
Quikos, добрый день.

Причина данной проблемы установлена и будет устранена в одной из ближайших версий библиотеки qlua. В качестве временного решения рекомендуем перед вызовом ds:Close() для закрытия таблицы устанавливать пустую функцию обратного вызова с помощью ds:SetEmptyCallback().

Столкнулся с данной проблемой в терминале версии 10.0.1.18, ds:SetEmptyCallback() перед ds:Close() не решает проблему.
Есть еще идеи как это обойти на данный момент?
Отладка QUIK 9.3
 
Ошибка в getPortfolioInfo и getPortfolioInfoEx воспроизводится и на чистом луа без внешних библиотек и при единственном запущенном скрипте.

Дополнительные скрипты запущенные параллельно ВЛИЯЮТ на частоту появления ошибки, так и на возвращаемое значение этой функции.

Всем, кто использует getPortfolioInfo в своих программах не советую обновляться до 9 версии.
Отладка QUIK 9.3
 
Странно, но не смог воспроизвести проблему на другой машине. Возможно ошибка связана с подключаемыми библиотеками.
Отладка QUIK 9.3
 
В 9 версии сломали функцию getPortfolioInfoEx


Код
function main()
    local pf = getPortfolioInfoEx("SPBFUT000000","SPBFUT000nw",0) -- некорректный код счета (обязательно)
    PrintDbgStr(type(pf))
    PrintDbgStr(tostring(pf))
end
Рабочий квик ВТБ


В версии 9.2.3.15 и LUA 5.4 данный код вызывает ошибку ACCESS VIOLATION at address 00007FF9F3D71FB4
В версии 9.2.3.15 и LUA 5.3 падение терминала

Демо квик


В версии 9.3.1.11 и LUA 5.4

[6500] string
[6500] а‹fb     <- эти символы всегда разные


В версии 9.3.1.11 и LUA 5.3  ACCESS VIOLATION at address 00007FF9F057CC05
ищу программиста создать программу на платной основе, выгружать данные OHLC и индикаторы в файлик
 
Цитата
индикаторов по всем доступным инструментам QUIK по всем доступным ТФ
Квик и при 20 графиках еле работает, если в него добавить все возможные инструменты со всеми возможными таймфреймами и на эти графики наложить 3 индикатора, то он будет запускаться дольше, чем длится основная сессия.

Если рассчитывать индикаторы самому, то это конечно улучшит ситуацию, однако, подписка на сотню тысяч источников наверняка его прикончит.
Получение статуса выполненных/снятых заявок
 
Есть еще 3 вариант, следить за значением в OnParam() / getParamEx(). Поле "LAST" Цена последней сделки. Я бы именно так и делал, если не требуется анализ свечей.
Получение статуса выполненных/снятых заявок
 
Да, вся информация доступна до конца дня. Таблицы брать используя функцию SearchItems.
Код
TABLE SearchItems(STRING table_name, NUMBER start_index, NUMBER end_index, 
FUNCTION fn [, STRING params])
Названия таблиц (table_name): "orders", "stop_orders", "trades"
Получение статуса выполненных/снятых заявок
 
Номер заявки внутри дня уникален. Искать нужно по следующей цепочке:

Уникальный номер транзакции (создаем сами) -> ищем заявку (по номеру транзакции) -> ищем сделки (по найденному номеру заявки)

По найденным сделкам рассчитываем среднюю.
таблица текущие торги, пропали первый столбец без имени и часть следующего столбца
 
Редактировать -> Поставить галку "транспонировать", нажать да.  Затем в обратном порядке. Ширина столбцов после такой процедуры будет сброшена.
Некорректные данные в таблице текущих параметров
 
Не редко, после включения терминала я вижу некорректные данные в таблице текущих параметров, эти данные не обновляются автоматически.
На приведенном скриншоте  видно, что статус сессии для инструментов отображается как "открыта", хотя инструменты не торгуются в дополнительную сессию.

Единственной способ получить актуальные данные это перезаказать их через меню "система->заказа данных->перезаказать данные", после этой процедуры они отображаются корректно. (скриншот 2).
Как я понимаю, это косвенно подтверждает, что брокер транслирует актуальные данные.  
как сделать паузу?
 
Выбран неверный подход.
Вам нужно организовать очередь (массив) и обработчик (в Main).
После события запись добавляется в массив с указанием времени добавления, в main периодически (с заданным интервалом) проверяется, извлекается и обрабатывается.
При таком подходе скрипт никогда не будет "спать" и сможет параллельно обрабатывать события от разных колл-беков.
or и цикл while
 
Такой подход к организации ожидания события не дает права на ошибку и при любом некорректном входном параметре или ошибки выполнения getParamEx навсегда "повесит" скрипт
Ядра процессора
 
Цитата
Космонавт написал:
Станислав, вопрос не про скорость процессора, а про количество ядер. Если при 4 ядрах загрузка ниже 50%, какой смысл держать 4 ядра, может можно понизить до 3?
Зависит от того как реализована многопоточность в квике. Но все же повышение нагрузки с 30 до 50% на ядро, говорит о том, что некие задачи теперь работают последовательно, а раньше разбрасывались параллельно по ядрам.
Ядра процессора
 
Более быстрый процессор решит любую математическую задачу быстрее чем его медленный собрат.
Однако, для конкретной задачи это может быть очень не существенно, что там за математика предшествует коллбекам неизвестно, поэтому кроме как тестированием это не проверить.
Подключение библиотеки Trans2QUIK.dll
 
В скриптах на Lua эта библиотека вообще не нужна, она используется для отправки транзакций внешними приложениями.
Страницы: Пред. 1 2 3 След.
Наверх