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

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

Страницы: 1 2 След.
Установка QUIK на Linux под Wine, Проблемы с актуальными на сегодняшний день версиями
 
Подниму тему.

Вопрос к сообществу, если кто уже пробовал 64 битную версию квик под вайном.
Как с производительностью, наподобие 7.хх или хуже/лучше?
Интересует возможно ли нормальное, более-менее без тормозов отображение 2 - 3 таблиц и 2 - 3 графиков. Разумеется предполагается что как минимум пара процессорных ядер будет свободна и никакие такие игрухи одновременно с квиком видяху грузить не будут. Комп вообще редко бывает загружен на полную.
Интерфейс в Lua, Диалог из Lua
 
Можно QVCLua попробовать, https://quik2dde.ru/viewforum.php?id=13

А если вас устроит писать не только на луа, можно написать свою dll с интерфейсом. В этом случае можно уже практически любые визуальные библиотеки использовать.
функция Unpack
 
Цитата
Let_it_go написал:
Я в этом толком не разбираюсь, но Луа преподносится как язык настолько лёгкий для внедрения, что мне это кажется элементарной задачей - поменять старую версию на новую.Наверное я просто ничего не понимаю в этом.
На правах лирического отступления. Я вот очень хорошо помню как лет около 20 назад на всех заборах писали что скоро Java будет в каждой кофеварке, а Java c JIT будет работать быстрее плюсов и вытеснит плюсы нафиг с рынка вообще, вот только JIT допилят и тогда сразу ))) И вот много ли мы через 20 лет видим массовых программ на этой яве.

Не надо тут ничего глубоко понимать, вместо того чтобы верить написаному на заборе представьте вот сменился движок. Нам придется как минимум все свои скрипты перетестировать, что-то наверняка переписать. А разработчикам придется перетестировать работу нового движка с существующей функциональностью терминала что естественно еще более трудоемко. Трудноуловимые глюки сплошь и рядом годами лечат. По сравнению с тем что можно от смены движка выиграть все это тупо не стоит усилий.
функция Unpack
 
Цитата
s_mike@rambler.ru написал:
потому что эта работа стоит денег, а кардинального улучшения потребительских свойств продукта при этом не произойдет.
Вот именно. Я бы еще добавил что е только денег а еще и времени для нас же пока после смены движка все глюки отловят.

"Работает? Ну и не трогай" (С)  :lol:  
Поиск заявки в стакане
 
Цитата
Игорь Б написал:
Subscribe_Level_II_Quotes
Subscribe_Level_II_Quotes просто "подписывает" ваш скрипт на получение коллбэка OnQuote по инструменту. Можно вручную стакан в терминале открыть или Subscribe_Level_II_Quotes использовать, для скрипта эффект один.
Коллбэк OnQuote сам по себе стакан не получает, только уведомление что есть изменение в стакане.
Получать стакан все равно функцией getQuoteLevel2, необязательно это даже делать из OnQuote.

Ну а дальше с полученым стаканом работать примерно как sav 312,  написал. Вероятно там можно что-то оптимизировать, это уж чмотря что именно ищете. Общая идея работы со стаканом именно такая.
Проблема с WinRos
 
Цитата
новичок написал:
почекать пару раз в год такая уж проблема?
Любопытная вообще концепция,
1. Удалить вручную пару файлов.
2. Отключить вручную обновления.
3. Не забыть что уже полгода не чекал (других забот человеку мало)))
Возникает на самом деле вопрос о квалификации того кто такой дистр собрал. ИМХО разумеется.
Проблема с WinRos
 
Цитата
новичок написал:
вы с какой луны, уважаемый?почекать пару раз в год такая уж проблема?или у вас некий особый квик и обновляется каждый месяц? :)
А вы какую точку зрения отстаиваете, что запуск автоматом наф не нужного процесса это нормально и пользователи должны сидеть молчать в тряпку и радоваться что так работает чтоли?

Я задал вопрос поддержке неужели это сложно сделать по-человечески, насколько трудно мне что-то почекать к нему отношения не имеет.
Проблема с WinRos
 
Цитата
новичок написал:
уберите в основных настройках галку: Обновлять версию программы
И проверять обновления вручную? Собственно тоже можно хотя я предпочту другие пути. Обновления устанавливать таки стоит. Непонятно какие принципиальные трудности сделать это все без танцев с бубном, голосов о том что этот винроз кому-то нужен я не вижу.
Проблема с WinRos
 
