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

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

Страницы: 1 2 3 След.
До каких пор живёт таблица, передаваемая функции?
 
Цитата
nikolz написал:
что не так?
не хватает только теста под реальной нагрузкой для учёта эффекта синхронизаций
До каких пор живёт таблица, передаваемая функции?
 
nikolz, ну вот да, поэтому у меня и вопрос, что больше тормозит главный поток квика -- вызов qlua функций из колбэков или из main с синхронизацией. Если число таких вызовов одинаково (что бывает, если main обрабатывает данные быстрее, чем они поступают), должно получиться, что тормозить больше будут вызовы из main, потому что число синхронизаций вырастет. Если же main не успевает за колбэками, и можно не все данные колбэков обрабатывать, то вызов qlua в main может быть быстрее, чем в колбэках, просто потому, что вызовов будет меньше, но накладные расходы на синхронизацию могут всё равно свести преимущество на нет. Поэтому и вопрос был, есть ли у Вас тест на это.
До каких пор живёт таблица, передаваемая функции?
 
Цитата
nikolz написал:
getQuoteLevel2 лучше вызывать в main, чтобы не тормозить основной поток.
У Вас есть какой-нибудь скрипт, подтверждающий это?

Я когда дампил квик через procdump, постоянно видел, что вызовы qlua (типа SetEmptyCallback) из main стояли на входе в критическую секцию, а вот вызовы из главного потока - никогда.
До каких пор живёт таблица, передаваемая функции?
 
Объекты живут, пока на них есть ссылки. Покуда слот в очереди указывает на эту таблицу, она жива.
Покупки через IPO в таблице сделок отсутствуют
 
Andrey Golik, почему "ожидаемо"? Если я подаю заявку через веб-терминал брокера или через мобильное приложение брокера, заявки и сделки видны в квике. Просто у сделок комментарий появляется.
Покупки через IPO в таблице сделок отсутствуют
 
Andrey Golik, когда проходило IPO Европлана, ЮГК и т.д., брокер (БКС) предлагает в нём участвовать. Для этого надо подать заявку через форму на сайте или по телефону. В день торгов до начала торгов происходит зачисление акций на счёт, это видно в квике, но не как сделка, просто изменение позиции по акциям. В брокерском отчёте появляется информация о сделке T+0, есть номер сделки с той же сквозной нумерацией, что и сделки по акциям (класс TQBR). Также в брокерском отчёте есть "Возмещение за перевод ЦБ "адресные заявки" (Рубль)", то есть сделка была адресной. Я не знаю, как более понятно объяснить, что такое покупка акций через IPO.
Альтернатива CanSell/CanBuy
 
Cyber, вип сервер предназначен там в лучшем случае для получения более глубокого стакана (что даже может оказаться медленнее, если стаканов открыто много и ядро проца слабое), меньшая задержка до сервера (если повезёт) и потенциально более быстрое выставление заявки (не замечал в итоге). Даже свечки по индикативным курсам там менее полные, чем на "новом соединении". Я в итоге вип сервер использую только как запасной, если вдруг проблемы с "новым соединением". Неужели и OnDepoLimit тормозит именно на вип сервере, но не на остальных серверах БКС? ТП изредка там что-то исправляет, попробуйте написать.
Альтернатива CanSell/CanBuy
 
У БКС всегда так было. Но если всё-таки выставить тестовую заявку на 1 лот при отсутствующей позиции, то она не пройдёт. Я раньше на сайте БКС две пдфки смотрел, по которым они разрешали шортить (одну по америке и одну по РФ). Они нечасто обновлялись, по идее можно распарсить один раз и использовать.
Ставка переноса (фандинг), Как можно получить доступ к фандингу в Квике?
 
getParamEx SWAP_RATE и PREV_SWAP_RATE
Утечка памяти в обработчике SetTableNotificationCallback, Функция обратного вызова обработчика событий пользовательской таблицы не освобождает память между вызовами
 
Роман, если Вы вручную не зовёте сборщик мусора, он в своей манере вызывается. Может быть, ещё не пришло время по его настройкам. Попробуйте вручную вызвать. Если рост останется, тогда надо будет кумекать.
Покупки через IPO в таблице сделок отсутствуют
 
ТП БКС говорит, что QUIK не предоставляет такую возможность, как показ сделок IPO в таблице сделок. Так ли это? Есть ли в планах добавлять такую функциональность?
Графики и стаканы через системные файлы QUIK
 
info.wnd - бинарный файл, без знания формата Вы ничего там не поизменяете.

