Книжку твою никому неизвестную ты для доктора пишешь. Ему, быть может, будет любопытно к истории болезни приобщить. Более никому этот бред не интересен.
Владимир написал: никогда никому не показывалось, так что брехать про "говорилось" не следует.
Именно про этот код тебе, идиоту со стажем, и говорилось: с таким написанием - огребёшься. Огрёбся. Но продолжаешь изворачиваться, т.к. говно иначе не умеет.
Средства разработки многопоточных скриптов в 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())? Или из-под командной строки это невозможно?
Невозможно, конечно. Все эти функции - часть терминала, а не просто одной библиотеки. В самом деле: какое получение данных возможно, если вы даже к серверу не подключены в командной строке?
Старатель написал: Надеюсь теперь вашего тестировщика уволят: он ничерта не делает.
Вы слишком упрощённо видите мир. Зачастую даже если для вас проблема очевидна и "всегда проявляется" - запросто может быть, что проблема достаточно уникальна, т.е. проявляется лишь в определённом сценарии, для определённых настроек определённого брокера. Или просто в конкретный закоулок программы мало кто заходит, даже если именно вы постоянно ходите там.
Разумеется. Коль скоро они переносятся на след. день, а значит хранятся в какой-то базе. Возможно нет готового удобного интерфейса для брокера, но технически информация, очевидно, доступна.
+ Изменение размера окна списка скриптов. С сохранением размера при перезапуске. + Поле поиска скрипта по названию (или может даже лучше фильтрация списка, как сделано в других списках)
Косность и дубовость интереса (или разработчиков?) - просто поражает воображение!
Виктор Столетов написал: Quik выдает сообщение об ошибке: «error loading module 'w32' from file 'G:\БС\QUIK_VTB24\w32.dll': Не найдена указанная процедура.» Библиотека w32.dll в корне Quik присутствует.
У всех работает, у вас не работает. Так не бывает. Скорее всего не ту версию w32 используете.
Когда уже был QUIK - всей этой перечисленной фигни просто-напросто еще не существовало. Как и "стандартов". Так что нет никаких парадоксов.
PS Эмоции сливать - это прикольно, но может их лучше сливать доктору? А сюда уже вернуться здоровым человеком, и внятно кратко изложить каких конкретно фич хочется от QUIK.
Спасение - qlua.exe Делал себе, т.к. в самом деле порой требуется запустить скрипт из ком. строки, а не из QUIK. Но при этом хочется иметь "окружение как в QUIK". Пока поддержано очень мало чего, но для указанных тут случаев годится
http://quik2dde.ru/static-img/qlua-exe/qlua-exe.zip Распаковать, файл qlua.exe положить в каталог с QUIK - оттуда и запускать, все будет работать. Пока это вариант только для Lua5.3, но этого достаточно, считаю, для реальных нужд.
Старатель написал: В 7-м квике не зависает даже более примитивный код:
Мне все лень было проверить, но вот тоже такое впечатление, что в Lua 5.1 более грамотно были сделаны локи многопоточности. А в 5.3 совсем халтуру какую-то сделали.
Константин Рейм написал: Суть вопроса в том что "10:00:05" это серверное время и торги по времени уже начались, а функция status == false не дает торговать каое-то время.
Ну правильно, серверное, от сервера QUIK, а не биржи Конечно расхождение в несколько секунд как-то слишком большое, однако это ж не status мешает отправке транзакции; это значит, что биржа отклонила, т.е. с точки зрения биржи торги еще не начались. Рассинхрон в одну сторону подтверждает и то, что вечером "после окончания сессии" торги еще идут (судя по вашим же сообщениям, как я их понял). Так что либо время биржи отстает, либо сервера QUIK опережает, так я думаю.
Константин Рейм написал: Да и сама эта функция как то странно себя ведет: время "10:00:05", а status == false, (на 3-5 сек. на старте торгов задерживается), время "18:45:33", а status == true. Прокомментируете?
Такой способ в самом деле есть, я про него и писал на форуме (вы таки читаете форум? ух-ты!) Однако хотелось бы иметь честный функционал по реальному изменению количества линий в индикаторе.
Evgeniy Karnaukhov написал: В таком случае рекомендуем разобраться с самим скриптом.
Также напоминаем о рекомендации обновить терминал до актуальной на сегодняшний день версии - 8.12.
Evgeniy Karnaukhov, расскажите: каким образом скрипт может нарисовать мимо вертикальной сетки? А то мне как раз хочется вывести индикатор Lua не ровно в сетку. Ну раз вы предполагаете, что надо разбираться со скриптом - то, видимо, из скрипта такое можно сделать, верно? Расскажите как.
По исходному вопросу - ну это же стандартная фича квика рисовать графики через один: один в сетку, другой со сдвигом. Пользователи рассказывают это 10 лет - но поддержка QUIK каждый раз удивляется и рассказывает небылицы.
Старатель написал: А если ответа никакого нет (мож, пакет потерялся, мож ещё чё), то клиент так и будет ждать у моря погоды... И тайм-аутом там не пахнет.
Цитата
Евгений написал: При выдергивании шнура интернет из роутера, квик сообщает о разрыве связи спустя 30-40 сек.
Во-первых, противоречащие параграфы. Ну если вы вообще про эту ситуацию говорите, а то не понятно.
Во-вторых, еще раз задам свой вопрос: вот потерялись пакеты, и? что вы предлагаете? Как понять они потерялись или серверу нечего отправить? А никак. Только по тайм-ауту. Можно обсуждать его величину, однако видно, что а) тайм-аут имеет место быть б) делать его длительностью в одну секунду - весьма много весомых противопоказаний есть против такого подхода.