Цитата
Egor Zaytsev написал:
Удаление данного файла никак на функциональность QUIK не влияет (кроме экспорта).
Выше уже написано, но выглядит уместным повторить. Если просто взять и удалить winros.exe + iwr.dll то функциональность квика конечно не страдает.
Но только вот он при каждом запуске начинает писать что есть обновление. И это еще неудобнее чем убивать винроз каким-нмбудь скриптом например. Можно бы уже как-то и разрулить этот момент.

Костыль из поста №16 конечно рабочий но пользоваться им не очень хочется )))
QLUA, вопросы начинающих.
 
Цитата
Дмитрий написал:
Подскажите пожалуйста, что значит функция майн работает в отдельном потоке и не нагружает терминал? Никакого отдельного процесса для этой функции нет в диспетчере задач, а вся нагрузка как раз ложится на процесс info
На самом деле это значит буквально то что написано.
Обьектами выполнения в винде являются потоки а не процессы. В документации микрософта они называются thread. Процесс можно считать просто контейнером в котором содержится один или более потоков.

Так вот для выполнения функции мэйн создается такой отдельный поток, который будет работать параллельно с остальными. На отдельном процессорном ядре если такое доступно. И в этом смысле он "не нагружает" терминал. В отличие от коллбэков которые вызываются в одном из "основных" потоков терминала. Если у вас ядер достаточно он будет работать на отдельном ядре. А если недостаточно то может таки и терминалу мешать.
Диспетчер задач показывает именно процессы, чтобы увидеть потоки придется использовать что-нибудь попродвинутее.
Таблица в функцию. Lua
 
Цитата
Archie_ написал:
Почему? Я же не локально ее объявил
Это вот из вашего начального поста и не было явно понятно.


По существу. Если я правильно понял у вас получается что-то типа массива таблиц. Или таблица элементы которой таблицы с которыми надо работать. Вам виднее как вам удобнее по индексу или по ключу. Вот масиив (или таблицу) создаем одну на модуль, функциям передаем индекс (или ключ) который им надо использовать для доступа к нужной таблице. Я себе это так представляю.
Таблица в функцию. Lua
 
У таблицы обьявленой внутри функции областью видимости (по определению) будет эта самая функция.

Непонятно какого эффекта вы добиваетесь, вам нужны временные обьекты, вам надо эти таблицы возвращать из функции, еще что-то?
Функция например может работать с обьектами обьявленными один раз где-то в начале модуля, как вариант.
Пример заявки тэйк-профит и стоп-лимит
 
Цитата
AlexanderKk написал:
как указать срок действия "до отмены"?
Там же выше, где формат три-файла написано.
EXPIRY_DATE=GTC
Брокер может не разрешать "до отмены".
Пример заявки тэйк-профит и стоп-лимит
 
В принципе можно уточнить что примеры в разделе 6 файла info.chm. Совместная работа -> импорт транзакций -> примеры строк. Сам не с ходу нашел когда первый раз искал )))
Обновление пользовательской таблицы/окна
 
Цитата
BlackBoar написал:
SetWindowCaption
Дошло на 3й час )))
Если тема темная то заголовки действительно рисует оконный класс и SetWindowCaption действительно форсирует отрисовку
А если тема стандартная то заголовки в компетенции венды и все как обычно.

Ну может кому-то будет полезно, мне лично темная тема просто не нравится. Но будем знать.
Обновление пользовательской таблицы/окна
 
Цитата
sav 312 написал:
с SetWindowCaption также нет.
Мне вот интересно с чего возникало предположение что вообще может работать. Отображением заголовка окна разве сам оконный класс "заведует"? Я разумеется исходников не видел и не могу знать точно.
Но могу подтвердить что у меня тоже SetWindowCaption абсолютно ничего не дает.


Цитата
Sergey Gorokhov написал:
Изначально же, суть в том что в терминале окна перерисовываются раз в 50мс.
Еще такой к вам вопрос. Допустим я то что должно отображаться буду обновлять 2 раза в секунду, моему человеческому восприятию чаще и незачем. Судя по обсуждению можно считать что точно обновится, так?
Обновление пользовательской таблицы/окна
 