Если Вы откроете всё, что Вы описали, квик будет тормозить, так как это всё будет в одном потоке вычисляться и рисоваться. Плюс есть в некоторых версиях квика ограничения на количество то ли стаканов, то ли графиков. Но если у Вас получится открыть, эти вкладки будут открываться при открытии квика, и Вы сможете даже сохранить эти вкладки в файл. Фьючи меняются обычно раз в квартал, иногда раз в месяц. Тут уж или придётся вручную переоткрывать, или включить в настройках автозамену инструментов.
Сортировка в таблице quik
 
Цитата
Lelikov написал:
Спасибо. Данное описание из справочника QLUA. Я хотел бы разобраться именно с последним входящим параметром NUMBER value. Какие должны быть данные параметры для различных ситуаций. Что неправильно в предыдущем коде для адекватной правильной сортировки?
Вы же его везде в 0 поставили. Хотите нули сортировать?) В справке сказано "Параметр text задает строковое представление значение параметра value.", что очевидно значит, что эти два параметра должны соответствовать друг другу (например, быть равными после приведения типов). А у Вас text меняется, а value всегда 0.
Проверка на nil
 
Цитата
Евгений написал:
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта. Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Мысль посетила, совсем не уверен: вроде бы эта функция задействует библиотеку расчёта лимитов брокера, которая по идее обновляется даже если вы квик не обновляете, т.к. правила расчёта на бирже меняются. А она может в теории или сглючить, вдруг даже полезть в сеть за данными и не получить их (например двойной запрос воспринят как ддос). По какой-то же причине юзеры жалуются на тормоза при выставлении заявок на срочном рынке...
Синхронизация объектов рисования в окнах.
 
Я для таких целей всё в одном окне рисую, потом просто дублирую окно по Ctrl+N.
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
Виталий, "2. Вот зачем и почему? Т.е. я не понимаю почему в одном случае мы читаем  через 1, а в других через -1. От чего зависит? Ну т.е. есть какое-то  правило по которым таблицы сверху всегда или что, почему таблицы  обчитываются через отрицательные индексы сверху стека?"
Вы такой вопрос задаёте и тогда, когда в питоне видите отрицательные индексы в списках? Это известная идиома в интепретируемых языках и стек-машинах (виртуальных машинах), чисто для удобства программиста, чтобы ему не высчитывать номер индекса с начала контейнера (списка, строки, стека), если он знает номер с конца. В луа от этого проигрыш в скорости небольшой, но есть.
способ звукового сигнала в луа
 
Цитата
nikolz написал:
Если Вам хочется запустить звук и не ждать, когда закончится, то уберите в последней команде "wait"
Спасибо, выглядит как то, что я запрашивал.
способ звукового сигнала в луа
 
А знаете ли Вы способ, который не загружает с диска этот файл всякий раз при проигрывании? А делает это один раз в начале работы скрипта
Надо подумать о запоминании координат окон на экране
 
Я про хардварную проблему, при которой кнопка мыши срабатывает иногда два раза (и более) на одно нажатие. Количество кликов, которые можно услышать, при этом всё равно 1.
Надо подумать о запоминании координат окон на экране
 
Просто двойные клики на левой кнопке мыши, распространённая проблема у геймеров.
Запись открытого интереса в файл.
 
В QUIK в Lua инты 64 бита. Данные по тикам в документации к CreateDataSource:
Цитата
Время свечи возвращается с точностью до миллисекунд в виде таблицы с полями:
{year, month, day, week_day, hour, min, sec, ms, count}
Где:
• count – количество тиковых интервалов в секунду. Может принимать значения от «1»
до «10000» включительно.
Используя Lua функцию os.time из таблицы, полученной от T(номер свечи), можно получить секунды от эпохи (какой именно - поставьте эксперимент и напишите результат). А из полей ms и count - количество миллисекунд и десятых миллисекунд. Для перевода из виндовой эпохи в никсовую гуглите "SECS_BETWEEN_1601_AND_1970_EPOCHS"
dll на C: удивительная ошибка...
 
Ну я же говорил, глючная тёмная тема)
Создайте отдельный багрепорт без привычного Вам спама сообщениями внутри темы, в духе "поставил новейшую версию, включил тёмную тему, сделал то-то и то-то, получил странные иконки", ТП рано или поздно обратит внимание на тему (чем меньше спама, тем быстрее), запросит архив (м.б. с дампом), если не воспроизведёт самостоятельно. До запроса архива ничего в этой установке квика делать не надо, чтобы не влияло на анализ архива.
dll на C: удивительная ошибка...
 
