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

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

Страницы: Пред. 1 2 3 След.
Пожелания по развитию форума
 
Готов за скромную плату модерировать ваш форум.
А то он превратился в какую-то помойку. Вроде, уважаемая организация... в сфере IT даже, а форум, как в школьной локалке.
В каждой второй теме визги, какой язык лучший, и старпёры "уважаемые" программисты меряются пись, кто здесь "эксперт в Lua".

Предложения по оплате пишите в личку.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Артем написал:
Пока в нём спишь, данные с сервера приходят
Так как же сделки будут, коль вы спите и не торгуете? Замкнутый круг получается.
ТС и спрашивает, когда уже можно просыпаться?
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Артем написал:
Можно проверять объём строк в таблицах и спать пока он равен нулевому.
Так во многих таблицах количество строк и будет нулевым, пока вы спите.
Откуда, например, взяться заявкам, сделкам, позициям по фьючерсам etc., если вы спите?

Цитата
Михаил Понамаренко написал:
Может у кого есть более подходящее решение?
Надо спросить автора функции getNumberOf. Уж он-то должен знать.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Сидят в песочнице зверята и хвастаютя:
"Я дальше всех умею прыгать", - говорит Зайчонок.
"А я быстрее всех бегаю в колесе", - говорит Бельчонок.
Медвежонок слушал-слушал и говорит:
"А я…, а у меня… А я вам щас всем пи[цензура] дам!"
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
TGB написал:
Дело в том, что цикл вида:  <строка1> = <строка1> .. <добавляемая строка> при большом количестве повторений (а я предполагаю что это может быть) в Lua заметно нагружает управление памятью.
В чём это выражается?

Цитата
TGB написал:
Вы же можете получать свою строку следующим образом: local str = ""     for k,v in next, dump_tbl (<Параметры>) do   str = str .. v  end  или модифицировать код функции dump_tbl.
И там и там конкатенация строк. В чём профит?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
TGB написал:
Комментариев обсуждения функции cоздания последовательности ключей я насчитал более двадцати. Это одна из самых простых функций из списка API  OS_Quesha
Ставить дополнительную библиотеку только лишь для создания уникальных ключей - не лучшее решение.

Цитата
TGB написал:
1. Запрос последовательности ключей (number):
Cl_LuaGL ()
Результат функции: number - глобальный ключ системы формата: <Номер запус-
ка/перезапуска системы >(старшие, оставшиеся разряды, начиная с 6-го )<Счетчик запросов
ключей после запуска/перезапуска системы>(6 десятичных разрядов)
<Номер запуска/перезапуска системы > сохраняется в каком-то файле на диске?
Тогда такой вариант можно и без библиотеки сделать. Прочитать из файла последнее значение, увеличить на 1:
Код
local LaunchNumber = (file:read("*n") or 0) + 1
Сохранить новое значение в файл. И далее использовать, например:
Код
LaunchNumber = LaunchNumber * 1000000

local trans_id = LaunchNumber + getUniqTransID()


Цитата
TGB написал:
Примером простой (классическая задача на рекурсию), но, наверное, полезной функции из раздела 10 является универсальная функция печати переменных dump_str.
Преобразование одной таблицы в другую... Сомнительная польза.

Цитата
TGB написал:
функцию dump_str можно вызвать в любой момент для любой глобальной переменной скрипта с тем,  чтобы распечатать ее с выдачей в журнал отладки.
Может, лучше сразу распечатать таблицу в виде строки, без конвертации в другую таблицу?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Незнайка написал:
Код
   local  trans_id_start  =   os.time ()  -   1546290000 
local  trans_id  =  trans_id_start  +  getUniqTransID()  
Вот так ID должны быть уникальны, независимо от количества запущенных роботов.
Наврал. Надо доработать алгоритм.

Цитата
Игорь Б написал:
Я уникальность обеспечиваю фиксированием момента времени включения скрипта, а не совершения транзакции. А уже дальше, если в скрипте есть сделка, то как обычно, к полученному случайному числу +1.
У разных скриптов не получатся одинаковые ID?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Nikolay написал:
Обычно делают номер как unix_time + mcs*1000.
Откуда mcs берёте?
В os.sysdate() в Windows меняются только миллисекунды. mcs в пределах 1-15 мс (в зависимости от кванта) будут одинаковы.

