Как получить информацию о количестве у меня на покупку/продажу лотов типа CNYRUB_TOM?, Как получить информацию о количестве у меня на покупку/продажу лотов типа CNYRUB_TOM?
Александр написал: Вдогодку. Зато появились 3 строчки по CNY в таблице "Позиции по деньгам". Но в Таблице "Позиции по деньгам" нету колонок типа "В покупке", "В продаже", т.е. невозможно увидеть итоговое количество лотов на покупку и продажу по портфелю и походу на сегодня нигде в квике по валютным лотам эту итоговую информацию не получить(. Разрабочики!!! Что это за недоработка? Почему такую немаловажную информацию, как итоговое количество лотов валюты на продажу/покупку нигде невозможно найти?
По деньгам - это ваши деньги. Там указывается сколько есть и сколько вы потратили на позиции или сколько у вас заблокировано. Но это деньги. Позиции по инструментам - это не деньги, т е Ваши контракты. ----------------- Я Вам привел картинку в которой есть позиция по валюте и по акциям.
Виталий написал: 1. Вопрос к знатокам: при работе со стеком, перед началом чтения через lua_next(L, -2), нам необходимо делать lua_pushnil(L). Зачем? Ведь это по сути означает "положить сверху NULL". Для чего мы это делаем? 2. Далее, почему в некоторых случаях мы читаем данные, как lua_tostring(L, -1). А в некоторых lua_tostring(L, 1). Если я правильно понимаю - это не одно и то же. В стеке из двух элементов индекс 1 - это низ стека, а -1 - верх стека! 3. Потом, для чего мы делаем lua_pop(L, 1); при использовании lua_next(L, -2), когда читаем стек? Ведь это удалит только один верхний элемент и все. Т.е., когда я читаю из стека некую таблицу - я должен посмотреть ключ (поле) по lua_next(L, -2) и, если он есть, то прочесть данные через lua_tostring(L, -1). Но потом я удаляю всего 1 элемент сверху. Не понимаю, что за дичь. 4. Есть у кого-то понимание / объяснение / картинка как выглядит стек qLua, когда в нем лежат смешанные данные? Т.е. как туда кладется таблица, строки и т.д.? Потому что по логике чтения я могу предположить, что туда кладется сначала ключ, а сверху значение. Это следует из логики чтения: -2 ключ, -1 значение (что тоже какая-то хрень, но это еще как-то понять можно набухавшись). Но что если у меня таблица в таблице или плоские данные, типа строка / число? Документация не то чтобы объясняет это все.
Можно конечно забить и принять это как факт, а для себя сделать класс-обертку и забыть навсегда эти ужасы. Но стало уж очень принципиально понять, как это работает и что вообще происходит.
1. Не NULL а nil. Чтобы выбрать первый элемент таблицы. ------------------------ 2. -1,1 - выбор с разных концов стека. --------------------------- 3. см документацию: int lua_next (lua_State *L, int index); Снимает ключ со стека, ложит пару ключ-значение из таблицы Т е ключ функция сама убирает из стека, а значение убираем сами. ------------------------------ 4. qLua - это библиотека функций. У нее нет стека. Стек есть у виртуальной машины луа. qLua никаким боком не имеет отношение к этому. ------------------- Не надо ничего предполагать или гадать, лучше прочитать: https://web.archive.org/web/20230415092320/https://lua.org.ru/contents_ru.html https://jevico.github.io/ https://eligovision.ru/media/upload/lua.pdf
Спасибо.
1. Не принципиально, суть поняли. Я на разных языках пишу, где-то NULL (что даже привычней мне), но это одно и то же. 2. Вот зачем и почему? Т.е. я не понимаю почему в одном случае мы читаем через 1, а в других через -1. От чего зависит? Ну т.е. есть какое-то правило по которым таблицы сверху всегда или что, почему таблицы обчитываются через отрицательные индексы сверху стека? 3. Это типа lua_next снимает ключ, а мы через pop убираем остальное после чтения? Жесть какая-то, ну ладно. 4. Хорошо, допустим, но вот интересно как раз как это работает в Lua. Потому что у меня сложилось ощущение какого-то изврата. Хочу понять подробнее как оно работает
Небольшой ликбез. ------------------------- 1. Вы ошибаетесь. NULL и nil это не одно и то же. Это одно и тоже в objective-c, но не в луа. В Lua нет NULL. --------------------- Но если сравнить различные языки, то , если в данных присутствуют значения NULL, логические операторы и операторы сравнения могут возвращать, кроме TRUE или FALSE, также и третий результат — UNKNOWN. --------------- nil в Lua - это всегда false. ----------------- 2. Этот способ адресации делает VMLua не только стековой машиной, но и регистровой машиной. Отрицательный индекс удобен, когда работаем с вершиной, положительные, когда работаем с фактическими параметрами функций. -------------------------------- 4. Зря Вы не читаете учебники и документацию, а придумываете объяснение сами. Проблема Вашего непонимания в том, что Вы не знаете архитектуры процессоров. Пытаетесь разобраться в "железе" на основе знания какого-либо языка программирования. -------------------- Очевидно, что Ваши ощущения - это и есть результат незнания. ------------------ Подробнее написано в ссылках, выше и в других статьях в интернете.
еще у брокера может работать бот, у которого есть порог. Бот срабатывает , вы отменяете. Попробуйте спокойно узнать у брокера по какому критерию они ставят заявки,
Вручную на практике снимать удается (хорошо, что он не рыночные заявки создает), смотришь в таблицу - новая заявка и сразу отменяешь. Возможно брокер и прав, но, не называя имена брокеров хочу сказать, что у старого такой фигни не было, он позволял держать опционы до дня исполнения даже если не хватает обеспечения, а новый за пару дней уже мутит что хочет. Старого брокера выкупили...
Ставить такие заявки могут в региональном офисе брокера. Дело конечно ваше, полагаю зря в опционы полезли. Возможно у Вас позиция при которой в случае неудачи Вы будете должны брокеру кучу бабла. Вот он и страхуется, так как деньги не его а клиентов.
Айдар написал: Кто может подсказать, как отследить заявку от администратора, и моментально снять ее? А то брокер совсем ... . До исполнения опционов еще два торговых дня, а он делает что хочет... Тут даже дело не в отслеживании конкретного номера заявки, можно простой код для снятия всех заявок (буду ночью запускать скрипт от вредителей) Примерно так: отследит колбек черер OnTransReply() и далее снять все активные заявки. Вот со снятием всех активных заявок нужно разобраться.
Вы этого не сделаете. А если сделаете, то Вас брокер заблокирует. --------------- Читайте внимательно договор с брокером. Заявки на биржу подаете не вы а брокер. Системой КВИК Вы подаете заявку брокеру. Тот при возможности ее исполнить отправляет ее на биржу. Брокер имеет право сократить Вашу позицию, если у Вас не хватает обеспечения. ----------------- Фактически брокер всегда прав.
Как получить информацию о количестве у меня на покупку/продажу лотов типа CNYRUB_TOM?, Как получить информацию о количестве у меня на покупку/продажу лотов типа CNYRUB_TOM?
Александр написал: Для получения денежных позиций (класс CETS, бумаги типа CNYRUB_TOM ) что нужно использовать?
Надо смотреть позиции по инструментам., но фирма и счет должны быть другими чем для акций Поэтому предположил, что Вы не выбрали надлежащую фирму и счет.
Как получить информацию о количестве у меня на покупку/продажу лотов типа CNYRUB_TOM?, Как получить информацию о количестве у меня на покупку/продажу лотов типа CNYRUB_TOM?
Виталий написал: 1. Вопрос к знатокам: при работе со стеком, перед началом чтения через lua_next(L, -2), нам необходимо делать lua_pushnil(L). Зачем? Ведь это по сути означает "положить сверху NULL". Для чего мы это делаем? 2. Далее, почему в некоторых случаях мы читаем данные, как lua_tostring(L, -1). А в некоторых lua_tostring(L, 1). Если я правильно понимаю - это не одно и то же. В стеке из двух элементов индекс 1 - это низ стека, а -1 - верх стека! 3. Потом, для чего мы делаем lua_pop(L, 1); при использовании lua_next(L, -2), когда читаем стек? Ведь это удалит только один верхний элемент и все. Т.е., когда я читаю из стека некую таблицу - я должен посмотреть ключ (поле) по lua_next(L, -2) и, если он есть, то прочесть данные через lua_tostring(L, -1). Но потом я удаляю всего 1 элемент сверху. Не понимаю, что за дичь. 4. Есть у кого-то понимание / объяснение / картинка как выглядит стек qLua, когда в нем лежат смешанные данные? Т.е. как туда кладется таблица, строки и т.д.? Потому что по логике чтения я могу предположить, что туда кладется сначала ключ, а сверху значение. Это следует из логики чтения: -2 ключ, -1 значение (что тоже какая-то хрень, но это еще как-то понять можно набухавшись). Но что если у меня таблица в таблице или плоские данные, типа строка / число? Документация не то чтобы объясняет это все.
Можно конечно забить и принять это как факт, а для себя сделать класс-обертку и забыть навсегда эти ужасы. Но стало уж очень принципиально понять, как это работает и что вообще происходит.
1. Не NULL а nil. Чтобы выбрать первый элемент таблицы. ------------------------ 2. -1,1 - выбор с разных концов стека. --------------------------- 3. см документацию: int lua_next (lua_State *L, int index); Снимает ключ со стека, ложит пару ключ-значение из таблицы Т е ключ функция сама убирает из стека, а значение убираем сами. ------------------------------ 4. qLua - это библиотека функций. У нее нет стека. Стек есть у виртуальной машины луа. qLua никаким боком не имеет отношение к этому. ------------------- Не надо ничего предполагать или гадать, лучше прочитать: https://web.archive.org/web/20230415092320/https://lua.org.ru/contents_ru.html https://jevico.github.io/ https://eligovision.ru/media/upload/lua.pdf
выводит цену в виде 150,0 но в стакане цена вида 150 и заявка не выставляется если добавляю так bid = math.floor(bid) тогда все нормально bid = 150 Но если меняю инструмент в котором к примеру 3 знака после запятой то такой код будет округлять до целого. Пробовал получить количество знаков после запятой через Шаг цены, с помощью чат жпт получился такой код
Код
function countDecimalPlaces (number) local _, decimal = tostring(number):match"([^.] * ).(. * )" return # decimalend -- Получаем информацию о выбранном инструментеlocal security_info = getSecurityInfo(classcod, ticker)-- Получаем шаг ценыlocal price_step = security_info.min_price_steplocal decimal_places = countDecimalPlaces(price_step)
и вот тут возникла проблема decimal_places (кол-во знаков после запятой) при шаге цены к примеру 2 выдает 1, а если инструмент имеет шаг к примеру 0,5 то decimal_places выдает тоже 1 каждый раз при смене инструмента приходится менять код, прошу помочь с решением этой проблемы.
можно делать так:
Цитата
Lankaster написал: Профи, подскажите пожалуйста как правильно получить цены "BID" и "OFFER" делаю так
выводит цену в виде 150,0 но в стакане цена вида 150 и заявка не выставляется если добавляю так bid = math.floor(bid) тогда все нормально bid = 150 Но если меняю инструмент в котором к примеру 3 знака после запятой то такой код будет округлять до целого. Пробовал получить количество знаков после запятой через Шаг цены, с помощью чат жпт получился такой код
Код
function countDecimalPlaces (number) local _, decimal = tostring(number):match"([^.] * ).(. * )" return # decimalend -- Получаем информацию о выбранном инструментеlocal security_info = getSecurityInfo(classcod, ticker)-- Получаем шаг ценыlocal price_step = security_info.min_price_steplocal decimal_places = countDecimalPlaces(price_step)
и вот тут возникла проблема decimal_places (кол-во знаков после запятой) при шаге цены к примеру 2 выдает 1, а если инструмент имеет шаг к примеру 0,5 то decimal_places выдает тоже 1 каждый раз при смене инструмента приходится менять код, прошу помочь с решением этой проблемы.
если надо целое, то можно делать так:
Код
local bid=150.123456; local price=bid//1>>0; print("price="..price)
Рассказываю как просто сделать функцию для воспроизведения звука в различных форматах. Надо сделать на СИ dll для луа вот с такой функцией.
Код
static int mciSS(lua_State*L){ mciSendString((char*)lua_tostring(L,1),0,0,0); }
если кто-то не сможет ,пишите - выложу готовую dll. Далее у меня такая dll называется nks. Вызов функции в скрипте записан как nks.mciss ================= Поясняю как ее применять: =========== Чтобы воспроизвести файл в формате WAV надо открыть устройство с этим файлом так:
Код
local file="C:/Windows/Media/Alarm10.wav" -- звуковой файл
nks.mciss("open "..file.." alias MediaFile wait"); -- открыть устройство
Для воспроизведения содержимого файла пишем там , где хочется:
Код
nks.mciss("play MediaFile FROM 0 wait");
======================== Чтобы воспроизвести файл в формате MP3 надо сделать все тоже самое, но для этого файла Например у меня это файл "D:/nks/test.mp3"
Код
local file="D:/nks/test.mp3" -- звуковой файл
nks.mciss("open "..file.." alias MediaFile wait"); -- открыть устройство
Для воспроизведения содержимого файла пишем там, где хочется:
Код
nks.mciss("play MediaFile FROM 0 wait");
Опции : ---------------------------- Если Вам хочется запустить звук и не ждать, когда закончится, то уберите в последней команде "wait" ---------------------------- Если Вам хочется воспроизводить много различных звуков в разных местах скрипта, то в начале скрипта откройте все звуковые файлы и для каждого из них сделайте уникальное имя устройства. Его надо написать вместо "MediaFile" Для воспроизведения конкретного файла надо указать имя его устройства в команде воспроизведения вместо "MediaFile" ============== Желаю успешного прослушивания звуковых файлов.
Serge123 написал: Вернее, дело не в звуковом устройстве: в упрощённом варианте команд файлы с пробелами не играются, а в той форме, что была у w32, как помню, они игрались.
Выкладываю исходник на варианте mciSendString
Код
static int mciSS(lua_State*L){
mciSendString((char*)lua_tostring(L,1),0,0,0);
if (lua_gettop(L)>1)SleepEx(lua_tointeger(L,2),1);
return 0; }
позволяет воспроизводить файлы wav, MP3, повторять, делать паузу
Показал как воспроизвести звуковой файл на Lua из командной строки. ---------------- Недостаток такого способа - затраты времени на загрузку приложения плеера. Достоинство - ничего не надо писать на СИ. =============== В данной теме, по просьбе трудящихся, показываю как воспроизводить звуковой файл сохранить его в памяти для многократного воспроизведения. -------------- Решить эту проблему невозможно без написания функции на СИ. =============== По данной ссылке https://cloud.mail.ru/public/PYXu/YrjyXLvcP можно загрузить zip файл nks.dll c такой функцией, там же есть пример, который напишу ниже, и библиотека Lua53.dll -------------------------- Пример :
Код
--функция для Lua 5.3 выводит на динамики звуковой файл
--при первом вызове записывает файл в буфер
--при последующих вызовах воспроизводит содержимое буфера
--автор nikolz 2024
--распакуйте файл на диск желательно D
--пример вызова функции для вывода на динамики системного звука
path = "D:/nks/" --путь где находится файл nks.dll
package.cpath =path.."?.dll;"..package.cpath
require"nks"
local x="C:/Windows/Media/Alarm10.wav" -- звуковой файл
nks.run(x); -- первый вызов с указанием файла
for x=1,5 do
nks.run(); -- вызов воспроизведение из буфера памяти
end
nks.stop(); -- завершение работы и удаление буфера памяти
nikolz написал: Кроме музыки, в модуле можно синтезировать предложения .
Круть. На след. этапе можно сделать виртуальную дикторшу. А для простых смертных у mciSendString предусмотрено проигрывание звука с заданного смещения и заданной длительности.
Так Вы ничего и не поняли. Поясняю. В начале темы написана одна строчка как воспроизвести звуковой файл. -------------------- Тоже самое что и ваша dll на основе устаревшей функции mciSendString. -------------- Т е не надо никаких dll для этого , понятно?
Есть еще они способ о котором возможно мало кто знает. Я использую такое решение в своих умных устройствах и для отладки звуковых команд для них на луа. --------------------------- Берем модуль внешнего плеера (цена вопроса 1 доллар) подключаем его к USB и загружаем на него свои звуковые файлы . На выход модуля можно подключить динамики. Есть вариант модуля с памятью на чипе флеш либо с внешней флеш. Число таких файлов может быть тысячи В луа используется функция вывода на виртуальнуй UART. Выводим код любого файла и модуль его играет, а скрипт работает дальше. Время вывода команды на модуль несколько мкс. Кроме музыки, в модуле можно синтезировать предложения .
function PlaySoundFile(file_name)
w32.mciSendString("CLOSE QUIK_MP3")
w32.mciSendString("OPEN \"" .. file_name .. "\" TYPE MpegVideo ALIAS QUIK_MP3")
w32.mciSendString("PLAY QUIK_MP3")
end
Но оно делает тоже самое что и мой вариант, но для этого делается спец функция на СИ т е в этом решении вызова из командной строки, но через СИ.
Пардон, ошибся В данной теме написан вариант запуска приложения плеера из командной строки ---------------------------- Т е загрузка файла звука делается приложением плеера. Т е сначала грузится приложение плеер а оно грузит исполняемый файл. --------------------- Основное время затрачивается на загрузку приложения плеер. Но плюсом такого решения является то, что плеер работает в своем потоке. ---------------------- Вариант
Код
local x="C:/Windows/Media/Alarm10.wav"
local s="powershell -c (New-Object Media.SoundPlayer "..x..").PlaySync();"
for j=1,10 do os.execute(s); end
Лишь упрощает написание командной строки но не исключает многократную загрузку ================= Чтобы загрузка была однократной надо использовать функцию на СИ и вызывать ее на исполнения. ----------------------- При этом если файл длинный, то воспроизведение звука будет тормозить скрипт. ------------------- Либо надо делать или брать готовую функцию исполняющую в отдельном потоке. ----------------- В инете есть монго решений.
funduk написал: А знаете ли Вы способ, который не загружает с диска этот файл всякий раз при проигрывании? А делает это один раз в начале работы скрипта
Знаю, но написал специально эту тему с целью дать вариант простого решения без написания каких-либо вспомогательных функций. ------------------- Какой смысл усложнять решение , если загрузка этого файла займет микросекунды, а возможно ОС не будет грузить ее каждый раз снова.
Serge123, Вспомнил, что после кризиса 2008 года написал книжку Сорос "Новая парадигма финансовых рынков" Читал ее когда-то. Интересный взгляд на законы рынка достаточно авторитетного спекулянта.
nikolz написал: после кризиса всегда появляются новые Гуру, так как у старых слился депозит.
А это разве может помешать старым гурам базара, у которых "слился депозит", продолжать ими оставаться? Толпа-то этого не знает...
Я не обращал внимания на дату. Если найдёте что-то современное и полезное, дайте ссылку.
Много современного и полезного есть в платном торговом терминале Amibroker и на их форуме , а также на сайте и форуме метатрейдера, на сайте института . ------------------- Много статей и исследований есть на сайтах недружественных стран. --------------- Но сейчас как-то отошел от этого, поэтому дать ссылки не могу.
Constantin написал: Мне вот интересно - каждый пишет свою обвязку для роботов? Это не рационально. Нет общей?
Вы правы. Но бесплатных торговых систем для бирж не существует в мире. --------------- КВИК это не торговая система, а программа для подачи заявок брокеру (так определено изначально) ---------------- Сначала был язык QPILE для некоторой автоматизации подачи заявок Потом встроили луа для этого. --------------- Но КВИК это не торговая платформа, а так и остался терминалом для подачи заявок брокеру. Что не так?
а не смущает, что этим заметкам 7 лет? И что случилось с публичным портфелем этого авторами, как полагаете? --------------- Кстати, он пишет что ведет свой сайт 10 лет Т е после кризиса 2008 что-то купил быстрее кого-то и после этого не стал продавать, а стал учить других торговать. после кризиса всегда появляются новые Гуру, так как у старых слился депозит. ------------------ Сейчас после 2022 - период новых Гуру до следующего кризиса
nikolz написал: Тогда вообще не понятно заявление, что он купил раньше кого-то.
Могу предположить, что по обезличенным сделкам можно было увидеть, что он успел купить по одной цене, а через очень короткое время пришла чья-то крупная покупка (видимо, по рынку) уже по др. цене.
Отн. kalikazandr, которого что-то давно не видно, могу сказать, что выглядел он довольно опытным роботостроителем, не хуже других: насколько я помню, году 20-21-м присутствующий здесь опытный тов. swerg (Да благословит его аллах и приветствует) на форуме quik2dde.ru опубликовал пример своего спредового робота (видимо, тов. swerg (Мир ему и благословение аллаха) в то время ещё только учился), а этот kalikazandr раскритиковал этого робота и сказал, что это пример, как не надо его писать). При этом тов. swerg (Да вознаградит его аллах добром) ничуть не обиделся, зашла речь о том, как надо писать, и советы этого kalikazandr по написанию роботов и возможные подводные камни я ещё в прошлом году даже скопировал в свой текстовый файлик, который, надеюсь, и сейчас лежит на твердотельном накопителе.
Цитата
nikolz написал: Предположу, что вечером задержка у Вас возможна из-за работы алгоритма Nagle в винде.
Так этот алгоритм сидит в винде? Хм, мне здесь кто-то уже отвечал, что это алгоритм по фамилии одного мужика, который сидит на роутерах и по вечерам склеивает пакеты для экономии траффика. А если он в винде, то можно его попробовать как-то отменить?
относительно спредового робота. На форуме выкладывал скрипт такого советника на луа. Добавьте туда блок торговли по его сигналам и будет вам робот.
Опять кто-то сказки рассказывает М-6000, М-7000, СМ-1, СМ-2 - это HP(система команд с HP2000), M6000 - это советский вариант американской HP2000 -------------------------------------- CM3, 4, 1420, - это DEC(система команд PDP). DBK - вариант на микропроцессоре 1801. =================== и система команд у DBK и CM2 совершенно разная. Даже байты перевернуты в числах.
============================ БЭСМ-6 (аналог CDC 6200) так и осталась самой мощной ЭВМ до 90-х. ------------------- Но сказочникам все едино.
nikolz написал: Вам о чем-нибудь говорит название "обезличенные сделки"?Свои вы как-нибудь опознаете, но не конкретного конкурента.
А он разве писал о ком-то конкретном? В этом благородном деле все - конкуренты.
Цитата
nikolz написал: От терминала квика у вас на компе до очереди на сервере биржи путь не близкий.
Да, я понимаю... Если я захочу дойти до Москвы, то пару лаптей ботинок точно сношу. Особенно вечером тяжело выставлять заявки (в 19:00:01): посылаю первые 4 раза заявку через 5 мс., а они приходят почти одновременно. А в последнее время два раза вечером видел, что на все 14 заявок не приходил отклик OnTransReply. Более того, я в файле, куда пишет свои действия скрипт, 2 раза не видел сообщения об отправке 1-й заявки, при этом она исполнялась. Кто-то может пояснить причину такого явления? (Ошибки в моём скромном скрипте не предлагать, я в нём кода не менял).
Тогда вообще не понятно заявление, что он купил раньше кого-то. ------------------------------------------ Предположу, что вечером задержка у Вас возможна из-за работы алгоритма Nagle в винде.
nikolz написал: Каким образом он измерил опережение конкурентов?
Это же видно по alltrades. Свои сделки там можно узнать, а время сделки даётся с точностью до мкс. Эти вопросы лучше было бы ему задать на той самой странице, где он об этом написал.
И если смотреть на всё это со стороны, то бред одного анонима, который хочет пустить пыль в глаза и при этом не подтверждает своих доходов выпиской по счёту от брокера, ничем не лучше бреда других анонимов, которые тоже не подтверждают своих прибылей. Поэтому сторонним наблюдателям, как я, невозможно кого-то предпочесть.
Вам о чем-нибудь говорит название "обезличенные сделки"? Свои вы как-нибудь опознаете, но не конкретного конкурента. ------------------- Если Он что-то купил а потом кто-то еще это же купил , то по этому факту Вы не узнаете, кто из вас раньше подал заявку, а кто позже.
Serge123 написал: Я ещё заметил, что эти граф. эффекты начали проявляться недавно, а с тёмной темой я работаю давно. Причём, раньше я после обеда, когда интенсивность торгов меньше, выбирал режим экономии энергии, когда у ЦП тактовая частота ставится 800 МГц вместо 2-х ГГц. И при этом мой скрипт обрабатывал в OnAllTrade и OnQuote сообщения по нескольким тикерам. Сейчас, если снизить частоту ЦП, не только вылазят левые иконки, но и фон на пустых местах окошек может вдруг стать белым вместо тёмного (и таким остаться) даже без работающего скрипта. Такое впечатление, что с какой-то версии Квик начал перерисовавать красивые иконки в тёмной теме 60 раз в сек. При этом диспетчер задач показывает нагрузку на ЦП 3%, а нагрузку на GPU 0-1%.
проблема в железе. Можно попробовать следующее. 1) Выгрузить браузер 2) Выгрузить все приложения кроме Квика 3) Установить более низкое разрешение монитора.
Serge123 написал: nikolz, проверял скорость str:sub и без двоеточия сам с пом. цикла и os.clock(), написал по памяти. Возможно, скорость для разных вариантов зависит от ЦП. И я проверял это в Квике.
Что значит фейк по-русски? Не стоит разбираться с lua_share?
Про то, что я зря перешёл с Дельфи на си, это, разумеется, шутка. Тут на форуме с ч/ю есть проблемы... Хотя, на Дельфи можно было натаскиванием компонентов на форму быстро сделать навороченную программу. Но мне сейчас не требуется писать программы с GUI.
Фейк по многим причинам. ----------------- Автор пишет: " позволяет мне опережать конкурентов на 2+ мс." ---------------------------- Каким образом он измерил опережение конкурентов? -------------------------- Если работает на QUIK , то время отправки заявки составит примерно 0.1 мс. Поэтому невозможно опережать на 2 ms -------------------------- Если работает на винде, то квант винды 10 мс и возможны моменты когда его задача будет ждать эти 10 мс ---------------------------- Если комп не в дата центре, то запаздывание получения данных через интернет уже порядка 10 ms и он никогда не обгонит компы в датацентре. -------------------------------- Если сидит в датацентре, то там задержка менее 1 мс и обгонять на 2мс - это значит отставать ото всех. ------------------------- Далее автор пишет: " Был случай, единичный, когда ближайший конкурент купил акции всего лишь на 780 мкс позже меня," ------------------------- Эту информацию можно получить лишь по данным с сервера биржи, а их даже брокер не получает. ================== Ну и последнее. ------------------------ Важно не то когда Вы купили, а то , c какой прибылью Вы вышли из позиции, т е, когда продали. ----------------------- Можно раньше всех такого говна накупить... ================ Вывод: Не читайте до обеда фейки на форумах и думайте над тем, что читаете, прежде, чем перепостить такой бред.
Serge123, Вы меньше верьте надписям на заборах. -------------------------- Си является эталоном при тесте языков на скорость исполнения. Читайте техн. статьи а не форумы.
Сейчас на этом сайте посмотрел вашу статью и ваш спор с явно опытным человеком со странной кличкой kalikazandr: https://quikluacsharp.ru/stati-uchastnikov/modul-realizatsii-interfejsa-obrabotki-sobytij-quik-s-isp... (Мне даже показалось, что вы имеете отношение к этому сайту. Кстати, домен пора уже продлять.) А этого человека что-то давно не видно. Его советы по написанию роботов я видел также на сайте https://quik2dde.ru/ Такое впечатление, что его метод с dll предпочтительнее. (Хотя, я с некоторым подозрением отношусь к тем, кто вместо "не знаю" пишет "хз"...) А вот и ответ на ваше замечание о том, зачем так стараться не писать не на чистом QLua: === Привет! 1. К сожалению, я не могу представить свое решение (не Fifo), оно уже реализовано на с++ и позволяет мне опережать конкурентов на 2+ мс. Был случай, единичный, когда ближайший конкурент купил акции всего лишь на 780 мкс позже меня, но тут хз, как получилось, видимо бывают исключения из правил. ===
От слова Привет и далее фейк или по-русски - вранье.
Serge123 написал: string.sub(str, i, j) работает раза в два быстрее, чем str:sub(i, j),
Вы это сами проверяли или опять на форуме у того кто видел кого-то прочитали? ---------------- вот вам тест:
Код
local str="iqreporoerp[tp[]yprtlh;lh[yyjpy[[y]j;g][j;][[p[lf;d,;,n;hm';hm";
local N=10000
local t1;
local s;
local k=os.clock(); for k=1,N do s=string.sub(str,5,20) end t1=os.clock()-k
k=os.clock(); for k=1,N do s=str:sub(5,20) end t2=os.clock()-k
print(t1/N,t2/N,t1/t2)
nikolz написал: может. nil - это тип=0.Если разобрались, то знаете, что в структуре table есть поле unsigned int sizearray; -- размер массива-------------------Кроме того, размер любого блока , выделенного из кучи средствами malloc,realloc , можно прочитать функциями ОС.
Если можно выйти за пределы массива (т.е. в конце массива может не быть элемента типа nil), то это плохие новости. Тогда перебирать массив надо, зная, сколько в нём элементов. А какой Win API можно узнать, сколько байтов выделено, зная адрес этого блока памяти?
Я уже написал Вам, что у вас есть размер массива поле Table sizearray; Если Вы пишите напрямую по указателю array, то почему не проверяете sizearray? В исходниках есть пример проверки.
Serge123 написал: Мне известно, что они увеличиваются и имеют размером степень двойки. Меня интересует, может ли внешняя длл сделать цикл по массиву и остановиться, если встретит nil, не выйдет ли она за пределы отведённой для массива памяти? Я с месяц назад писал о чтении массива напрямую без rawgeti, открою секретик: я разобрался в исходниках и структурах и умею из длл читать массив. Работает, как часы. Кстати, зависания Квика и были в результате отладки этой длл. Всвязи с этим и вопрос.
может. nil - это тип=0. Если разобрались, то знаете, что в структуре table есть поле unsigned int sizearray; -- размер массива ------------------- Кроме того, размер любого блока , выделенного из кучи средствами malloc,realloc , можно прочитать функциями ОС.
а для 64-разрядных целых чисел определены специальные новые типы данных.
--------------------------------
Linux: размер long становится 64-разрядным, в то время как размер int остается 32-разрядным в 64-разрядных версиях Linux.
=========================== Распространенные проблемы с 64-разрядной миграцией Visual C ++
При использовании компилятора Microsoft C ++ (MSVC) для создания приложений для запуска в 64-разрядной операционной системе Windows вам следует знать о следующих проблемах:
int и a long являются 32-разрядными значениями в 64-разрядных операционных системах Windows.
Для программ, которые вы планируете компилировать для 64-разрядных платформ, следует соблюдать осторожность и не назначать указатели на 32-разрядные переменные.
Указатели являются 64-разрядными на 64-разрядных платформах, и вы усечете значение указателя, если присвоите его 32-разрядной переменной.
size_t, time_t и ptrdiff_t являются 64-разрядными значениями в 64-разрядных операционных системах Windows.
time_t это 32-разрядное значение в 32-разрядных операционных системах Windows в Visual Studio 2005 и более ранних версиях. time_t теперь по умолчанию это 64-разрядное целое число.
Вы должны знать, где ваш код принимает int значение и обрабатывает его как size_t или time_t значение. Возможно, что число может вырасти до 32-разрядного числа, и данные будут усечены при их передаче обратно в int хранилище.
Модификатор %x (шестнадцатеричный int формат) printf не будет работать должным образом в 64-разрядной операционной системе Windows. Он будет работать только с первыми 32 битами передаваемого ему значения.
Используйте %I32x для отображения 32-разрядного интегрального типа в шестнадцатеричном формате.
Используйте %I64x для отображения 64-разрядного интегрального типа в шестнадцатеричном формате.
%p (шестнадцатеричный формат указателя) будет работать должным образом в 64-разрядной операционной системе Windows.
nikolz написал: Луа хранит числа в двух форматах double(8 байт ) и long (4 байта)
Насколько я понимаю, у Луа, скомпилированного под 32-разрядную Виндовс, будут форматы float и long (по 4 байта), а если Луа скомпилирован под 64-разрядную Виндовс, то числовые форматы будут только double и int64 (по 8 байтов).
не возражаю , так как в луа это одна и та же структура.
nikolz написал: Луа хранит числа в двух форматах double(8 байт ) и long (4 байта)
Насколько я понимаю, у Луа, скомпилированного под 32-разрядную Виндовс, будут форматы float и long (по 4 байта), а если Луа скомпилирован под 64-разрядную Виндовс, то числовые форматы будут только double и int64 (по 8 байтов).
уже нет квиков под 32 разрядную версию, так как для хранения номеров сделок надо 64 бита.
snurhel написал: Доброго времени суток. В Lua, я совсем новенький, так что просьба не ругаться за банальные вопросы. Я собираюсь записывать историю историю изменения отрытого интереса в бинарный файл, для дальнейшего анализа в другой программе. В формате: Дата Время Цена Last Значение интереса 12.02.2024 16.42.01.074:074244 12.298 20000 Время тика хочу записывать в posix формате(unix время, long 64 бита), но обнаружил что в Lua это время с точностью до секунд, и не микросекунд. Поиск решения внятного ответа не дал, видел что на форуме поднимался этот вопрос, но так ни к чему вроде как и не пришли. Можно ли только средствами языка Lua решить этот вопрос, или надо писать костыли?
Для цены хотел использовать double(64 бита), а для открытого интереса integer(32 бита). И вроде как в Lua 5.3 появился целочисленный тип, но я так понял Lua c динамической типизацией, сам присваивает как ему кажется правильней тип, и напрямую это ему не указать. Но в других источниках я читал, что number всегда занимает место 64 бита в формате double, даже если записано целочисленное значение. Так как все-таки Lua записывает числа?
И если все-таки размер number меняется, то может ли userdata послужить решением в этом вопросе? Возможно если сам не разберусь, отдам задачу более квалифицированному человеку, но хотелось бы все равно понять, как будет действовать Lua в квике, при записи бинарного файла. Знаю что можно просто все писать в csv, но не хочу тратить время на преобразование строк в числа, хоть и не претендую на HFT, но хотелось бы меньше лишних движений.
У Вас много вопросов и не понятно, на какой отвечать, но попробую. ---------------------- Луа хранит числа в двух форматах double(8 байт ) и long (4 байта) ------------------------ Хранятся эти числа в структуре . В этой же структуре хранятся и указатели. ------------------------ Поэтому размер не зависит от типа данных. ------------------------- Писать бинарный файл можно как запись строк. Луа пишет в файл все байты вне зависимости от значения байта . ----------------------- Время с дискретом 0.1 мкс можно получить используя API C for lua. Т е написав или взяв в интернете функцию высокоточного чтения времени. ================ Но я бы рекомендовал Вам сначала разобраться с реальными задержками данных поступающими в терминал и скоростью реакции вашей программы на их изменение. Потом решать, какие точности измерений Вам необходимы.