max max написал: Тогда получается 2 разных времени . БИРЖА И БРОКЕР Если у них есть расхождение по времени то будут ошибки!
Даже более того, один сервер может работать одновременно с несколькими разными биржами и на каждой время легко может отличаться. С трудом можно представить чтобы например биржи в Лондоне, Америке и России договорились о том чтобы их часы шли синхронно вплоть до тысячных секунды.
Чтобы сравнить время нужно для начала привести его к одному формату. К сожалению исторически так сложилось что getInfoParam("SERVERTIME") возвращает строку формата "HH:MM:SS" а order_table.datetime вернет таблицу с полями {year, month, day, week_day, hour, min, sec, ms, mcs}
Соответственно, через string.match переводите SERVERTIME в часы минуты и секунды
Код
HHMMSS=getInfoParam("SERVERTIME")
if string.len(HHMMSS)==7 then
h,m,s = string.match(HHMMSS,"(%d)%p(%d%d)%p(%d%d)")
else
h,m,s = string.match(HHMMSS,"(%d%d)%p(%d%d)%p(%d%d)")
end
Здравствуйте, Трудно судить только по описанию проблемы не видя кода. Если зависает только в момент остановки, на вскидку, такое может быть если в OnStop крутится какой-то цикл. Отвечая на вопрос, кроме ds:Close() и нечего то больше закрывать.
Старатель написал: А вы проверяйте скриптом через getInfoParam('LASTRECORDTIME')
Уточните где именно проверяется LASTRECORDTIME? Если в каком-либо колбеке, то в каком? Или в цикле в main? Было бы замечательно получить хотя-бы пример на котором повторяется проблема. И проверить поведение на последней версии 7.2. У нас никак не получается повторить проблему
WennY написал: Я лишь хочу быть уверенным, что сделка состоялась или же, если она может не состояться, что она предприняла отчаянную попытку, которая закончилась провалом.
Сделка не может "предпринять попытки"! Это сделка - факт совершения операции. Если сделка сама по себе просто существует, это уже означает что заявка исполнилась, либо частично исполнилась.
Цитата
WennY написал: Означает ли заполнение 22526627011 у стопа-заявки гарантией того, что сделка состоялась? или она может все-таки не состояться?
Совершенно нет, linkedorder это заявка!, а не сделка. Грубо, приходите на рынок и говорите что хотите купить, но не факт что у Вас кто-то что-то купит.
Цитата
WennY написал: Есть выставленный руками/робот стоп-ордер. Как мне наиболее грамотно проконтролировать осуществление им сделки в формате "успешно осуществлена/попытка осуществлена, но неудачно"?
По количеству исполненного количества. Как контролировать исполненное количество уже на Ваш вкус, хотите через заявки, хотите по сделкам.
в таблице стоп заявок это номер заявки в торговой системе, зарегистрированной по наступлению условия стоп-цены. в таблице заявок это исходный номер заявки с указанной датой исполнения при замене заявки в ходе клиринга. Параметр заявок срочного рынка FORTS.
Цитата
WennY написал: Его можно использовать в качестве привязки?
в сделках этого параметра нет, но там есть order_num по которому можно найти заявку и стоп заявку (как раз по полю linkedorder)
Логарифмическая шкала меняет классическую шкалу (шкала цены) на логарифмическую, на которой данные как бы сжимаются в процессе увеличения значений.
подробнее можно почитать в интернете. Возможно Вам нужно просто привязать второй график к другой ось? если так это делается в свойствах графика.
Вот график сбера: сверху красным обычный, снизу чёрным логарифмический ... Мне непонятна шкала логарифмического графика, почему текущее значение на обоих графиках одинаковое ?
смотря что понимать под "открыта позиция", некоторые понимают под этим заявку, а некоторые сделку. Вот Вы как это понимаете?
Заявка - это лимитный биржевой ордер, выставленный напрямую или через условный стоп на брокере. Под сделкой я имею в виду именно свершившийся акт входа в позицию, а не отправку на биржу лимитной заявки.
Соответственно, если Вам нужна сделка смотрите колбек для сделок OnTrade. Или саму таблицу сделок через getItem
WennY написал: Хорошо, допустим, я отловил таблицу с моей транзакцией. Как теперь достоверно определить, была ли открыта (а не просто выставлена) позиция?
смотря что понимать под "открыта позиция", некоторые понимают под этим заявку, а некоторые сделку. Вот Вы как это понимаете?
Здравствуйте, Вопрос обменена данных между двумя программами не относится именно к Lua Это вопрос который касается вообще всех существующих языков программирования и таких способов для обмена в интернете предложено очень много. Это и сетевые протоколы, и pipe и sql базы и т.д, обмен через файлы это только один из множества способов.
Обмен информацией через файл возможен но, только в случае если одновременно одна программа будет только считывать файл, а вторая только записывать. И это не потому что так устроен Lua, а потому что так устроена файловая система Windows. У Вас же в коде в обоих случаях io.open открывает файл в режиме записи, а значит происходит конфликт при одновременном доступе. Либо открывайте один файл но по очереди, либо используйте два файла (1й скрипт пишет в 1й файл и читает 2й файл, а 2й скрипт пишет в 2й файл и читает 1й файл), либо используйте другой способ обмена.
Алексей Орешкин написал: чтобы эти графики не смещались и начинались с единой точки отсчёта.
Если речь про первую свечку, то нужно в параметрах диаграммы указать "Диапазон данных" - "за период" и установить фильтр по времени.
Цитата
Алексей Орешкин написал: Также в идеале нужен выбор шкалы приращений - абсолютная или относительная , чего тоже нет.
Возможно речь про "Процентное изменение" в свойствах графика?
Цитата
Алексей Орешкин написал: Хотя в настройках области видимости графика есть пункт Логарифмическая шкала, но я честно сказать вообще непонял как она работает в квике и работает ли вообще
Логарифмическая шкала меняет классическую шкалу (шкала цены) на логарифмическую, на которой данные как бы сжимаются в процессе увеличения значений. подробнее можно почитать в интернете. Возможно Вам нужно просто привязать второй график к другой ось? если так это делается в свойствах графика.
Старатель написал: Также хочу отметить, что по какой-то причине после рестарта сервера и смены даты иногда (?) параметр "LASTRECORDTIME" равен 23:59
К сожалению описанная ситуация не повторяется. Просьба сообщить больше подробностей, когда запускали терминал, когда подключали к серверу и т.д. также, просьба выложить поясняющие скриншоты
Здравствуйте, Вариант не работает. Штатного способа решить задачу нет. Однако упомянутый getLinesCount возвращает 1 если идентификатор задан, а если нет то вернет 0
Старатель, Вопрос был о способе определить период окончания вечерней сессии, на это и был дан ответ. Время сервера напрямую зависит от трансляции данных в терминал. Предположительно, причиной может быть отсутствие активных торговых шлюзов на сервере Если интересует исследование вопроса, необходимо смотреть со стороны сервера, то есть нужен брокер.
Здравствуйте, Период окончания вечерней сессии указан в расписании торгов. Если данный способ не устраивает, рекомендуем уточнить у специалистов биржи, рекомендуемый ими метод.
Вячеслав + написал: В какой момент нужно проверять, что таблица всех инструментов обновилась (добавились новые, удалились старые)? В момент начала выполнения обработчика OnConnected таблица инструментов уже обновлена?
Проверять после смены сессии в OnCleanUp
Цитата
Вячеслав + написал: Что делать с подписками по Subscribe_Level_II_Quotes на удаленные инструменты?
Здравствуйте, Графики индексов (в отличии от графиков по торгуемым инструментам) строятся по таблице текущих торгов, которая обновляется срезами данных (раз в таймаут) поэтому часть данных может быть пропущена при попадании на график
Здравствуйте, Роман, помимо Trans2quik есть еще способ отправки транзакций. Он немного попроще, возможно это то что Вам нужно. В QUIK есть функционал Динамического импорта транзакций из текстового файла. Суть его в том что QUIK считывает обычный текстовый файл и в случае появления в нем определенных строк, отправляет транзакции на сервер. То есть Вам достаточно написать VBA макрос который будет при определенных условиях просто записывать строку в текстовый файл, а QUIK уже сделает все остальное. формат тектового файла описан в документации -Раздел 6. Совместная работа с другими приложениями --Импорт транзакций ---Формат .tri-файла с параметрами транзакций
WennY написал: Раз уж тему уже создал... Как получить макс/мин. возможную цену бумаги?
через тот же getParamEx, с параметром pricemin или pricemax однако на фондовой секции они транслируются не всегда (зависит от настроек на стороне брокера)
Alex написал: Отключил BTrading.dll , видимо в нем была причина
Да верно. Ваш брокер не предоставляет услуги использования плагина корзины ценных бумаг (BasketTrading) Если Вам нужен этот плагин, Вам нужно обратиться к брокеру.
Здравствуйте, Функция getItem возвращает строку из таблицы. В частности у Вас в примере, выводит цену из последней строки таблицы обезличенных сделок. В этой таблице может быть несколько разных инструментов. В примере никакой сортировки нет, а значит вернется просто какая-то цена по непонятному инструменту. Если нужен конкретный инструмент, напишите цикл который будет перебирать строки таблицы от последней к первой и при нахождении нужного инструмента выходить из цикла.
помимо этой функции, цену последней сделки можно получить через функции CreateDataSource, getCandlesByIndex или getParamEx
Здравствуйте, Узнать параметры транзакции можно если добавить ее в Карман транзакций и от туда сохранить в tri файл. Открыв файл блокнотом Вы увидите нужные названия параметров.
Повторите проблему, после чего закройте терминал QUIK и пришлите нам quiksupport@arqatech.com всю папку (кроме ключей доступа) для анализа вместе с тестовым скриптом.
Здравствуйте, В LUA вообще нет ни одной функции которая как либо может управлять интерфейсом терминала QUIK и добавление таких функций в обозримом будущем не планируется. Для решения вопроса можно использовать CreateDataSource в котором есть возможность выбрать нужный таймфрейм
Здравствуйте, Если говорить о программировании, то связать данные можно по полю "ID транзакции" которое будет иметь одинаковое значение для стоп заявки/заявки/сделок указанное программистом. Если говорить о визуальном интерфейсе, то в таблице стоп заявок и сделок есть поле "Номер заявки", а в таблице заявок есть поле "Стоп-заявка" Все это описано в документации на терминал QUIK (клавиша F1).