Можно использовать недокументированную функцию getUniqTransID(). Она даёт счётчик от 1, но при перезапуске квика счётчик сбрасывается.
Код
local trans_id_start = os.time() - 1546290000
local trans_id = trans_id_start + getUniqTransID()
Вот так ID должны быть уникальны, независимо от количества запущенных роботов.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
BlaZed написал:
Расчет на 10 одновременно работающих роботов, у каждого робота свой robot_id от 0 до 9
Есть идеи, как сделать уникальный trans_id в разных роботах без необходимости задавать свой диапазон (robot_id) внутри каждого робота (или их копий)?
Вместо trans_id_count можно использовать миллисекунды из os.sysdate(). Но
Цитата
Nikolay написал:
вероятность отправки транзакции двумя скриптами одновременно есть.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Nikolay написал:
Я слабо себе могу представить разработчика, использующего библиотеки без исходных кодов.
qlua.dll без исходников предлагается
Графики объема и изменение лотности, Изменении лотности по инструменту приводит к невозможности нормального анализа
 
Цитата
Kander написал:
дать возможность выбора в настройках приложения - Лоты/Валюта
Штуки/Лоты/Валюта?
Тэйк-профит: старые песни о защитном спрэде, Возможные сюрпризы при совершении сделки по тэйк-профиту
 
Цитата
Цитата
Anton написал:
Исполнится, когда цена откатится от очередного пика.
Объясните мне, как заявка исполнится, если цена пойдёт в обратную от заявки сторону?
Такое возможно, если как вы написали, лимитник будет "подтягиваться за ценой", т.е. догонять рынок. Но такой трейл только ухудшает цену, нет?
Тэйк-профит: старые песни о защитном спрэде, Возможные сюрпризы при совершении сделки по тэйк-профиту
 
В дополнение к предыдущему сообщению: я не понимаю как можно сделать трейл именно биржевой заявкой
Цитата
Anton написал:
чтобы лимитник провисел пару часов, двигаясь на каждый аптик
Т.е., физически такой алгоритм реализовать можно. Но полезность его вызывает сомнения.
При таком подходе
Цитата
Незнайка написал:
подтягиваться за ценой, когда та растет
цена исполнения будет ухудшаться.
Тэйк-профит: старые песни о защитном спрэде, Возможные сюрпризы при совершении сделки по тэйк-профиту
 
Цитата
Незнайка написал:
Цитата
Anton написал:
По задумке  подтягиваться за ценой , когда та растет, и стоять на месте, когда не растет. Исполнится, когда цена откатится от очередного пика.
Это трейл-стоп-лимит так должен работать.
Я не верно написал. Стоп-лимит также не может быть трейл. Еесли мы говорим о лимитной заявке, которая сразу выставляется на биржу, иначе, при чём здесь штраф за бесполезное выставление заявок?

Или я чего-то не понимаю.
Цитата
Anton написал:
Исполнится, когда цена откатится от очередного пика.
Объясните мне, как заявка исполнится, если цена пойдёт в обратную от заявки сторону?
Тэйк-профит: старые песни о защитном спрэде, Возможные сюрпризы при совершении сделки по тэйк-профиту
 
Цитата
Anton написал:
По задумке подтягиваться за ценой, когда та растет, и стоять на месте, когда не растет. Исполнится, когда цена откатится от очередного пика.
Это трейл-стоп-лимит так должен работать.
Тейк-профит же исполняется против рынка.
Тэйк-профит: старые песни о защитном спрэде, Возможные сюрпризы при совершении сделки по тэйк-профиту
 
Цитата
Anton написал:
Цитата
shr540i написал:
да хоть просто сделай новый тип заявки и назови его трэйл-профит и сделай его как выставляемую по условию достижения профит цены обычную лимитку у которой потом при движении рынка в нужную сторону динамически меняется лимит. и все проблемы будут решены
Есть  штраф за бесполезное выставление заявок . Юзер выставит такой трейл с большим отступом, через пару часов после активации брокер влетает на штраф, кто его оплачивать будет?
А в чём смысл заявки? Постоянно убегать от текущей цены? А исполниться она когда должна?
Графики объема и изменение лотности, Изменении лотности по инструменту приводит к невозможности нормального анализа
 