Возникает мысль обновлять таблицы которые необходимо отображать на экране например 1 раз в 20 тиков, человек же все равно не разглядит быстрее. А то что нужно для работы роботу держать в другой таблице. Тоже костыль но он хотя-бы не будет много дополнительных ресурсов гонять.
Обновление пользовательской таблицы/окна
 
Цитата
Sergey Gorokhov написал:
Изначально же, суть в том что в терминале окна перерисовываются раз в 50мс.
Вот так если не окончательно понятно, то во всяком случае более-менее. У меня проблема воспроизводится как раз при слипе меньше 50. 45 еще нифига не работает, 50 уже более-менее тикает (иногда дергается). Квик свежий джуниор отсюда.
Или вы это раньше не писали или я пропустил )) Видимо из этой цифры и придется исходить. Приемлимых способов форсировать перерисовку окна я не вижу, на системные пинки от винды оно точно так же не реагирует.


Цитата
sav 312 написал:
SetWindowCaption
У мнея тоже ничего не дает, вчера еще пробовал. От нее впрочем и не ожидалось, капшн таки не клиентская часть окна, поэтому даже упоминать не стал.
Обновление пользовательской таблицы/окна
 
Цитата
BlackBoar написал:
RedrawWindow
Не помогает, сообщения тоже. Может флаги не те, пока не разобрался до конца.
Обновление пользовательской таблицы/окна
 
Цитата
sav 312 написал:
Кстати, приятная плюшка от добавления пары строк с SetWindowPos.Теперь окно скрипта всегда поверх всех окон и ему также не страшно случайное перемещение. Окно сразу появится на своем законном месте
Мне это кажется скорее неправильным, вам же может потребоваться и правда перенести окно. А скрипт не дасть.

Цитата
Nikolay написал:
Можешь попробовать найти окно как это делают в автологине https://smart-lab.ru/blog/444805.php и подергать окно.
Было бы интересно попробовать применить к этому окну RedrawWindow (https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-redrawwindow) но ее похоже нет в w32. Поскольку у меня ваш скрипт проблему воспроизводит, любопытства ради попробую ее добавить может получится ))
Обновление пользовательской таблицы/окна
 
Цитата
sav 312 написал:
После PasteTable()добавил выделение строк 1 и 2SetSelectedRow(t_id,1)SetSelectedRow(t_id,2)Все работает, данные обновляются с каждым тиком, точнее с каждой имитацией тыканья мышкой)) правда таблица стала похожа на цветомузыку)))
Вы подтвердили мысль о том что дело именно в отрисовке.
Цитата
sav 312 написал:
Интересная особенность в том, что при "тыкании", строки нужно чередовать. Если "тыкать" в одну строку данные обновятся 1 раз и больше обновляться не будут.
Дык так и быть должно, это же не совсем настоящий тык, "тычете" в ту же строку - оконный класс похоже считает что обновлять нечего.
Приходит в голову попробовать SetWindowPos не меняя ни размер ни положение. Но наверное тоже не сработает. Вот если делать на пиксель длиннее-короче так должно работать. не знаю насколько это будет раздражающе.

Ну и можно опознать окно и как-то кидать в него сообщения (вероятно имитация WM_MOUSEDOWN прокатит, пробовать надо) используя системные библиотеки. Должно работать но тащит дополнительные сложности.
Опять же точно не знаю как это реализуется из луа. В любом случае некий аналог всяких SendKeys но у каждого языка своя грамматика )))


Я с похожим сталкивался при написании чего-то на дельфи в начале века, "дергал" позицию неактивного скролбара и окно тогда соизволяло обновиться. В луа чего-то похожего нет к сожалению.
Обновление пользовательской таблицы/окна
 
Цитата
sav 312 написал:
Это действие можно имитировать путем добавления какой-либо команды в main?
Вы уж простите, я невеликий "писатель" на луа, предпочитаю делать все что можно на С++. Я поэтому попросту не знаю правильный ответ для луа. Скорее всего проще дождаться пока завтра поддержка придет, как-то наверняка можно.
Обновление пользовательской таблицы/окна
 
