Окончательное решение вопроса с getQuoteLevel2. Вопрос к разработчикам QLua, Нужно, наконец, что-то исправить?
Пользователь
Сообщений: Регистрация: 30.01.2015
20.06.2025 06:07:37
Цитата
Serge123 написал: Помнится, я уже спрашивал об уточнении док-ции по getQuoteLevel2... Надо, наконец уточнить: что возвращается в случае, если отсутствуют bid/offer? Это таблицы, поэтому логично возвращать nil. А в док-ции написано, что возвращается пустая строка. Если это так, то это бардак... Только что посмотрел описание этой функции в QLUA.chm (дата файла аж 2023 г.!) последней версии Quik. А между тем, ещё в 2016 г. запрос, якобы, начал рассматриваться:
Видимо, придётся самостоятельно проверять, что там возвращается: nil (NULL или 0 на Си) или ссылка на "". Но чтобы это проверить, нужно ждать конца вечерней сессии в 23:50. Он выглядит так (2 варианта):
В последних строках как раз надо выяснить, что именно возвращает getQuoteLevel2.
По идее, с этой целью можно также проверять строки bid_count, offer_count на символьный 0.
И ещё: моя программка на обработку
Код
static int forLua_OnAllTrade(lua_State * L)
тратит 6500 тактов ЦП, а на вызов
Код
static int forLua_OnQuote(lua_State * L)
{ .. .
lua_getglobal(L, "getQuoteLevel2" );
lua_insert(L, 1 ); // Используем код класса и тикер, которые уже сидят в стеке
lua_pcall(L, 2 , 1 , 0 );
тратит 202 000 тактов!! Нельзя ли как-то ускорить работу getQuoteLevel2?
Может быть, кто-то из программистов предложит ускорение? Я склоняюсь к тому, чтобы во время большой нагрузки на Quik не вызывать getQuoteLevel2, если с момента предыд. её вызова прошло мало времени.
Измерьте сколько затрачивает время каждый из операторов lua_getglobal(L, "getQuoteLevel2" ); lua_insert(L, 1 ); // Используем код класса и тикер, которые уже сидят в стеке lua_pcall(L, 2 , 1 , 0 ); а также пустая функция static int forLua_OnQuote(lua_State * L) Тогда можно сказать как ускорить и на сколько.
Замечания по реализации в QUIKе обработки заявок (и, наверное стоп-заявок).
Пользователь
Сообщений: Регистрация: 30.01.2015
06.06.2025 07:41:12
Возможно, причина в том, что запись в таблицу заявок производится после выхода из колбека. Поэтому, если обратится к таблице заявок в колбеке, то там будут старые данные. Т е при снятии заявки в таблице заявка будет еще активной, а в колбеке - пассивной.
Некорректно работает скрипт, обнуляется на срочном рынке
написал: Если проблема с отображением линий на графике сохраняется, просим прислать на нашу почту скриншоты, иллюстрирующие проблему
Да я уже плюнул на отображение линий на графике. меня больше интересует почему у меня данные по сделке то подтягиваются в таблицу скрипта в начале утренней сессии, то не подтягиваются. Причем нет никакой закономерности. Скрипт может неделю работать без показа данных, а может пару дней показывать данные о сделке. Ну, вроде, не может программный код то работать, то не работать...Или может?
Попробуйте открывать квик в одно и тоже время. Например, за 5 минут до начала утренних торгов.
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
Пользователь
Сообщений: Регистрация: 30.01.2015
23.05.2025 20:52:06
и на индекс положительный: остальное смотрите сами.
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
Пользователь
Сообщений: Регистрация: 30.01.2015
23.05.2025 20:49:10
Для вечных фьючерсов на акции действительно положительный:
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
Пользователь
Сообщений: Регистрация: 30.01.2015
23.05.2025 20:41:09
Пардон, ошибся. Я про фьючерсы на акции.
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
Пользователь
Сообщений: Регистрация: 30.01.2015
23.05.2025 20:39:00
Цитата
Цитата
Юрий написал: Фактически фандинг — это механизм встроенного арбитража, разница между спотом и фьючерсом. Если ставка финансирования положительная: Цена контракта выше спотовой цены актива - Лонгисты платят шортистам. Если ставка финансирования отрицательная: Цена контракта ниже спотовой цены актива - Шортисты платят лонгистам.
Слежу за значениями фандинга четырёх инструментов уже месяц - значения всегда положительные ! Отрицательное значение вообще НЕ случаются? Т.е. вечные фьючерсы противопоказаны для покупки в лонг ? Такое ощущение, что народ даже не догадывается про это.... Или я ошибаюсь...
Если я не ошибаюсь, то вечных фьючерсов всего два. с октября 2024 года на Московской бирже представлены вечные фьючерсы на акции Сбербанка (SBERF) и «Газпрома» (GAZPF) ------------------ Вы за какими четырьмя следите?
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
Пользователь
Сообщений: Регистрация: 30.01.2015
22.05.2025 12:48:07
Цитата
Юрий написал: В таблице текущих торгов фьючерсов указывается величина Ставки переноса (фандинг) см. файл Непонятно с каким знаком эта величина в момент переноса в 18:50. Где можно смотреть знак фандинга положительный или отрицательный?
Обычно плюс не пишется перед числом. Что не так?
QUIK на VPS
Пользователь
Сообщений: Регистрация: 30.01.2015
22.05.2025 07:31:20
Пока решил поставить робота на мини ПК: Потребление не более 10 Вт. Для автономной работы можно поставить аварийный источник питания Получится свой дата-центр.
Некорректно работает скрипт, обнуляется на срочном рынке
написал: Вернитесь на 8 и будет счастье.Я торгую на 8.7.1.3
, Знать бы как, сам бы на неё вернулся
Когда ставите новую версию с сайта брокера, то в папку backup пишется архив предыдущей версии (папка с именем даты например 20250312) Найдите дату когда заменяли 8 версию. Для эксперимента сначала сохраните текущий QUIK в zip. Потом при закрытом QUIK скопируйте содержимое папки из backup в папку QUIK и запустите QUIK. ------------------------------------ Иногда возникает потеря настроек или потеря истории.
QUIK на VPS
Пользователь
Сообщений: Регистрация: 30.01.2015
21.05.2025 16:59:53
Добрый день, Вопрос к разработчикам и знатокам. Хочу поставить торгового робота c возможностью ручной торговли на VPS. QUIK или что-то подобное вполне устроило бы. робота могу написать на любом языке, но предпочитаю С и Lua. ---------------------- Какое решение можете посоветовать. ------------------- Какие требования к железу. Если есть что-то в интернете просьба дать ссылку.
Некорректно работает скрипт, обнуляется на срочном рынке
Пользователь
Сообщений: Регистрация: 30.01.2015
21.05.2025 16:22:49
Вернитесь на 8 и будет счастье. Я торгую на 8.7.1.3 Пытался ставить и 10 и 11 и 12 но все они что-нибудь да косячат. всегда возвращался на 8.7. Работает как АК.
Странные случаи при торговле акциями на мосбирже
Пользователь
Сообщений: Регистрация: 30.01.2015
21.05.2025 12:04:06
1) 2) Да, маркет-мейкер может подать заявку раньше, чем контрагент по сделке. Это называется пассивной сделкой и предусмотрено договором между маркет-мейкером и биржей. За такие действия маркет-мейкер получает вознаграждение.
Деятельность маркет-мейкера регулируется законодательством, в частности законом №325-ФЗ «Об организованных торгах».
Amibroker работа с переменными, Перезапись значения переменной
Пользователь
Сообщений: Регистрация: 30.01.2015
10.05.2025 12:06:43
Выставление стоп-заявки на пробой, Стоп-заявки на пробой
Описанная вами ситуация показана на скриншоте (пример того как бы выглядела такая заявка).
У нас также есть инструкция по работе с условными (стоп-) заявками, доступная по .
Полагаю,что это не то. Человек хочет выставить шорт, когда цена ото текущей 8300 дойдет до 8400. Т е это заявка типа тейк-профит. Т е ему надо продать акции без наличия их у него в момент когда цена вырастет до 8400. -------------------------- А Вы предлагаете стоп-лимит.
onDepolimit, Формат данных, возвращаемых onDepoLimit
Пользователь
Сообщений: Регистрация: 30.01.2015
30.04.2025 19:26:02
Предположу следующее транзакция выполнена - это правда, так как заявка доставлена без ошибок в ней и принята биржей но заявка не выполнена и причина указана в ответе. Что не так?
trade_account_id для ИИС счета, как получить trade_account_id для ИИС счета?
написал: Редактирование настроек графика - Диаграмма - Внешний вид - Порядок отображения слоёв данных
Не помогло, разные выбирал слои вверх, или какой нужно?
в конце поставить вертикальные линии и метки
Проблема при вызове getParamEx внутри OnParam, getParamEx внутри OnParam не возвращает значения
Пользователь
Сообщений: Регистрация: 30.01.2015
23.04.2025 15:20:23
Полагаю следующее: Если onParam вызван по факту получения нового "TQBR", "SBER", "LAST", то это новое значение будет помещено в таблицу после выхода из onParam. ----------------------------- Поэтому getParamEx("TQBR", "SBER", "LAST") вернет это значение лишь после выхода из onParam. --------------------------- Надо читать новые параметры в main, а не в колбеке.
А API MOEX позволяет получать доныне о сделках в реал-тайме или только исторические данные ?
API MOEX позволяет получать доныне о сделках в реал-тайме но платно, или с задержкой 15 минут. Пример на луа см здесь:
Ошибка снятия заявки. [GW][3] "Сейчас эта сессия не идет."
Пользователь
Сообщений: Регистрация: 30.01.2015
12.04.2025 12:30:37
Цитата
Владислав написал: Добрый день! При попытке снять заявку возникла ошибка: Ошибка снятия заявки. [GW][3] "Сейчас эта сессия не идет." При этом ни OnOrder, ни OnTransReply небыли вызваны. Как роботу понять что произошла ошибка снятия конкретной заявки, если колбеки не вызываются?
простой вариант решения проблемы - проверка наличия активных заявок по таблице заявок. ------------------------- Я для этого формирую специально таблицу активных заявок. В этой таблице отмечаю состояние заявки. 1) активная 2) отправлена транзакция на снятие ------------------------ Пассивная заявка удаляется из таблицы.
Какой тип заявки при выборе в меню "Новая заявка F2"
Пользователь
Сообщений: Регистрация: 30.01.2015
10.04.2025 16:21:46
Цитата
edw написал: в заявке поле Цена редактируемое, т.е. я могу при покупке ниже тек.цены указать нужную мне цену, т.е. выставить лимитную заявку на покупку?
да
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
Т е в каком стеке Вы вызовите сборщик, тот стек он и будет чистить.
Динамическая память - это не стек. Или имелся ввиду поток? Ну мы же можем передавать объекты между потоками. Не может быть разделения по потокам для сборки мусора.
Цитата
Each Lua state has one or more threads, which correspond to independent, cooperative lines of execution. The type (despite its name) refers to a thread. (Indirectly, through the thread, it also refers to the Lua state associated to the thread.)
Возможно путаница в терминологии. Глобальным стеком я называю lua_State. ----------------------- VM Lua - это стековая машина. Когда мы создаем VM Lua, то для нее выделяется область State -------------------------- Т е для нее из кучи выделяется кусок, в котором все размещается. Если вызвать функцию библиотечную, то этой функции на СИ передается всего один параметр. Это указатель на State VM Lua. --------------------------- Все функции и все переменные как глобальные так и локальные размещаются в этом State. Т е этот State и есть та динамическая память, с которой работает сборщик мусора. --------------------------- когда создаем корутину, то для нее из области State VMLua выделяется кусок памяти, который будет State корутины. ----------------------- "coroutine.create (f)Создает новый сопроцесс, с телом f. fдолжен быть функцией. Возвращает этот новый сопроцесс, как объект с типом "thread". ----------------------
lua_State *lua_newthread (lua_State *L);
Создает новый поток, ложит его на стек и возвращает указатель на , который представляет этот новый поток.
Новый поток использует одно глобальное окружение с оригинальным потоком, но имеет независимый стек исполнения.
Не существует явной функции для закрытия или уничтожения потока. Потоки это субъект для сборки мусора, как и любой Lua объект
-----------------------------
Если посмотреть внутри основной программы и внутри main, то увидим, что в вызываемые в них функции передается различный указатель на State.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
Посмотрите на вызов функций в API C В качестве параметра в функцию передается указатель на стек. Когда Вы вызываете сборщик мусора в main, то сборщику будет передан указатель на локальный стек корутины. Когда вы вызываете сборщик мусора в колбеке, то сборщику передается указатель на глобальный стек основной VM Lua. ---------------- Т е в каком стеке Вы вызовите сборщик, тот стек он и будет чистить.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
Пользователь
Сообщений: Регистрация: 30.01.2015
04.04.2025 20:07:04
Сборщик мусора - это функция и она одна. Но запускать ее можно с различными стеками VMLua. ------------- Все функции выполняются в одном стеке. ------------------ Корутина main отличается тем, что для нее выделяется отдельный стенк из стека основной VM. ------------------ Если функцию например колбек вызвать, то ее переменные будут в глобальном стеке основной VMLua. -------------- Если Вы вызываете функцию в Main, то ее переменные будут в стеке корутины. ------------------------ сборщик мусора собирает мусор в в стеке основном VM. но при этом он не видит стек коррутины, так как это один объект в основном стеке. --------------- Но тогда кто освобождает пространство от переменных внутри main? Я полагаю что делается запуск сборщика для области стека корутины main. ---------------------
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
Пользователь
Сообщений: Регистрация: 30.01.2015
04.04.2025 06:52:56
, В качестве гипотезы, могу предположить следующее: Возможно это связано с тем, что Вы проверяете сборщик в main. Дело в том, что main - это корутина. В корутине свое адресное пространство для локальных переменных. Колбек это основная VM там свое. По логике должны действовать два различных сборщика мусора. -------------------- Если мое предположение верно, то Вы пытаетесь останавливать один, а проверять другой. --------------------- Но я не поверял эту гипотезу, так как меня пока не волнует как работает сборщик в скрипте.
не читается график, не читается график после дробления акций
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2025 17:31:17
Цитата
Ander написал: после дробления акций ( например, Полюс; Норникель) из-зи большой разницы цены график на 1Д превращается в полоску. Подскажите как убрать график до дробления акций, что бы его значения он не учитывались при построении графика? или есть какой то другой способ ?
В параметрах графика на вкладке Диаграмма есть фильтр по дате и по времени Установите их как Вам надо
QLUA, вопросы начинающих.
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2025 17:28:27
Цитата
Михаил Горбатский написал: Как использовать getParamEx для создания индикатора? Написано что функция возвращает таблицу, но мне нужно только одно значение и с какими аргументами её вызывать? Будет ли корректной запись "local C = getParamEx ( , , PREVLEGALCLOSEPR)"? Как мне использовать его чтобы он показывал для инструмента который я выбрал из таблицы текущих торгов и нужно ли мне добавлять в таблицу значение чтобы его можно было использовать? В моем случае цена закрытия предыдущего дня.
Не в обиду, но Ваше непонимание в первую очередь вызвано незнанием языка lua. Поясняю Функция луа может возвращать либо скаляр, либо таблицу. В данном случае возвращается таблица ее формат указан в документации к библиотеке QLua:
Функция возвращает таблицу Lua с параметрами:
Параметр
Тип
Описание
param_type
STRING
Тип данных параметра, используемый в таблице «Текущие торги». Возможные значения:
«1» - DOUBLE;
«2» - LONG;
«3» - CHAR;
«4» - перечислимый тип;
«5» - время;
«6» - дата
param_value
STRING
Значение параметра. Для param_type = 3 значение параметра равно «0», в остальных случаях – числовое представление. Для перечислимых типов значение равно порядковому значению перечисления
param_image
STRING
Строковое значение параметра, аналогичное его представлению в таблице. В строковом представлении учитываются разделители разрядов, разделители целой и дробной части. Для перечислимых типов выводятся соответствующие им строковые значения
result
STRING
Результат выполнения операции. Возможные значения:
«0» - ошибка;
«1» - параметр найден
================ при вызове этой функции надо указать три параметра class_code --код класса инструмента sec_code --код инструмента param_name -- название параметра инструмента. Это параметры таблицы TTT (название столбца на англ яз) --------------- class_code и sec_code при написании индикатора можно получать с графика (см функции в док QLUA)
Если читали, то хорошо, но где Вы увидели в ТТТ параметр "bid"?
почему getParamEx2 не работает
Пользователь
Сообщений: Регистрация: 30.01.2015
31.03.2025 17:16:23
getParamEx2
Функция предназначена для получения значений всех параметров биржевой информации из Таблицы текущих торгов с возможностью в дальнейшем отказаться от получения определенных параметров, заказанных с помощью функции ParamRequest. Для отказа от получения какого-либо параметра воспользуйтесь функцией CancelParamRequest.
Nikolay написал: Ну стоит всегда проверять что получено в ответ. Это же метод, запрашивающий данные на сервере (условно). А значит может приехать и nil.
данные запрашиваются не на сервер, а из ТТП, т е из архива терминала. nil может быть если этого параметра нет в таблице. Там и проверить можно есть или нет.
написал: С помощью CreateDataSource выгружаем свечи по инструменту Но как запросить не все, а только к примеру 20 последних свечей
Если невозможно то как можно урезать полученный массив со свечами, оставив 20 последних.
CreateDataSource - это подписка, а не выгрузка, на сервере для получения свечей После подписки в терминал будут приходить все новые свечи. Принимаемые свечи помещаются в архив терминала ------------------------ Прочитать из архива можно с помощью : ------------------------- getCandlesByIndex Функция предназначена для получения информации о свечках по идентификатору (заказ данных для построения графика плагин не осуществляет, поэтому для успешного доступа нужный график должен быть открыт). Формат вызова: TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count)
Вот уже нужен график обязательно открытый. Как тогда принятый через CreateDataSource массив уменьшить до последних 20 свечей?
CreateDataSource эквивалентен открытому графику Архив , который приходит с сервера всегда будет максимальным и запишется в файл на диск. Зачем Вам уменьшать архив до 20 свечей? Напишите подробнее что хотите и зачем сделать.
Количество свечей
Пользователь
Сообщений: Регистрация: 30.01.2015
31.03.2025 12:55:36
Цитата
Stivins написал: С помощью CreateDataSource выгружаем свечи по инструменту Но как запросить не все, а только к примеру 20 последних свечей
Если невозможно то как можно урезать полученный массив со свечами, оставив 20 последних.
CreateDataSource - это подписка, а не выгрузка, на сервере для получения свечей После подписки в терминал будут приходить все новые свечи. Принимаемые свечи помещаются в архив терминала ------------------------ Прочитать из архива можно с помощью : ------------------------- getCandlesByIndex
Функция предназначена для получения информации о свечках по идентификатору (заказ данных для построения графика плагин не осуществляет, поэтому для успешного доступа нужный график должен быть открыт).
Формат вызова:
TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count)
sendTransaction не вернула ошибку, Поведение sendTransaction не по документации
Пользователь
Сообщений: Регистрация: 30.01.2015
31.03.2025 06:33:45
Цитата
ЭД написал: Спасибо. Нет у вас хорошего примера под рукой OnTransReply) ?
У меня этот колбек реализован так:
Код
local t_mes={
"отправлена серверу",
"получена на сервер QUIK от клиента",
"ошибка при передаче транзакции в торговую систему. Так как отсутствует подключение шлюза Московской Биржи",
"выполнена",
"не выполнена торговой системой. Более подробное описание ошибки отражается в поле «Сообщение»",
"не прошла проверку сервера QUIK по каким-либо критериям. Например, проверку на наличие прав у пользователя на отправку транзакции данного типа",
"не прошла проверку лимитов сервера QUIK",
"не поддерживается торговой системой",
"не прошла проверку правильности электронной цифровой подписи",
"не удалось дождаться ответа на транзакцию, т.к. истек таймаут ожидания",
"отвергнута, так как ее выполнение могло привести к кросс-сделке",
"не прошла контроль дополнительных ограничений, установленных брокером",
"принята после нарушения дополнительных ограничений, установленных брокером",
"отменена пользователем в ходе проверки дополнительных ограничений, установленных брокером" }
function OnTransReply(t)
local x=t.status
if Log then Log:write("status="..x..": транзакция "..t_mes[x+1]..">"..msg.."\n"); Log:flush();end
if x==3 or 2>x or x==15 then return end
---удаляем ошибочные транзакции сделок
local _id=t.trans_id; local e,j,M;
for n=1,2 do
e=tor[n]; j=0; M=#e; while M>j do j=j+1; u=e[j];
if u[1]==id_ then if M>j then e[j]=e[M]; end e[M]=nil; e[0]=e[0]-1
if Log then Log:write("transReply "..",e[0]="..e[0]..",#e="..#e.."\n");Log:flush(); end
return; end --отменяем выставление заявки
if #u==3 and u[3]==id_ then u[3]=nil ;e[0]=e[0]-1
if Log then Log:write("transReply "..",e[0]="..e[0]..",#e="..#e.."\n");Log:flush(); end
return; end -- отменяем удаление
end
end
end
Цена операции short выходит за установленный диапазон., Превышено ограничение цены заявки для продажи без покрытия
Пользователь
Сообщений: Регистрация: 30.01.2015
28.03.2025 16:25:14
либо лучшую встречную
Цена операции short выходит за установленный диапазон., Превышено ограничение цены заявки для продажи без покрытия
Пользователь
Сообщений: Регистрация: 30.01.2015
28.03.2025 16:23:22
выставляйте не рыночную, а немного лучше лучшей. Это будет как рыночная
sendTransaction не вернула ошибку, Поведение sendTransaction не по документации
for i=0,(tonumber(getNumberOf("stop_orders"))-1) do bs=getItem("stop_orders",i) if bit.band(bs.flags, 1)~=0 and bs.trans_id == p_trans_id then message('Send drop stop-order trans_id='..bs.trans_id); local Transaction={ ["TRANS_ID"] = tostring(bs.trans_id), ["ACTION"] = "KILL_STOP_ORDER", ["CLASSCODE"] = 'SPBFUT', ["SECCODE"] = 'SiH5', -- инструмент ["STOP_ORDER_KEY"] = tostring(bs.ordernum), ["ACCOUNT"] = 'SPBFUTxxx' } -- Если функция вернула строку диагностики ошибки, то значит транзакция не прошла local Result = sendTransaction(Transaction); if Result ~= "" then message("Drop stop-order error!\nОШИБКА: "..tostring(Result)); end
end end end
В терминале сообщения: Begin drop_stop_order trans_id=142604 Send drop stop-order trans_id=142604 и в обход скрипта насколько понял сообщение: Не удается снять стоп-заявку N [1217138444]
То есть сообщения "Drop stop-order error!\nОШИБКА: "..tostring(Result) нет, а должно судя по документации. Почему sendTransaction не вернула ошибку??
sendTransaction возвращает ошибки обнаруженные терминалом, а полученную Вами ошибку прислала биржа. Вы ее получите в колбеке.
Ошибка при загрузке скрипта индикатора и др.
Пользователь
Сообщений: Регистрация: 30.01.2015
27.03.2025 12:04:55
Цитата
ЮрийК написал: --------------------------------------------------------------------- local size = Size(I) ------------------- Size не имеет параметров:. local size = Size() --------------------------------------------------------------------- Lua прощает такую ошибку
--------------------------------------------------------------------------------------------------------- У пустой свечи нет объема, нет параметров. =================== При старте скрипта он исполняется два раза от 1 до Size() -------------------------------------------------------------------------------------------------------- Это понятно.
Если выполнить условия п. 2, то вывалится целый период из расчётов!
Возможно не понял, какая ошибка. можно подробнее.
Ошибка при загрузке скрипта индикатора и др.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.03.2025 15:02:13
local size = Size(I) ------------------- Size не имеет параметров:. local size = Size() ==========================
И как его отличить от пустых свечей при включенной опции "Показывать пустые интервалы"? ------------------- У пустой свечи нет объема, нет параметров. =================== При старте скрипта он исполняется два раза от 1 до Size()
Вы не можете снять данную заявку
Пользователь
Сообщений: Регистрация: 30.01.2015
25.03.2025 16:30:06
Цитата
Максим Трейдер написал: , А что это значит "Транзакция не прошла проверку лимитов сервера QUIK"? О каких лимитах идёт речь?
Это означает, что у вас не хватает средств для совершения данной транзакции. Возможно вы пытались сделать сделку по рынку.
Вы не можете снять данную заявку
Пользователь
Сообщений: Регистрация: 30.01.2015
25.03.2025 11:36:13
Цитата
Максим Трейдер написал: Добрый день. Я новичок в программировании роботов. Прошу простить за, наверное, дилетантский вопрос. 18 марта во время высокой волатильности в ответ на мои транзакции на снятие заявок QUIK стал присылать ответы "Вы не можете снять данную заявку", "Транзакция не прошла проверку лимитов сервера QUIK". Раньше подобные ответы приходили только, если заявка уже снята, но в этот раз заявки продолжали стоять в стакане. Почему такое происходит и есть ли какая-то рекомендация, как определить, снята всё-таки заявка или нет?
В данном сообщении указана причина, Транзакция не прошла проверку лимитов сервера QUIK". Вот это и является главным. Но сделать анализ невозможно, так как нет содержимого транзакции.
Данные с MOEX на Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
21.03.2025 11:59:42
опечатка, пропущена строка
Код
local eng="/engines/stock/markets/shares/securities/"
Данные с MOEX на Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
21.03.2025 11:57:55
Для этого надо установить пакет luasocket. ------------------- Пример скрипта получить данные по Сбер для тайма 10 минут
Код
p2 = "D:/luasocket/";
package.cpath =package.cpath ..";"..p2.."?.dll";
package.path =package.path..";"..p2.."?.lua;"
local http = require("socket.http")
local header="http://iss.moex.com/iss/"
local sec="SBER"
local Date="2025-03-10"
local interval="10"
Data=http.request(header..eng..sec.."/candles.csv?from="..Date.."&interval="..interval) --не более 500 значений
print(Data)
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 30.01.2015
20.03.2025 06:42:54
Цитата
VPM написал: Не стоит питать иллюзий: рынок — это не место для легких денег! --------------------------------------------------------------------------------------------- 1) Открывая график в терминале, мы видим отражение цены во времени (массив), и это колебательный процесс, что в свою очередь равносильно волновой процесс. Волновой процесс можно описать с помощь фазово - частотной характеристики.
Без обид, но не стоит нести в массы отсебятину и чушь. -------------- Все это можно найти в интернете. ----------------- Если хотите просвещать, то дайте просто ссылку, а не пытайтесь своими словами пересказывать то, в чем сами не разбираетесь. ===================== Фазо-частотная характеристика применяется к линейным системам, а не к сигналам. ------------------------------------
Фа́зочасто́тная характери́стика (ФЧХ) — зависимость разности между выходным и входным сигналами некоторой системы от частоты сигнала, , аналитически выражающая (описывающая) эту зависимость, также — этой функции.
Для , это зависимость сдвига по между на выходе и входе этой цепи от частоты гармонических колебаний на входе.
================== Применительно к сигналам получают не характеристику , а спектр. ================ Волна́ — изменение некоторой совокупности физических величин (характеристик некоторого или ), которое способно перемещаться, удаляясь от места своего возникновения, или внутри ограниченных областей пространства Многообразие волновых процессов приводит к тому, что никаких абсолютных общих свойств волн выделить не удаётся
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 30.01.2015
20.03.2025 06:20:25
Цитата
VPM написал: Предложенный подход , t[I-3] = nil (в место limit_table_size), разложений по полочкам ,
Если просто обнулять элементы таблицы, например, t[I-3] = nil, это приведет к тому, что в таблице появятся "дыры" (nil-значения). Да, не требуется сдвигать элементы, что может быть быстрее для больших таблиц. Но при этом таблица будет содержать "дыры", что может привести к ошибкам при использовании функций, ожидающих последовательности. "В Lua таблицы с nil-значениями могут вести себя неожиданно, особенно при использовании функций, которые работают с последовательностями (например, #t, table.concat, ipairs). Память не освобождается сразу, так как в этом варианте Lua использует сборщик мусора для удаления nil-элементов. Это может привести к увеличению потребления памяти".
Из выше всего сказанного, делаем выводы. 1) limit_table_size подходит для небольших размеров таблиц 2) Подход таблица содержащая "дыры", подходит для конечных вычислений, не требующий передачи таблиц дальше для использования, как это показал нам . 3) В подходе с выводом таблиц и функции, как это предложил, на мой не профессиональный взгляд, лучше использовать альтернативный метод как это предлагают разработчики, использовать кольцевой буфер (circular buffer). В этом случае таблица имеет фиксированный размер, и новые элементы записываются поверх старых. Вариант, избежать использования limit_table_size, но при этом не хотите сталкиваться с проблемами nil-значений, в случае дальнейшего использования таблиц. Это наиболее эффективный способ управления памятью для задач, где требуется хранить только последние N элементов.
Если nil элемент не таблица, то никакой памяти сборщик мусора не удаляет. ===========
Расскажу про свой способ, который самый быстродействующий для обработки событий колбеков , не имеет дыр, не требует работы сборщика, имеет ограниченный размер таблицы и не требует дополнительной синхронизации потоков. -----------------. 1) Создаем очередь с двумя указателями для записи и чтения 2) колбеки помещают в эту очередь данные и ключ, если в очереди на данный момент нет данных от данного колбека для одноименного инструмента 3) Если колбек обнаруживает что очередь пустая, то устанавливает указатели на ноль. Если есть желание сэкономить 1...10 Кбайт, то можно снова переопределить таблицу очереди. ----------------- Максимальная длина массива определяется максимальным числом необработанных вызовов колбеков, которые будут записаны в очередь.