bespalex написал:
Не могли бы вы еще привести такой же пример кода для английских наименований полей и их значений?
Например, у меня используется 'ACTION': 'NEW_ORDER', а тут как будет для изменения?
Загрузил из .tri файла в "Карман транзакций". Переключил язык терминала на английский. Сохранил в файл. Получилось такое:
Serge123 написал: И вроде бы есть стратегия торговли "смарт мани", следуя за крупным игроком как рыба-прилипала. Вроде бы тоже публичная, не устаревающая и похожая на правду...
Только следуя за кем-то, вы всегда купите дороже, чем он, а продадите дешевле. Потому что объемы в стакане ограничены. А еще лучше - крупный игрок купил что-то, и тут же выставил на продажу чуть дороже. Фолловеры у него же и выкупили. Он то свою копеечку заработал...
Возможные "стратегии" для торговых программ
Пользователь
Сообщений: Регистрация: 20.03.2023
15.12.2023 14:12:48
Гарантированно выигрышная стратегия: купить "голубых фишек" и облигаций. Ждать купонов и дивидендов. Для этого робот не нужен, руками несколько сделок в год. Ожидаемый доход - чуть выше инфляции. Но этот доход - часть дохода, полученного реальным бизнесом.
На бирже есть огромные объемы спекулятивных сделок с акциями, в разы превышающие доходы бизнеса. Ну то есть спекуляции - это приблизительно игра с нулевой суммой. Чтобы кто-то выиграл, кто-то другой должен проиграть. Все выигрывать не могут. И поэтому любая публично известная стратегия, которую каждый может использовать, заведомо проигрышная. Если бы существовала выигрышная для всех стратегия, откуда взялись бы деньги? Так что, чтобы стабильно выигрывать на спекуляциях, надо придумать что-то свое уникальное, и никому об этом не рассказывать. Рассказал - отдал часть дохода (или весь).
Чьё время даёт OnTransReply в таблице date_time?
Пользователь
Сообщений: Регистрация: 20.03.2023
28.11.2023 07:50:21
Если вы хотите считать миллисекунды, quik абсолютно бесполезен. Нужно прямое подключение и размещение собственного сервера в одном датацентре с серверами биржи. Да, это стоит дорого. Но лезть в hft без десятков тысяч долларов капитала бессмысленно.
Примеры dll на GCC 64 для работы со скриптом
Пользователь
Сообщений: Регистрация: 20.03.2023
28.11.2023 07:41:48
Библиотеку lua нужно указывать: ключики -L, -l
Получить sec_code при выборе бумаги в ТТТ., Получить sec_code при выборе бумаги в ТТТ.
Пользователь
Сообщений: Регистрация: 20.03.2023
18.10.2023 09:01:07
По документации у getDataSourceInfo() нет параметров
"KILL_ALL_FUTURES_ORDERS", Снятие всех активных заявок на FORTS
написал: Подскажите кто знает если. С помощью getParamEx есть ли параметры в ТТТ такие, чтобы отсортировать фьючерсы на акции от остальных фьючерсов. В квике по названию вроде ничего не подходит. Или как-то такое сделать по другому. Т.е. я получаю: sec_list = getClassSecurities("SPBFUT") и потом мне из всей этой кучи надо выделить только фьючерсы на акции. По класскоду у всех "SPBFUT", что у индексных, что у товарных, что у акционных. Пока вижу только вариант через string.gmatch и шаблон, но тогда для каждого варианта(смотрим на мосбирже все фьючи на акции) надо указать шаблон. Так пока делаю, но это длинно, для каждой акции свой шаблон. И спиок на бирже могут поменять и придётся менять код. Типа бы какого-нибудь не только класскоде, а ещё бы и подкласса иметь на фьючерсы на акции.
1) Получаете список всех фьючерсов из класса SPBFUT 2) Получаете список всех акций из класса TQBR 3) Проходитесь по всем нужным фьючерсам из пункта 1 (с требуемой датой исполнения и т.п.), доставая из их спецификации код базового актива . Можно например через getSecurityInfo или из ТТТ . 4) Проверяете есть ли такой код в списке кодов акций из пункта 2 . 5) Если есть, значит этот фьючерс - фьючерс на акцию. 6) Profit...
Ну почти... Посмотрите на сбербанк или газпром. Код базового актива для фьючерса может не совпадать с кодом акций.
В чём преимущество OnInit
Пользователь
Сообщений: Регистрация: 20.03.2023
07.07.2023 09:58:27
Цитата
Владимир написал: появился гениальный язык С, любовь на всю жизнь
Что же вы на ненавистном вам луа пишите? Можно же в одну строчку загрузить библиотеку, написанную на С. И все остальное делать уже там. Регистрировать колбеки - lua_register. Дергать функции quik через lua_pcall. И никакого тормозного интерпретатора.
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
Пользователь
Сообщений: Регистрация: 20.03.2023
22.06.2023 08:19:20
Не нужны никакие таймауты. Надо просто работать по событиям. По приходу данных - свечей, сделок, котировок, ...
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
Пользователь
Сообщений: Регистрация: 20.03.2023
22.06.2023 08:16:25
Брокер же получает данные с биржи. Я не знаю, как оно там внутри устроено, но вполне возможно, что если вы первый клиент, подписывающийся на какой-то инструмент, то именно в этот момент и будет отправлен запрос на биржу. А вот есть ли в биржевых протоколах (plaza, fix/fast) возможность узнать, придут ли вообще данные?
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 12:42:52
Вы бы сразу про С++ написали - быстрее бы проблему нашли.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 12:30:02
Это в lua два подтипа. А в C api надо явно выбирать что использовать - lua_Number или lua_Integer. C не умеет "два в одном".
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 12:27:47
Так то в С тип lua_Number - это double. Не надо его использовать для номера заявки.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 12:05:01
это ссылка на книгу по lua 5.0, там никаких int64 еще не было. Вы не на С++ а на lua проверьте. А то может вы С api неправильно используете (по доке от старой версии lua).
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 11:10:29
На всякий случай: для записи в лог номера в строки преобразуются функцией tostring()?
написал: Использование деления там специально чтобы проверить конвертацию в double и обратно в int64. Числа взял из первого сообщения. На самом деле при этом 1951785056590629888 сохраняет значение, а 1951785056590630794 превращается в 1951785056590630912.
Полагаю Вы знаете про ошибки округления, поэтому конвертация int64 в double и обратно не может быть всегда точной. ---------------- Более того, все это есть в документации по форматом и для этого не надо делить и умножать ------------------ Ликбез: ------------------- число 1951785056590629888, 1951785056590630794 -- это 19 значащих цифр а double хранит мантиссу лишь с точностью 15-17 значащих цифр. --------------------- Вы это и проверили - т е 15-17 значащих цифр мантиссы не могут всегда точно хранить 19 значащих цифр целого числа.
Если вам этой информации достаточно, чтобы точно убедится, что 1951785056590630912 не какое-то случайное значение, а результат округления 1951785056590630794 - я вас поздравляю. Я так в уме не могу, мне проверить надо было.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 10:09:32
Цитата
paluke написал: Проверил у себя. На quik 10.1 order_num в OnTransReply имеет тип integer, и номер там без искажений, совпадает с тем что в result_msg. Автор, а брокер у вас какой?
Проверял на фьючерсах, на реальном счете, и номер там был длинный, в double нормально не помещается.
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 10:06:24
Проверил у себя. На quik 10.1 order_num в OnTransReply имеет тип integer, и номер там без искажений, совпадает с тем что в result_msg. Автор, а брокер у вас какой?
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
13.06.2023 05:47:42
А (order_num) что говорит?
Не снимаются заявки в секции FORTS
Пользователь
Сообщений: Регистрация: 20.03.2023
12.06.2023 09:30:37
Использование деления там специально чтобы проверить конвертацию в double и обратно в int64. Числа взял из первого сообщения. На самом деле при этом 1951785056590629888 сохраняет значение, а 1951785056590630794 превращается в 1951785056590630912.
А версия quik какая? Похоже, что где-то номер заявки в double складывается. А там точности не хватает.
Синхронизация QUIK с NTP
Пользователь
Сообщений: Регистрация: 20.03.2023
01.06.2023 15:47:37
Я же не сам придумал про 0.1 ms:
Цитата
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
Пользователь
Сообщений: Регистрация: 20.03.2023
01.06.2023 13:55:12
Цитата
Майкрософт декларирует возможность 1 ms.
Так майкрософт декларирует 1 ms кажется только если у вас до stratum 1 сервера с сетевая задержка меньше 0.1 миллисекунды. Ну то есть если у вас под боком есть атомные часы - можно обеспечить такую точность.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
Пользователь
Сообщений: Регистрация: 20.03.2023
27.04.2023 08:33:22
Любой механизм ipc - сокеты, каналы, разделяемая память, сообщения, dde... И зачем вообще отдельная программа? Что мешает делать всё прямо в dll?
Скрипт не видит значение индикатора с определенной периодичностью.
Пользователь
Сообщений: Регистрация: 20.03.2023
26.04.2023 08:42:29
Цитата
Юрий написал: Я бы вообще сложил всё это в общую сумму, например так: hour*10000+minute*100+sec, и поставил условие, если больше 30, то ок.
По поводу вывести сообщение - совет правильный, но для меня это будет сложно, не программист я...
Не программист и в алготрейдинг? Смело. Поищете, где-то были истории, как из-за ошибок в торговых роботах миллионы сливали.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
Я смотрел код lua скрипта, через который подключается и получает данные платформа TigerTrade. Там кроме подключения самой DLL больше ничего нет. Не подскажете как можно таким образом в DLL получать все необходимое?
Вы же вроде на С собираетесь писать? То есть как собрать dll знаете? Экспортировать из dll функцию luaopen_<libname> с прототипом lua_CFunction В этой функции lua функции OnInit(), main(), и т.д. lua функции из С вызываются через
А можно что-нибудь готовое
Скрипт не видит значение индикатора с определенной периодичностью.
Пользователь
Сообщений: Регистрация: 20.03.2023
24.04.2023 08:00:15
1. Что такое Get_Info_Param()? В документации есть getInfoParam() - без подчеркиваний и с маленькой буквы.
2. Ну выведите сообщение message(Get_Info_Param("CONNECTIONTIME")) и посмотрите своими глазами, в каком формате. 3. И дергать функцию три раза нехорошо. У вас может смениться секунда и минута - первый вызов отработал в 1:02:59 а второй в 1:03:00. Лучше записать результат вызова в переменную и дальше из нее вырезать часы-минуты-секунды.
Какая кодировка используются в Lua?
Пользователь
Сообщений: Регистрация: 20.03.2023
24.04.2023 07:44:40
Цитата
swerg написал: Alexander, строки текста откуда берутся? в cpp файле в тексте программы? А cpp-файлы в какой кодировке-то у вас сохранены? сможете определить?
Так то кодировка исходника может отличаться от кодировки, в которой будет строка после компиляции
написал: Попробую поднять данную тему вновь. Вобщем всё что выше написано - не работает Библиотека не выгружается!.
Явный вызов FreeLibrary для твоей либы (которую ты загрузил в скрипте, не так ли?) - не работает?
Или когда ты ожидаешь что либа будет отгружена? Автоматически, по завершении/отмене скрипта? Такого нет. Нужно явно выгружать либу. Ну и конечно, если либа выгружена, а ты к ней будешь обращаться - все попадает :)
Вообще-то в исходниках lua есть вызов FreeLibrary. Вроде бы gc должен ее вызывать, когда библиотека больше не используется (как в начале предлагали package.loaded[] = nil)
написал: Аааа, я ещё что-то сразу то не приметил. , Вы на скрине показываете окно сообщений самого квика. Мои скрипты в это окно пишут по-русски нормально. Я писал не про это окно. У меня DLL. Скрипт вызывает её функции. Эти функции например вызывают MessageBox виндовую для вызова окна сообщенй винды с русским текстом. И вот оно то пишет не по-русски. Вот в этом проблема. А с простым message в скрипте проблем нет - сохраняю с русскими сообщениями как ANSI и проблем нет. Вобщем сама винда перестаёт по-русски писать в своём же сообщении, хотя если вызывать не из библиотеки DLL под QUIK, а просто из программы под винду, то пишет по-русски как положено. И ещё. Из DLL в этом окне только само сообщение абракадаброй выводится, а вот кнопки "Да", "Нет" - они нормально по-русски подписаны.
попробуйте вызвать MessageBoxA
Да я по всякому уже перепробовал, пробовал я и W варант и A вариант MessageBox-а, и просто коды букв вставлял для cp1251 из таблицы символов. Ни так, ни как не выводят по русски. Скрины:
У вас строчка "Закрыть приложение?" в utf-8. А MessageBoxA хочет cp1251.
Какая кодировка используются в Lua?
Пользователь
Сообщений: Регистрация: 20.03.2023
18.04.2023 14:14:57
Цитата
Alexander написал: Аааа, я ещё что-то сразу то не приметил. , Вы на скрине показываете окно сообщений самого квика. Мои скрипты в это окно пишут по-русски нормально. Я писал не про это окно. У меня DLL. Скрипт вызывает её функции. Эти функции например вызывают MessageBox виндовую для вызова окна сообщенй винды с русским текстом. И вот оно то пишет не по-русски. Вот в этом проблема. А с простым message в скрипте проблем нет - сохраняю с русскими сообщениями как ANSI и проблем нет. Вобщем сама винда перестаёт по-русски писать в своём же сообщении, хотя если вызывать не из библиотеки DLL под QUIK, а просто из программы под винду, то пишет по-русски как положено. И ещё. Из DLL в этом окне только само сообщение абракадаброй выводится, а вот кнопки "Да", "Нет" - они нормально по-русски подписаны.
Вы код из dll, который сообщение выводит покажите.
Открытый интерес
Пользователь
Сообщений: Регистрация: 20.03.2023
23.03.2023 15:58:10
В лонг и в шорт всегда поровну. Они парами возникают - один купил, другой продал.
Как получить любой SECCODE по BASE_CONTRACT ?, В какой таблице идёт привязка между текущим фьючерсным инструментом и базовым активом?
Пользователь
Сообщений: Регистрация: 20.03.2023
22.03.2023 09:02:26
А, это оказывается уже обсуждали: Ладно, их не так много, придется список руками вбить.
LUA: Узнать цену утреннего аукциона во время самого аукциона
Пользователь
Сообщений: Регистрация: 20.03.2023
20.03.2023 20:20:00
Цена аукциона открытия рассчитывается в момент его завершения.
Как получить любой SECCODE по BASE_CONTRACT ?, В какой таблице идёт привязка между текущим фьючерсным инструментом и базовым активом?
Пользователь
Сообщений: Регистрация: 20.03.2023
20.03.2023 19:29:24
Код базового актива во фьючерсе на сбер - SBRF. А в акциях код SBER. Как правильно для всех фьючерсов на акции найти соответствующие акции?