Цитата
sav 312 написал:
какие будут предложения?
Нюанс может быть не в том что не обновляются данные в таблице а в том что не перерисовывается окно. Чтобы окно перерисовалось оно должно получить сообщение WM_PAINT. Вот если в окно мышой ткнуть, оно такое сообщение точно получает. А при обновлении данных в таблице - надо сидеть вникать что там в недрах винды происходит. Может движок виноват, может оконный класс может сама винда. Когда были косяки что-то по дороге отсылало нужное сообщени, убрали косяки - возник другой.
Такая проблема может возникать в разных программах, иногда даже исполняют танцы с бубном двигая на 1 пиксел туда-сюда мышь, окно или просто посылая какие-то сообщения "вручную".
Скорее всего так, как победить из луа-скрипта может поддержка подскажет.
map или чтение файла (dll на c++)
 
Цитата
Let_it_go написал:
Попробовать оба варианта мне будет сложно из-за слабых программистских навыков, поэтому прошу опытных людей подсказать лучший путь.
Лично мне кажется принципиальным вот что. Если вы пришли в "мир С++" в поисках эффективности такой подход не прокатит. Общепринятый (или универсальный) вариант решения той или иной задачи не обязан бытиь оптимальным в вашем конкретном случае. Вам придется вникать в то что "происходит под капотом" чтобы убедиться что эффективно решается именно ваша задача а не какая-то воббще.

Например, для хранения в памяти кучи строк не связаных особо ничем  кроме порядка следования (содержимое "абстрактного" текстового файла) стереотипным является использовать динамический массив. И чаще всего это будет std::vector<string>. Но если о строках известно что-то специальное может оказаться эффективнее другой строковый класс или другой контейнер.
Вы вот почему-то упоминаете именно map. Возможно для вашей конкретной задачи и действительно лучше map, но из того что вы написали такое предположение сделать невозможно, недостаточно данных.

Аналогичные мысли по всем остальным пунктам - чтение из файлв, сравнение строк, парсинг строк и так далее. Все это можно делать более чем одним способом, иногда какой-то из них может оказаться "неожиданно" на пару порядков эффективнее других.
Если поделаете замеры у вас "узкое место" сожет быть вовсе и не чтение. А может и правда чтение, опять же нужно намного больше данных чтобы как-то обосновано судить. И врядли у кого-то найдется время делать такие суждщения за вас, стоит освоить самому если уж считаете важной скорость.
Неверное время сервера, Неверное время сервера
 
Я с таким сталкивался пока вроде только при проблемах на сервере брокера (а может биржи). Ну в этом случае видимо ничего не сделать кроме как переждать.
Если бывают еще какие-то ситуации когда запаздывает тоже был бы заинтересован узнать.
Получение цены базового актива опциона
 
Цитата
Андрей написал:
Использовал getParamEx, не знаю, какая между ними разница.
В плане возможностей получения данных - никакой если верить документации ))
Я их обе "до кучи" упомянул.
Получение цены базового актива опциона
 
Угу ясно, не так понял в чем вопрос. getParamEx2(ClassCode, SecCode, "OPTIONBASECLASS") вроде должно вам помочь.
Но должен признать сам не проверял чего оно возвращает, мне для себя удобнее таблицы танцующие от базового актива.
Получение цены базового актива опциона
 
Цитата
Андрей написал:
как получить цену базового актива опциона?
ИМХО за 2 шага если вообще. Получить базовый актив, getParamEx или getParamEx2(ClassCode, SecCode, "OPTIONBASE"). Потом получить нужные параметры этого инструмента, вроде так.
А для инструментов которые в постоянной работе (опять же ИМХО) удобнее таблицу соответствия со связаными поддерживать.
Срок действия заявки, "Превышен допустимый срок действия заявки".
 
Зависит от установок (фактически от "доброй воли") вашего конкретно брокера.
Например пару лет назад (и вроде даже еще год назад) Открытие не давал ставить бессрочные стопы на фонде, сейчас дает. Я правда только тэйк-профиты сам лично проверял но вроде и другие так же.

Вопрос в любом случае к брокерам, техническую возможность то квик предоставляет :)
Многопоточная работа из dll на C с Lua
 
Если графики нужны чисто боту их можно посворачивать, будет уже намного лучше.
А если нужны себе для "традиционной" ручной торговли, можно альтернативным квиком обзавестись открыв где-нить второй чем на символическую сумму. У меня в сбере такой есть )))
Такая вот мысль возникла...
Многопоточная работа из dll на C с Lua
 
