как определить окончательный расчет индикатора

Страницы: 1
RSS
как определить окончательный расчет индикатора, при создании или редактировании индикатор рассчитывается несколько раз
 
Здравствуйте. При создании или редактировании индикатора расчёт индикатора происходит несколько раз, каждый раз расчет производится, начиная с первой свечи и заканчивая последней. Как определить, какой расчет окончательный? Проблема ещё в том, что при добавлении нового индикатора на график с одновременным изменением параметров в Setting ( последовательность действий: редактировать / добавить / далее меняем параметры индикатора и только затем применить или OK), расчёт производится 3 раза, при этом первый расчёт производится с параметрами по умолчанию, т. е. не изменёнными. При изменении параметров уже существующего на графике индикатора расчёт производится 2 раза, оба раза с уже изменёнными параметрами. Если меняем таймфрейм или если создаём копию окна, в котором есть индикатор, расчёт производится 1 раз. Проверял, добавляя индикатор на чистый график цены. Версия 8.9.0.107
 
Александр, здравствуйте.

К сожалению, не совсем поняли суть Вашего вопроса. Просьба немного подробнее описать, что Вас интересует. Желательно с прикрепленными скриншотами (снимками экрана).
 
Беру тестовый индикатор:

Settings =
{
       Name = "xTest",
       param = 100,
      line=
       {
               {
                       Name = "Test",
                       Color = RGB(0, 128, 0),
                       Type = TYPE_LINE,
                       Width = 2
               }
                     
       }
}

function Init()
       return  1
end

function OnCalculate(index)

if index > 3 then return end
message("index="..index.."  param="..Settings.param)
end

Прицепляю индикатор к графику и  в зависимости от выполняемой операции получаю следующие результаты.

Если при добавлении индикатора одновременно изменил параметр с 100 на 200, получаю такие сообщения (от более ранних к поздним)index=1 param=100
index=2 param=100
index=3 param=100
index=1 param=200
index=2 param=200
index=3 param=200
index=1 param=200
index=2 param=200
index=3 param=200
Видно, что  произошло 3 расчёта индикатора, первый расчёт с параметром по умолчанию, хотя с таким параметром запуска вообще не было, т.к. в индикаторе при добавлении сразу менял параметр на 200.

Далее в уже прицепленном индикаторе меняю параметр с 200 на 300 и получаю:
index=1 param=300
ndex=2 param=300
ndex=3 param=300
index=1 param=300
ndex=2 param=300
ndex=3 param=300
Т.е. в этот раз индикатор рассчитывался 2 раза.

При смене таймфрейма, получаю:
index=1 param=300
ndex=2 param=300
ndex=3 param=300
Индикатор рассчитывался один раз.

Вопрос: как в функции OnCalculate определить, что идёт окончательный расчёт индикатора.
 
Ещё вопрос по функции SetValue. Она не работает по последней формирующейся свече?
Код
function OnCalculate(index)
    local i1 = index - 1
    local i2 = index 
   
    if O(i1) == nil or O(i2) == nil then return end
    SetValue(i2, 1, O(i2))          -- так не работает
--  SetValue(i1, 1, O(i1))           -- так работает               
end

 
Цитата
Александр написал:
Ещё вопрос по функции SetValue. Она не работает по последней формирующейся свече?
Для последнего индекса происходит возврат данных из функции OnCalculate. Эти данные устанавливаются на график.
Так что даже если вы используете функцию, все равно произойдет переопределение.
 
Спасибо, Николай.
 
Александр, благодарим за пояснения.
Цитата
Александр написал:
Вопрос: как в функции OnCalculate определить, что идёт окончательный расчёт индикатора.
В этой функции такой возможности нет. Так как в принципе невозможно определить, какая сделка в периоде свечки будет последней.
 
Александр,

Вопрос с повторными расчетами добавляемого индикатора или индикатора, у которого меняют параметры, имеет давнюю историю и разумно решен, похоже, не будет.

Например, здесь он поднимался.
https://forum.quik.ru/messages/forum10/message17994/topic2029/#message17994

Напомню, что в QUIK версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные индикаторы на диаграмме не пересчитывались ("1+0").
В одной из последующих версий сделали улучшение - "2+1".
На просьбу вернуть "1+0" Разработчик откликнулся доведением до абсурда в версии 7.2.15 - при редактировании параметров какого-либо индикатора он пересчитывался 3 раза, а все остальные на диаграмме - по 2 ("3+2").
Это он шутил так. Чтоб пользователю жизнь раем не казалась.

Так что, нынешние "2+1" (при изменении параметров индикатора) или "3+1" (при добавлении), очень нужные Разработчику, опасно беспокоить, может получиться, как тогда. А пользователь перебьется как-нибудь на нынешних.  

"Как определить, какой расчет окончательный?"
Они близнецы, все окончательные.

Совет - со временем переходите от индикаторов к скриптам-роботов. Там этого вопроса не будет.

 
 
Цитата
Evgeniy Karnaukhov написал:
В этой функции такой возможности нет. Так как в принципе невозможно определить, какая сделка в периоде свечки будет последней.
Евгений,  т. к. при изменении параметров индикатор пересчитывается несколько раз (от одного до трёх) вместо одного раза,  то возник вопрос, как определить, какой из этих расчётов окончательный. Это не вопрос о том, какая сделка последняя на свече, после которой будет переход к следующей свече. Историю проблемы прояснил Борис Гудылин в своём посте.
 
Борис, спасибо большое!!!
 
Евгений, я снимаю свой вопрос.
Страницы: 1
Читают тему (гостей: 1)
Наверх