Артем написал: swerg, вы сами прекрасно знаете что это за "многопоточные колбеки".
Если бы знал - я бы вас не переспрашивал. В QLua есть понятие callback-функций, которые вызываются терминалом при определённых событиях. Вызов этот происходит в основном потоке работы терминала QUIK.
Вы придумали термин "многопоточные колбеки" - было бы хорошо, если бы вы объяснили что он означает. Впрочем, пожелание ваше, быть однозначно понятым или нет - решать вам, ибо "на мой взгляд это должно было быть совершенно очевидно" - позиция крайне наивная.
Артем написал: Imersio Arrigo,в первом посте сразу же ссылка на тред, где у людей как раз такая пролема. Там собственно и попросили, я просто создал отделный тред и немного поточнее пожелание сформулировал.
Там намучено не пойми чего.
Цитата
Артем написал: первая приостанавливает вызовы многопоточных колбеков
Что такое "многопоточный колбек"?
Цитата
Артем написал: проигнорированный колбек не будет исоплнен повторно.
Так вы предполагаете, что после возобновления все "пропущенные" колбеки будут вызваны?? из вашего первого сообщения такое желание совершенно не очевидно.
Владимир написал: Артем, Лапуль, покопайтесь в моих давних сообщениях, если интересно - мне лень ковыряться по "запросам" очередного распальцованного неуча.
Цитата
Владимир написал: Артем, только бездарям тупорылым нынешний интерфейс может показаться "минимальным, слишком скудным и с неполным покрытием"
TGB, Артем, прикольные вы чуваки, с интересом за вами наблюдаю. Я, видимо, не понимаю кайфа мазаться об говно. Но вы не останавливайтесь, очень вас прошу! Наблюдать всё это крайне интересно.
Не смог найти ветку на форуме, но точно помню, что писал в поддержку предложение запускать из папки LuaIndicators только файлы *.lua Они отписались, что в 8.13 это реализовали... Явно отсюда ноги растут.
Старатель написал: Очевидно же, что когда говорят об "актуальности данных", речь про данные, которыми располагает сервер QUIK. Или для вас это не очевидно?
Нет, не очевидно. Потому что меня интересует актуальность данных на клиенте, именно там работает мой робот, принимающий решения. Причем актуальность относительно биржи, ибо именно там будут исполняться заявки.
Нет передёргивания. Сервер данными может и располагает, но до клиента они будут ехать еще какое-то время. И? какие ваши предложения? Пример см. в предыдущем сообщении.
Цитата
Старатель написал: Про ТТТ я писал в отдельной теме: важно понимать свежие ли значения мы имеем или это мусор, оставшийся со "вчерашнего вечера".
Для ТТТ достаточно поставить настройку "Очищать в новый день" или "в новую сессию", что-то такое, забыл название. Тогда недоехавшие данные будут или отсутствовать или равны 0.
Nikolay написал: Да, актуальность потока данных не контролируется. Но вот на момент заказа вполне (это ведь точная отметка по оси времени).
Супер. Я подключился к серверу в 10:00. "Заказал данные". Сервер лил мне их 1 минуту (да, я оптимист). В 10:01 до меня доедет маркер "на момент заказа данные загружены". Т.е. я имею данные на момент 10:00, и начинаю на их основании отправлять заявки. Хотя сейчас 10:01 и рынок уже совсем другой.
Я ведь всё описал по вашему алгоритму? ничего не упустил?
Книжку твою никому неизвестную ты для доктора пишешь. Ему, быть может, будет любопытно к истории болезни приобщить. Более никому этот бред не интересен.
Владимир написал: никогда никому не показывалось, так что брехать про "говорилось" не следует.
Именно про этот код тебе, идиоту со стажем, и говорилось: с таким написанием - огребёшься. Огрёбся. Но продолжаешь изворачиваться, т.к. говно иначе не умеет.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Михаил Понамаренко написал: Теперь я понял, в чём дело, когда брокер утром включает сервер, подключаются все запущенные терминалы клиентов. Соответственно, сервер брокера не может отдать быстро эти данные, т.к. одновременно, много желающих их получить.
Владимир написал: Оказалось, моя и совсем дурная: вместо a[i][1][5] стояло a[i[1][5]]. Раз двадцать глядел на это место - не видел!
Тебе, дурачку, давно уже сказали, что и сам ты говно, и код твой такой же. Причем именно про это место и говорилось. Но, разумеется, в твоих руках из жопы виноват нормальный язык Lua, кто бы сомневался. Про руки твои и голову - это медицинский факт.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Поддерка, вы спам от КатСервиса уберёте уже из этой темы?!! Особенно смешно (если не сказать грустно) долгое наличие этого сообщения выглядит после совершенно бестолкового наезда на одного из грамотных пользователей форума за "рекламу" в сообщениях.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
swerg написал: Ну есть собатия прогрузки позиций после начал торгов / клирингов. И что они вам дают?
Именно об этом и спрашивает ТС.
"Но как вы догадались, Холмс?!"
Цитата
Старатель написал: Надо разделить 1) обезличенные данные и 2) данные, относящиеся непосредственно к портфелю: ордера, сделки, лимиты, позиции, стопы. Последние как раз будут статичны статичны и актуальны в начальный момент. Это и есть точка отсчёта, от которой будет отталкиваться скрипт.
Почему позиции будут точкой отсчета?? Торговый скрипт, очевидно, обязательно опирается на данные графиков и торговые данные для принятия решений. Позиции учитывает наверняка, но опираться только на них??
Nikolay написал: OnParam - это всего лишь какая-то реализация, предложенная разработчиками.
Что значит "реализация предложенная"? В рамках обсуждаемого вопроса - изменился(лись) параметр(ы) на бирже - изменений приехали на сервер - приехали на терминал - вызов OnParam. Какая еще реализация может быть?
Цитата
Nikolay написал: Вопрос получения данных и их актуальности на этом форуме уже много лет обсуждается.
Потому как нет никакой "актуальности данных". Обсуждать просто нечего. Много лет это пытаюсь объяснить.
Nikolay написал: Необходимо либо иметь метод в API дающий ответ, что все загружено, либо колбек по факту события загрузки.
"Всё" никогда не бывает загружено. Вот простой факт, который надо заставить себя принять - и жизнь сразу наладится. Все, что мы можем сделать - это быть достаточно близко к реальным текущим данным на бирже. Все, что мы можем делать - это стараться максимально приближаться к получению в терминале реальных текущих данных на бирже, уменьшать временной лаг.
Михаил Понамаренко написал: Но данные могут загрузиться, как быстрее, так и позже. Может у кого есть более подходящее решение?
Я каждый раз предлагаю исходить из одной простой штуки. А как вы сами "на глаз" определяете, что данные загружены? Вот ровно это и реализуйте в скрипте. Это будет самое надёжное. И вот почему.
QUIK (как система) построен именно для визуального отображения данных в терминале. И скрипты навешаны уже поверх этой парадигмы. Именно поэтому и надо все придумки в скриптах делать исходя из наблюдений "а как я сам принимаю решение глядя в терминал в таком-то случае?". (потому, кстати, никого и не парил приезд одних и тех же сделок по 5 раз, пока это не вылезло в скриптах; этого просто никто не видит!)
С одной стороны, объективного понятия "загружены все данные" - просто нет. Ну в самом деле: на бирже изменилась цена - все равно терминалы получают это с задержкой. А т.к. в биржевых данных все время что-то меняется - то фактически терминал все время биржу как-то "догоняет". И задача построения торговой инфраструктуры лишь в том, чтобы данные в терминале догоняли биржу с как можно меньшим временным лагом. Для этого брокер запускает сервер до торгов, с запасом. Для этого терминал есть смысл подключать к серверу брокера с запасом.
Как вы в терминале определяете, что "данные актуальны"? Ну вы же на глаз это как-то можете определить, ведь так? Например, по прекратившемуся "мельтишению данных". Значит, терминал более-менее всё накопленное прокачал и сейчас получает on-line данные. Вероятно, в скрипте есть смысл повторить эту логику: например, за какой-то через какой-то интервал времени сравнивать количество данных по каким-то сущностям: количество свечей на графике, количество изменений цены по какому-то инструменту, количество изменений стакана. Что еще у нас "мультишит" в терминале при подключении? Ну и как только между очередными замерами количество изменившихся данных станет меньше какой-то экспериментально подобранной величины - принять решение "данные актуальны".
Либо подойти ко всему этому "инфрастуктурно". Например, экспериментально установить, что через 5 минут после подключения и/или через 5 минут после начала торговой сессии - данные в терминале на нашем компьютере и нашем интернете - точно актуальные, с запасом. И через 5 минут после переподключения в середине торговой сессии - тоже уже точно актуальные. Ну и славно, значит, после этих событий ждём 5 минут - и после начинаем торговать. Вариант - вполне.
Или стоит задача попасть в движняк самого начала торговой сессии? Тогда, на самом деле, надо применять "инфрастуктурный" метод, сокращая время прокачки данных и уменьшая тайм-аут: толще канал интернета, быстрее компьютер, бодрее брокер. И стартовать по времени. Но: при таком решении надо отдавать себе отчет, что периодически по разным причинам будут происходить неудачные сделки из-за неактуальности данных в терминале в момент принятия решений роботом. И от этого точно никуда не деться!! Потому как любые способы "контроля" будут оттягивать время начала работы робота, а мы хотим попасть именно в самое начало торгов, потому затягивание для нас неприемлемо. А проблемы иногда точно будут: у провайдера сбойнуло оборудование - просел интернет; у брокера захлебнулся сервер в дни особого движняка; ну и т.д.
На документацию тут ссылаться не совсем точно, ибо вообще не очевидно, что строка числового значения "500" подходит, а "500.0" - не подходит. Хотя это одно и тоже числовое значение, представленное строками.
Андрей написал: Принцип программирования - что запросил то и получил здесь нарушен.
Ничего здесь как раз не нарушено. Запрошена цена - её значение возвращается как double. Все логично.
Цитата
Андрей написал: В таблицах по фьючу РТС явно целочисленные значения приводятся, да и биржа тоже целые транслирует
Это не так. Вы путаете транслируемые и отображаемые значения. Просто QUIK в таблицах при отображении учитывает еще параметр "точность цены", отображая лишь то значение цифр после запятой, которое соответствует указанному параметру.
Цитата
Андрей написал: Я понимаю, что в недоязыке LUA непредусмотрено целочисленных значений
И это не так. Добавление .0 после чисел с типом double появилось в Lua5.3, где есть отдельный целочисленный тип. Но он здесь не применим, т.к. бывают инструменты с дробной ценой. Так что цена универсально возвращается как double, а tostring() приписывает при конвертации .0 в таким аргументам (при целом значении).
Вопрос к разработчикам ровно один и простой: неужели до сих пор нельзя сделать так, чтобы параметр Transaction["PRICE"] можно было задавать числом, а не строкой?!
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Владимир написал: Ну, а уж про порчу переменных у меня просто слов нет - как можно изуродовать ассемблерный JMP, чтобы он стал выдавать такую херню?!
Местный дурач0к по прежнему не читает документацию.
Цитата
Second, the control variable is a local variable automatically declared by the for statement and is visible only inside the loop. A typical idiot's mistake is to assume that the variable still exists after the loop ends
Spadar написал: А каким образом тогда использовать функции библиотеки (например, CreateDataSource())? Или из-под командной строки это невозможно?
Невозможно, конечно. Все эти функции - часть терминала, а не просто одной библиотеки. В самом деле: какое получение данных возможно, если вы даже к серверу не подключены в командной строке?
Старатель написал: Надеюсь теперь вашего тестировщика уволят: он ничерта не делает.
Вы слишком упрощённо видите мир. Зачастую даже если для вас проблема очевидна и "всегда проявляется" - запросто может быть, что проблема достаточно уникальна, т.е. проявляется лишь в определённом сценарии, для определённых настроек определённого брокера. Или просто в конкретный закоулок программы мало кто заходит, даже если именно вы постоянно ходите там.
Разумеется. Коль скоро они переносятся на след. день, а значит хранятся в какой-то базе. Возможно нет готового удобного интерфейса для брокера, но технически информация, очевидно, доступна.
+ Изменение размера окна списка скриптов. С сохранением размера при перезапуске. + Поле поиска скрипта по названию (или может даже лучше фильтрация списка, как сделано в других списках)
Косность и дубовость интереса (или разработчиков?) - просто поражает воображение!