Цитата
Павел Bosco написал:
видимо что-то криво в графиках написано у разрабов - всё работает в одном потоке! потому что на одном ядре.
Вообще  всегда считал что это хотя и не обязательное требование, но уж как  минимум обычная практика для вендовых программ, все окна в одном потоке.  Иначе с диспетчирезацией сообщений + синхронизацией очень много гемора  если в 2 словах. Возможный выигрыш производительности редко того стоить  может.
Нам остается эту данность учитывать ))
Многопоточная работа из dll на C с Lua
 
Цитата
Павел Bosco написал:
Ну до миллионов у меня дело не дошло.
Это было что-то типа стресс-теста. По дороге еще мерил что сколько времени занимает. В принципе сделал для себя ряд полезных наблюдений. В реальной то жизни у меня пока активность невысокая.


Цитата
Павел Bosco написал:
Честно говоря мне немного удивительно что вы бомбардровали квик и он не наелся.
Ну у меня же осуществлялся доступ к хранилищу терминала в режиме "только чтение", там по идее должна быть очень недорогая синхронизация. То есть это я так думаю что должно быть по идее только чтение, исходников терминала не видел разумеется. Но результат вроде адекватен.

Цитата
Павел Bosco написал:
вот так на 8 ядерном CPU последняя версия квика работает в чистом виде, без всяких запущенных скриптов
К сожалению у меня ваш скрин открывается очень размытым каким-то, нифига не разобрать. Просто для сравнения, у меня квик в котором я торгую "традиционным образом", там тоже нет никаких пока скриптов и тп. Но присутствует в общей сложности порядка 350 окон (таблицы / графики). На 50 с чем то вкладках. Так вот, памяти он жрет по меркам 32 бит процесса немеряно, к вечеру обычно порядка 2.2-2.4 гига нажирает. Но проц грузит очень умеренно, если на виду 5 графиков то гдето на треть одно ядро. А если на виду нет графиков вообще не грузит почти. Данные в нем заказаны в максимально возможном количестве (для справки).

Цитата
Борис Гудылин написал:
Я проверял что-то, там был нюанс https://forum.quik.ru/messages/forum10/message29998/topic3409/#message29998
Это немного другой нюанс, хотя он из той же темы и тоже заслуживает пристального внимания. Читал, имею в виду. Ну опять же, многопоточныых стресс-тестов пока не гонял, своих комментариев нет.
Меня изначально интересовала ситуация примерно такого плана, допустим стаканы я получаю в мэйн поскольку эта операция относительно дорогая а всякие там лучшие биды и тп сразу в коллбэке. Вот не возникнет ли каких-то затыков из-за внутренней синхронизации в квике. Официальный ответ вроде нет и по моим представлениям вроде так и быть должно. Как дойду до обработки стаканов обязательно проверю, пока другим занят ))
Многопоточная работа из dll на C с Lua
 
Цитата
Павел Bosco написал:
я повыкидывал timeBeginPeriod, кажется получше стало. с холостым ходом тоже решил проблему, поменяв Sleep на WaitForSingleObjectсейчас есть некоторое замедление только на старте сессии, в 10:00 - 10:30, дальше вроде тоже есть неравномерность, на секундочку бывает замирает, частенько, надо последить ещё.возможно я забыл перезагрузиться после выключения timeBeginPeriod, сейчас после перезагрузки уже 11:50 и всё тикает равномерно.
Чтож, будем знать про потенциально возможные грабли с timeBeginPeriod.
Ну а тупому слипу в рабочем коде имхо в любом случае не место, так только, для тестов или проблему выявить.
Замедление в 10 утра (опять же имхо) может быть вполне нормальным если много чего обрабатываете.

Цитата
Павел Bosco написал:
или думаю, может это потому что я слишком бомбардирую квик?есть ли интересно какой-нибудь предел обращения в цикле, допустим к свечкам DataSource, я ведь из C++ довольно быстро это делаю.
Эксперимента ради бомбил квик миллионами запросов подряд, только у меня запрашивались getParamEx2 и getQuoteLv2. Поток который этим занимался естественно грузил 1 процессорное ядро на полную (это очевидно так и быть должно), каких-то аномалий / ошибок при получении результатов не нашел. Что будет если начать гонять функциональность квик сразу из нескольких потоков сам пока не проверял. Спрашивал в соседней теме разрабов, с их слов вроде должно работать параллельно.

