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

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

Страницы: Пред. 1 2
Примеры dll на GCC 64 для работы со скриптом
 
Библиотеку lua нужно указывать: ключики -L, -l
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
 
По документации у getDataSourceInfo() нет параметров
"KILL_ALL_FUTURES_ORDERS", Снятие всех активных заявок на FORTS
 
Цитата
Елена Сидорова написал:
BASE_CONTRACT = GAZR,
кавычки не забыли?
Дублируются пользовательские сообщения из скрипта lua
 
Цитата
nikolz написал:
Цитата
2) Если сделок миллион. Сколько времени уйдет на поиск   t_trades[trade.order_num]?
Там хеш-таблица. Много времени не уйдет.
sendTransaction выдает ошибку для облигаций, sendTransaction выдает ошибку для облигаций (хотя работает для фьючерсов)
 
Можно и как-то так:
Код
order["TRANS_ID"] = tostring(LastOrderId)
order["CLASSCODE"] = "TQCB"
order["ACTION"] = "NEW_ORDER"
order["ACCOUNT"] = "L01+00000F00"
order["OPERATION"] = "B"
order["SECCODE"] = "RU000A102S80"
order["PRICE"] = "98.10"
order["QUANTITY"] = tostring(quantity)
order["EXECUTION_CONDITION"] = "PUT_IN_QUEUE"
getParamEx
 
https://forum.quik.ru/forum10/topic5558/ четыре года прошло...
getParamEx
 
Цитата
Вадим Никитин написал:
Цитата
Alexander написал:
Подскажите кто знает если. С помощью getParamEx есть ли параметры в ТТТ такие, чтобы отсортировать фьючерсы на акции от остальных фьючерсов. В квике по названию вроде ничего не подходит. Или как-то такое сделать по другому. Т.е. я получаю: sec_list = getClassSecurities("SPBFUT") и потом мне из всей этой кучи надо выделить только фьючерсы на акции. По класскоду у всех "SPBFUT", что у индексных, что у товарных, что у акционных. Пока вижу только вариант через string.gmatch и шаблон, но тогда для каждого варианта(смотрим на мосбирже все фьючи на акции) надо указать шаблон. Так пока делаю, но это длинно, для каждой акции свой шаблон. И спиок на бирже могут поменять и придётся менять код. Типа бы какого-нибудь не только класскоде, а ещё бы и подкласса иметь на фьючерсы на акции.
 1)  Получаете список всех фьючерсов из класса  SPBFUT
2)  Получаете список всех акций из класса  TQBR
3)  Проходитесь по всем нужным фьючерсам из пункта  1  (с требуемой датой исполнения и т.п.),
    доставая из их спецификации код базового актива . Можно например через  getSecurityInfo  или из  ТТТ .
4)  Проверяете  есть ли такой код в списке кодов акций  из пункта  2 .
5)  Если есть, значит этот фьючерс - фьючерс на акцию.
6)  Profit...
Ну почти... Посмотрите на сбербанк или газпром. Код базового актива для фьючерса может не совпадать с кодом акций.
В чём преимущество OnInit
 
Цитата
Владимир написал:
появился гениальный язык С, любовь на всю жизнь
Что же вы на ненавистном вам луа пишите? Можно же в одну строчку загрузить библиотеку, написанную на С. И все остальное делать уже там. Регистрировать колбеки - lua_register. Дергать функции quik через lua_pcall. И никакого тормозного интерпретатора.
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
 
Не нужны никакие таймауты. Надо просто работать по событиям. По приходу данных - свечей, сделок, котировок, ...
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
 
Брокер же получает данные с биржи. Я не знаю, как оно там внутри устроено, но вполне возможно, что если вы первый клиент, подписывающийся на какой-то инструмент, то именно в этот момент и будет отправлен запрос на биржу. А вот есть ли в биржевых протоколах (plaza, fix/fast) возможность узнать, придут ли вообще данные?
Не снимаются заявки в секции FORTS
 
