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

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

Страницы: 1 2 След.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
TGB написал:
Дело в том, что цикл вида:    =   ..   при большом количестве повторений (а я предполагаю что это может быть) в Lua заметно нагружает управление памятью.
Ваши слова заставили задуматься.
Что такое "нагружает управление памятью" я не понял. Но убедился, что при большом количестве склеиваемых строк (от нескольких десятков и выше) выгоднее (в плане скорости) все строки загнать в таблицу, а затем склеить в одну с помощью table.concat. При огромном количестве строк (более 100) скорость склейки в цикле существенно падает (нелинейно).
Правда, не знаю, для каких практических задач может потребоваться склейка огромного количества строк. Например, для сделок используется ~73 параметров, и запись в одну строку из массива строк с помощью table.concat всего лишь процентов на 10% быстрее, чем в цикле.


Цитата
TGB написал:
1) Сереализация таблицы:
tbl_to_str

Код
tbl_to_str(getItem('trades', 0), 'test.txt')
На выходе вместо Lua-таблицы получается какая-то нечитаемая "каша".
Странный выбор... или у нас разное понимание понятия "сереализация". Чем обусловлен выбор такого формата? Он ведь труден для восприятия.

Цитата
Нормальные герои всегда идут в обход
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
TGB написал:
4) Сбор (быстрый) строки из массива строк:
       m_str_to_str_fast
Для этих целей table.concat есть.
Размер лота
 
Не то написал.
Хотел спросить: есть ли классы, где можно в заявке указывать нецелое количество лотов? (Не путать с классом неполных лотов)
Размер лота
 
Всегда ли размер лота - целое число?
Ошибка создания заявки. [GW][32] "Цена сделки вне лимита"
 
Цитата
Константин Рейм написал:
С чем это может быть связано
Может, с тем, что на опционах границы Макс./Мин. возм.цена постоянно меняются?
Добавить в CreateDataSource():SetUpdateCallback() аргумент, указывающий на DataSource
 
Из-за флуда пожелание так и не заметили.


Цитата
Артем написал:
Колбек указывает только на порядковый номер обновлённой свечки в источнике данных, но не указывает к какому источнику данных она принадлежит.
Цитата
Артем написал:
Гораздо лучше когда можно объявить колбек и отправлять его в датасорс, и при вызове он сам объявит к какому датасорсу он принадлежит.

Тут реально упущение разработчика.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Владимир написал:
дайте юзеру возможность САМОМУ определять тип данных
Это в Lua есть.

Цитата
Владимир написал:
Добрая половина проблем тут же снимется.
Только не в вашем случае.
Ещё Крылов написал басню, про таких:

Код
К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Именно поэтому решения
Цитата
Артем написал:
есть определённый список таблиц, без данных из которых невозможно начать автоматическую торговлю. Вот их и ждём.
или
Цитата
swerg написал:
экспериментально установить, что через 5 минут после подключения и/или через 5 минут после начала торговой сессии - данные в терминале на нашем компьютере и нашем интернете - точно актуальные
ненадёжные.
Есть множество факторов, от которых зависит продолжительность загрузки данных, о многих мы и не подозреваем даже.
Ну получили вы 100500 строк в таблице спустя 5 мин. И что? Это все или еще не все?
Отладка QUIK 8.12
 
Цитата
Владимир написал:
никакая зависимость не может приводить к глюку, когда в таблице вдруг пропадает текст.
Проще на всех форумах кричать, что "язык плохой", "глюк в ПО", чем признать свою "криворукость", найти свою ошибку и исправить.
Добавить в вывод GetParamEx() поле с указанием времени последнего обновления
 
Я про параметр CHANGETIME
Добавить в вывод GetParamEx() поле с указанием времени последнего обновления
 
Параметр "Время последнего изменения" - это время изменения чего? Транслируется биржей? Время по чьим часам?
Время ММВБ, Servertime не предлагать
 
Roman Azarov, я про замену инструментов не писал.
QUIK врёт, что SiH1 торгуется. Даже сейчас. У всех брокеров. И у вас на демо.
Время ММВБ, Servertime не предлагать
 
Ну вот QUIK опять врёт: торги по инструменту завершены, а он говорит, что сейчас "торгуется" и до 23:50

Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Артем написал:
не ждать заполнения таблиц которые однозначно будут пустыми
Как это в коде заранее запрограммировать?
Тут подразумевается, что пользователь пишет скрипт для автоматизированной торговли, не с тем, чтобы потом подсказывать ему: "тут ждать, тут не ждать".
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Сделок нет, потому что ждем, когда таблицы заполнятся. А таблица сделок не заполняется, потому что мы не торгуем, спим.
Нормально чё, курим бамбук, Артем сказал спать: "пока спишь, данные с сервера сами приходят".

Артем, подсказка: чтобы в таблице появилась сделка, надо ее совершить. По другому она ну никак не появится, хоть ты год жди.
Пожелания по развитию форума
 
Готов за скромную плату модерировать ваш форум.
А то он превратился в какую-то помойку. Вроде, уважаемая организация... в сфере 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 это не ошибка?
Страницы: 1 2 След.
Наверх