function a(s)
message (s)
end
Oni nit = {}
mt = { __call = a}
setmetatable(OnInit, mt)
--OnInit("a")
Хотел на колбеки (например возмем OnInit) повесить метатаблицy и обнаружил что квик не хочет их вызывать. Код выше в теории должен при старте скрипта вызвать a(). но он просто завершается Но если принудительно вызвать OnInit("a") все работает. В чем подвох?
есть индикатор, который в том числе рисует метку на графике.
При удалении индикатора в колбеке ondestroy эта метка удаляется. Все хорошо.
Пробуем индикатор в режиме связанных окон. При переключении инструмента-источника метка не удаляется, ondestroy не вызывается
Попытка запомнить в переменной факт наличия метки чтобы стереть ее на первой свече после смены инструмента также не приводят к успеху по причине полного рестарта скрипта индикатора.
Загрузка своих данных в Quik, Требуется создать индикатор который на основании еxel таблицы будет формировать гистограмма с положительных и отрицательный значениями
Андрей Воронцов написал: Данные в виде 1 столбца в Excel пр идее должно быть тривиально. Подскажите нету образцов? к примеру взять какой нибудь индикатор(готовый) и изменить в нем входные данные. Хоть MACD. Получится?
Загрузка своих данных в Quik, Требуется создать индикатор который на основании еxel таблицы будет формировать гистограмма с положительных и отрицательный значениями
начать нужно с чтения документации на язык луа и правила построения индикаторов а терминале quik.
емди вы хотите читать данные из текстового файла формата vsv или аналогичного - можно приступать к программированию. Если опыта нет -рридетсч помучиться.
если хочется читать данные свечей из открытого листа эксель, то дополнительно придется написать модуль расширения, который умеет общаться с экселем посредством ole или разобраться с уже готовой библиотекой.
Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами игнорируется, Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами не добавляет их в подписку сделок
Михаил Филимонов написал: Планируется, что у меня в приложении DDE + trans2Quik.dll будут работать несколько роботов, в каждом по три инструмента. Получается, чтобы добавить нового робота, я должен выключть 20 остальных!!!!
Anastasia Gordienko написал: Информацию в таблице текущих торгов quik получает с биржи и транслирует. Никаких вычислений внутри таблицы текущих торгов в Quik не производится. В какой таблице Вы бы хотели видеть отражение данных параметров?
Разве невозможно добавление в ТТТ столбцов с расчётными значениями, ведь все данные для расчёта указанных параметров берутся из той же ТТТ?
а что сложного в написании собственной таблица с любыми биржевыми параметрами и любыми расчётными?
Если интерпретатор говорит, что ms есть nil и запустить функцию невозможно - не стоит сомневаться, так оно и есть. Ещите место, где вы или обнуляете его (типа ms = nil) или где присваивание значение ms другой переменной до об'явивший самой функции ms
Sergey Gorokhov написал: Здравствуйте, Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Sergey Gorokhov написал: На бирже нет рыночных заявок по срочному рынку и никогда не было. То что в QUIK называется "рыночной" для срочного рынка, это обычная лимитированная заявка с признаком "Снять остаток" и указанной ценой. Если пользователь цену не указывает , то автоматом подставляется минимально/максимально возможная цена, в зависимости от направления
В описании формата .tri-файла для параметра PRICE сказано, что:
Цитата
Цена заявки, за единицу инструмента. Обязательный параметр. При выставлении рыночной заявки (TYPE=M) на Срочном рынке FORTS необходимо указывать значение цены – укажите наихудшую (минимально или максимально возможную – в зависимости от направленности)...
Так нужно или нет указывать цену при выставлении рыночной заявки на срочном рынке средствами lua? Другими словами, можно ли указать PRICE = "0", или надо обязательно лезть в Таблицу текущих торгов за соответствующими параметрами мин-макс цены инструмента?
если у вас нормальный брокер и программное обеспечение он своевременно обновляет, то можно указывать type=m и нулевую цену. Шлюз обработает.
если же на такую транзакцию приходит ответ что цена не может быть 0 - задумайтесь, правильно ли вы выбрали брокера.
Очень удобно иметь динамически меняющуюся вертикальную шкалу. Но мне надо еще и статику. 150 ровно, последняя котировка - по центру неё. Добавьте такую возможность, пожалуйста. Оптимально будет установить шаг шкалы, как сейчас, и задать вот этот интервал. 50 и 150 - три деления на небольшое окно. Их у меня много. Нужно, чтобы были примерно одинаковые. При этом сейчас выставляю нужный размер, цепляю за шкалу времени, сдвигаю - шкала вертикальная опять изменяется. Нет, мне нужно всегда одинаковый масштаб/размах.
Но, разумеется, цена меняется, так что задать как сейчас мин и макс правой оси - не вариант Но очень вариант - задать отступ от последней котировки. При интервале 150 - это 75 сверху от последней котировки и 75 снизу.
Сейчас попробовал выставить "По всем значениям" (было по видимым) - лучше. Но всё равно +/- от последней котировки будет удобнее.
У нас понимание этого момента полностью совпадает.
Все-таки хотелось дождаться чего-то вразумительного от Михаила Булычева. Почему с его точки зрения закрытие терминала и останов скрипта из диалога это одно и то же. Или если не одно, то вопрос из первого поста: как различить?
мой личный опыт показывает, что сообщение QTABLE_CLOSE генерируется, если пользователь сам закрывает окно таблицы, созданное скриптом, либо если это делает терминал автоматически при простом закрытии. Но, если вы останавливаете скрипт через сервис терминала (диалоговое окно), то данное событие не генерируется.
совершенно верно.
задача стоит так.
при закрытии мышкой главного окна скрипта нужно обработать процедуру завершения, закрыть остальные окна и завершить скрипт.
по закрытию из диалога - все то же самое, включая закрытие главного окна и завершение скрипта
1. Колбек OnStop выполняется при закрытии терминала и при остановке из диалога. Мне по этим двум событиям необходимо делать разные действия. Как отличить одно от другого?
2. При закрытии терминала закрываются все окна скрипта. При этом функции обратного вызова от этих окон активны и выполняются. Это верное утверждение?
Юрий Балашов написал: Сейчас ACTION = MOVE_ORDERS на рынке акции ММВБ не работает. 1. Существует ли веская причина этого? 2. Планируется ли ввести передвижение заявок для акций, с целью снижения нагрузки на сервера биржи? 3. Если этот вопрос не поднимался, прошу зарегистрировать его как пожелание.
Андрей Пахомов написал: Буду очень признателен, если подскажете такую бесплатную программу, на которой можно создавать окна с разными таймфреймами, проставлять на них различные графические объекты векторной графики (линии, отрезки, тексты) с теми же возможностями (тип, цвет, время, цена и пр.) что и в QUIK-е, а затем открывать их для просмотра, изменения, а также для тестирования QLUA скриптов в любое время суток. Исторические данные также должны полностью совпадать с реальными на всех таймфреймах.
все что вы попросили, делает любая программа технического анализа. Амиброкер, велслаб и даже метасток древний.
конечно, гонять скрипты на qlua в них не полуситмя., Там другие встроенные языки программирования. Намного более мощные.
Андрей Пахомов написал: Ещё в прошлом веке надо было сделать. И не 65000 свечей, а всю историю, хотя бы за последний год. И с возможностью хранения и просмотра всех нужных данных на локальной машине трейдера.И без удаления старой истории при перезагрузке графиков. Да, если есть ограничение по истории у брокера, то может придётся следить и периодически подгружать текущую историю, что бы потом не было в ней пробелов, но кому надо тот сделает. А сейчас возможность нормальной работы с историческими данными отсутствует практически полностью. Приходится сохранять весь QUIK с "текущей" историей раз в 15-20 дней, в отдельную папку, со всем последующим "геморроем" по обработке этих данных...(((
А может быть проще не заниматься ерундой, а использовать для анализа истории специально предназначенные для этого программы?
Sergey Denegin написал: не хочется тратить время на то, что надеялся купить. А может кто-нибудь поделится библиотеками и наработками для отправки в вотсап или телеграм?
Вот для метатрейдера человек делал. Нетрудно переложить в С++ библиотеку для скрипта lua.
Процедуру можно делать в тот момента когда она вам нужна.
Схематично эта процедура стучится к брокеру с просьбой послать терминалу данные по требуемому вам инструменту.
весточек должны доставить (dhl или голуби), сервер после ее получения докушает чай, отошлет назад данные (может снова голубями), потом терминал их рассует по полкам т только после этого они станут доступны вам.
сколько времени пройдет на все эти пассы -гетзвестно. Но явно больше, чем выполняется один оператор lua в вашей программе.
Владимир Фонякин написал: Здравствуйте! В данное время Quik не может обрабатывать внешние транзакции от нескольких внешних приложений. Это очень неудобно, когда есть необходимость подключения нескольких роботов, передающих торговые приказы таким образом. У разработчиков программы Mega Trader разработан вспомогательный модуль QuikTrans, который позволяет следующее (цитата из руководства пользователя ): "Вспомогательный модуль QuikTrans служит для передачи торговых приказов из программы MegaTrader в терминал Quik. Необходимость создания данного модуля вызвана тем, что терминал Quik может поддерживать соединение (принимать торговые приказы) только с одним внешним приложением. Модуль QuikTrans снимает это ограничение, позволяя транслировать торговые приказы от нескольких одновременно запущенных экземпляров программы MegaTrader в один терминал Quik, что делает возможным подключение к одному терминалу нескольких программ MegaTrader".
Свяжитесь, пожалуйста, с разработчиками этой программы, может, есть возможность сделать что-то подобное в программе Quik. Спасибо!
все просто на самом деле.
нужно произвести каеую-манипуляцию с терминадом- подключились, произвели, отключились.
если в момент подключения уже другой робот разговаривает с катком -подождали и попробовали снова.
что такое мегатрейдер мне неизвестно, но делает то же самое, что совсем никакое не мега.
Michael Bulychev написал: Добрый день. ошибки, которые может вернуть CreateDataSource: - "invalid context" - функция вызвана вне main или других зарезервированных функций; - "unknown class code"; - "unknown param name" - не найден такой параметр на заданном классе; - "static param" - параметр в ТТП есть, но он берется из описания бумаги (getSecurityInfo); - "CreateNetDataSource failed" - это ошибка общего характера, например не хватило памяти.
Michael Bulychev написал: Добрый день. Какие ошибки фиксируются в логе?
Текст ошибки не фиксировался. Раз нам терминал рассказал о существующих инструментах, разве могут быть ошибки при подписке на них? Терминал же нас не обманывает )) Хорошо хоть статус поверялся.
Вот еще на ту же самую тему.
Текст скрипта на экране. также на экране график инструмента и запись о нем в таблице текущих торгов.Результат выполнения скрипта меня удивляет. Я чего-то не понимаю?
1. Нельзя ли усидеть полный список возвращаемых ошибок?
2. По какой причине cteatedatasource может возвращать ошибку для инструмента, о наличии которого нам говорит функция, возвращающая сптсок инструментов класса? Почему эта ошибка проявляется обычно при установлении нового сеанса и почему такая ошибка плавающая?
порядок действий:
-- был oncleanup get class info()
for ticker in instrument_list printlog(createdasource(ticker))
в результате среди сотни успешных подписок иногда встречаются неудачные. Обычно это неликвидный мусор.
s_mike@rambler.ru написал: Не имеет значения, кто виноват. Брокер, терминал или папа римский.
С точки зрения обыкновенного пользователя данным, которые он видит на графиках своего терминала, невозможно доверять.
Для того, чтобы такие проблемы не возникали нужно их локализовать. В дальнейшим устранить. Без каких либо данных это сделать затруднительно.
Егор.
Для поиска ошибок существует процедура тестирования.
Я привел вам скриншот, демонстрирующий проблему в вашем ПО. Если компания заинтересована в улучшении своей продукции -пусть принимает меры. Я не сотрудник компании.
Связались с Вашим брокером. Запросили необходимые данные для проверки. Графики на сервере корректные, с 30 мая по 5 июня никаких действия с графиками не проводились. Брокер также на своей стороне проблем не видит. Если У Вас по прежнему сохраняется проблема. Просьба прислать архив рабочего места QUIK без ключей доступа.
s_mike@rambler.ru написал: Не имеет значения, кто виноват. Брокер, терминал или папа римский.
С точки зрения обыкновенного пользователя данным, которые он видит на графиках своего терминала, невозможно доверять.
Для того, чтобы такие проблемы не возникали нужно их локализовать. В дальнейшим устранить. Без каких либо данных это сделать затруднительно.
Егор.
Для поиска ошибок существует процедура тестирования.
Я привел вам скриншот, демонстрирующий проблему в вашем ПО. Если компания заинтересована в улучшении своей продукции -пусть принимает меры. Я не сотрудник компании.
Вы много всего написали. На самом деле все просто.
Сервер посылает информацию вам с вполне определённой последовательностью в соответствии со своим внутренним алгоритмом.
Но информация делится на пакеты. Пакеты эти уезжают от сервера в сеть и дальше он ими не управляет. Поэтому первый пакет может уехать к вам через Камчатку, а второй через Химки. И вы запросто можете получить второй пакет раньше первого.
Утром мне звонит клиент и тыкает в меня палкой: твоя писанина не работает. Смотрю: и правда не работает, причем разваливается прямо в хлам по непонятной причине. Полдня глаза ломал. Нашел. Вот вам скриншот:
Да и вообще... Как может быть таблица обезличенных сделок всегда у вас быть упорядоченной?
поедставим ситуацию. Сделан заказ сделок на Газпром в а постройках терминала. Соответственно идут торги, в хранилище в правильном порядке лежат обезличенные сделки по Газпрому.
запускаем скрипт. Он хочет вывести ТОС по сберу и Газпрому. Делам подписку на такие Газпрома -ничего не происходит (и так получает терминал), делаем подписку на сбербанк - терминал отправляет запрос на сервер.
в этот момент скрипт начинает читать ТОС. Козе понятно, что сделок по Сбербанку в ней ещё нет. Скрипт заглатывает всю имеющуюся таблицу (там один Газпром) и выводит ее в файл. А уже после того приезжают сделки по Сбербанку.