Цитата
Egor Zaytsev написал:
Пока рассмотрим в разрезе валюты.
Тогда объём будет меняться с курсовой стоимостью актива.

Цитата
Anton написал:
много стороннего софта имеет 32-битные поля объема, много народу вляпается в проблемы
С валютой тоже вляпаются, если там int. И с индикаторами, использующими объёмы тоже могут быть проблемы.
Тормозит Quik при исполнении большой заявки
 
Максим, Lua скриптов никаких не запущено случаем?
4.24 Транзакции. Флаги транзакции., Что это такое?
 
Транзакции KILL_ORDER имеют флаг "на ввод заявки",
а KILL_ALL_FUTURES_ORDERS - флаг "служебная".
QUIK clients support, какой смысл вкладывается в эти понятия?
4.24 Транзакции. Флаги транзакции., Что это такое?
 
262144 + 1 = "отправлена с помощью LUA" + "отправлена с помощью файла импорта"
Взаимоисключающие значения
Данный инструмент запрещен для операции шорт
 
Цитата
Незнайка написал:
на общем балансе брокера в моменте количество акций меньше, чем вы хотите продать...

Roman Azarov, возможна такая ситуация, когда у одного клиента на счёте +некоторое количество акций, у другого "-" (продано или стоят в заявках на продажу), в итоге суммарное количество доступных акций у брокера меньше, чем у первого клиента в портфеле? Какая в этом случае будет диагностика?
Данный инструмент запрещен для операции шорт
 
Брокер дал кому-то попользоваться вашими акциями, не?

Цитата
Владимир написал:
Откуда же берётся запрет?
Хм, на общем балансе брокера в моменте количество акций меньше, чем вы хотите продать...
Индекс формирующегося бара.
 
Цитата
s_mike@rambler.ru написал:
И ещё в нескольких случаях.
Огласите весь список, пожалуйста!
Ошибка: указанная транзакция по указанному классу не найдена, Quik 8.11.0.66
 
Обычно, если послать транзакцию за несколько секунд до начала или через несколько секунд после окончания торговой сессии, то будет ошибка от шлюза торговой системы:
"Сейчас эта сессия не идет."

Цитата
Олег написал:
вот с такими данными улетала транзакция фьючерс Si-3.21
12.02.2021;11:30:00;ACTION=NEW_ORDER; TRANS_ID=1612899312; OPERATION=B; QUANTITY=1; PRICE=74366;
Что значит "улетела"?
Цитата
Олег написал:
Указанная транзакция по указанному классу не найдена: "SPBFUT"
Это, вроде, как ошибка самого терминала, транзакция на сервер не отправляется.

Цитата
Evgeniy Karnaukhov написал:
"Статус" будет "не торгуется"
Не бывает такого Статуса торговли инструментом. По крайней мере, ни разу не встречал.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Незнайка написал:
Пока выполняется байткод (в любом потоке) сам QUIK залочен?
Ну да, ваш же тест выше это и подтверждает.
Просто это было не так очевидно в скриптах, где байткод перемежается с си-функциями. Не далеко от QPILE ушли  :what:
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
байткод всегда выполняется под локом
Пока выполняется байткод (в любом потоке) сам QUIK залочен?

Цитата
Anton написал:
Арке надо было только реализовать lua_lock/lua_unlock
А зачем понадобилось их реализовывать?
Ну выполнялись бы потоки параллельно. А то так стопорится скрипт на каждом шаге, переключаясь то на один поток, то на другой.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
Сишные функции - любые, из самого луа, из qlua выполняются без лока
Как можно в этом убедиться?

При вызове, скажем сишной функции из самого lua, сначала ставится lua_lock потом выполняется функция, затем lua_unlock
или в обратном порядке: lua_unlock - выполнение функции - lua_lock?
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
байткод всегда выполняется под локом, а когда надо вызвать сишную функцию, лок снимается и после возврата захватывается снова. Арке надо было только реализовать lua_lock/lua_unlock, все остальное уже готово.
Т.е., весь луа-код, в т.ч. и сишные функции из qlua, не может выполняться одновременно в двух потоках?
Ну и зачем тогда нужно было городить весь этот огород с двумя потоками, если они всё равно не работают параллельно?

Вопрос к разработчикам: какие преимущества дала такая двухпоточная модель работы Lua-скриптов?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Nikolay написал:
почему это должны делать другие.
Вот вам и ответ на ваш вопрос: зачем оно надо.