Для исключения dll попробуйте посмотреть через ProcessMonitor (захват должен стартовать до старта квика и продолжаться до проявления бага). QUIK в теории может грузить dll сам, например, при поиске индикаторов (при старте программы или при открытии окна добавления индикатора) или вообще все dll из папки запуска на старте, или ещё из папки, соседней к квику (quik\. .\lib\lua\5.*\).
Но если нигде близко к папке квика Ваших лишних файлов dll нет, то проблема не в загрузке левых dll.
dll на C: удивительная ошибка...
 
Цитата
Serge123 написал:
Эти иконки появляются, когда работает мой скрипт чисто на Луа, без загрузки посторонних модулей.
Учитывая Ваши ошибки с cpath и удивлением про именование модулей, я бы не был так уверен, что никаких dll не загружено. Техподдержка в явном виде мне отвечала, что именно такие проблемы могут быть именно от dll, как я и писал выше. Совет заменить тему на менее бажную уже от меня, не от техподдержки. Чисто посмотреть, проявится ли баг.
dll на C: удивительная ошибка...
 
Serge123,
Вы же за скорость радеете, почему тогда используете тёмную тему? Известно, что она тормозит. Глядишь, без неё и баги с иконками уйдут.

Я предполагаю, что проблема с иконками имеет ту же природу, что мой репорт про работу меню в английской версии. Однако у меня на русской версии и стандартной теме при многих загруженных dll никаких заметных проблем с иконками нет.
Расчет плавающей цены безубыточности на графике, Расчет плавающей цены безубыточности на графике
 
Пока не реализовано в приложении, можно пользоваться сторонним скриптом
attempt to index a nil value, При переборе циклом for выдвет ошибку attempt to index a nil value
 
Единственная строка, на которой интерпретатор может тут выдать такую ошибку, это та, что начинается с "if order_info.sec_code", и единственная причина может быть в том, что order_info было nil т.к. getItem("orders", f) вернул nil. А вернуть он nil мог потому, что в другом потоке таблица orders поменялась. Потокобезопасно таблицы можно обходить с помощью SearchItems.
Получение запросов через MOEX API, Вопросы получения запросов от Московской биржи средствами Lua и C-Lua под Lua
 
Кстати, техподдержка Мосбиржи иногда на такие вопросы, заданные через форму обратной связи на их сайте, отвечает.
Комиссии в системе
 
Цитата
Alexander написал:
После вечерней сессии сервер вернул уже другие комиссии. Поэтому почему только в течении сессии мне пока не понятно.
Конечно другие, ведь и комиссии за сделки тоже поменялись. Наверно, мосбиржа не хочет хранить или публично предоставлять историю комиссий.
Что за хрень версия 10...
 
Бесплатно в открытый доступ отдавать такое я не буду :)
Что за хрень версия 10...
 
Скорее всего формат котировок немного поменялся (их можно вручную перенести, формат хоть и секретный, но очевидный), иначе нет смысла его затирать. Конечно перед апдейтом надо было бэкап делать. 11 версия уже есть. Название файла локализации менялось от версии к версии, подчерк убирался. Долгая загрузка часто значит, что много ошибок пишется в окно сообщений (см. размер tmsg.dat), почему-то это долгая операция.
Пожелание по 1. OnQuote и 2. getQuoteLevel2
 
Я понятия не имею, в какой момент фильтрация происходит. Эта настройка может быть вообще только для стаканов (т.е. после получения getQuoteLevel2), никогда не использовал. Так что или разрабы ответят, или свои эксперименты. Я бы с двух счетов (и двух квиков, подключённых к одному и тому же серверу, с настройками, отличающимися только указанной опцией) запустил и смотрел.
Заголовок программы - добавить название брокера
 
Цитата
Andrey Golik написал:
СергейК, Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Рассматривали ли вы как компания вариант реализации отдельных запрашиваемых юзерами фич именно как публичных скриптов на Lua (пусть и с подключаемыми DLL), а не встраивания их в код?
Пожелание по 1. OnQuote и 2. getQuoteLevel2
 
Система-Настройки-Параметры инструментов-глубина стакана пробовали?
Где смотреть заблокированный размер ГО и как вызвать это окно?
 
Цитата
Юрий написал:
В том и дело, что надо посмотреть ГО только на фьючерсах ФОРТС.
У брокера Финам оно отображается в Тек.Чистых.
У брокера БКС квик иногда создает специальное окно с названием ГО , а иногда не создает. Как вызвать это окно или создать самому?