Если у вас по этому поводу получаются другие данные тоже было бы интересно узнать что именно.
Многопоточная работа из dll на C с Lua
 
Цитата
Павел Bosco написал:
я сейчас "грешу" на всё подряд, вот как раз думаю про WaitForSingleObject - нет ли в ней подводных камней?
Наверняка полно но врядли там есть что-то что могло бы спровоцировать описаную вами ситуацию. WaitForSingleObject исправно выкидывает ждущий поток с процессора а у вас по описанию наоборот выглядит, какие-то потоки до упора его занимают.

Цитата
Павел Bosco написал:
или может быть проблема в том что я использую time_beginperiod(1)?
А это что? Если имеется в виду MMRESULT timeBeginPeriod(   UINT uPeriod ); то да, есть в МСДН такая интересная фраза

Цитата
Use caution when calling timeBeginPeriod, as frequent calls can significantly affect the system clock, system power usage, and the scheduler.
Полный текст здесь, https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-sleep

Вообще же мне например пока так и непонятно как выглядит минимальный код воспроизводящий вашу проблему. По начальному посту такое впечатление что она проявляется уже на "холостом ходу", если создать еще один поток который будет просто спать параллельно с мэйн.

Поскольку меня этот вопрос тоже интересует, создал на пробу 3 таких потока. У меня они как и задумано раз в секунду флудят в окно сообщений квика, остальное время исправно спят. Загрузка процессора 0, ничего не тормозит. Если не затруднит скомпилируйте и попробуйте у себя, весь код под спойлером.

Скрытый текст


Если найдете причину опишите плиз, тоже интересно знать чего не надо делать )))
Управление заявками, Lua или Trans2Quik
 
Цитата
s_mike@rambler.ru написал:
Никакой разницы в быстродействии вы не заметите  
По быстродействию мне кажется основное время займет путешествие заявки из терминала на биржу и ответа обратно, поэтому вопрос быстродействия пожалуй глупый ))

Попробую поставить вопрос с другой стороны. Алгоритмы обработки данных / генерации сигнала / открытия и сопровождения позиции планируются (и помаленьку реализуются) в отдельном от квика процессе. Мне пока поэтому кажется логичным использовать T2Q просто чтобы не городить обратную межпроцессную связку к dll работающей в процессе квика самому. Но вот хочу понять не теряю ли я при этом чего важного, судя по тому что успел прочитать вроде нет. Сам пока сколько-нибудь обширных проб не делал.
Управление заявками, Lua или Trans2Quik
 
Возник очередной теоретический вопрос. Есть два альтернативных интерфейса для отправки и последующего управления заявками, sendTransaction + колбэки в луа и обсуждаемый в соседнем разделе Trans2Quik. От чтения форума и прочей документации сложилось такое впечатление что и то и другое в общем адекватно работает, но проблемы могут и так и эдак встречаются.

Вопрос такой, есть ли где-нибудь сравнения какой способ быстрее / надежнее / удобнее / какие-то еще преимущества или недостатки. Сам не нашел, если кто вникал в вопрос прошу поделиться ссылой или наблюдениями.

ЗЫ, с чисто технической точки зрения мне как "писателю" на С/С++ в общем близко к "все равно" каким из этих интерфейсов пользоваться.
Многопоточная работа из dll на C с Lua
 
Не знаю насколько моя задача похожая, поделюсь наблюдениями вдруг чем то поможет.
Новые потоки из С-функции зарегистрированой в луа-движке как main пробовал. Но STL не пользовался, пробовал штатное средство _beginthreadex и пробовал boost thread. В созданом потоке пробовал крутить просто цикл наподобие вашего while (!stopped), цикл ожидания каких нибудь событий по WaitForSingleObject(...) а также пробовал запускать интерфейс на WinForms. Описаной вами проблемы не наблюдалось. Думаю можно сказать что ожидаемо все работало.

У меня при первом взгляде на ваш код возникает такой вопрос, а как там "внутри" устроена функция lua_Sleep(), может в ней проблема при вызове из 2 потоков? Попробуйте вместо нее
Код
#include <Windows.h>
Sleep(1000);
или
Код
#include <chrono>
#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
Других мыслей навскидку нет ))
Обращение к произвольной таблицы
 
