Предлагаю добавить настройку, где можно было бы задать каталог для временных файлов, таких как info.log, curr_data.log, alltrade.dat, чтобы их можно было бы перенести на виртуальный диск в оперативной памяти для ускорения работы терминала.
Надо делать так, как надо. А как не надо - делать не надо.
local Date = getTradeDate().date
function main()
while not stopped do
local TradeDate = getTradeDate().date
if TradeDate and TradeDate ~= '' and TradeDate ~= Date then
message('Trade date: ' .. TradeDate .. '; Last record time: ' .. getInfoParam('LASTRECORDTIME'))
return
end
sleep(1) -- Чтобы воспроизвести наверняка, можете убрать sleep
end
end
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov написал: Уточните где именно проверяется LASTRECORDTIME? Если в каком-либо колбеке, то в каком? Или в цикле в main? Было бы замечательно получить хотя-бы пример на котором повторяется проблема.
Вот код:
Код
local Date = getTradeDate().date
function main()
while not_stopped do
local TradeDate = getTradeDate().date
if TradeDate and TradeDate ~= '' and TradeDate ~= Date then
message('Trade date: ' .. TradeDate .. '; Last record time: ' .. getInfoParam('LASTRECORDTIME'))
return
end
sleep(1) -- Чтобы воспроизвести наверняка, можете убрать sleep
end
end
Возможно причина в том, что getTradeDate меняется раньше, чем сбрасывается LASTRECORDTIME.
Надо делать так, как надо. А как не надо - делать не надо.
А вы проверяйте скриптом через getInfoParam('LASTRECORDTIME') Терминал работает круглосуточно. В настройках стоит "Восстанавливать связь автоматически". Утром после рестарта сервера и смены даты getTradeDate().date параметр "LASTRECORDTIME" бывает равен 23:59:хх Скринов нету, есть только логи:
Цитата
18.08.16 08:45:09.175 Disconnected 18.08.16 09:05:03.015 Trade date: 18.08.2016; Last record time: 23:59 18.08.16 09:05:03.506 Connected
Надо делать так, как надо. А как не надо - делать не надо.
Если заявка исполняется сразу, то, как правило, OnTrade приходит раньше OnOrder. Поэтому лучше отслеживать статус "Исполнена" порождённой заявки по OnOrder.
Надо делать так, как надо. А как не надо - делать не надо.
Вячеслав + написал: В какой момент нужно проверять, что таблица всех инструментов обновилась (добавились новые, удалились старые)? В момент начала выполнения обработчика OnConnected таблица инструментов уже обновлена?
Проверять после смены сессии в OnCleanUp
На самом деле в OnCleanUp ничего интересного не происходит. Списки инструментов обновляются позже. В OnCleanUp даже дата и идентификатор сессии не обновляются.
Надо делать так, как надо. А как не надо - делать не надо.
Именно на регламент я и ориентируюсь. К примеру, в условии скрипта указано, что если время сервера больше 23:50, то необходимо сохранить данные за прошедший торговый день. Если раньше этот способ работал, и скрипт, будучи запущенным в любой момент, срабатывал в нужное время, то теперь время сервера не является надёжным источником. И при чём тут специалисты биржи, если ваш терминал не транслирует время сервера?
Надо делать так, как надо. А как не надо - делать не надо.
Ув. разработчики, стоит задача выгрузки данных по окончании торговой сессии. Но в 7-м Квике вместо времени сервера и времени последней записи после 23:59:59 зачем-то транслируется пустая строка, в связи с чем невозможно понять, то ли данные не прокачались, то ли ещё что... Вы можете предложить надёжный вариант определить период окончания вечерней сессии без необходимости чтения локального времени?
Надо делать так, как надо. А как не надо - делать не надо.
Космонавт написал: А если компьютер на ночь уходил в гибернацию без выключения КВИКА, а утром ожил? Запомнятся ли переменные и будет ли читаться код до функции main?
Код читается один раз при запуске скрипта. Поскольку перезапуска скрипта не произошло, то код продолжит выполняться с точки останова. При этом все переменные сохранят свои значения.
Цитата
Николай Камынин написал: Полагаю, что при смене сессии , все начнется сначала.
При смене сессии всё не начнётся сначала. Код будет работать в соответствии с заложенной в него логикой. Так, если в коде предусмотрено "обнулять" значения переменных при смене сессии, то так и будет. Если "обнуление" не предусмотрено, то значения сохранятся.
Надо делать так, как надо. А как не надо - делать не надо.
Вариант второй: при сохранении таблицы BIG_DATA в файл выгружать только необходимые параметры, а не все подряд. Очевидно, что список этих параметров конечен.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель написал: И как же получить таймфрейм одного индикатора из другого?
А зачем из другого? Если у них один источник данных то и таймфрейм у них будет один и тот же. А раз так, то его можно получить через getDataSourceInfo.
Речь про два и более источников данных.
Надо делать так, как надо. А как не надо - делать не надо.
Sergey Gorokhov написал: И? Что мешает получить новый таймфрейм? Получить настройки одного индикатора из другого действительно нельзя. Но таймфрейм это не настройка индикатора.
И как же получить таймфрейм одного индикатора из другого?
Надо делать так, как надо. А как не надо - делать не надо.
Аналогичная ситуация, QUIK 7.0.4.10: Стоит настройка "Очищать данные после смены даты на сервере" Вечером, после окончания торгов, QUIK закрывается, а на следующий день, в вечернюю сессию я запускаю QUIK. При установлении связи с сервером данные очищаются, и QUIK зависает. Помогает только перезапуск программы. Данная проблема наблюдается ежедневно.
Надо делать так, как надо. А как не надо - делать не надо.
Добрый день. Предлагаю дать доступ на чтение к фильтру по кодам клиентов из QLua и, соответственно, добавить колбэк при изменении этого поля. Будет полезно для брокеров и управляющих.
Надо делать так, как надо. А как не надо - делать не надо.
А это вообще замечательно: Время сервера: 10:52:46 - "началась новая торговая сессия" от 06.05.2016 При этом на графике уже есть свеча за 18:45 от 06.05.2016.
Исправьте это недоразумение, чтобы скрипт всегда мог однозначно понять закончилась ли торговая сессия, дату которой QUIK транслирует или ещё не начиналась.
Надо делать так, как надо. А как не надо - делать не надо.
Здесь были какие-то изменения? Судя по всему, при подключении к серверу в неторговый день, теперь время сервера начинает отсчитываться с 9-ти утра, так, как будто торги последнего торгового дня ещё не закончились, точнее даже не начинались. Зачем?
Надо делать так, как надо. А как не надо - делать не надо.
Что-то я не увидел в списках изменений упоминания об устранении обсуждаемой проблемы. Позже проверю: версия 7.2 только недавно вышла, и что-то у меня сейчас нет желания запускать непроверенную версию в бой.
Надо делать так, как надо. А как не надо - делать не надо.
Алексей Орешкин написал: И есть ли хоть что то реализуемое на qpile и нереализуемое на qlua ?
QPILE выгодно отличается от QLua в том, что таблицы на QPILE после закрытия QUIK сохраняют свои размеры и положения в отличие от таблиц на QLua. Так, в QLua не сохраняются ширины колонок и вкладка, на которой был запущен скрипт.
Надо делать так, как надо. А как не надо - делать не надо.
Николай Камынин написал: Если я не ошибаюсь, то плата за транзакции возникает при более 30 транзакций в секунду. Эту плату берут с брокера, а он берет с Вас, если об этом есть в регламенте. например у БКС введено ограничение на не более 30 в секунду если больше то имеют право вообще отключить.
Это другие поборы, к биржевым не имеют отношения. Так, брокер возьмёт плату и за транзакции по стоп-заявкам, которые на биржу не выводятся.
Надо делать так, как надо. А как не надо - делать не надо.
Если у вас многоядерный комп, то main и колбэки будут работать параллельно.
Цитата
Николай Бехтерев написал: А что будет если замутить в коллБеке OnQuote( ) цикл while (пока заявка активна) do sendTransaction(убить заявку)
Тут надо включить мозг и подумать над написанным раннее:
Цитата
Старатель написал: вы не получите следующий колбэк, пока не закончите обрабатывать текущий. А чтобы получить новое состояние заявки - снята - терминал должен получить колбэк OnOrder с этим состоянием.
Все колбэки приходят последовательно.
Надо делать так, как надо. А как не надо - делать не надо.
1. sleep в колбэке с большой долей вероятности приводит к зависанию скрипта и QUIK в целом. Поэтому, использовать sleep в колбэках опасно. 2. Даже если бы это было не так, вы не получите следующий колбэк, пока не закончите обрабатывать текущий. А чтобы получить новое состояние заявки - снята - терминал должен получить колбэк OnOrder с этим состоянием. Поэтому, после подачи транзакции на снятие заявки вам ничего не остаётся, как ждать следующего OnOrder с новыми флагами.
Надо делать так, как надо. А как не надо - делать не надо.
Zoya Skvorcova написал: Старатель,Спасибо за объяснение. Именно так и проверяли на версиях 7.х. Сообщите, пожалуйста, полную версию QUIK, где проблема воспроизводится.
Проблема была в версии 6.17 В версии 7.0 проблема не воспроизводится.
Надо делать так, как надо. А как не надо - делать не надо.
В Доске опционов не обновляется параметр "До исполнения". Чтобы он обновился нужно вручную устанавливать параметры опционов. Пользовательский фильтр по параметру "До исполнения" не работает.
Надо делать так, как надо. А как не надо - делать не надо.