Вы бы сразу про С++ написали - быстрее бы проблему нашли.
Не снимаются заявки в секции FORTS
 
Это в lua два подтипа. А в C api надо явно выбирать что использовать - lua_Number или lua_Integer. C не умеет "два в одном".
Не снимаются заявки в секции FORTS
 
Так то в С тип lua_Number - это double. Не надо его использовать для номера заявки.
Не снимаются заявки в секции FORTS
 
https://www.lua.org/pil/2.3.html это ссылка на книгу по lua 5.0, там никаких int64 еще не было. Вы не на С++ а на lua проверьте. А то может вы С api неправильно используете (по доке от старой версии lua).
Не снимаются заявки в секции FORTS
 
На всякий случай: для записи в лог номера в строки преобразуются функцией tostring()?
Не снимаются заявки в секции FORTS
 
Цитата
nikolz написал:
Цитата
paluke написал:
Использование деления там специально чтобы проверить конвертацию в double и обратно в int64. Числа взял из первого сообщения.
На самом деле при этом 1951785056590629888 сохраняет значение, а 1951785056590630794 превращается в 1951785056590630912.
Полагаю Вы знаете про ошибки округления,
поэтому конвертация int64 в double  и обратно не может быть всегда точной.
----------------
Более того, все это есть в документации по форматом и для этого не надо делить и умножать
------------------
Ликбез:
-------------------
число 1951785056590629888, 1951785056590630794  -- это 19 значащих цифр
а double хранит мантиссу лишь с точностью 15-17 значащих цифр.
---------------------
Вы это и проверили - т е 15-17 значащих цифр мантиссы не могут всегда точно хранить 19 значащих цифр целого числа.
Если вам этой информации достаточно, чтобы точно убедится, что  1951785056590630912 не какое-то случайное значение, а результат округления 1951785056590630794 - я вас поздравляю.
Я так в уме не могу, мне проверить надо было.
Не снимаются заявки в секции FORTS
 
Цитата
paluke написал:
Проверил у себя. На quik 10.1 order_num в OnTransReply имеет тип integer, и номер там без искажений, совпадает с тем что в result_msg.
Автор, а брокер у вас какой?  
Проверял на фьючерсах, на реальном счете, и номер там был длинный, в double нормально не помещается.
Не снимаются заявки в секции FORTS
 
Проверил у себя. На quik 10.1 order_num в OnTransReply имеет тип integer, и номер там без искажений, совпадает с тем что в result_msg.
Автор, а брокер у вас какой?  
Не снимаются заявки в секции FORTS
 
А math.type(order_num) что говорит?
Не снимаются заявки в секции FORTS
 
Использование деления там специально чтобы проверить конвертацию в double и обратно в int64. Числа взял из первого сообщения.
На самом деле при этом 1951785056590629888 сохраняет значение, а 1951785056590630794 превращается в 1951785056590630912.
Не снимаются заявки в секции FORTS
 
Цитата
nikolz написал:
Цитата
paluke написал:
А версия quik какая? Похоже, что где-то номер заявки в double складывается. А там точности не хватает.
тестировал на 9.7.1.
Сейчас тесты делаю на 10.2.1.12
Тогда это вопрос к разработчикам. Оно однозначно через double конвертируется:
Код
Lua 5.4.2  Copyright (C) 1994-2020 Lua.org, PUC-Rio
> 1951785056590629888 / 1 | 0
1951785056590629888
> 1951785056590630794 / 1 | 0
1951785056590630912
>
Не снимаются заявки в секции FORTS
 
А версия quik какая? Похоже, что где-то номер заявки в double складывается. А там точности не хватает.
Синхронизация QUIK с NTP
 
Я же не сам придумал про 0.1 ms: https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/support-boundary
Цитата

The other requirements to achieve 1 ms accuracy for a specific target system are:

  • The target computer must have better than 0.1 ms of network latency between its time source

Синхронизация QUIK с NTP
 
