Алексей написал: Недавно стал программировать на LUA и столкнулся со странной проблемой, собственно она в коде:
Код
function OnInit () end
function main ()
a = 130.01
b = 130.02 - 0.01
if a = = b then
message ( "a равно b" )
else
message ( "a не равно b" )
end
end
function OnStop () end
Вот это все я просто запускаю из QUIK. И получается 130,01 не равно 130,01, это как?
Это плавающая точка:
Код
>> a = 130.01
a =
130.0100
>> b = 130.02-0.01
b =
130.0100
>> a-b
ans =
-2.8422e-14
Посылаю заявку в скрипте луа sendTransaction, квик выдает сообщение "Заявка 25109199245 успешно зарегистрирована." Но я не прошу мне сообщать. И в купайле sendTransaction все делает тихо. В чем фишка?
Boris Litvinov написал: Он доведен до своих пределов. Но если вы найдете баги, и напишите на форум, вам ответят, и примут меры. А это значит поддержка есть.
Сомневаюсь. Ну например при запуске квика раньше скрипт запускался сам, а с 7-ки перестал. Надо ручками. Я правда не обращался за поддержкой, но вот теперь проверим как отреагируют.
"Очень" это своя база данных, тестер, робот, анализ прошедшего дня с сохранением в эксель. Конечно есть и минусы. В том числе визуализация ценовых рядов. Но зато это "очень" в амиброкере под управлением того же матлаба. Там на одном графике у меня до четырех стратегий по четыре варианта параметров. А в квике получилось только три и без визуализации параметров.
Я уже довольно много лет смотрю, на всякий случай еще раз с пристрастием посмотрел - не мигает совершенно, только цифирьки аккуратно меняются. А на луа и присматриваться не надо - сразу по глазам бьет.
Интересно, а зачем нужна функция Clear? "Удаляет содержимое таблицы с идентификатором «t_id». Если чтобы заново записать таблицу не думая о количестве рядов, как я делаю в купайле функцией DELETE_ALL_ITEMS(). То не очень - таблица мигает. В купайле не мигает
Смысл в том чтобы расчет проводить не в индикаторе (то есть не в потоке квика, как я понимаю). А в индикатор передать уже готовые данные и просто нарисовать.
swerg написал: Индикаторы пересчитываются по каждому мовому данному, фактически по каждой сделке по инструменту. вы можете ограничить частоту расчета просто пропуская отдельные вызовы но лучше, конечно, написать индикатор так, чтобы он не тормозил
Облом. Не нашел способа как пропустить вызов OnCalculate. Пустой return или его отсутствие стирает всё.
Алексей, Как правило меняются максимум только два последних значения и можно было бы попробовать подумать как не перерисовывать остальные. Но при первом расчете (применить \/ добавить \/ ОК) квик все перерисовывает, потом вроде нет... Как узнать намерения квика в каждом конкретном случае я не вижу. Скорость обновления меня практически не волнует. И 5 сек устроит. Что было бы существеннее экономии на перерисовке. Но можно ли применять слип и куда его вставить техподдержка молчит.
Замечательная казалось бы функция, позволяющая вставлять точки гуртом, а не по одиночке. SetRangeValue(1, index-range, index-1, nil) Но она принимает только скаляр, то есть нарисовать можно только горизонтальную линию или все стереть. И кстати почему с помощью SetRangeValue и SetValue нельзя поставить значение на последней свечке? В чем смысл такого ограничения?
s_mike@rambler.ru написал: Дело в том, что это совсем не так просто, как пишет Сергей Горохов. Иначе это было бы сделано в примерах индикатора из архива. Нужно делать дополнительный буфер свечей,
Я именно об этом. А он делает вид что не понимает. В общем, спасение утопающих...
валерий написал: Sergey Gorokhov , Индекс в OnCalculate(index). Конкретно, вот график с одной фишкой, пропуски не показывать, фильтр по дневной сессии. Какие свечи будет перебирать индекс? Только те что на графике?
OnCalculate вернет столько свечек сколько на графике.
Будем надеяться, что сие есть стандарт. Вечный. Спасибо.
валерий написал: Это в 7.2. А что в 7.7? Организовать вычисления при наличии пустых свечек конечно можно, но это накладно и в 99 случаях не нужно.
Никто Вас не заставляет "производить вычисления при наличии пустых свечек", просто пропускайте их и все. Именно это корректно позволяют сделать изменения в 7.7.
Ну да, тогда о чем же эта тема? И почему бы в ваших индикаторах в ftp://ftp.quik.ru/public/INDICATORS.zip просто не вставить "просто пропускайте их и все"? Делов-то.
Sergey Gorokhov, Индекс в OnCalculate(index). Конкретно, вот график с одной фишкой, пропуски не показывать, фильтр по дневной сессии. Какие свечи будет перебирать индекс? Только те что на графике?
Settings =
{
Name = "+PE",
fname = "OSCp",
line=
{
{
Name = "eq - ",
Color = RGB(40, 80, 190),
Type = TYPE_LINE,
Width = 1
},
{
Name = "pos - ",
Color = RGB(255, 60, 50),
Type = TYPE_LINE,
Width = 2
}
}
}
function Init()
return #Settings.line
end
function OnCalculate(index)
local fnm = "\\" .. Settings.fname .. ".txt"
if index == Size() then
local callResult, result = pcall(dofile, getScriptPath() .. fnm)
if not callResult then
return
end
SetValue(index-#eq, 1, nil)
SetValue(index-#pos, 2, nil)
local cnt = 0
for i = index-#eq+1, index-1 do
cnt = cnt + 1
SetValue(i, 1, eq[cnt])
SetValue(i, 2, pos[cnt])
end
return eq[#eq], pos[#pos]
end
end
В файле для дуфайл - типа этого: pos={0.00,0.00,0.00,1.00,1.00,} eq={0.43,0.43,0.43,0.45,0.44,} только длиннее - 300-500 палок.
Алексей, Меня интересует просто рисовалка готовых данных. Никаких расчетов нет. Все рисуется на последнем баре - SetValue. Скорость не важна. Лишь бы при большом количестве индикаторов не тормозился сам квик.
swerg, Тормозить не должен, все просто - взять готовые данные и нарисовать. Впрочем тормоза странные - все бегает, процессор на две трети пуст, но иногда тормозит правая кнопка мыши или по двойному щелчку стакан открывается с задержкой.
Цитата
пропуская отдельные вызовы
Вы имеете в виду поставить счетчик на первом баре и пока он не сработает просто пустой return? Надо попробовать.
Такое впечатление, что если повесить много даже простых индикаторов, квик начинает подтормаживать. Как часто рассчитываются индикаторы? На каждом тике? Как можно ограничить частоту расчета? Куда бы можно было вставить слип? Не очень понятно.
Концепции Амиброкера это почемуто не противоречит и пользователей устраивает. Я же не сам это придумал. Любой индикатор это вообще то, чего реально нет. Это отражение реальности, а не сама реальность. Способов отражения, в том числе и пропусков, несчетное множество. А предложение позволяет пользователю выбрать или самое простое и ходовое zero-order hold или полную своду творчества или компромисс, когда по нулевым объемам можно выявить пропуски и как-то дополнить зох.
Слава богу! Да еще, прошу зафиксировать предложение по стандарту. На графике клиент выбирает нужны пустые интервалы или нет. На сдвоенных графиках выбирает чем пустые интервалы заполняются: нулями, предыдущими значениями или только объем нулями, а остальное предыдущими. Ну а функции клуа - визивиг.
Давно так не смеялся... Стандарт это когда выбираешь нужный размер одежды из набора стандартных, а кода юбка не выше колена... Еще хуже, когда ботинки только одного стандарта.
Использую dofile для постоянной подгрузки данных в виде таблицы из текстового файла типа: qq={113.00,113.00,-0.99,-1.03,-0.79,-0.93,-0.66,-0.84,} Подлиннее конечно. Но раз в минут 15-20, луа сообщает об ошибке: " '}' expected near '<eof>' ". Похоже он обращается к еще не закрытому и недописанному файлу. Некритично, так как продолжает работать, но неприятно. Может что посоветуете?
Как узнать значение? На какой свечке? Если на первой там все понятно, но оно не будет соответствовать последнему расчету. А как на последней, если я не могу ее определить?