В принципе существуют костыли в виде сторонних dll-плагинов. Из того что помню навскидку, https://quik2dde.ru/viewtopic.php?id=61
Еще несколько вариантов вам может подсказать гугл.
Насколько корректно / быстро это все работает - не имею ни малейшего понятия, не пользуюсь и не собираюсь.
Копирование вкладки целиком, есть ли такая возможность? если нет, то можно ли запланировать
 
Цитата
Александр написал:
Можно ли как-то скопировать вкладку целиком, чтобы потом можно было просто перенастроить там уже таблицы?  
Я так делаю, сохраняю в файл и тут же загружаю обратно, получается копия с названием наподобие "Сбер1" (если оригинал назывался "Сбер"). Потом как раз просто перенастраиваю таблицы / графики.
Может и еще как-то можно, более прямого пути не нашел )))
Тайминг функциональности QUIK из луа, как правильно замерить
 
Цитата
Sergey Gorokhov написал:
"Ничего не будет" означает что в описанном сценарии скрипты не будут друг другу мешать.Вы можете самостоятельно протестировать и убедиться в этом
Благодарю, именно это и хотел узнать не занимаясь разработкой очередного теста и размышлениями о его адекватности )))
Тайминг функциональности QUIK из луа, как правильно замерить
 
Цитата
Sergey Gorokhov написал:
ничего не будет.
Не понял, я невнятно сформулировал вопрос или эта тема табу.
Будет  либо последовательное выполнение запросов либо параллельное (при  наличии свободных процессорных ядер разумеется). "Ничего" быть не может  раз уж скрипты вообще работают. Я разумеется могу рано или поздно  протестировать сам, но был уверен что поддержка знает ответ. Странно както, при все уважении....
QLUA, вопросы начинающих.
 
Самый сверхпримитивный пример на эту тему,

Код
...
function main()    
  while is_run do    
    sleep(1000)    
  end 
end
можно переписать так,
Код
DefaultSleepTimeout = 1000
...
function main()    
  while is_run do    
    sleep(DefaultSleepTimeout)    
  end 
end
Вот уже отделили, когда потом захотим изменить не придется искать где там нужное число в 10000 строк программы, вот оно в самом начале с понятным обозначением. Это разумеется не для быстродействия или чего-то еще связаного с работой программы а чтобы самому не запутаться в большом тексте, только и всего.
QLUA, вопросы начинающих.
 
Цитата
Ирина написал:
А как
Думаю на эту тему не один десяток диссеров защитили ))))
На практике, над вами же не висят какие-то корпоративные нормы разработки. Поэтому так как вы сами не запутаетесь. Например выделять их в отдельные луа-файлы и прицеплять по мере необходимости. А будет их количество расти по мере развития вашего робота - переходить на файлы данных, базы данных и тд ))
QLUA, вопросы начинающих.
 
Цитата
Ирина написал:
BlackBoar , т.е. получается, 1 вариант - освобождение памяти; 2 - уменьшение работы ф-ции. Ясненько, спасибо.
Не обратил спросонья внимания на эту фразу )
Об эффективности использования памяти я вообще ничего не имел в виду. На самом деле с точки зрения памяти как правило лучше один раз распределить и потом 100500 раз использовать чем каждый раз дергать распределять. Но это отдельная необьятная тема, если вдруг надо жестко вручную управлять распределением памяти то вообще говоря под шкаф этот луа, надо использовать С/С++.
Я же речь вел только о том что вариант 1 гарантирует идентичность данных в обьекте (несмотря на формальное нарушение принципа отделять данные от кода), а вариант 2 гарантирует идентичность именно обьекта а не данных в нем )
QLUA, вопросы начинающих.
 
Цитата
Ирина написал:
Да нет, параметры нужны только этой ф-ции. Но таблица сама по себе ссылочный тип данных (на них локализация вообще эффект оказывает?) - не размножается, не мусорит. Вот я и подумала, зачем её при каждом вызове заново создавать...
А вот для такой постановки вопроса следует отметить нюансик. В вашем варианте 1 параметры таблицы при каждом вызове гарантировано будут такие как вы написали. Потому что в начале вызова луа их заново установит. В варианте же 2 есть какой-то риск что таблица будет изменена между вызовами,  в результате той или иной ошибки в коде. Ощибка копипаста типичное дело в общем то :)

