Здравствуйте!
Захотел я посмотреть подробнее из чего состоит свеча графика "Количество открытых позиций". Сделал вот такой индикатор:
(Все эксперименты проводились на графике фьючерса на Сбербан 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 "вызывается при поступлении новой или изменении существующей свечки в источнике данных для индикатора". Ну, ладно ОИ, но на объем-то почему не всегда реагирует?
Подскажите как получать корректные данные?
Спасибо!