Виталий (Автор тем)

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

Страницы: 1
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
1. Вопрос к знатокам: при работе со стеком, перед началом чтения через lua_next(L, -2), нам необходимо делать lua_pushnil(L). Зачем? Ведь это по сути означает "положить сверху NULL". Для чего мы это делаем?
2. Далее, почему в некоторых случаях мы читаем данные, как lua_tostring(L, -1). А в некоторых lua_tostring(L, 1). Если я правильно понимаю - это не одно и то же. В стеке из двух элементов индекс 1 - это низ стека, а -1 - верх стека!
3. Потом, для чего мы делаем lua_pop(L, 1); при использовании lua_next(L, -2), когда читаем стек? Ведь это удалит только один верхний элемент и все. Т.е., когда я читаю из стека некую таблицу - я должен посмотреть ключ (поле) по lua_next(L, -2) и, если он есть, то прочесть данные через lua_tostring(L, -1). Но потом я удаляю всего 1 элемент сверху. Не понимаю, что за дичь.
4. Есть у кого-то понимание / объяснение / картинка как выглядит стек qLua, когда в нем лежат смешанные данные? Т.е. как туда кладется таблица, строки и т.д.? Потому что по логике чтения я могу предположить, что туда кладется сначала ключ, а сверху значение. Это следует из логики чтения: -2 ключ, -1 значение (что тоже какая-то хрень, но это еще как-то понять можно набухавшись). Но что если у меня таблица в таблице или плоские данные, типа строка / число? Документация не то чтобы объясняет это все.

Можно конечно забить и принять это как факт, а для себя сделать класс-обертку и забыть навсегда эти ужасы. Но стало уж очень принципиально понять, как это работает и что вообще происходит.
Получить всю таблицу целиком, Получить всю таблицу целиком без цикла
 
Всем привет. Ест вариант получить всю таблицу целиком, не перебирая ее в цикле? В частности all_trades. Т.е. не получать кол-во записей, потом крутить в цикле и забирать по одной записи, а чтоб стразу ВСЕ записи одним методом. Есть такое или все по-старому - руками?
Индикаторы, Индикаторы и обезличенные сделки
 
Вопрос просто: как в индикаторе получить данные из таблицы обезличенных сделок? OnAllTrade, как я понимаю, в индикаторах недоступен. Переключить график на тики - НЕ подходит. Хочу именно программно в индикаторе получить доступ к данным.
Фризы и тормоза, Фризы терминала
 
Добрый день. Подскажите, что сделать чтобы интерфейс не фризился и не тормозил? Я как бы все понимаю, но вот такое окно (приложил скрин) фризится, если программу разворачивать с панели или просто водить по графику курсором с перекрестием. При этом у меня железо как бы не микроволновка: AMD Ryzen 7 5800X 3.80 GHz, ОЗУ 64Гб DDR4 3200, NVME накопитель, пустой на половину. Видео RTX 3060. Ну неужели этого мало?! Ну елки-палки!
Что и где подкрутить, чтобы это прекратилось?!
Утечка памяти, Происходит утечка памяти
 
Вопрос к знающим и к поддержке: почему происходит утечка памяти? Версия Quik 8.10.1.1

Ниже привожу коды скриптов. С первым память утекает просто моментально. Со вторым меньше и не так резво, но утечка все равно есть.
Код
is_run = true

function main()
  while is_run do
    local dt = os.date("!*t", os.time())
    sleep(500)
  end
end

function OnStop()
  is_run=false
end

Второй скрипт, утечка меньше, но имеется (нужно запустить и подождать минут 5, запомнив изначальное значение выделенной памяти)
Код
is_run = true

function main()
  while is_run do
    local curHour = tonumber(os.date("%H", os.time()))
    local curMin = tonumber(os.date("%M", os.time())) -- %S - сек
    local curDay = tonumber(os.date("%w", os.time())) -- диапазон, 0-6, соответствует Sunday-Saturday
    local year = tonumber(os.date("%Y", os.time()))
    local month = tonumber(os.date("%m", os.time()))
    local day = tonumber(os.date("%d", os.time()))
    sleep(500)
  end
end

function OnStop()
  is_run=false
end

Сразу поясню: эти два скрипта в таком виде НЕ несут смысловой нагрузки. Они являются лишь частью рабочего скрипта. Но именно этот код вызывает утечку. Посмотреть это можно открыв окно "Доступные скрипты" и наблюдать за колонкой "Память, KB". Для первого скрипта она будет расти, как бешеная сразу после запуска. Для второго не так сильно и куда медленнее, но расти будет.

Собственно, вопрос: че происходит?! Т.е. даже если нет сборщика мусора - это ведь не повод жрать память бесконтрольно! К слову сказать, обнуление переменных с помощью "х = nil" - не помогает! Использование глобальных переменных вместо local так же не помjгает! Отсюда вопрос: че за дичь?!
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Нашел всего две темы про выгрузки DLL в скрипте и те какие-то странные, неполные что ли.
Суть проблемы: квик версии 8.10.1.1. После остановки скрипта, в котором подключена DLL (на С++!) - библиотека НЕ освобождается!
Код по высвобождению видел:
Код
  package.loaded[m] = nil
  _G[m] = nil