Юрий.
У БКС в папке с квиком прилагается файл go.lua, можете исправить как Вам угодно. Он же есть в списке скриптов, ЕМНИП. Окно показывается только если была активность на фортс, например, выставлялась заявка.
Замена инструмента, Автоматическая замена инструмента
 
Andrey Golik, если полнотекстовый поиск sec_code инструмента (например, BRG4) по info.wnd не даёт результатов, значит ли это, что инструмент был заменён корректно?
Комиссии в системе
 
Alexander, ответ nikolz исчерпывающий. Если недостаточно - дальнейшие консультации платные  :wink:  
Индикаторы. OnCalculate. Количество полных проходов по всем свечам
 
Илья, это Вам ещё везёт, что свечи номера не меняют от прохода к проходу, как тут
Так-то стандартная идиома получается приводить индикатор к дефолтному состоянию при I == 1, но индексировать ничего по номеру свечи нельзя, если несколько инструментов на одном графике (поэтому я использую время)
Заголовок программы - добавить название брокера
 
Можете попробовать в Lua скрипте с помощью w32 поставить сами заголовок через SetWindowText.
Комиссии в системе
 
Alexander, два момента:
  1. Как минимум в БКС например биржевой сбор иногда транслируется неправильно после сделки (на одну копейку меньше или больше), что подтверждалось Мосбиржей в переписке. Этому багу как минимум год.
  2. У мосбиржи есть апи для получения этих комиссий в течение сессии (но не после сессии!). Я к экселю прикрутил.
Отсутствует "Магнит" на панели инструментов
 
У меня Магнит наполовину закрыт баннером БКС по умолчанию (после установки дистрибутива от брокера). Тоже долго не мог найти Магнит из-за этого :)
Новая версия VCLua - библиотеки для GUI
 
Зарелизился сабж 0.9.2
Качать
Писать багрепорты здесь, примеры тут

Из нового, помимо новых контролов, их свойств, и обновления версии Lazarus:
  1. По моей просьбе появилась поддержка виндовой кодировки (надо написать VCL.setCPWin(true) после стандартной инициализации, которая показана в примерах по ссылке выше). Реализована она конвертацией в UTF8 и обратно для всех строк, идущих внутрь GUI.
  2. Форма нормально работает в main(), то есть не в главном потоке. Надо просто создавать форму в main() и потом в цикле делать VCL.Application():ProcessMessages(). Вроде раньше с этим были проблемы.
  3. Я так понял, что изменилось создание меню. Пример. Действия заворачиваются внутрь Action вместе с иконкой и горячей клавишей.
  4. Также обновляется GUI утилита для создания форм прямо на Lua (т.е. без установки Free Pascal) и сохранения формы в JSON. Сохраняется в UTF8, но если файл пересохранить в CP1251, загрузить в скрипте в квике и использовать пункт 1 списка, то русский язык должен быть на месте. Из минусов, утилита поддерживает не все доступные в VCLua контролы, и не все их свойства позволяет редактировать. В частности, пока нельзя задать иконки, картинки. Я утилиту запускаю через интерпретатор, перейдя в папку vt-form\vt-form\dist54\ и выполняю там команду путь-до-луа\qlua\bin\lua54.exe vt-form.lua
Автор сейчас активен на github и жаждет багрепортов.
Скрытый текст
Сохранение индикаторов в шаблонах графиков, Нет возможности сохранять подборки индикаторов и применять их к другим графикам.
 
Кстати, настройки индикаторов в каком-то смысле сохраняются. Я настроил 6 экземпляров Moving average на графике, сохранил как шаблон. Применил шаблон к новому графику, конечно же никаких Moving average не добавилось, но если начать вручную добавлять шесть штук Moving average, то они добавляются с моими настройками по очереди.
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
А как мне в Си перевести вывод функции GetSystemTimePreciseAsFileTime в часы, минуты, секунды и микросекунды?
https://learn.microsoft.com/en-us/windows/win32/api/timezoneapi/nf-timezoneapi-filetimetosystemtime до миллисекунд. Микросекунды -- подберите делитель после преобразования FILETIME в число. Я в плюсах для виндового времени делаю так (гуглите название константы из коммента), после чего форматирую время общеиспользуемой fmtlib:

Код
using clk = std::chrono::system_clock;
clk::time_point item_mem::tp() const {
  // SECS_BETWEEN_1601_AND_1970_EPOCHS * SECS_TO_100NS
  return clk::time_point(clk::duration(win_filetime_rep - 11644473600LL * 10000000));
}
Как вернуть закрытый график ?
 