Цитата
Майкрософт декларирует возможность 1 ms.
Так майкрософт  декларирует 1 ms кажется только если у вас до stratum 1 сервера с сетевая задержка меньше 0.1 миллисекунды. Ну то есть если у вас под боком есть атомные часы - можно обеспечить такую точность.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Любой механизм ipc - сокеты, каналы, разделяемая память, сообщения, dde...
И зачем вообще отдельная программа? Что мешает делать всё прямо в dll?
Скрипт не видит значение индикатора с определенной периодичностью.
 
Цитата
Юрий написал:
Я бы вообще сложил всё это в общую сумму, например так: hour*10000+minute*100+sec, и поставил условие, если больше 30, то ок.

По поводу вывести сообщение - совет правильный, но для меня это будет сложно, не программист я...
Не программист и в алготрейдинг? Смело. Поищете, где-то были истории, как из-за ошибок в торговых роботах миллионы сливали.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Цитата
Юрий написал:

Я смотрел код lua скрипта, через который подключается и получает данные платформа TigerTrade. Там кроме подключения самой DLL больше ничего нет. Не подскажете как можно таким образом в DLL получать все необходимое?
Вы же вроде на С собираетесь писать? То есть как собрать dll знаете?
Экспортировать из dll функцию luaopen_<libname> с прототипом lua_CFunction
В этой функции зарегистрировать lua функции OnInit(), main(), и т.д.
lua функции из С вызываются через lua_call

А можно что-нибудь готовое поискать
Скрипт не видит значение индикатора с определенной периодичностью.
 
1. Что такое Get_Info_Param()? В документации есть getInfoParam() - без подчеркиваний и с маленькой буквы.

2. Ну выведите сообщение message(Get_Info_Param("CONNECTIONTIME")) и посмотрите своими глазами, в каком формате.
3. И дергать функцию три раза нехорошо. У вас может смениться секунда и минута - первый вызов отработал в 1:02:59 а второй в 1:03:00. Лучше записать результат вызова в переменную и дальше из нее вырезать часы-минуты-секунды.
Какая кодировка используются в Lua?
 
Цитата
swerg написал:
Alexander, строки текста откуда берутся? в cpp файле в тексте программы?
А cpp-файлы в какой кодировке-то у вас сохранены? сможете определить?
Так то кодировка исходника может отличаться от кодировки, в которой будет строка после компиляции https://learn.microsoft.com/en-us/cpp/build/reference/execution-charset-set-execution-character-set?...
Выгрузка библиотек
 
Цитата
Kalmar написал:
Цитата
paluke написал:
 https://github.com/lua/lua/blob/master/loadlib.c#L20  4
А ее ктото вызвал?

Цитата
paluke написал:
Ну и про выгрузку выше   https://forum.quik.ru/messages/forum10/message37303/topic4425/#message37303  
Нет желания проводить эксперименты.

К тому же, я незнаю как работает вся эту луашная магия:

Цитата
function unrequire(m)
 package.loaded[m] = nil
 _G[m] = nil
end
Я вижу тут зануление таблиц.
Приводит ли это к выгрузке модулей - неизвестно.
Вызвал сборщик мусора. А зануление таблиц - это убить ссылку, чтобы GC увидел, что оно больше не используется.
Выгрузка библиотек
 
Ну и про выгрузку выше https://forum.quik.ru/messages/forum10/message37303/topic4425/#message37303
Выгрузка библиотек
 
Цитата
Kalmar написал:
Цитата
paluke написал:
Вообще-то в исходниках lua есть вызов FreeLibrary. Вроде бы gc должен ее вызывать, когда библиотека больше не используется
Кто такое сказал?
И как ваще GC должен понять про твою либу, которую ты загрузил для себя??
https://github.com/lua/lua/blob/master/loadlib.c#L204
Выгрузка библиотек
 
