Здравствуйте!
Захотел я посмотреть подробнее из чего состоит свеча графика "Количество открытых позиций". Сделал вот такой индикатор:
(Все эксперименты проводились на графике фьючерса на Сбербан SRU5)
Запустил. Работает только с момента запуска, но это ладно. Когда вычел показания двух столбиков гистограммы одного бара (увеличение ОИ-уменьшение ОИ), то увидел, что эта разница не совпадает с разницей Close-Open стандартного графика "Количество открытых позиций".
Тогда решил сделать, ну совсем простой тест с Объемом. Получается тоже ерунда.
Предполагаю, что OnCalculate вызывается не так часто, как хотелось бы.
Попробовал поиграть с OnParam, но он, видимо, для индикаторов не применим.
В документации сказано, что OnCalcelate "вызывается при поступлении новой или изменении существующей свечки в источнике данных для индикатора". Ну, ладно ОИ, но на объем-то почему не всегда реагирует?
Подскажите как получать корректные данные?
Спасибо!
Захотел я посмотреть подробнее из чего состоит свеча графика "Количество открытых позиций". Сделал вот такой индикатор:
(Все эксперименты проводились на графике фьючерса на Сбербан SRU5)
Код |
---|
Settings= { Name = "_OI_Separator", line = { {Name = "Увеличение открытого интереса", Color = RGB(0, 192, 0), Type = TYPE_HISTOGRAM, Width = 3}, {Name = "Уменьшение открытого интереса", Color = RGB(192, 0, 0), Type = TYPE_HISTOGRAM, Width = 3} } } ----------------------------------------------------------------------------- function Init() sec_code = "SRU5" class_code=getSecurityInfo("",sec_code).class_code oi_plus = 0 oi_minus = 0 oi = 0 idx = -1 oi_prev = getParamEx (class_code, sec_code, "numcontracts").param_value oi_curr = oi_prev return 2 end ----------------------------------------------------------------------------- function OnCalculate(index) if index ~= idx then oi_plus = 0 oi_minus = 0 idx = index end oi_prev = oi_curr oi_curr = getParamEx (class_code, sec_code, "numcontracts").param_value local d = oi_curr - oi_prev if d > 0 then oi_plus = oi_plus + d else oi_minus = oi_minus + d end return oi_plus, oi_minus end ----------------------------------------------------------------------------- return oi_plus, oi_minus end ----------------------------------------------------------------------------- |
Запустил. Работает только с момента запуска, но это ладно. Когда вычел показания двух столбиков гистограммы одного бара (увеличение ОИ-уменьшение ОИ), то увидел, что эта разница не совпадает с разницей Close-Open стандартного графика "Количество открытых позиций".
Тогда решил сделать, ну совсем простой тест с Объемом. Получается тоже ерунда.
Код |
---|
Settings= { Name = "_test_vol", line = { {Name = "_Volume", Color = RGB(64, 64, 64), Type = TYPE_HISTOGRAM, Width = 3} } } ---------------------------------------------------- function Init() sec_code = "SRU5" class_code=getSecurityInfo("",sec_code).class_code vol = 0 idx = 0 return 1 end ---------------------------------------------------- function OnCalculate(index) if idx ~= index then vol = 0 idx = index end vol = vol + getParamEx (class_code, sec_code, "qty").param_value return vol end ---------------------------------------------------- |
Попробовал поиграть с OnParam, но он, видимо, для индикаторов не применим.
В документации сказано, что OnCalcelate "вызывается при поступлении новой или изменении существующей свечки в источнике данных для индикатора". Ну, ладно ОИ, но на объем-то почему не всегда реагирует?
Подскажите как получать корректные данные?
Спасибо!