Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 30.01.2015
04.07.2023 15:04:21
Возможно ошибаюсь, но Вы реализовали очередь по принципу LIFO - это стек, но классическая очередь ( "кто последний", не "последний", а "крайний") это принцип FIFO, на пример которой Вы сослались , ----------------- Т е Вы просто вместо очереди из книги делаете стек - совершенно другую организацию очереди. Ваша реализация - это тоже классика реализации стека.
Некорректность вывода по DDE, При выводе по DDE не совпадают данные в таблице ТТС и в таблице вывода - почему?
При выводе по DDE не совпадают данные в таблице ТТС и в таблице вывода - почему? Причём это не похоже на какую-то задержку - данные постоянно не совпадают...
[img]data:image/png;base64, *[/img]
Попробуйте отключить все фильтры в таблице. Фильтры таблицы не действуют на вывод по DDE
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 30.01.2015
04.07.2023 06:33:35
QUIK создает 7 потоков. Скрипты -запускают main в следующих по очереди потоки.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 30.01.2015
03.07.2023 11:21:00
Объясняю, тем кто не понял. -------------- Если у Вас скрипт запускается одновременно с запуском QUIK, то нет особой разницы, где Вы устанавливаете и загружаете начальные параметры скрипта. ------------------------- Но если Вы запускаете скрипт при работающем QUIK, т е в реальном времени торговли, то возможны следующие последствия в зависимости от места , где вы устанавливаете переменные. Рассмотрим эти варианты: ------------------ 1) В начале скрипта присваиваем значения. В этом случае присвоение происходит до полной загрузки скрипта и запуска функции main. присвоение произойдет лишь при загрузке скрипта. При этом могут быть еще не определены Ваши функции, которые Вы используете для назначения параметров. ------------------- 2) В начале функции main В этом случае весь скрипт уже загружен и все функции определены. Но так как main - это отдельный поток, то при длительной процедуре инициализации переменных могут поступить данные по колбекам и эти данные могут оказать влияние на установку переменных. Вот пример теста main c установкой параметров:
Код
local beg=os.clock();
local x={}
local function sig(i) return i end
function main()
Log:write("main начинаем устанавливать начальные значения"..os.clock()-beg.."\n"); --Log:flush();
for i=1,10000 do x[i]=math.sin(i); Log2:write("X="..x[i].."\n"); Log2:flush();
end;
Log:write("закончили установку нач значений\n"); Log:flush();
while true do
-- nkevent.wait(event); --ждем события
Log:write("main основной цикл="..os.clock()-beg.."\n"); Log:flush();
sleep(10);
end
end
а вот результат работы этого скрипта с колбеками
Код
OnI nit=0.0
main начинаем устанавливать начальные значения0.0010000000002037
On All=0.0020000000004075
On All=0.0020000000004075
On All=0.0020000000004075
...
On All=0.0060000000003129
On All=0.0060000000003129
On All=0.0060000000003129
...
On All=0.029999999999745
On All=0.029999999999745
On All=0.029999999999745
On All=0.029999999999745
On All=0.029999999999745
On All=0.029999999999745
закончили установку нач значений
main основной цикл=0.029999999999745
On All=0.029999999999745
On All=0.029999999999745
On All=0.029999999999745
Внутри цикла установки параметров в функции main вызывается колбек OnAllTrade в основном потоке . ---------------------- 3) Установка параметров в колбеке OnInit() это самый безопасный и предсказуемый способ установки. OnInit вызывается ,когда весь скрипт загружен и определены все наши функции. OnInit вызывается в основном потоке, когда поток main еще не запущен. Так как все колбеки вызываются в основном потоке, то они не могут быть вызваны пока OnInit не завершит работу. =================== Т е все переменные будут определены и загружены без каких-либо неожиданностей. ==================== Приведу для наглядности аналогию. На перекрестке есть светофор. Особо буйные могут ходить через перекресток не взирая на сигналы светофора. Особо продвинутые могут даже ходить с закрытыми глазами. Особо осторожные будут ходить лишь на зеленый. --------------------- Выбор за Вами.
Индикатор на lua, получить значения High и Low дневных баров в индикатор
Пользователь
Сообщений: Регистрация: 30.01.2015
01.07.2023 22:14:51
Читайте документацию на .библиотеку QLua. там все есть. или Вам надо номер страницы каждый раз называть?
Индикатор на lua, Значение индикатора не меняется при смене инструмента
Пользователь
Сообщений: Регистрация: 30.01.2015
01.07.2023 22:12:55
ставьте вывод в лог файл и отлаживайте свой скрипт. Я вам написал что не так. Но как Вам надо знаете лишь Вы. Никто за Вас делать не будет. -------------------------- Рекомендую изучить документацию на библиотеку QLua и программирование на Lua Там есть функции которые Вам надо применить.
Индикатор на lua, Значение индикатора не меняется при смене инструмента
написал: У Вас значения вычисляются лишь один раз при запуске скрипта Чтобы значение пересчитывалось надо вычисления поместить в функцию OnCalculate Попробуйте так:
Код
function Init ()
return 1
end
function OnCalculate (index)
x = getNumCandles ( 'ACTIVE' ) -- расчет количества баров на дневном графике с идентификатором "ACTIVE"
ACTIVE, ACTIVE_N, ACTIVE_Name = getCandlesByIndex ( 'ACTIVE' , 0 , 0 , x) -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE"
L1_ACTIVE = ACTIVE[ACTIVE_N - 2 ].low -- low -1 бара
return L1_ACTIVE -- вывожу искомое значение
end
Спустя время квик выдает 17 тысяч оповещений.
C:\QuikFinam\LuaIndicators\aaa.lua:19: attempt to index a nil value (field '?')
в 19 строке параметр не определен. Ищите в своем коде 19 строку и проверяйте что там. 17 тысяч - это число рпз вызова OnCalculate Если Вам не надо обрабатывать все свечи ( в вашем случае это так то попробуйте так
Код
function OnCalculate (index)
if index==1 then
x = getNumCandles ( 'ACTIVE' ) -- расчет количества баров на дневном графике с идентификатором "ACTIVE"
ACTIVE, ACTIVE_N, ACTIVE_Name = getCandlesByIndex ( 'ACTIVE' , 0 , 0 , x) -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE"
L1_ACTIVE = ACTIVE[ACTIVE_N - 2 ].low -- low -1 бара
end
return L1_ACTIVE -- вывожу искомое значение
end
Индикатор на lua, Значение индикатора не меняется при смене инструмента
Пользователь
Сообщений: Регистрация: 30.01.2015
01.07.2023 19:04:25
У Вас значения вычисляются лишь один раз при запуске скрипта Чтобы значение пересчитывалось надо вычисления поместить в функцию OnCalculate Попробуйте так:
Код
function Init()
return 1
end
function OnCalculate(index)
x = getNumCandles('ACTIVE') -- расчет количества баров на дневном графике с идентификатором "ACTIVE"
ACTIVE, ACTIVE_N, ACTIVE_Name = getCandlesByIndex('ACTIVE', 0, 0, x) -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE"
L1_ACTIVE = ACTIVE[ACTIVE_N-2].low -- low -1 бара
return L1_ACTIVE -- вывожу искомое значение
end
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 30.01.2015
30.06.2023 13:16:25
вообще-то ответ есть в документации: ------------- OnInit Функция вызывается терминалом QUIK перед вызовом функции main(). В качестве параметра принимает значение полного пути к запускаемому скрипту.
Формат вызова:
OnInit(STRING script_path)
В данной функции пользователь имеет возможность инициализировать все необходимые переменные и библиотеки перед запуском основного потока main().
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 30.01.2015
30.06.2023 13:14:53
в итоге если вы параметры торговли определяете в main, то колбеки начнут работу без параметров и могут такого вам наторговать, что будет мучительно стыдно за такой скрипт.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 30.01.2015
30.06.2023 13:13:12
Цитата
Ziveleos написал: Всё же, хотелось бы получить комментарий разработчика, в чем сакральный смысл функции OnInit?
В том, что это этот колбек вызывается раньше всех других колбеков и раньше функции main. Без него у Вас колбеки будут вызываться раньше, чем будет вызвана функция main.
написал: Cвечи формирует сервер биржи, а не QUIK. То, что Вам нужно биржа не формирует.
Это не так. Cвечи формирует сервер QUIK, а не биржа. Но свечи формируются по сделкам полученным с биржи.
то-то я не мог понять, почему у вас открытие свечи для ликвидной бумаги сбербанк запаздывают от времени биржи иногда до 10 секунд. А это сервер QUIK такой тормазнутый.
Интервалы CreateDataSource
Пользователь
Сообщений: Регистрация: 30.01.2015
29.06.2023 11:40:35
Cвечи формирует сервер биржи, а не QUIK. То, что Вам нужно биржа не формирует.
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
Пользователь
Сообщений: Регистрация: 30.01.2015
28.06.2023 17:40:48
Цитата
Дмитрий написал: Hазобрался, настроил, вроде работает как надо. спасибо. Последний вопрос для закрепления материала ))) а вот эта запись " Log:flush() " - что означает в вашем примере записи в Log ?
Log - это имя файла моего - я вам дал пример строки из своего скрипта. flush() - записать данных в файл, иначе они запишутся в память, а в файл лишь после того ,как накопятся в памяти. .
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
написал: У меня один лог файл. В него пишут разные потоки. Так как я могу создавать любое число потоков и Lua машин, то мне нет надобности создавать еще какие-то скрипты. Но мой вариант работы эквивалентен вашему варианту с двумя скриптами.У меня проблемы запись в этот файл. Попробуйте открывать файлы один раз с дозаписью и завершать запись принудительной записью в файл.типа так: Log:write(os.date()..","..tostring(s)..",num="..tostring(num)..","..tostring(count).."\n"); Log:flush();
Вот это, наверное, то, что нужно, только я не понял всю конструкцию - как открыть один раз и потом дописывать? т.е. просто у вас один раз в начале открыт Log = io.open('...', 'a'), а потом уже без открытия просто по ходу вставляете Log:write(os.date()..' и так дает дописывать? p.s. я кажется свою проблему понял, у меня не второй скрипт конфликтил с первым, у меня в первом колбеки могли при стечении обстоятельств писать "логи" одновременно с main(), а так как я постоянно "io.open" и "close' при каждой записи - получалась коллизия, а если буду держать файл открытым, то будут писать оба без ругани, получается. Так?
Если надо не только передавать но и обмениваться, то проще открыть каждому скрипту свой файл для передачи данных другим с ключом "w". Файлы других скриптов открываете с ключом "r"
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
Пользователь
Сообщений: Регистрация: 30.01.2015
27.06.2023 07:02:45
опечатка: У меня проблемы запись в этот файл нет .
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
Пользователь
Сообщений: Регистрация: 30.01.2015
27.06.2023 07:01:44
Цитата
Дмитрий написал: В моей ситуации, я так понимаю, это не поможет. У меня 2 скрипта иногда открывают один и тот же файл (мне надо иметь общий файл, а одновременное открытие - совпадение, которое надо как-то нейтрально обходить), а потом кто-то его первый закрывает, а второй при попытке закрыть еще раз выдает ошибку. Я так это вижу исходя из того, что именно на FileWrite:close() в первом скрипте происходит ошибка (во втором скрипте открывает на чтение и отрабатывает быстрее - там никогда ошибку не выдает - я там вообще только первую строку читаю, больше не надо). Отсюда вопрос: а как-то статус, что файл стал "close" можно получить запросом? пытался выводить значение переменной "FileWrite" через "tostring", чтоб по нему как-то зацепиться, но выдает какой-то буквенно-цифровой код, описание структуры которого в инете найти не смог.
У меня один лог файл. В него пишут разные потоки. Так как я могу создавать любое число потоков и Lua машин, то мне нет надобности создавать еще какие-то скрипты. Но мой вариант работы эквивалентен вашему варианту с двумя скриптами. У меня проблемы запись в этот файл. Попробуйте открывать файлы один раз с дозаписью и завершать запись принудительной записью в файл. типа так: Log:write(os.date()..","..tostring(s)..",num="..tostring(num)..","..tostring(count).."\n"); Log:flush();
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
Пользователь
Сообщений: Регистрация: 30.01.2015
26.06.2023 13:45:34
Цитата
Дмитрий написал: "либо писать метку в строку и искать эту метку" - а это как работает?
скрипт открывает файл на дозапись и пишет лог файл. каждая запись содержит метку времени . другой скрипт открывает файл на чтение и читает этот файл по строкам. Время в метке сравнивает с текущим временем и читает строки, время которых больше.
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
Пользователь
Сообщений: Регистрация: 30.01.2015
26.06.2023 11:05:37
Цитата
Дмитрий написал: И что-то такая конструкция работает не правильно, теперь у меня файл до остановки скрипта пустой. Наверное, скрипт держит его открытым и не фиксирует запись.
Если хотите передавать данные через файл, то надо делать один из следующих алгоритмов: либо контролировать момент изменения файла, либо уничтожать его после чтения либо делать уникальное имя либо писать метку в строку и искать эту метку.
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
Пользователь
Сообщений: Регистрация: 30.01.2015
26.06.2023 10:57:34
Цитата
Дмитрий написал: Спасибо. А вы не могли бы в 2-х словах пояснить как работает условие без значения, ну т.е. я понимаю когда, например " if Filewrite == nil then ... ", а что значит переменная без сравнения в конструкции " if Filewrite then ..." ?
оператор if исполняется если следующее выражение true. если File что-то присвоено, то это true.
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
Пользователь
Сообщений: Регистрация: 30.01.2015
24.06.2023 17:50:34
Цитата
Дмитрий написал: function mark_Fail (zap, mark) - моя функция записи в файл FileWrite = io.open('D:\\QLUA\\fails\\mark.txt', zap) FileWrite:write(mark) FileWrite:close()end
попробуйте так:
Код
function mark_Fail (zap, mark) - моя функция записи в файл
FileWrite = io.open('D:\\QLUA\\fails\\mark.txt', zap)
FileWrite:write(mark)
if Filewrite then FileWrite:close() end
end
Дельта - хеджер, Буду рад комментариям по коду
Пользователь
Сообщений: Регистрация: 30.01.2015
22.06.2023 15:59:11
В QPile есть три существенных недостатка. 1) интерпретатор - медленно интерпретирует 2) ограничение на количество переменных 3) скрипт работает по тайиеру, а не по событиям торгов.
Равнение на "Яндекс"!!!
Пользователь
Сообщений: Регистрация: 30.01.2015
22.06.2023 11:55:46
«Яндекс» увеличил фонд своей программы багбаунти «» в 2023 году в 2 раза до 100 млн рублей. В 2022 году компания выплатила белым хакерам 39,7 млн рублей за нахождение уязвимостей и багов в своих сервисах и службах.
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
Пользователь
Сообщений: Регистрация: 30.01.2015
22.06.2023 11:05:09
Цитата
paluke написал: Брокер же получает данные с биржи. Я не знаю, как оно там внутри устроено, но вполне возможно, что если вы первый клиент, подписывающийся на какой-то инструмент, то именно в этот момент и будет отправлен запрос на биржу. А вот есть ли в биржевых протоколах (plaza, fix/fast) возможность узнать, придут ли вообще данные?
Объясняю как там устроено. ---------------------- Биржа рассылает общую информацию периодически в широковещательном режиме. Все профи ее получают вне зависимости от вашего подписания. Когда Вы подписываетесь, то Вас включат в список рассылок на сервере брокера QUIK ( разработчики QUIK поправят, им виднее).
Дельта - хеджер, Буду рад комментариям по коду
Пользователь
Сообщений: Регистрация: 30.01.2015
20.06.2023 20:25:55
Цитата
Олег123 написал: Это понятно. Но qpile я выучил за день и скрипт написал за час. накидать на коленке самое оно.
если комменты по вашему скрипту, то выкладывайте его на форум. Лень ходить на файлообменник.
QIUK 9.8.0.11 выходит при attach MSVC 2019 debugger - защита или проблема?
написал: Я делаю это в редакторе SciTe, который написан на луа
Здравствуйте, nikolz! Интересно.Никогда не работал со SciTe.Т.е. в нём можно, не запуская квик, войти на сервер, вызвать функцию DLL, которая в свою очередь вызовет функцию типа CreateDataSource() и потом сможет обработать возвращаемые по callback или без callback данные, отлаживая DLL под MSVC ?
нет, так нельзя. ---------------------- В SCITE можно отлаживать скрипты на луа, питон и др языках, а также отлаживать dll для этих языков. ========== Когда я делаю новые функции для луа в виде dll, то отлаживаю эти функции. После их отладки, я отлаживаю скрипты с отлаженными dll в демо-версии qUIK. Вызывать в сырых dll функции из QLua не вижу смысла, так как это лишь усложняет отладку dll.
Ошибка Trans2Quik.dll при переходе на Quik v10 c v7
Пользователь
Сообщений: Регистрация: 30.01.2015
19.06.2023 08:24:35
ДемоСчет. Что не так?
Пользователь
Сообщений: Регистрация: 30.01.2015
18.06.2023 19:24:55
Цитата
Igor_User написал: Такой вопрос. Когда на демо-счёте покупаю/продаю фьючерс по рынку, то на счёте блокируется несколько больше средств, чем гарантийное обеспечение данного фьючерса. Возможно это уже с учётом комиссий. Но где можно посмотреть, какие комиссии на демо-счёте?
P.S. Возможно это где-то уже обсуждалось на форуме, но у меня найти не получилось...
не заморачивайтесь конкретными значениями на демо счете. --------------------------------- Этот счет исключительно для тестирования работоспособности скриптов и освоения нажатия клавиш а КВИКЕ.
Работа в режиме аукциона
Пользователь
Сообщений: Регистрация: 30.01.2015
17.06.2023 06:48:20
если Вы про предторговый период , то его можно определить по времени.
Сейчас переменной присваивается значение 0 на каждой итерации цикла while. Очевидно, что инициализацию переменной нужно вынести за его пределы.
надо вынести начальное значение из цикла.
Баг - изменение номеров старых свечей
Пользователь
Сообщений: Регистрация: 30.01.2015
16.06.2023 15:58:05
Краткость -сестра таланта. ----------------- Поднимите руку, кто понял, про что фунтик написал?
Добавление флагов в скрипт
Пользователь
Сообщений: Регистрация: 30.01.2015
15.06.2023 11:35:13
у вас flag всегда ноль.
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.06.2023 19:32:29
и еще... на рынке быстро можно лишь слить депозит. Рынок (брокеры) любят Буратин.
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.06.2023 19:30:32
Цитата
Alexey89 написал: 1) Весь опыт пара калькуляторов на джавсакрипте и пара простеньких батников. 2) Пару недель пытаюсь что-то делать на Lua, и продолжаю, через полгода думаю буду знать больше. Недавно понял в main () слип не тормозит весь квик сразу, это был прорыв! 3) Ни разу, смотрю несистемно, кусками, скорее всего это неправильно, но заставить себя систематически штудировать я не в силах. У меня много вопросов, но ответов нет в документации, примеров там мало, нужной информации мало. Интерпритация почему произошла какая ошибка там нет, как LUA работает под квиком. Думаю что важнее понимать спецификацию работы квика с LUA (куча прог где LUA работает, но ведь код для каждой конкретной проги будет разный? или все везде одинаково? вот где в документах ответ на этот вопрос? только опытный тут ответит), у меня сберквик думаю под ним свои ньюансы работы и куча кода из примеров просто не работает под ним, надо напильником его дорабатывать.
У меня вроде простая задачка "Нажал скрипт с названием купить или скрипт с названием продать. И выставляется заявка с тейк профитом и стопом по бумаге с исполненной заявкой с таким же числом лотов который в исполненной заявке." Стоит ли от корки до корки все пройти что бы ее решить? Или это таки сложная задача?
Кстати она вообще выполнима средствами LUA на квике?
У меня тоже брокер сбер. Все работает нормально. -------------------------- Ликбез: ------------------- Все скрипты для QUIK пишутся почти по шаблону одинаково. ----------------------- Для написания скриптов надо изучить две книжки: ----------------- 1) Примеры, а затем и скрипты на луа, лучше писать и тестить в редакторе SciTe. ----------------- 2) документация на библиотеку функций QLUA. для тестирования функций QLUA установите демо версию QUIK и подключитесь к демо серверу,
Скрипт который выставляет заявку исходя из объема портфеля и предыдущей исполненной заявки, Возникают непонятные проблемы с запросом информации о портфеле и заявке. Постоянно возвращается nil, что бы не спросил.
-- Входная точка для скрипта function main () -- Инициализируем параметры для запроса param_name_buy = "BUYDEPO" param_name_sell = "SELLDEPO" class_code = "SPBFUT" sec_code = "SiH9"
-- Запрошиваем ГО покупателя result = getParamEx (class_code, sec_code, param_name_buy) -- Выводим результат по ГО покупателя message( "Гарантийное обеспечение покупателя:\n".. "param_value = " .. tostring(result.param_value).. "; \n" ) -- Запрашвиваем ГО продавца result = getParamEx (class_code, sec_code, param_name_sell) -- Выводим ГО продавца message( "Гарантийное обеспечение продавца:\n".. "param_value = " .. tostring(result.param_value).. "; \n" ) end
Мне надо самому получить sec_code, а не задавать его самому. Есть какая-либо возможность получить это название акции? Из заявки или активного графика или стакана открытого? Если глупость говорю простите. Я нуб, побольше бы реальных рабочих примеров getParamEx или какого аналога.
Три вопроса, чтобы понять как Вам помочь: 1) На каком языке программирования умеете писать работающие программы? 2) Сколько времени Вы затратили на изучение программирования на Lua? 3) Сколько раз Вы прочитали документацию на QLua от начала до конца?
Как убрать полосу горизонтальной прокрутки в окне графика? У одного окна когда-то настроил, а теперь найти не могу (( См. график по BRM3 - c полосой прокрутки, а график по NGM3 - без. Нужно как по NGM3.
Уточнение - речь о видимой полосе прокрутки в самом низу, с ползунком.
слева выходит за границу
LUA и PIPE
Пользователь
Сообщений: Регистрация: 30.01.2015
13.06.2023 06:41:22
sleep(1) - это больше, чем 1 мс. ------------------- но это не про pipe. если хотите убрать эти грабли, то используйте системные события.
телепатов нет, поэтому, что Вы слышите, знаете лишь Вы . читайте документацию на Lua 5.4. Вроде Вам все объяснил на русском , черным по белому.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 30.01.2015
12.06.2023 10:57:15
Цитата
paluke написал: Использование деления там специально чтобы проверить конвертацию в double и обратно в int64. Числа взял из первого сообщения. На самом деле при этом 1951785056590629888 сохраняет значение, а 1951785056590630794 превращается в 1951785056590630912.
Полагаю Вы знаете про ошибки округления, поэтому конвертация int64 в double и обратно не может быть всегда точной. ---------------- Более того, все это есть в документации по форматом и для этого не надо делить и умножать ------------------ Ликбез: ------------------- число 1951785056590629888, 1951785056590630794 -- это 19 значащих цифр а double хранит мантиссу лишь с точностью 15-17 значащих цифр. --------------------- Вы это и проверили - т е 15-17 значащих цифр мантиссы не могут всегда точно хранить 19 значащих цифр целого числа.
написал: ваш пример не корректный в нем есть неявный формат печати. Вы уверены что он 64 битный?
Если вопрос ко мне, то да, все значения 64-битные. К тому же, если бы имел место некорректный формат печати, то он был бы некорректен во всех случаях. Но это, как Вы можете видеть, не так.
Я вроде бы выше написал в чем ошибка. Повторю, если не заметили. Ошибка теста выше в неправильном использовании оператора деления. Надо использовать целочисленное деление а не деление с плавающей точкой. ---- Все остальное правильно.
Вы ошибаетесь. Это не вопрос к разработчикам, а к документации на Lua 5.4.2 Рекомендую изучить sorce Lua 5.4.2 Если точки нет, то это целое и конвертируется через int64.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 30.01.2015
11.06.2023 18:29:15
Цитата
paluke написал: А версия quik какая? Похоже, что где-то номер заявки в double складывается. А там точности не хватает.
если выложите свой тест, то могу посмотреть.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 30.01.2015
11.06.2023 18:27:32
Цитата
paluke написал: А версия quik какая? Похоже, что где-то номер заявки в double складывается. А там точности не хватает.
тестировал на 9.7.1. Сейчас тесты делаю на 10.2.1.12
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 30.01.2015
11.06.2023 17:57:22
всего в тесте выставлял и снимал до 500 тысяч заявок и без проблем.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 30.01.2015
11.06.2023 17:55:51
относительно снятия заявок. Я тестировал выставление и снятие заявок на демо сервере. У меня все выставлялось и снималось на акциях фьючерсах и валютном счете.