Цитата
Kalmar написал:
Цитата
Alexander написал:
Попробую поднять данную тему вновь. Вобщем всё что выше написано - не работает Библиотека не выгружается!.
Явный вызов FreeLibrary для твоей либы (которую ты загрузил в скрипте, не так ли?) - не работает?

Или когда ты ожидаешь что либа будет отгружена? Автоматически, по завершении/отмене скрипта? Такого нет.
Нужно явно выгружать либу. Ну и конечно, если либа выгружена, а ты к ней будешь обращаться - все попадает :)
Вообще-то в исходниках lua есть вызов FreeLibrary. Вроде бы gc должен ее вызывать, когда библиотека больше не используется (как в начале предлагали package.loaded[] = nil)
Какая кодировка используются в Lua?
 
Цитата
Alexander написал:
Цитата
nikolz написал:
 
Цитата
Alexander  написал:
Аааа, я ещё что-то сразу то не приметил.    nikolz   , Вы  на скрине показываете окно сообщений самого квика. Мои скрипты в это окно пишут по-русски нормально. Я писал не про это окно. У меня DLL. Скрипт вызывает её функции. Эти функции например вызывают MessageBox виндовую для вызова окна сообщенй винды с русским текстом. И вот оно то пишет не по-русски. Вот в этом проблема. А с простым message в скрипте проблем нет - сохраняю с русскими сообщениями как ANSI и проблем нет. Вобщем сама винда перестаёт по-русски писать в своём же сообщении, хотя если вызывать  не из библиотеки DLL под QUIK, а просто из программы под винду, то пишет по-русски как положено. И ещё. Из DLL в этом окне только само сообщение абракадаброй выводится, а вот кнопки "Да", "Нет" - они нормально по-русски подписаны.
 попробуйте вызвать MessageBoxA
Да я по всякому уже перепробовал, пробовал я и W варант и A вариант MessageBox-а, и просто коды букв вставлял для cp1251 из таблицы символов. Ни так, ни как не выводят по русски. Скрины:
У вас строчка "Закрыть приложение?" в utf-8. А MessageBoxA хочет cp1251.
Какая кодировка используются в Lua?
 
Цитата
Alexander написал:
Аааа, я ещё что-то сразу то не приметил.  nikolz , Вы  на скрине показываете окно сообщений самого квика. Мои скрипты в это окно пишут по-русски нормально. Я писал не про это окно. У меня DLL. Скрипт вызывает её функции. Эти функции например вызывают MessageBox виндовую для вызова окна сообщенй винды с русским текстом. И вот оно то пишет не по-русски. Вот в этом проблема. А с простым message в скрипте проблем нет - сохраняю с русскими сообщениями как ANSI и проблем нет. Вобщем сама винда перестаёт по-русски писать в своём же сообщении, хотя если вызывать  не из библиотеки DLL под QUIK, а просто из программы под винду, то пишет по-русски как положено. И ещё. Из DLL в этом окне только само сообщение абракадаброй выводится, а вот кнопки "Да", "Нет" - они нормально по-русски подписаны.
Вы код из dll, который сообщение выводит покажите.
Открытый интерес
 
В лонг и в шорт всегда поровну. Они парами возникают - один купил, другой продал.
Как получить любой SECCODE по BASE_CONTRACT ?, В какой таблице идёт привязка между текущим фьючерсным инструментом и базовым активом?
 
А, это оказывается уже обсуждали: https://forum.quik.ru/forum10/topic5558/
Ладно, их не так много, придется список руками вбить.
LUA: Узнать цену утреннего аукциона во время самого аукциона
 
Цена аукциона открытия рассчитывается в момент его завершения. https://fs.moex.com/files/9367/
Как получить любой SECCODE по BASE_CONTRACT ?, В какой таблице идёт привязка между текущим фьючерсным инструментом и базовым активом?
 
Код базового актива во фьючерсе на сбер - SBRF. А в акциях код SBER. Как правильно для всех фьючерсов на акции найти соответствующие акции?
Страницы: Пред. 1 2
Наверх