Кстати про local. Давно подозревал что это больше домыслы чем факт. Собрался наконец посмотреть, в вашем варианте 2 менял local на global (то есть просто на отсутствие спецификатора разумеется). Разница в скорости пару процентов ))))
QLUA, вопросы начинающих.
 
Цитата
Ирина написал:
Подскажите, пожалуйста, как быстрее для выполнения кода и грамотнее с т.з. программирования: задавать неизменные параметры транзакции каждый раз при вызове функции, зато локализованные внутри неё, или обращаться к внешним параметрам, локальным для внешнего блока?
Теория говорит о том что в первом варианте таблица выходит из области видимости каждый раз при завершении функции. И соответственно может быть прибрана сборщиком мусора. Если вам надо чтобы экземпляр таблицы точно сохранялся тот же между вызовами то вариант 2 разумеется. Логика примера КМК подразумевает именно это


На практике же время на формирование этой таблицы не так чтобы было заметно на фоне времени обработки заявки ))
Тайминг функциональности QUIK из луа, как правильно замерить
 
Возник еще вопрос по близкой в принципе теме, поэтому подниму эту.
Допустим, есть СкриптА, торгует Si, и СкриптБ, торгует сбером. В каждом своя функция main исполняющаяся в своем потоке windows. В какой-то момент функция мэйн СкриптА вызывает getQuoteLevel2("SPBFUT", "SiZ8"). Стакан у брокера 50х50, соответственно вызов (для моего компа) будет исполняться 300+ микросекунд. Через микросекунду функция мэйн в СкриптБ выдает вызов getQuoteLevel2("TQBR", "SBER").

Что будет далее, СкриптБ будет стоять пока исполняется вызов из СкриптА или что-то еще?

Доп1: На getQuoteLevel2 свет клином естественно не сходился, взял ее же для примера потому что она одна из самых "долгих". Вопрос разумеется по ситуации с потоками вообще.
Доп2: То что ситуация в примере говорит о неважном проектировании и вообще намекает на склонность к дерьмокодерству в курсе, опять же просто пример придумал на скорую руку )))
Исполнить скрипт питона в Луа
 
Цитата
Let_it_go написал:
Видимо, окошко вызывается не питоном, а командой Луа os.execute
Это "окошко" самого cmd.exe, обычное консольное окно венды говоря по-простому. Избавиться от него нельзя, можно попробовать спрятать. Я когда-то так делал:
1. Скачиваем (откуда гугл подскажет) утилиту cmdow. Нужен только файл cmdow.exe, больше ничего. Его бросаем в любую папку входящую в системный путь, типа c:\windows\system32 или куда вам удобнее.
2. Создаем скрипт оболочки ExecutePythonScript.cmd с содержимым примерно таким:
Код
@cmdow @ /HID
start C:\InstallPython\pythonw.exe C:\py+lua\parser.pyw
В скрипте оболочки слэши одинарные, не двойные (на всякий случай)
3. в луа пишем
Код
os.execute("C:\\SomePath\\ExecutePythonScript.cmd")
По идее должно скрывать окно, но я это последний раз пользовал еще под ХР, не в курсе как работает в современных виндах.
"Ошибка экспорта в MetaStock"
 
Понятно, спасибо. Буду знать.
"Ошибка экспорта в MetaStock"
 
После обновления до 7.19.0.51 изредка при запуске квик стало появляться такое вот сообщение:
Цитата
   Тип    Дата    Время    Сообщение
1,000000    3,000000    11.10.2018    18:32:33    Ошибка экспорта в MetaStock : произошла ошибка с кодом IWR_CANNOT_LOCATE.
Наблюдается раз где-то в 2 недели в квиках от ВТБ и Открытие (Windows 7 64 bit), видел также в QuikJunior когда пытался запускать его под вайном. Никаких метастоков на компе точно нет, никакой экспорт никогда точно не настраивался и не включался.
В принципе никк не мешает, но вот сегодня раз в 10 уже увидел и решил отписаться об этом факте. Как воспроизводить без понятия, просто иногда само появляется при запуске программы.
Страницы: 1 2 След.
Наверх