Я ещё заметил, что эти граф. эффекты начали проявляться недавно, а с тёмной темой я работаю давно. Причём, раньше я после обеда, когда интенсивность торгов меньше, выбирал режим экономии энергии, когда у ЦП тактовая частота ставится 800 МГц вместо 2-х ГГц. И при этом мой скрипт обрабатывал в OnAllTrade и OnQuote сообщения по нескольким тикерам. Сейчас, если снизить частоту ЦП, не только вылазят левые иконки, но и фон на пустых местах окошек может вдруг стать белым вместо тёмного (и таким остаться) даже без работающего скрипта. Такое впечатление, что с какой-то версии Квик начал перерисовавать красивые иконки в тёмной теме 60 раз в сек. При этом диспетчер задач показывает нагрузку на ЦП 3%, а нагрузку на GPU 0-1%.
nikolz написал: Каким образом он измерил опережение конкурентов?
Это же видно по alltrades. Свои сделки там можно узнать, а время сделки даётся с точностью до мкс. Эти вопросы лучше было бы ему задать на той самой странице, где он об этом написал.
И если смотреть на всё это со стороны, то бред одного анонима, который хочет пустить пыль в глаза и при этом не подтверждает своих доходов выпиской по счёту от брокера, ничем не лучше бреда других анонимов, которые тоже не подтверждают своих прибылей. Поэтому сторонним наблюдателям, как я, невозможно кого-то предпочесть.
Заметил такую особенность: если вывести окна, которыми управляет Виндовс (через ShellExecute) (Система/Загрузить настройки из файла, Система/Сохранить настройки в файл) и переместить их на другое место, то в след. раз они рисуются уже на том месте, где были в последний раз. А другие окна (напр., Система/Настройки/ Основные настройки) рисуются всегда посередине экрана, а окно Сервисы/Lua скрипты у меня может нарисоваться в разных местах, если даже его не передвигать. Желательно где-то в настройках запоминать координаты и размер выводимых окон и рисовать их посередине экрана (или в другом стандартном месте), если разрешение экрана (или размер окна Квика, если он не в полноэкране) изменилось.
Это может иметь значение, если на экране имеются стаканы с заранее установленным количеством акций в поле Q, настроенные на выставление заявок по щелчку мыши. После какого-то обновления Виндовс 10 я начал замечать в ней такую ошибку: щёлкаешь на каком-то окне, к примеру, на кнопке ОК или Отмена, это окно закрывается, а этот же щелчок мыши ещё раз отрабатывается на окне, которое было под ним. Так один раз я щёлкнул в окне, которое было поверх стакана, на стакане вторично отработался этот щелчок и я совершил сделку по продаже 500000 акций по цене покупки. На самом деле я щёлкнул в столбце продажи на очень маленькой цене, хорошо, что биржевой алгоритм достаточно интеллектуален и в этом случае продаёт не по щёлкнутой цене, а по лучшей цене покупки. А то так можно было бы одним щелчком уполовинить свой депозит у брокера и скончаться от инфаркта прямо на рабочей табуретке, как какой-нибудь основатель Рамблера в 48 лет... Пришлось тут же снова покупать эти 500000 акций по лучшей цене продажи. Поэтому теперь, чтобы щёлкнуть на окне поверх стакана, я сдвигаю это окно так, чтобы щёлкать над столбцом с ценой акций, это приводит только к перемещению подсветки строки в стакане. Или перед открытием окна перехожу на вкладку, скажем, Новости.
Та же ошибка в Виндовс приводит к тому, что, напр., щёлкаешь по меню Расширения, оно открывается и тут же закрывается, т.е. один щелчок мыши (особенно, если время нажатия было не сверхмаленьким) считается за два щелчка или за двойной щелчок. (Мне известно, что эти параметры настраиваемые, но после этого обновления Виндовс я их не менял.)
Этот же эффект я наблюдал на Ютюбе: напр., щёлкаешь в окне видео по треугольничку, чтобы поставить видео на паузу, этот треугольничек начинает делать анимацию shape tween, постепенно превращаясь в две вертикальные черты, но до конца эта анимация не доходит и возвращается назад к треугольничку. Иногда, чтобы поставить видео на паузу, приходится несколько раз щёлкать по треугольничку.
Кто-то ещё замечал с некоторых пор подобный эффект?
nikolz, проверял скорость str:sub и без двоеточия сам с пом. цикла и os.clock(), написал по памяти. Возможно, скорость для разных вариантов зависит от ЦП. И я проверял это в Квике.
Что значит фейк по-русски? Не стоит разбираться с lua_share?
Про то, что я зря перешёл с Дельфи на си, это, разумеется, шутка. Тут на форуме с ч/ю есть проблемы... Хотя, на Дельфи можно было натаскиванием компонентов на форму быстро сделать навороченную программу. Но мне сейчас не требуется писать программы с GUI.
swerg написал: Судя по картинкам - у вас слабенький комп и не хватает GDI ресурсов.
Да, ЦП i3-5005U, 2.00GHz, TDP 15 Вт, 2 ядра, 4 потока, для ноутбуков, графика Intel HD Graphics 5500. А как можно увидеть, что не хватает GDI ресурсов, и что это за ресурсы? Я вывел окно диспетчера задач поверх остальных, выбираю в Квике курсором меню, вижу лишние иконки, но загрузка ЦП и графики почти нулевая...
А если у ЦП будет больше ядер и графика Intel HD Graphics 6600, это как-то повлияет на появление левых иконок?
Сейчас на этом сайте посмотрел вашу статью и ваш спор с явно опытным человеком со странной кличкой kalikazandr: https://quikluacsharp.ru/stati-uchastnikov/modul-realizatsii-interfejsa-obrabotki-sobytij-quik-s-isp... (Мне даже показалось, что вы имеете отношение к этому сайту. Кстати, домен пора уже продлять.) А этого человека что-то давно не видно. Его советы по написанию роботов я видел также на сайте https://quik2dde.ru/ Такое впечатление, что его метод с dll предпочтительнее. (Хотя, я с некоторым подозрением отношусь к тем, кто вместо "не знаю" пишет "хз"...) А вот и ответ на ваше замечание о том, зачем так стараться не писать не на чистом QLua: === Привет! 1. К сожалению, я не могу представить свое решение (не Fifo), оно уже реализовано на с++ и позволяет мне опережать конкурентов на 2+ мс. Был случай, единичный, когда ближайший конкурент купил акции всего лишь на 780 мкс позже меня, но тут хз, как получилось, видимо бывают исключения из правил. ===
TGB написал: На форуме много сообщений о том, что не надо писать сложно.
На форуме также есть сообщение от человека - автора поистине удивительной и при этом крохотной торговой программы (судя по его постам), которая использует только ТТТ и торгует безо всяких там индикаторов, ИИ и нечёткой логики лучше него, и этот человек вдобавок - соавтор сильной шахм. программы и был лично знаком с Д. Бронштейном. И мне запомнилась его фраза, что простые алгоритмы (торг. программы) не приносят прибыли. А есть ещё нар. мудрость "простота хуже воровства". :-)
Цитата
TGB написал: Практически любого робота для QUIK можно написать используя только Qlua (Lua).
Но мне хочется не только написать этого робота, а чтобы он ещё и торговал в плюсе...
Скорее, знакомлюсь с инструментарием, который можно использовать для сравнительно честного отъёма денег для пополнения своего отн. скромного бюджета.
Я в другой ветке приводил загадочную цитату из старого сообщения о том, что подобная информация ускорила программу автора сообщения в 30 раз, и это было для него критично. Даже в самом Lua можно с пом. замера времени с удивлением узнать, что, к примеру, string.sub(str, i, j) работает раза в два быстрее, чем str:sub(i, j), хотя интуитивно так не кажется (во 2-м случае у функции меньше параметров). Что же тогда сказать о применении dll, в которых, как мне кажется, можно ускорять вычисление индикаторов, создавая для этого потоки?
Я пока немного туманно представляю алгоритм работы хорошей торг. программы, как будто смотрю сквозь волнистое стекло в женскую баню, но думаю, что программа должна мониторить много тикеров и считать для каждого на разных таймфреймах пару надёжных индикаторов (кстати, каких? RSI и скользящие средние, Keltner Channel?), и если они оба говорят, что надо покупать, то покупать. А тут мощь dll, которая оттранслирована с оптимизацией и поддержкой наборов вплоть до AVX2, будет кстати. А сама-то (Q)Lua, написанная в стандарте C99, небось, даже не знает о том, что существует SSE и всякие там out of order execution?
Поэтому хочется сразу сделать выбор в пользу dll, чтобы потом не переписывать код. Что-то я сомневаюсь, что всяким там ММ финансовые инженеры пишут дорогие жульнические программы на QLua...
swerg написал: Не понятен ваш вопрос. Вы разобрались - но вроде как и не разобрались, судя по вопросу.
В чём-то, что легче понять, разобрался, а по поводу, можно ли выйти за пределы массива, не разобрался: там программный код надо понять. Поэтому и хотел найти того, кто в этом разобрался, чтобы не тратить зря время, но такого не нашёл. Прямого ответа обычно не дают, а как-то ходят вокруг да около этого вопроса...
Цитата
nikolz написал: может. nil - это тип=0.Если разобрались, то знаете, что в структуре table есть поле unsigned int sizearray; -- размер массива-------------------Кроме того, размер любого блока , выделенного из кучи средствами malloc,realloc , можно прочитать функциями ОС.
Если можно выйти за пределы массива (т.е. в конце массива может не быть элемента типа nil), то это плохие новости. Тогда перебирать массив надо, зная, сколько в нём элементов. А какой Win API можно узнать, сколько байтов выделено, зная адрес этого блока памяти?
nikolz написал: Луа хранит числа в двух форматах double(8 байт ) и long (4 байта)
Насколько я понимаю, у Луа, скомпилированного под 32-разрядную Виндовс, будут форматы float и long (по 4 байта), а если Луа скомпилирован под 64-разрядную Виндовс, то числовые форматы будут только double и int64 (по 8 байтов).
snurhel написал: Но в других источниках я читал, что number всегда занимает место 64 бита в формате double, даже если записано целочисленное значение. Так как все-таки Lua записывает числа?
Lua под х64 записывает числа в форматах int64 (только со знаком), и double (тоже 64). У них там в доке сказано, что тип integer это подтип типа number.
Если заглянуть в потроха Lua, то можно усечь, что в байтике, в котором хранится тип переменной number, для integer установлен дополнительный битик. Из-за того, что раньше (говорят, до вер. 5.3) в Lua не было целочисленного типа, теперь в выдаче скриптов приходится видеть дробные значения в полях qty (quantity, количество акций): напр., 12345.0. А при вызовах функций qlua, говорят, этот нолик с точкой надо убирать, напр., через math.floor(order.qty).
Установил стандартную тему, сколько ни ходил по меню, левых иконок не увидел. Опять загрузил тёмную тему и сразу в меню "Система" начал наблюдать левые иконки. Какая связь тёмной темы с левыми иконками, если мой скрипт даже не запущен? И почему я раньше больше года не видел этих левых иконок? Может быть, это связано с обновлением Квика?
Не слышал пока о таких программах, которые загружают все dll, из соседних папок. :-) Зачем Квику при старте загружать, к примеру, DDE2EXCEL_PR.dll? Папки lib у меня нет.
С cpath скорее не ошибка, а просто взял эту строку из чужого скрипта и не разбирался с ней. ДЛЛ не загружена, потому что нет слова require. Попробую поставить светлую тему и посмотреть. Там их по-моему всего две: светлая и тёмная...
Вот пара новых примеров, которые случились подряд, радиатор у ПК почти холодный. Если сбоит память, то почему ни разу не было ошибок в работе программы, не говоря уже о вылетах по защите памяти? Исключительно то лишние свои, то посторонние иконки...
Кстати, идея обратить внимание на температуру не лишена остроумия: я сейчас потрогал рукой корпус, он был просто тёплый, я включил вентилятор и прошёлся по меню: а вдруг опять вылезет вчерашняя картинка? И она таки вылезла...
Ввиду китайскости этого ПК и того факта, что он работает с 2016 г., можно сделать вывод, что в нём что-то постепенно дохнет... Но всё-таки логика появления картинок только в Квике и только в выпадающих меню непонятна... Хочется увидеть эти иконки также и в других программках.
Строго говоря, я чувствую, что радиатор чуть тёплый, надо будет посмотреть конкретнее на температуру ЦП. Это, кажется, в BIOS показывают? Нет под рукой утилиты для показа температур.
Я смотрю, этот баг, видимо, с настройками веб-сервера, так и не починили. Интересно, кому принадлежит домен и сайт luaq.ru, владельцам Квика? Выглядит сайт, как официальный.
Мне известно, что они увеличиваются и имеют размером степень двойки. Меня интересует, может ли внешняя длл сделать цикл по массиву и остановиться, если встретит nil, не выйдет ли она за пределы отведённой для массива памяти? Я с месяц назад писал о чтении массива напрямую без rawgeti, открою секретик: я разобрался в исходниках и структурах и умею из длл читать массив. Работает, как часы. Кстати, зависания Квика и были в результате отладки этой длл. Всвязи с этим и вопрос.
Как я писал, он безвентиляторный, задняя стенка этой ребристой алюм. коробочки служит радиатором для ЦП. Он стоит на боку со снятой задней крышкой, перед ним стоит УСБ вентилятор. Я рукой пробую, если тепло, то включаю вентилятор, приоткрываю окно. Поэтому перегрева и близко нет.
Вернее сказать, очень давно, то ли в Win98, то ли в Win XP я наблюдал такую картинку, когда Виндовс не хватало памяти в ОЗУ: на рабочем столе вместо некоторых иконок рисовались кусочки каких-то изображений. Сейчас диспетчер показывает, что занято 44% ОЗУ, не так уж и мало.
Опа, только что я хотел похвастаться, что опять переустановил Квик и долгле время не вижу левых иконок, как опять появилось (см. аттач). Причём, после переустановки Квика я скриптов не запускал. Я установил Квик, обновил его, начал настраивать, т.к. свои wnd файлы я из его папки убрал, записал только в его папку папку с ключами и текстовый файл INFO.ini, чтобы меньше настраивать Квик. Этот файл выглядит целым.
Но на картинке уже не иконка, а кусок изображения курсора Виндовс (виден бублик у кусочек от стрелки). Помню, что я уже видел такую картинку на том же пункте того же выпадающего меню.
Какие будут предположения? Что-то испортилось на диске в файле Виндовс, сбоит ОЗУ? Проблема в этой самой тёмной теме (но почему только у меня?), вмешательство барабашки, инопланетян? При этом Квик работает. С такой головоломкой я ещё не сталкивался...
За скорость радею, но за зрение радею ещё больше. :-) Первый раз слышу, что тёмная тема тормозит, это совершенно не логично...
Левые иконки стали появляться после зависания Квика, которые вызывала моя длл. Эти иконки появляются, когда работает мой скрипт чисто на Луа, без загрузки посторонних модулей. Он и до появления левых иконок работал.
Если рассуждать логически, то как могут возникнуть левые иконки в меню? Меню рисует Виндовс, содержимое меню сидит в ресурсах ехе файла. Но почему, если закрыть меню и сразу открыть, то Виндовс эти иконки уже не рисует? И почему они также рисуются слева от пунктов меню, для которых иконки не предусмотрены? Это загадка...
Я USB-хабом не пользовался... Это, видимо, расширитель для USB, чтобы подключать больше USB устройств? Не хватало мне ещё что-то докупать в связи с этой проблемой. Насколько я понял, она возникает по причине того, что при попытке загрузиться с флэшки BIOS не загружает (не знаю откуда) драйвер для работы с флэшкой. Максимум, что я видел при многочисленных попытках загрузить Акронис с флэшки, - это первоначальная заставка программы, которая как-то всё-таки читается с флэшки, и потом всё мертво.
А вот на моём рабочем маломощном мини ПК BIOS с разблокированными доп. функциями: можно, напр., запретить какой-то порт SATA. Это очень удобно, если есть два загрузочных диска и хочется, чтобы при загрузке с одного из них другого не было видно.
Помню, я как-то нарвался на неприятную особенность вин10: стоял на ПК загрузочный диск с вин7, я к нему подключил ещё один диск и установил на него вин10. И эта вин10 без спросу полезла на диск с вин7 и сделала так, что с него уже нельзя было загрузиться, а можно было загрузить с него вин7 только через меню выбора ОСдля загрузки при загрузке с диска с вин10. Если убрать диск с вин10, то загрузка с диска с вин7 стала невозможна. Причём, никаким ковырянием настроек вин10 нельзя было это отменить и вернуть загрузку с диска с вин7!!!
Я хотел найти в Интернете ответ на вопрос: что будет, если на ПК стоит загрузочный диск с вин10 и я подкючу к нему ещё загрузочный диск с вин10: не получится та же история, как и с вин7? Ответа я не нашёл. Может, здесь кто-то знает ответ?
Я сколько-то лет назад делал такой фокус: ретранслировал и исправлял mbr загрузчик в 1-м секторе диска и добавлял к нему маленькое меню: с какого диска грузиться, с 1-го или со 2-го? Мой фрагмент кода обрабатывал нажатие клавиши через BIOS и в mbr секторе на диске, с которого не грузимся, исправлял байт в таблице разделов, чтобы он выглядел, как неразмеченная область диска, чтобы виндовс туда не лезла. Но не хочется вспоминать всё это дело, да и у этого Topton диск размечен как GPT, а с GPT я не умею делать такой фокус...
Не хватает функции CreateWindowEx (из набора сервисных функций qlua). Она должна принимать также название вкладки, на которой должна будет создать окно. А то на текущей вкладке может не быть места для окна, приходится его вручную перемещать на другую вкладку. Под названием вкладки я имею в виду текст, который на ней написан в Квике, напр., "Графики", "Новости". Разумеется, должны быть и остальные функции с добавкой Ex для работы с окнами, напр., DestroyTableEx.
Сейчас вижу баг с этим сайтом: вместо показа страницы браузер предлагает сохранить её содержимое на диск. К примеру, вот что сохраняется из корня сайта:
Вот здесь ещё есть его описание: https://habr.com/ru/articles/694440/ На моём топтоне, в отличие от этой статьи, насколько я помню, в BIOS нет меню Advanced.
Да, я уже подумывал так сделать... У меня тут за дисплеем валяется ещё один китайский мини ПК, но уже 6-ядерный, я хотел на него установить Квик, но тогда придётся переключать туда-сюда эзернет провод от модема и от дисплея... Я не смог сделать так, чтобы он получал Интернет от модема через вайфай и не смог загрузиться на нём с флэшки, чтобы снять копию диска, из-за ущербности/урезанности его BIOS (при загрузке возникает надпись Evaluation version). Это TopTon Computer, и это известная проблема: https://4pda.to/forum/index.php?showtopic=994767&st=160 Если бы не этот дурацкий BIOS, то это был бы замечательный мини-ПК...
Видимо, придётся опять установить Квик на этот же маломощный мини-ПК, на котором работаю сейчас, и опять с нуля делать конфигурацию для wnd файлов...
Спасибо, разумеется, если закрыть окно сообщений, то фокус вернётся назад автоматом (виндовс вернёт). Хотелось бы, чтобы он сразу возвращался при возникновении окна сообщений, как я написал выше.
Мне давно хотелось, чтобы не возникали сообщения с какими-то экспирациями фьючерсов, но при этом я боялся упустить какие-то важные сообщения... Оставил пока галочки в "Отмеченные, как важные" и в "Ошибки транзакций".
МенЯ продолжают преследовать эти иконки... Сегодня я не запускал этот скрипт с длл, сейчас только захотел закрыть Квик и в некоторых выпадающих меню обнаружил подобную картинку, как в аттаче. Это повторилось раза 3-4 подряд, но я не могу через клавишу PrtScr запиасть несколько копий экранов... В этих меню Квика слева от каждого пункта встречалась также иконка в виде барашка от SoftPerfect RAM Disk, который сидит в трее.
И это в недавно скачанной версии Квика... У меня только одно предположение: возможно, как-то подпорчен wnd файл, который сегодня был загружен в Квик. Но я с этим файлом сегодня торговал...
Ещё возник такой вопрос о выделении памяти под массив в таблицах Луа. Я смотрел исходники на бразильском, но с налёту так и не смог выяснить: по-бразильски я ещё не очень понимаю, да и буковки там мелкие, плохо видать...
Вопрос такой: может ли быть случай: когда вся память, выделенная под массив, занята элементами этого массива? Напр., выделена память под 8 элементов массива и в нём сидит 8 элементов?
Я пытался поискать мнения тех, кто разобрался в этом, нашёл вот это замечание Бориса Нагаева: https://qna.habr.com/q/117781 Но из него так до конца и не понял ответа на мой вопрос...
Кстати, есть ли граф. биб-ка для си (не для си++, я на нём не пишу), с пом. которой можно было бы рисовать векторную графику как во флэш? Я когда-то делал игры в ехе файлах, в ресурсах которых сидел флэш плеер от Адоба в виде ocx файла, и который работал через компонент Дельфи то ли через оле, то ли через дде (МС зачем-то наплодила кучу такого добра). Но это была 32-разрядная Дельфи. Есть ли что-то подобное для гну си под x64? Я пока нашёл граф. биб-ку SDL, попробовал компилировать в gcc и запускать примеры, они работают (с этим обычно бывают проблемы). Но если в этой растровой биб-ке попробовать рисовать красивые кастомные свечи (к примеру, на мл. таймфреймах золид цветом, а поверх них рисовать свечи со старших таймфреймов с частичной прозрачностью) для хорошй наглядности, и тогда не надо будет переключаться между таймфреймами, то возникают сложности с перерисовкой фона под полупрозрачными свечами. Если это делать в DirectDraw, то в нём с пом. bltfast можно быстро перерисовывать всю раб. область окна (или весь экран в полноэкране). А с флэш плеером не надо было заботиться о перерисовке фона, он сам это делал.
Я давно делал игры по своим идеям в чистом Win API на Дельфи под DirectDraw 3.3, мою тетрисоподобную игру с 35-ю фигурками гексамино одна немецкая игровая контора выбрала для своего CD из всез российских тетрисов как лучшую по играбельности, а выбирали они с пом. российской игровой конторы Alawar, которая происходила из Новосибирского Академгородка.
Но то было давно и в Дельфи 7 от 2002-2003 г. выпуска, а сейчас я перешёл в си и в 64 разряда...
Иногда надо быстро набрать в стакане в поле Q количество акций для заявки, а в это время выскакивает окно сообщений и приходится щёлкать по полю ввода для возврата фокуса. Это нервирует и способствует ошибкам. Можно сделать так, чтобы при появлении этого окна фокус ввода возвращался на прежнее место. Насколько я знаю, Win API возвращает хендл окна, у которого был отнят фокус ввода.
Похоже, нашёл причину (но могут быть и другие): если моя dll имеет, к примеру, имя aaa.dll (тогда в скрипте, который её использует, будет require('aaa')) и если интерпретатор lua найдёт в папках из global variable LUA_PATH или из environment variable LUA_PATH файл aaa.lua, то интерпретатор загрузит его вместо aaa.dll, отсюда, видимо, и возникает "C stack overflow". А я давал этой dll и скрипту одинаковое имя! Тогда, получается, выполняя этот require, интерпретптор не загружал ничего или повторно загружал мой скрипт типа aaa.lua? https://www.lua.org/pil/8.1.html
Почему же в require нельзя задавать расширение файла, чтобы не было путаницы?
А сейчас что бы я ни делал, 1-й раз после запуска Квика мой скрипт отрабатывает (есть звук), а при последующих вызовах "C stack overflow". Но стоит в скрипте вместо моей dll вставить require("w32") и всё работает, хоть 10 раз вызывай звук - всё нормально! Причём, каких-то принципиальных отличий в моём исходнике С от luaw32.c от swerg нет!
Выхожу из Квика, удаляю tmsg.dat, запускаю Квик, запускаю свой скрипт: работает, выдает звук. При следующих запусках этого скрипта возникает "C stack oferflow"... Кстати, в этом меню видел уже другую левую иконку на другом месте (см. аттач).
Попробую удалить файл tmsg.dat, куда зачем-то записываются имена скриптов и текст ошибок ("C stack overflow"), может, после этого перестанут появляться эти дурацкие иконки...
Сейчас вышел из Квика, подождал, опять вошёл и сразу же в меню "Сервисы" увидел левую иконку напротив "Скрипты" (см. аттач). А с час назад я видел напротив "Скрипты" другую левую иконку: с буквой i (как в окне с информацией). И это на том Квике, который я сегодня вечером скачал и установил!
Кто-то может объяснить эти особенности этой чудесной программы? Там в Квике юзерам молоко за вредность дают?