Serge123 написал: И вроде бы есть стратегия торговли "смарт мани", следуя за крупным игроком как рыба-прилипала. Вроде бы тоже публичная, не устаревающая и похожая на правду...
Только следуя за кем-то, вы всегда купите дороже, чем он, а продадите дешевле. Потому что объемы в стакане ограничены. А еще лучше - крупный игрок купил что-то, и тут же выставил на продажу чуть дороже. Фолловеры у него же и выкупили. Он то свою копеечку заработал...
Гарантированно выигрышная стратегия: купить "голубых фишек" и облигаций. Ждать купонов и дивидендов. Для этого робот не нужен, руками несколько сделок в год. Ожидаемый доход - чуть выше инфляции. Но этот доход - часть дохода, полученного реальным бизнесом.
На бирже есть огромные объемы спекулятивных сделок с акциями, в разы превышающие доходы бизнеса. Ну то есть спекуляции - это приблизительно игра с нулевой суммой. Чтобы кто-то выиграл, кто-то другой должен проиграть. Все выигрывать не могут. И поэтому любая публично известная стратегия, которую каждый может использовать, заведомо проигрышная. Если бы существовала выигрышная для всех стратегия, откуда взялись бы деньги? Так что, чтобы стабильно выигрывать на спекуляциях, надо придумать что-то свое уникальное, и никому об этом не рассказывать. Рассказал - отдал часть дохода (или весь).
Если вы хотите считать миллисекунды, quik абсолютно бесполезен. Нужно прямое подключение и размещение собственного сервера в одном датацентре с серверами биржи. Да, это стоит дорого. Но лезть в hft без десятков тысяч долларов капитала бессмысленно.
Alexander написал: Подскажите кто знает если. С помощью getParamEx есть ли параметры в ТТТ такие, чтобы отсортировать фьючерсы на акции от остальных фьючерсов. В квике по названию вроде ничего не подходит. Или как-то такое сделать по другому. Т.е. я получаю: sec_list = getClassSecurities("SPBFUT") и потом мне из всей этой кучи надо выделить только фьючерсы на акции. По класскоду у всех "SPBFUT", что у индексных, что у товарных, что у акционных. Пока вижу только вариант через string.gmatch и шаблон, но тогда для каждого варианта(смотрим на мосбирже все фьючи на акции) надо указать шаблон. Так пока делаю, но это длинно, для каждой акции свой шаблон. И спиок на бирже могут поменять и придётся менять код. Типа бы какого-нибудь не только класскоде, а ещё бы и подкласса иметь на фьючерсы на акции.
1) Получаете список всех фьючерсов из класса SPBFUT 2) Получаете список всех акций из класса TQBR 3) Проходитесь по всем нужным фьючерсам из пункта 1 (с требуемой датой исполнения и т.п.), доставая из их спецификации код базового актива . Можно например через getSecurityInfo или из ТТТ . 4) Проверяете есть ли такой код в списке кодов акций из пункта 2 . 5) Если есть, значит этот фьючерс - фьючерс на акцию. 6) Profit...
Ну почти... Посмотрите на сбербанк или газпром. Код базового актива для фьючерса может не совпадать с кодом акций.
Владимир написал: появился гениальный язык С, любовь на всю жизнь
Что же вы на ненавистном вам луа пишите? Можно же в одну строчку загрузить библиотеку, написанную на С. И все остальное делать уже там. Регистрировать колбеки - lua_register. Дергать функции quik через lua_pcall. И никакого тормозного интерпретатора.
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
Брокер же получает данные с биржи. Я не знаю, как оно там внутри устроено, но вполне возможно, что если вы первый клиент, подписывающийся на какой-то инструмент, то именно в этот момент и будет отправлен запрос на биржу. А вот есть ли в биржевых протоколах (plaza, fix/fast) возможность узнать, придут ли вообще данные?
https://www.lua.org/pil/2.3.html это ссылка на книгу по lua 5.0, там никаких int64 еще не было. Вы не на С++ а на lua проверьте. А то может вы С api неправильно используете (по доке от старой версии lua).
paluke написал: Использование деления там специально чтобы проверить конвертацию в double и обратно в int64. Числа взял из первого сообщения. На самом деле при этом 1951785056590629888 сохраняет значение, а 1951785056590630794 превращается в 1951785056590630912.
Полагаю Вы знаете про ошибки округления, поэтому конвертация int64 в double и обратно не может быть всегда точной. ---------------- Более того, все это есть в документации по форматом и для этого не надо делить и умножать ------------------ Ликбез: ------------------- число 1951785056590629888, 1951785056590630794 -- это 19 значащих цифр а double хранит мантиссу лишь с точностью 15-17 значащих цифр. --------------------- Вы это и проверили - т е 15-17 значащих цифр мантиссы не могут всегда точно хранить 19 значащих цифр целого числа.
Если вам этой информации достаточно, чтобы точно убедится, что 1951785056590630912 не какое-то случайное значение, а результат округления 1951785056590630794 - я вас поздравляю. Я так в уме не могу, мне проверить надо было.
paluke написал: Проверил у себя. На quik 10.1 order_num в OnTransReply имеет тип integer, и номер там без искажений, совпадает с тем что в result_msg. Автор, а брокер у вас какой?
Проверял на фьючерсах, на реальном счете, и номер там был длинный, в double нормально не помещается.
Проверил у себя. На quik 10.1 order_num в OnTransReply имеет тип integer, и номер там без искажений, совпадает с тем что в result_msg. Автор, а брокер у вас какой?
Использование деления там специально чтобы проверить конвертацию в double и обратно в int64. Числа взял из первого сообщения. На самом деле при этом 1951785056590629888 сохраняет значение, а 1951785056590630794 превращается в 1951785056590630912.
Так майкрософт декларирует 1 ms кажется только если у вас до stratum 1 сервера с сетевая задержка меньше 0.1 миллисекунды. Ну то есть если у вас под боком есть атомные часы - можно обеспечить такую точность.
Я смотрел код 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. Лучше записать результат вызова в переменную и дальше из нее вырезать часы-минуты-секунды.
swerg написал: Alexander, строки текста откуда берутся? в cpp файле в тексте программы? А cpp-файлы в какой кодировке-то у вас сохранены? сможете определить?
Alexander написал: Попробую поднять данную тему вновь. Вобщем всё что выше написано - не работает Библиотека не выгружается!.
Явный вызов FreeLibrary для твоей либы (которую ты загрузил в скрипте, не так ли?) - не работает?
Или когда ты ожидаешь что либа будет отгружена? Автоматически, по завершении/отмене скрипта? Такого нет. Нужно явно выгружать либу. Ну и конечно, если либа выгружена, а ты к ней будешь обращаться - все попадает :)
Вообще-то в исходниках lua есть вызов FreeLibrary. Вроде бы gc должен ее вызывать, когда библиотека больше не используется (как в начале предлагали package.loaded[] = nil)
Alexander написал: Аааа, я ещё что-то сразу то не приметил. nikolz , Вы на скрине показываете окно сообщений самого квика. Мои скрипты в это окно пишут по-русски нормально. Я писал не про это окно. У меня DLL. Скрипт вызывает её функции. Эти функции например вызывают MessageBox виндовую для вызова окна сообщенй винды с русским текстом. И вот оно то пишет не по-русски. Вот в этом проблема. А с простым message в скрипте проблем нет - сохраняю с русскими сообщениями как ANSI и проблем нет. Вобщем сама винда перестаёт по-русски писать в своём же сообщении, хотя если вызывать не из библиотеки DLL под QUIK, а просто из программы под винду, то пишет по-русски как положено. И ещё. Из DLL в этом окне только само сообщение абракадаброй выводится, а вот кнопки "Да", "Нет" - они нормально по-русски подписаны.
попробуйте вызвать MessageBoxA
Да я по всякому уже перепробовал, пробовал я и W варант и A вариант MessageBox-а, и просто коды букв вставлял для cp1251 из таблицы символов. Ни так, ни как не выводят по русски. Скрины:
У вас строчка "Закрыть приложение?" в utf-8. А MessageBoxA хочет cp1251.
Alexander написал: Аааа, я ещё что-то сразу то не приметил. nikolz , Вы на скрине показываете окно сообщений самого квика. Мои скрипты в это окно пишут по-русски нормально. Я писал не про это окно. У меня DLL. Скрипт вызывает её функции. Эти функции например вызывают MessageBox виндовую для вызова окна сообщенй винды с русским текстом. И вот оно то пишет не по-русски. Вот в этом проблема. А с простым message в скрипте проблем нет - сохраняю с русскими сообщениями как ANSI и проблем нет. Вобщем сама винда перестаёт по-русски писать в своём же сообщении, хотя если вызывать не из библиотеки DLL под QUIK, а просто из программы под винду, то пишет по-русски как положено. И ещё. Из DLL в этом окне только само сообщение абракадаброй выводится, а вот кнопки "Да", "Нет" - они нормально по-русски подписаны.
Вы код из dll, который сообщение выводит покажите.