Здравствуйте, Какой интервал у графика? Вы смотрите предыдущую свечку и пред предыдущую. т.е. если пересечение случится на текущей свечке, код не увидит этого пока не появится следующая свечка, а это займет время равное интервалу.
валерий написал: Не понял - на графике рисуется C(Index), а не SetValue.
Но messag же выдает 12345 не так ли? Разве это не говорит о том что Ваша версия о неработающем SetValue не подтверждается?
У Вас на индикаторе одни значения затираются другими. На примере простого кода:
Код
x=123
x=1111
после его обработки, в конце Вы получите x=1111, так как x сначала был 123, а потом поменялся на 1111, в моем примере и у Вас, ровно тоже самое. Вы сначала пишите одну цифру через SetValue, а потом, затираете ее другой цифрой через return. Так понятно?
Функции вполне успешно меняют значения на текущей свече, простой пример это доказывает:
Код
Settings = {
Name = "*test",
line = {{Name = "test", Type = TYPE_LINE, Color = RGB(255, 0, 0)}}
}
function Init()
T = {}
return #Settings.line
end
function OnCalculate(Index)
SetValue(Index, 1, 12345)
x=GetValue(Index, 1)
message("Index="..tostring(Index).." ".."GetValue="..tostring(x))
return C(Index)
end
По всей видимости, у вас значение текущей свечи, после SetValue затирается другим значением указанным в return
Алексей написал: А откуда мне взять свежую версию терминала, если брокер предоставляет 7.2.2.3?
Вы можете запросить последнюю версию у брокера. Если брокер ее Вам не предоставит, Можете запросить у нас. Но есть риск что терминал не подключится, если у брокера старая версия сервера.
Цитата
Алексей написал: Сомневаюсь, что что-то не так со скриптом, поскольку он элементарный
У нас описанное поведение не воспроизводится. Если есть проблема нам нужно ее исследовать. А для исследования нам требуется ранее запрошенная информация.
Большие ли отличия QLua от от Lua и где официальная документация?, Какая версия Lua в QLua, работают ли все функции Lua или только какой-то ограниченный набор (если так, то где прочитать, какой?), можно ли подключать модули и все как в обычном Lua? Есть ли где-то на официальном сайте документация?
валерий, Ваш вопрос не понятен. Вы что-то сказали конкретно про вычисление пустых свечек, и Вам был дан такой ответ конкретно относящийся к необходимости вычисления пустых свечек. А что касается индикаторов, это вообще никак к ним не относится.
валерий написал: Sergey Gorokhov , Индекс в OnCalculate(index). Конкретно, вот график с одной фишкой, пропуски не показывать, фильтр по дневной сессии. Какие свечи будет перебирать индекс? Только те что на графике?
OnCalculate вернет столько свечек сколько на графике.
валерий, Какой индекс? Какая база данных? Вы можете предметно сообщить что именно интересует? Сейчас Ваш вопрос не понятен. Вам уже было сказано, что сами графики вообще никак не менялись, а менялись только конкретные функции, а вернее результат их вывода в случае наличия пустых свечек. Остальное не менялось и поведение то же самое.
валерий написал: Это в 7.2. А что в 7.7? Организовать вычисления при наличии пустых свечек конечно можно, но это накладно и в 99 случаях не нужно.
Никто Вас не заставляет "производить вычисления при наличии пустых свечек", просто пропускайте их и все. Именно это корректно позволяют сделать изменения в 7.7.
валерий написал: Кстати, хотелось бы уточнить. Если на графике стоит фильтр по времени, то отсутствующие свечи все равно теперь будут подаваться в функцию индикатора?
Как связан фильтр по времени с наличием либо отсутствием пустых свечек?
Как уже было сказано, так не должно быть. Как уже было сказано, проблема либо в старом терминале либо в самом скрипте. Из этого следует, что 1 - Вам надо обновить терминал, 2 - если не поможет воспроизвести ситуацию и предоставить нам скрипт / скриншоты и копию папки с терминалом (без ключей доступа) на ящик quiksupport@arqatech.com
Здравствуйте, На сервере есть ограничение в 3000 исторических свечек на каждый интервал. Т.е. более 3000 свечек получить из хранилища нельзя. Далее идет текущая сессия, она считается отдельно.
Почему у Вас получилось 6к+ свечек, сказать затруднительно. Возможно что-то не так с самим скриптом, или версия старая, по идее так не должно быть. "перенумерация" должна происходить после смены сессии. Сервер удаляет старые свечки, и добавляет в архив новые, так чтобы в архиве по прежнему было 3000 свечек. Таким образом, при условии что в архиве сервера уже 3000 свечек, каждый день, первая свечка на графике должна быть под номером 3001. На это еще может влиять настройка в разделе "Программа" - "Сохранение данных", "Очищать данные после смены даты"
К сожалению мы не можем зарегистрировать пожелание в таком виде, т.к. оно противоречит концепции развития нашего ПО. Иными словами, мы не можем показать на графике то чего реально нет. Уточните зачем Вам это? Возможно есть другой путь решения.
валерий написал: Вопрос тем кто пользует 77, сам я с большииим лагом обновляюсь. А на графиках как нововведение отражается? Пустые интервалы теперь убрать нельзя?
На графиках ничего в этом месте не менялось. Менялись конкретно те Lua функции о которых сказано в списке изменений.
Старатель написал: Вопрос не в том, что выводить - это зависит от индикатора, можно и вполне осмысленное значение. Вопрос в том, как выводить, если OnCalculate не вызывается?
Такой возможности нет. Разве что на каждую из бумаг повесить по индикатору.
Космонавт написал: Сергей, на примере индикатора RSI подскажите пожалуйста что нужно изменить, чтобы код работал на новой версии КВИКа?
Как уже говорилось, индикаторы будут переписаны. Не сейчас, но будут. А как именно, уже вопрос внутренний. Сейчас же Вы можете самостоятельно его исправить на Ваше усмотрение, т.к. индикаторы предоставляются "как есть" т.е. допускаются любые правки на свое усмотрение.
Старатель написал: Вопрос о том, как поведёт себя QUIK, когда по одному инструменту уже начал рисоваться новый бар, а по другому инструменту - вдруг приходит сделка по предыдущему бару?
Вопрос касается того как поведет себя OnCalculate. Он поведет себя ровно также как если бы был только 1 график, т.к. OnCalculate привязан к конкретному источнику данных.
Старатель написал: Не совсем так. OnCalculate на пустых интервалах вызывается только при пересчёте индикатора (если, например, в окне редактирования нажать "Применить" или "ОК"). В реалтайм OnCalculate на пустых интервалах не вызывается.
_sk_, Вы немного ушли от темы, я говорил ровно о том что написано в списке изменений.
Цитата
Изменен вывод информации функциями O, H, L, C, V, T по свечкам, сформированным на пустых интервалах. Теперь, для таких свечек, функция T возвращает время интервала, а функции O, H, L, C, V возвращают nil. Для корректной проверки существования свечи на графике добавлена новая функция CandleExist(). Подробное описание приведено в п. 7.2.5 Руководства пользователя Интерпретатора языка Lua.
_sk_, На все вопросы вида "а что будет если" в большинстве случаев Вы сами легко можете найти ответ. И сейчас именно такой случай. Небольшой эксперимент покажет что индикатор по FEES даже не заметит появления значений по SRH7. Связано это с тем что по FEES изменений не было. В случае если в одном окне установить график по нелеквиду и по активному инструменту, Вы увидите что OnCalculate сработает по нелеквиду и CandleExist покажет false на пропущенных свечках только, после того как на нелеквиде появится нормальное значение.
Уже сейчас можно сделать вторую нумерацию. Просто добавив переменную счетчик, которая будет увеличиваться на +1 при CandleExist
ОК.
Я правильно понимаю, что индексы-аргументы OnCalculate() от одного вызова к другому: * либо повторяются; * либо увеличиваются на 1; * либо сбрасываются в 1.
Т.е., например, последовательности ..., 100, 101, 102, 101, 102, 103, ... быть не может?
Ответ на этот вопрос неплохо бы в документацию добавить.
обновления посередине быть не может, если Вы об этом.
_sk_ написал: Функции O(I), H(I), L(I), C(I), V(I) в качестве индекса I используют порядковый номер свечи на графике, включая "дыры".
Вопрос:data source ds имеет ту же нумерацию ds:O(I), ds:H(I), ds:L(I), ds:C(I), ds:V(I) или здесь индекс I относится к источнику данных, где нет "дыр" между свечками?
нет, нумерация будет разной т.к. на графике пустые интервалы получаются из-за наложения других графиков, а в DS никакого наложения быть не может.
_sk_ написал: Просьба ответить на мои вопросы из двух предыдущих постов. Если в документации неправильный пример, его точно надо оттуда убирать и, может быть, заменять на правильный.
Пример не правильный, документация будет исправлена.
s_mike@rambler.ru, Раньше, с этим были проблемы т.к. в разных ситуациях работало по разному. Теперь в 7.7 есть единый стандарт и надо придерживаться его. Если окажется что где-то стандарт не срабатывает это баг.
Добавляете график, добавляете индикатор, в индикаторе заполняете Идентификатор и далее функцией getCandlesByIndex ищите нужный фрактал. описание функции приведено в документации QLUA.chm -Функции взаимодействия скрипта Lua и Рабочего места QUIK --Функции для работы с графиками ---getCandlesByIndex
Космонавт написал: При чём здесь SetValue? Она нужна, чтобы установить значение на линии индикатора. А мне нужно не установить, а считать значение фрактала!
Вот именно, что она меняет их на графике а Вам надо НЕ на графике а в ds т.е. в этом месте нужно дописать возврат данных.
Что именно не понятно? Почитайте в документации про функцию SetValue.
Цитата
Космонавт написал: А потом как обратиться к значениям фракталов?
Уже было сказано что через DataSource использовать FRACTALS() не получится, только через окно графика стандартным образом, как через любой другой индикатор. т.е. функцией getCandlesByIndex
Цитата
Космонавт написал: Передайте привет человеку, который писал этот прекрасный код, но ключики от него спрятал на дне океана.
Вы не поверите, но эти примеры писал лично я, по своей личной инициативе.
Здравствуйте, У фракталов есть свои особенности, в указанной функции используется SetValue, которая работает только с графиком, а не источником данных DataSource.