Добрый день! При отладке скрипта столкнулся с проблемой нумерации баров в Квике. Проблема в том, что если с помощью скрипта получить номер бара, то он будет на 1 больше, чем в Квике. Например, если с помощью выше приведённого простейшего индикатора вывести номера баров, то они будут на 1 больше, чем считает Квик. То, как нумерует бары Квик можно наглядно увидеть, если посмотреть номер бара в свойствах вертикальной линии. Как решить эту проблему? Спасибо
Здравствуйте! Для тестовых целей в окне диаграммы хотелось бы заменить для свечей значения O, H, L, C. Чтобы отображались свечи с новыми значениями, например, в виде волны с определённым периодом и амплитудой. Можно ли это сделать с помощью скрипта на qlua?
Подскажите как можно в скрипте qlua определить новый номер заявки после её перетаскивания мышью. Думал использовать id, но после перетаскивания id у заявки пропадает.
Здравствуйте! Использую Квик 8.13.3.1, торгую RI. Заметил, что в таблице Текущие торги % изменения цены рассчитан не от цены окончания вечерней сессии предыдущего дня, а от цены окончания дневной сессии предыдущего дня. Почему так?
Прошу зарегистрировать пожелание на доработку - Сделать возможность регулировать мышью размер окна Доступные скрипты. Это окно занимает много места и мешает, свернуть тоже не удобно.
Прошу уточнить по отображению индикатора на последней текущей свече. Как тут уже где-то писали, это делать нужно с помощью return.
Мне нужно отобразить на последней свече постоянное значение, которое было рассчитано по предыдущим свечам, т. е. оно не меняется на тиках этой последней свечи. Поэтому сделал это на первом тике последней свечи, на следующих тиках свечи return не выполняется дабы зря не грузить Квик. Но точка то-ли не появляется, то-ли пропадает на следующих тиках.
Получается, что для отображения индикатора на последней свече надо на каждом тике запускать return "значение"!? Или я что-то попутал?
Есть здесь спецы по WL? Разрешите вопрос. Можно ли в WL отображать пустые интервалы, как в Quik, и потом использовать их в работе скрипта? Очень надо для тестирования стратегий перед переносом в Quik.
А что понимается под словам Диаграмма? В доках это слова появляется только для этого оператора. В самой программе используются понятия окно и область окна. Так как в данном операторе указывается имя графика, то я решил, что удалятся будут метки, привязанные к графику с этим именем.
Перешёл на версию 8.8.4.3., проблема осталась. Поясню подробнее. Я использую свой скрипт индикатора, он отображается в отдельной области, перерисовывается на каждом новом баре, метки на индикаторе тоже меняются на каждом новом баре. Чтобы при наступлении нового бара отобразить новый график индикатора с новыми метками мне нужно стереть старые метки, для этого использую в начале скрипта оператор DelAllLabels(labelGrafName1) и затем рисуются новые метки. Если я создам в этом окне ещё одну область с таким же индикатором, он появиться пока без меток, с первым тоже пока всё нормально. Но как только я укажу имя графика для второго индикатора и нажму кнопку Применить, то сразу метки первого индикатора исчезают, а у второго появляются. Получается, что оператор DelAllLabels(labelGrafName2) из скрипта второго индикатора удалил метки с именем labelGrafName1 из другого окна.
А в доках указано, что Команда удаляет все метки на диаграмме с указанным графиком!?
Столкнулся с проблемой вывода меток в разных областях одного окна. Это возможно? В одной области метки выводятся. При попутке вывести метки во второй области того же окна метки из первой области пропадают. Версия 8.3.2.4
Здравствуйте! Хотелось бы вернуться к этому вопросу.
Можно ли как-то отобразить на графике в Quik_v8 несколько будущих значений индикатора? Например, рассчитали прогноз на несколько свечей, отодвинули правый край на несколько интервалов влево и нарисовали этот прогноз.
Ответ был непонятен - Такой возможности нет. Свдиг графика для этого и существует... ???
Если нельзя, то зачем есть возможность сдвигать правый край? Как и где отображать прогнозные значения?
Квик запускался ярлыком с опцией -clear. В документации указано, что данная опция позволяет очистить служебные файлы с расширением *.log и *.dat что позволяет ускорить загрузку программы.
При отключении данной опции проблема исчезновения данных последнего дня пропала. Если разработчики так и планировали, то об этом надо было указать в документации. Ё
К сожалению, у меня нет возможности перекачивать такие объёмы. Могу выслать конкретные файлы, укажите какие. А что, на вашей тестовой системе такой проблемы нет?
1.Размер папки Квик без подпапки с бэкапами (которые вам думаю не нужны) около 300 МБ. :( 2.Обновился до версии 8.3.2.4, проблема осталась 3.Более внимательно посмотрел, оказывается данные за последний день пропадают не на следующий день, а уже в этот же день. Т.е. после окончания торгов отключаюсь от сервера, закрываю Квик, открываю опять Квик без подключения к серверу, данных за этот последний день на графиках нет. Проблема присутствует при любом положении опции «Очищать данные после смены даты»: + «На локальной машине» + «На сервере (при установлении связи)» т.е. возможно проблема не имеет отношения к данной опции раз данные на графиках пропадают уже в этот же день.
Здравствуйте! Как сделать файл архива я знаю, я не знаю как Квик создаёт свои архивные файлы, наверное, это те файлы, которые лежат в папке C:\QUIK\archive.? Сегодня утром проблема повторилась, запустил Квик без подключения к серверу, данных за вчерашний день Квик не показывает. :( Вчера сделал архив из файлов папки C:\QUIK\archive, однако сегодня после запуска Квика и выхода из него, вижу что они не изменились. Какой смысл опять те же файлы паковать во второй архив? Таки присылать вчерашний архив?
Извините, раньше не делал архивы, в доках не нашёл как это делать. М.б. это файлы из папки C:\QUIK\archive с расширением dat? Тогда наверное будет достаточно одного файла например по сберу?
«На локальной машине» – очищает в памяти данные предыдущей торговой сессии сразу после запуска программы, до установления связи с сервером. Используйте этот вариант, если нет необходимости получать информацию о торгах за предыдущий день перед началом торгов за текущий день.
«На сервере (при установлении связи)» – очищает данные предыдущей торговой сессии при появлении на сервере данных, относящихся к новой торговой сессии. Используйте это вариант, если информация о торгах принимается утром следующего дня (например, из-за существенной разницы в часовых поясах).
У меня стоит "На сервере". Не понятно как это работает, я же вообще к серверу не подключаюсь, а данные очищаются! И почему нет опции Никогда не очищать данные?
Здравствуйте! Имею такую же проблему! Уточню ситуацию. Пусть сейчас пятница, идут торги, в Квике отображаются на графиках текущий и предыдущие дни. Торги заканчиваются, отключаюсь от сервера, продолжаю нормально работать со всеми данными, включая данные последнего дня. Выключаю ПК. В сб или вс возникла необходимость поработать с данными в Квике. Включаю ПК, загружаю Квик без подключения к серверу, на графиках вижу данные за все дни кроме последнего (пятничного). :( Куда пропади данные за последний день (пятницу)? Они же отображались в Квике в пятницу!
Прошу уточнить: можно ли как-то отобразить на графике в Quik_v8 несколько будущих значений индикатора? Например, рассчитали прогноз на несколько свечей, отодвинули правый край на несколько интервалов влево и нарисовали этот прогноз. Если нельзя, то непонятно зачем предусмотрена возможность отодвигать правый край графика. И как тогда вообще можно отобразить прогнозные значения?
А можно ли как-то с помощью qlua определить Диапазон данных графика? Это может быть нужно, например, для определения мах или мин значений в окне графика. Конкретно мне это требуется для выведения текстового сообщения с помощью addLabel в верхний правый угол окна графика. Других операторов для этого не нашёл.
С целью оптимизации потребляемого трафика рекомендуется использовать автоматическое определение параметров заказа биржевых параметров с сервера QUIK. Он включается в настройках программы – это опция «Исходя из настроек открытых пользователем таблиц» в пункте меню «Система» / «Настройки» / «Основные настройки» / «Программа» на вкладке «Получение данных». При включении автоматического заказа терминал будет самостоятельно отслеживать произведенные Вами настройки окон и автоматически запрашивать у сервера необходимые биржевые параметры.
У меня было настроено вручную получение данных по ряду акции, после выполнения данной рекомендации в таблице Получаемые инструменты (Система-Заказ данных-Поток котировок) количество инструментов странным образом значительно увеличилось, в список добавились акции, с которыми я никогда не работал, такие как Юнипро, ФосАгро и др.
Здравствуйте! Прошу подсказать - как сделать, чтобы диаграмма Глубина рынка располагалась не на поле со свечами, а справа от него, т.е. справа от правой вертикальной шкалы цен. В свойствах этой диаграммы не нашёл такой возможности, получается накладка диаграммы на свечи, что неудобно. Если такой возможности нет, то прошу добавить в список пожеланий на доработку. Спасибо
В версии 7.2.. Quik я определял маржируемость и шортируемость бумаг в скрипте с помощью данной функции и параметров is_long_allowed и is_short_allowed. Сейчас я поменял версию Quik на 7.23.2.5 и эти параметры перестали работать. Вот код:
local tbs = getBuySellInfoEx(firm_id, client_code, class_code, sec_code, 0) local ms = "" if tbs.is_long_allowed == "1" then ms = "+" else ms = "-" end if tbs.is_short_allowed == "1" then ms = ms.." +" else ms = ms.." -" end SetCell(t, i, nc, ms) --заполнение колонки в таблице
Сейчас по всем бумагам показывает отсутствие маржируемости и шортируемости, переменная ms для всех бумаг "- -"
Возникла следующая проблема. В закладке Портфель есть табличка Клиентский портфель. Проблема такая - одна из строк показывает состояние на текущий день - эта строка показывает неправильные данные - акции были, я их продаю, и после этого сумма и % должны зафиксироваться и перестать меняться при изменении цен акций ибо портфель теперь пуст. Однако они продолжают меняться! Если войти в Заказ данных - Поток котировок и выполнить Установить настройки по открытым таблицам, то проблема исчезает. Но в этом случае у меня вырастает трафик из-за того, что теперь закачивается куча не нужных мне инструментов и параметров.
Возможно это проблема связана с тем что я убирал ранее из закачки некоторые параметры. Хотелось бы понять - какие именно параметры нельзя убирать из закачки, чтобы избежать этой проблемы.
Т.е. вопрос такой - каков минимальный набор параметров по инструментам, чтобы quik функционировал корректно!
В документации сказано, что функция DestroyTable закрывает окно таблицы с идентификатором «t_id». Однако, функция только очищает таблицу, а окно не закрывается. Какой функцией можно закрыть окно? Вообще странно, есть функция IsWindowClosed для проверки закрыто ли окно, но я не нашёл функции, которая закрывает. Получается нужно остановить скрипт, а потом ещё закрывать пустое окно. :(
Существует ли возможность обращаться из скрипта QLua к таблице Текущих торгов по номеру строки этой таблицы? Чтобы, например, можно было из скрипта определить какие бумаги представлены в таблице?
Спасибо, удобный сайт, хорошие примеры. Но эта функция из раздела Функции для работы с графиками, если график не открыт, то данных не получить :( Это вариант источника данных номер 1, см. выше
Планирую сделать скрипт, который будет анализировать изменение цен текущих торгов по нескольким акциям, например, находить и сообщать о появлении свечей определённого вида. Возникло 2 вопроса.
Первый вопрос связан с выбором наилучшего источника данных для такого скрипта, как я понял из документации, возможные варианты: 1 - графики, но неудобно создавать много графиков :( 2 - таблица Текущие торги 3 - таблица Обезличенные сделки 4 - своя таблица, которая может заполняться из одной из двух предыдущих таблиц 5 - неизвестный мне источник данных :)
Второй вопрос связан с разделением потока сделок на отдельные свечи, возможные варианты: 1 - если использовать в качестве источника данных графики, то уже имеем свечи с их номерами 2 - если используем таблицы, то деление цен акций на свечи придётся выполнять в скрипте самостоятельно, и не факт, что совпадёт со свечами на графике 3 - неизвестный мне вариант :)
Прошу специалистов подсказать наилучший вариант и поделиться опытом написания подобных скриптов Спасибо
Посмотрел по ссылкам, то так то сяк. К сожалению, у меня нет журнала с исходной статьёй автора (октябрь 1980 года журнал Commodities). Если у кого есть, пришлите пож-та ссылку.
По определению CCI - индикатор, основанный на анализе текущего изменения отклонения цены от её среднего значения и среднестатистического абсолютного значения этого параметра. Как раз в моём варианте кода и определяется такое среднестатистическое значение отклонения. Мне понятен физический смысл такого индикатора. Линия МА это как бы линия тренда и мы сравниваем отклонение цены от этой линии на текущем баре с среднестатистическим значением этого отклонения. А вот физический смысл вашего кода мне непонятен. имхо
Вопрос, наверное, к Sergey Gorokhov, так как он вроде писал индикаторы.
По ряду причин решил проверить значения индикатора CCI в Quik. Написал свой простейший для проверки, отобразил в одном окне, значения не совпали. Свой вариант программировал по классическим формулам, смотри, например, на википедии CCI, вот здесь: https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0... Обратите внимание на формулу Среднего абсолютного отклонения (MAD), она рассчитывается через значения своего MA на каждой точке расчёта. Посмотрел формулу Среднего абсолютного отклонения в индикаторе CCI из Quik: MD = MD + math.abs(b_ma - Value(i, VT, ds)), здесь вроде используется значение MA не на каждой точке, а просто берётся MA последней точки. Думаю, это неправильно.
Привожу код своего индикатора CCI:
Settings = { Name = "*CCI_My_v1", period_CCI = 13, line = { {Name = "CCI_My", Type = TYPE_LINE, Color = #00fafa, Width = 1} } }
function Init() return 1 end
function OnCalculate(index)
local periodCCI = Settings.period_CCI
if index < periodCCI*2 then return nil else
local myCCI = 0 local meanDeviation = 0
for i = index-periodCCI+1, index do
--Вычисление SMA для каждого i local smaMD = 0 for j = i-periodCCI+1, i do smaMD = smaMD + C(j) end--for j smaMD = smaMD / periodCCI
--Суммирование отклонения для i meanDeviation = meanDeviation + math.abs(smaMD - C(i))
end--for i
--Вычисление среднего отклонения для index meanDeviation = meanDeviation / periodCCI
--Вычисление SMA для index local sma = 0 for i = index-periodCCI+1, index do sma = sma + C(i) end--for i sma = sma / periodCCI
--Вычисление CCI myCCI = (C(index) - sma)/(0.015*meanDeviation) return myCCI
end--else end
Т.е. вроде в индикаторе CCI Quik не хватает блока --Вычисление SMA для каждого i.
Получается, если писать tth[0].close ... :))) Получается, что функцию getCandlesByIndex действительно можно использовать в индикаторе, чтобы получить данные индикатора другого окна. Но почему тогда её нет в списке "Список функций, доступных из скрипта индикатора" из файла QLua.chm? Это неполная документация или эту функцию нежелательно использовать? Вопрос к разработчикам. И где взять полный список функций, доступных из индикатора?
Интересный вопрос, но непонятный ответ, под специализированным индикатором можно понимать разное. Например, в первом окне МА 5 мин, во втором окне МА 60 мин. Берём значения индикатора из второго окна и отображаем в первом окне. В списке функций, доступных в индикаторе, нет функции getCandlesByIndex. Как это сделать без этой функции?
Спасибо, если кто-нибудь может прояснить ситуацию простыми, понятными словами