Не помогает! Как кто-то верно заметил - сама библиотека НЕ освобождается! Причем это действительно и для C++, поэтому я вверху указал на чем либа написана.

Как выявил:
1. Имеется либа на С++ с методом
Код
    string line;
    string outLine;
    const char* S;

    ifstream in("read_test.txt");

    if (in.is_open())
    {
        while (getline(in, line))
        {
            outLine += line;
        }
    }

    in.close();
    lua_pushstring(L, outLine.c_str());

    return(1);
Файл 100% есть, ошибок - нет! Если в LUA вызвать этот метод - он выполняется. Дальше я останавливаю скрипт и пытаюсь перекомпилить либу и получаю отказ в доступе. Пока не перезапущу квик - не компилит.

2. Имеется бородатый lua_quik_resources.dll и скрипт автологина, который давно всем известен (полагаю). Если запускаем квик с запущенным скриптом автологина и остановим его, а потом попытаемся запустить не закрывая квик, то получим:
сначала
Код
Critical error ACCESS_VIOLATION in script 
А если после этого еще раз попытаться, то вообще намертво виснет квик и не оживает, пока аварийно не завершишь.

Имеется баг, который нужно фиксить!
ООП в LUA и профит от него, ООП в LUA и профит от него
 
Добрый день. Кто может разъяснить (может даже с обоснованием) зачем ООП в LUA? Т.е. какой от него профит и действительно ли он так нужен? Я видел кучу примеров. Сам я знаком и очень хорошо с традиционным ООП на языках, изначально заточенных под это. Примеры на LUA видел разные и честно скажу не сразу одуплил. Отсюда  вопрос: есть ли вообще смысл это понять и внедрять  каждом проекте, что это реально дает: экономия памяти, скорость, еще что-то?
Тейк+стоп, Непонятное поведение
 
Добрый день знающие люди и разработчики квика. Ситуация такая: запустил робота на VDS. Вчера, 17.03.2020 в 10.01.06 была зарегистрирована заявка на покупку, исполнена. Следом робот ставит стоп+тейк, в 10.01.11. И эта заявка испольняется с пометкой "Не прошла проверку достаточности средств". Результат: открыта позиция без защиты тейком и стопом, как ожидаю. Позу закрыл, т.к. пошла не в мою сторону. В течении дня робот открывает позицию, ставит тейк+стоп и в этот раз все ок и заявка висит до закрытия сессии. Дата заявки ДО 27.03.2020. Сегодня утром, 18.03.2020 ситуация повторилась. Мой вчерашний тейк+стоп, который был выставлен в течении дня опять исполнен с пометкой "Не прошла проверку достаточности средств", при этом позиция оставалась открытой, робот видя это и НЕ видя защиты для позиции пытается в 10.00.30 выставить новый тейк+стоп взамен старому, но опять "Не прошла проверку достаточности средств". Позицию опять закрывал руками, благо в мою сторону прошла и вчерашние убытки перекрыл.

Вопрос: что такое "Не прошла проверку достаточности средств" и почему наблюдается исключительно в утренние часы, причем даже на уже ранее выставленных заявках?! В течении дня эта борода НЕ повторяется, все хорошо ставится и висит.
Компиляция в luac, Не работает
 
Подскажите, чем компилить под текущую версию квика 7.25.13. Я перепробовал уже ВСЕ компиляторы. Есть у меня индикатор, я ложу его в папку луа индикаторс. Чистый луа скрипт квик наглухо не видит. Я пробую ложить скачанный в инете luac - квик его видит. Я компилю свой в luac - не видит. Я посмотрел версию компилятора файла из инета - LuaQ, что соответствует 5.1, как я понимаю. Я скачал 5.1.4 (ну нет других) - компилю, не пашел. 5.0, 5.2, 5.3 - ничерта не работает! В чем проблема, почему?! Винда у меня х64, квик как я понимаю всю жизнь х32 был. Я перепробовал ВСЕ архитектуры компиляторов - 32 и 64. Результат одинаков. Дело не в индикаторе моем даже. Квик просто не видит файлы мои.

Даже когда я просто пишу message(111) и компилирую - он банально не стартует и ошибок нет! Чем компилить?
Тип купона и Дата оферты, Тип купона и Дата оферты
 
Добрый день. Хотелось бы увидеть (и как можно поскорее, если возможно  :wink: ) следующие поля в таблице параметров для облигаций:

1. Тип купона: плавающий, переменный, постоянный
2. Дата оферты. Иначе выходит странно: поле оферта есть, а даты этой оферты - нет

Лазить ради этих данных по всяким русбондсам как-то глупо. Спасибо!
Экспорт данных в приложение на C#, Экспорт исторических данных через коннектор QUIK2WLD.DLL
 
Доброго дня всем. Кто подскажет, как организовать экспорт данных через коннектор QUIK2WLD.DLL в свое приложение на C#? Где примеры, описания посмотреть? И еще вопрос в догонку, кроме как по DDE ничего быстрее, современнее не появилось в наши дни? Платные коннекторы и прочую тьму не предлагать :)

Спасибо.
Страницы: 1
Наверх