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

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

Страницы: Пред. 1 2
Возможные "стратегии" для торговых программ
 
Цитата
Serge123 написал:
И вроде бы есть стратегия торговли "смарт мани", следуя за крупным игроком как рыба-прилипала. Вроде бы тоже публичная, не устаревающая и похожая на правду...
Только следуя за кем-то, вы всегда купите дороже, чем он, а продадите дешевле. Потому что объемы в стакане ограничены.
А еще лучше - крупный игрок купил что-то, и тут же выставил на продажу чуть дороже. Фолловеры у него же и выкупили. Он то свою копеечку заработал...
Возможные "стратегии" для торговых программ
 
Гарантированно выигрышная стратегия: купить "голубых фишек" и облигаций. Ждать купонов и дивидендов. Для этого робот не нужен, руками несколько сделок в год. Ожидаемый доход - чуть выше инфляции. Но этот доход - часть дохода, полученного реальным бизнесом.

На бирже есть огромные объемы спекулятивных сделок с акциями, в разы превышающие доходы бизнеса. Ну то есть спекуляции - это приблизительно игра с нулевой суммой. Чтобы кто-то выиграл, кто-то другой должен проиграть. Все выигрывать не могут. И поэтому любая публично известная стратегия, которую каждый может использовать, заведомо проигрышная. Если бы существовала выигрышная для всех стратегия, откуда взялись бы деньги?
Так что, чтобы стабильно выигрывать на спекуляциях, надо придумать что-то свое уникальное, и никому об этом не рассказывать. Рассказал - отдал часть дохода (или весь).
Чьё время даёт OnTransReply в таблице date_time?
 
Если вы хотите считать миллисекунды, quik абсолютно бесполезен. Нужно прямое подключение и размещение собственного сервера в одном датацентре с серверами биржи. Да, это стоит дорого. Но лезть в hft без десятков тысяч долларов капитала бессмысленно.
Примеры 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
Наверх