Andrey Golik, из-за невозможности отмены закрытия окон (не только графиков!!) мне приходится помимо закрепления тех графиков, которые я не двигаю и не клонирую часто, все 10 вкладок регулярно сохранять. Конечно пользователям было бы удобнее иметь возможность отменить закрытие любого окна. Зарегистрируйте такое пожелание, пожалуйста.
Примеры dll на GCC 64 для работы со скриптом
 
Такая организация позволяет не возиться с package.path, package.cpath, не иметь лишних dll в корневой папке квика и потенциально юзать в разных установках квика скрипты из одной папки.
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
4. В аналогичном скрипте на Луа я накапливаю информацию в переменной-строке о сделках и стаканах и после достижения, скажем, 10 Мб дописываю её в файл и потом присваиваю этой переменной пустую строку. При этом каждый раз память для неё освобождается сборщиком мусора и затем выделяется и довыделяется много раз при её заполнении информацией. А выделение памяти не быстрый процесс. На си такой проблемы нет. Можно ли на Луа работу с этим буфером вывода сделать быстрее?
Накапливайте строки в таблице. Перед дампом делайте table.concat. Реализация table.concat в исходниках lua такова, что там одно выделение памяти на сумму длин строк в таблице.
Но в Lua я не парюсь и юзаю PrintDbgStr + DebugView++.

Цитата
Serge123 написал:
5. В своём аналогичном скрипте на Луа при выводе содержимого стакана в переменную я беру текущее время через os.sysdate, она даёт даже мкс, откуда у неё такая точность?
Используется GetSystemTimePreciseAsFileTime
Цитата
Serge123 написал:
1. Скрипт, который работает с этой длл, начинается так:

У меня такой код никогда не приводил к описанной ошибке, пока lua_share.dll была в папке со скриптом:
Код
package.cpath = getScriptPath() .. "/?.dll"
sh = require "lua_share"
Но в результате мне больше нравится положить все dll'ки в одну папку так:

Код
c:\QUIK_installs\
lib\   
lib\lua\   
lib\lua\5.3\      тут dll для 5.3
lib\lua\5.3\vcl\   и тут тоже
lib\lua\5.4\      а тут для 5.4
lib\lua\5.4\vcl\   и тут
QUIK_BCS\   
QUIK_BCS\info.exe   квик тут
QUIK_BCS\lua\      скрипты тут и в подпапках юзают правильную версию dll из lib/5.* без возни с package.cpath, и умеют require "name" для правильных версий share/5.*/name.lua
QUIK_BCS\lua\lua_share_examples_5.4\   
QUIK_BCS\lua\MA server\   
QUIK_BCS\lua\MA server\share\   
QUIK_BCS\lua\История позиций\   
QUIK_BCS\LuaIndicators\   
QUIK_megabroker\
QUIK_megabroker\info.exe   а тут другая установка квика, но я так не пробовал ещё, поэтому и другие скрипты не перенёс изнутри первой установки квика
...
share\   
share\lua\   
share\lua\5.3\      тут общедоступные lua модули для 5.3
share\lua\5.4\      тут общедоступные lua модули для 5.4

Сравнение языков программирования
 
Странно, не видел сообщений Constantin и nikolz, когда писал, после моего сообщения было сразу сообщение Cyber  :shock:



Круто. У меня на 40% аж быстрее, что внутри квика, что отдельно.
Обезличенные сделки. Подписка/отписка
 
Цитата
nikolz написал:
как решаете обмен данными между скриптами?
конкретно эти два не требуют обмена между собой. Для отрисовки результатов каждого из них написал индикатор, туда передаю из скриптов данные через lua_share.

Для более новой пары скрипт+индикатор уже всё пишу в одной dll на плюсах, там boost::lockfree::queue для сообщений индикатора в сервер (требующих синхронизации и долгой обработки), и std::atomic переменные для использования в индикаторе данных из сервера, типа atomic<MyData*>, чтобы знать, есть уже данные или нет, и atomic<std::size_t> size_of_shared_data , чтобы индикатор не лез в данные, которые сервер начал, но не закончил, писать, или atomic<double> price для цен других инструментов (берутся в сервере через update callback). В ситуации реконнекта приходится всё-таки юзать один mutex (в скрипте в OnConnected и в while (is_run), не индикаторе), вырубать все 28 экземпляров индикатора, перезаказывать данные, обновлять все указатели, и только потом разрешать индикаторам работать.
Сравнение языков программирования
 
Цитата
Cyber написал:
Радует, что 5,4 на 20% шустрее 5,3.
Подскажите, как Вы сравнивали?
Страницы: 1 2 3 След.
Наверх