Ни к чему не призываю, сам эту штуку не ставил. Но кому-то может, и пригодятся реализованные автором средства, которых нет изначально в qlua.
Вы ведь не думаете, что автор предложил исключительно вам двоим  :lol:  опробовать свой продукт?
С таким же успехом можно, пойти, например на форум TSLaba и возмущаться там, зачем мне ваша хрень, я и сам могу тестер написать.  :lol:
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Nikolay написал:
При этом у меня уже давно написан dsl, где я даже проще чем у вас создаю формы и реакции.
Можно увидеть ваш dsl?
Лучшие технические требования к оборудованию, Лучшие технические требования к оборудования для работы Quik
 
Цитата
Евгений написал:
Что не так с моим оборудованием что 35 меток в формате jpg на одном графике вызывают остановку остальных?
Открыто 8 вкладок на каждой в среднем по 3 графика с индикаторами.
Если закрыть все графики, кроме того, на котором метки, как работать будет?
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Для начала надо разобраться заполняется ли вообще поле сервером при перестановке заявок. А то брокер, может, не при делах.
Как понять, что скрипт загружен через require?
 
Цитата
Незнайка написал:
Внутри модуля определить, каким образом он был запущен.
Вы же смотрите в скрипте, загружающем модуль.
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Цитата
Roman Azarov написал:
Если Вы наблюдаете у себя описанное ранее в ветке
Вы не наблюдаете?
Хотите сказать брокер косячит?
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
А незаполненный canceled_uid для MOVE_ORDERS это не ошибка?
Как понять, что скрипт загружен через require?
 
Цитата
Egor Zaytsev написал:
что именно нужно
Внутри модуля определить, каким образом он был запущен.
В Lua 5.1 работал такой способ:
Код
if package.loaded[modname] == nil then
  print("Скрипт запущен напрямую")
else
  print("Скрипт загружен через require")
end

В Lua 5.4 внутри самого модуля package.loaded[modname] = nil в любом случае.
Как понять, что скрипт загружен через require?
 
В Lua 5.1 можно было заглянуть в package.loaded[modname].
Если там userdata, то скрипт загружен через require, иначе - запущен сам.
А теперь как?
Вопросы Новичка
 
Цитата
Nikolay написал:
Я использую luacheck

Подскажите настройку, чтоб он не ругался на создание глобальной функции
Цитата
setting non-standard global variable
Вопросы Новичка
 
Цитата
Nikolay написал:
А лучше пользоваться линтерами
Подскажите линтер для lua
getMoneyEx иногда выдает nil., Интересно почему?
 
Цитата
s_mike@rambler.ru написал:
Если же вы получили колбек и исходя из этого факта полезли в таблицу - это эта работа уже является полезной, а не бессмысленной.
Но при этом терминал упаковывает и передаёт нам в колбеке табличку, которую мы всё равно не используем. Или если использовать OnAllTrade() без параметров, то он не упаковывает сделку в табличку?
Опять же вопрос: что выгоднее перенести таблицу со сделкой в main через потокобезопасные функции или вытащить её в main через getItem?
getMoneyEx иногда выдает nil., Интересно почему?
 
Цитата
Anton написал:
И дальше две модели - синхронная и асинхронная. Синхронная - это как форум, задал вопрос, через некоторое время зашел, поглядел, что ответили, если ничего - попозже еще зашел и так далее. Асинхронная - это оставил мыло (колбек), как проблему изучили, прислали ответ туда. Тут тоже возможны варианты, можно написать "ответ на ваш вопрос появился на форуме", то есть просто напомнить, что пора пойти и синхронно глянуть, либо прислать ответ целиком, чтобы никуда уже не ходить. В квике есть все эти варианты для разных вопросов. В идеальном мире были бы возможны все варианты для любого вопроса по выбору скрипта. Скажем, мне вот не нужна в OnAllTrade вся эта табличка с трейдом, мне нужен только факт, что туда что-то приехало, а бедный квик каждый раз табличку заполняет, в которую я даже не погляжу. А кому-то табличка нужна.

Что выгодней с точки зрения производительности: постоянно опрашивать размер таблицы
Код
function main()
  local last = 0
  while run do
    local n = getNumberOf("all_trades")
    if n > last then
      for i = last, n - 1 do
        ...
      end
      last = n
    else sleep(100) end
  end
end
или назначить колбек на получение новых данных?
Код
function OnAllTrade()
  a = true
end

function main()
  local last = 0
  while run do
    if a then
      local n = getNumberOf("all_trades")
      a = false
      for i = last, n - 1 do
        ...
      end
      last = n
    else sleep(100) end
  end
end
Время ММВБ, Servertime не предлагать
 
Во время клиринга поменяли на 19:05:00
Не обратил внимания, во сколько точно поменяли
Время ММВБ, Servertime не предлагать
 
У всех сегодня параметр "Начало вечерней сессии" показывает 19:00:00 ?
Предложение к разработчикам
 
Второй николз. Меня одного посещает такая мысль?
Время ММВБ, Servertime не предлагать
 
Цитата
Незнайка написал:
Ув. техподдержка, подскажите, как называется этот параметр в QUIK?
Также подскажите, как называются параметры, которые транслируются в потоке FORTS_REFDATA_REPL таблица session
Время ММВБ, Servertime не предлагать
 
Добрый день

Статус инструмента передается в шлюзе в потоке FORTS_REFDATA_REPL и таблице fut_sess_contents поле state
Цитата
Поле state может принимать следующие значения:
0 Сессия по этому инструменту назначена. Нельзя ставить заявки, но можно удалять по этому инструменту.
1 Сессия по этому инструменту идет. Можно ставить и удалять заявки по этому инструменту.
2 Приостановка торгов по всем инструментам. Нельзя ставить заявки, но можно удалять.
3 Сессия по этому инструменту принудительно завершена. Нельзя ставить и удалять заявки по этому инструменту.
4 Сессия по этому инструменту завершена по времени. Нельзя ставить и удалять заявки по этому инструменту.
5 Приостановка торгов по этому инструменту. Нельзя ставить заявки, но можно удалять по этому инструменту

Ув. техподдержка, подскажите, как называется этот параметр в QUIK?
Также подскажите, как называются параметры, которые транслируются в потоке FORTS_REFDATA_REPL таблица session

begin Время начала
end Время окончания
inter_cl_begin Время начала промежуточного клиринга
inter_cl_end Время окончания промежуточного клиринга
inter_cl_state Состояние промежуточного клиринга
eve_on Признак того, что дополнительная вечерняя сессия будет проводиться
eve_begin Время начала дополнительной вечерней сессии
eve_end Время окончания дополнительной вечерней сессии
state Состояние сессии
Цитата
Поле state может принимать следующие значения:
0 Сессия назначена. Нельзя ставить заявки, но можно удалять.
1 Сессия идет. Можно ставить и удалять заявки.
2 Приостановка торгов по всем инструментам. Нельзя ставить заявки, но можно удалять.
3 Сессия принудительно завершена. Нельзя ставить и удалять заявки.
4 Сессия завершена по времени. Нельзя ставить и удалять заявки.
Функции onInit, onStop, onClose
 
Владимир, дружочек, если за 40 лет горе-программист ничему не научился, то это о чём-то говорит.
Вряд ли кто-то уже сможет вбить знания в его тупую башку.
Пациент безнадёжен...
Функции onInit, onStop, onClose
 
Владимир, замечательно.
Теперь если перейти от обыденных примеров к программированию, то тоже самое, какой тип вы в переменную (или ячейку таблицы) положите, тот потом оттуда и достанете.
Для вашего случая
Код
a[i][1][1] = "2"
P[a[i][1][1]] = P["2"]

a[i][1][1] = tonumber("2")
P[a[i][1][1]] = P[2]

Цитата
Владимир написал:
я 40 лет программистом
Цитата
Владимир написал:
Но я ПОНЯТИЯ НЕ ИМЕЮ по каким соображениям она присваивает данные и передаёт аргументы какого-то типа.
Значит, мало практики ещё.
Это вы ещё с вещественными числами мало работали. Когда обнаружите, что 0.1 + 0.2 ~= 0.3 ваш мир перевернётся.
Не представляю, как вы это переживёте, если уже на типах вы сыпитесь.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
А если сразу после этого сделать t=""?
А если чай посолить?
Очередность срабатывания OnTransReply, OnOrder, OnTrade
 
?
Страницы: Пред. 1 2 3 След.
Наверх