Известно, что котировки ряда фьючерсов выражаются через доллар.
Например, фьючерс на золото примерно отражает в пунктах текущую цену унции в долларах. Это не очень удобно, т.к. на брокерском счёте размещены рубли. Ставить стопы на изменение фьючерса в долларовых пунктах тоже не всегда уместно. Например, при снижении котировки фьючерса на индекс РТС в долларовых пунктах на 33.33% и одновременном росте курса доллара на 50% рублевая стоимость фьючерса (объём позиции) не меняются.
Желательно иметь перед глазами график не долларовых котировок, а рублёвых. На текущий момент приходится использовать те возможности, которые даёт QLua для построения индикаторов.
Рублевая стоимость фьючерса получается с использованием двух параметров, которые в Quik'е показаны в "Таблице текущих параметров" в колонках "Шаг цены" и "Стоимость шага". К сожалению, история этих параметров дольше текущего дня недоступна. Поэтому, приближённую оценку рублёвой стоимости фьючерса можно получить из графика фьючерса на курс доллара к рублю (Si). Код индикатора прилагается.
Например, фьючерс на золото примерно отражает в пунктах текущую цену унции в долларах. Это не очень удобно, т.к. на брокерском счёте размещены рубли. Ставить стопы на изменение фьючерса в долларовых пунктах тоже не всегда уместно. Например, при снижении котировки фьючерса на индекс РТС в долларовых пунктах на 33.33% и одновременном росте курса доллара на 50% рублевая стоимость фьючерса (объём позиции) не меняются.
Желательно иметь перед глазами график не долларовых котировок, а рублёвых. На текущий момент приходится использовать те возможности, которые даёт QLua для построения индикаторов.
Рублевая стоимость фьючерса получается с использованием двух параметров, которые в Quik'е показаны в "Таблице текущих параметров" в колонках "Шаг цены" и "Стоимость шага". К сожалению, история этих параметров дольше текущего дня недоступна. Поэтому, приближённую оценку рублёвой стоимости фьючерса можно получить из графика фьючерса на курс доллара к рублю (Si). Код индикатора прилагается.
| Код |
|---|
-- Перемножает Close'ы графиков RI на Si
-- При запуске на загрузке Quik'а работает код предыдущей загрузки
-- с последними свойствами, полученными из кода или интерактивно.
-- При запуске старые бары графика данных сканируются дважды,
-- только если есть подключение к серверу.
-- При смене тайм-фрейма старые бары сканируются только единожды.
-- При загрузке Quik'а первый скан до подключения к серверу.
FirstValid = nil
Settings = {
Name = "_RIxSi"
,line = {
{Name = "RIxSi"
,Color = RGB(255,255,0) -- Жёлтый
,Type = TYPE_POINT
,Width = 2}
}
,GraphId1 = "RI-1" -- Перезадать оба после первой загрузки.
,GraphId2 = "Si-1" -- Сохраняются при последующих запусках.
,Factor = 2e-5
}
function Init()
return #Settings.line
end -- Init()
function CalcIt (index)
local tbl1 = getCandlesByIndex (Settings.GraphId1, 0, index-1, 1)
local tbl2 = getCandlesByIndex (Settings.GraphId2, 0, index-1, 1)
if tbl1[0].close == 0 or tbl2[0].close == 0 then
return nil -- Пропускаем бары с неполными данными.
end
local sum = tbl1[0].close * tbl2[0].close * Settings.Factor
return sum
end -- CalcIt()
function OnCalculate(index)
if index == 1 then
FirstValid = nil
end
if (0 == getNumCandles (Settings.GraphId1) or
0 == getNumCandles (Settings.GraphId2)) then
if index == 1 then
message ("GraphId error")
end
return nil
end
if not FirstValid then
local tbl1 = getCandlesByIndex (Settings.GraphId1, 0, index-1, 1)
local tbl2 = getCandlesByIndex (Settings.GraphId2, 0, index-1, 1)
if tbl1[0].close ~= 0 and tbl2[0].close ~= 0 then
FirstValid = index
local count = getNumCandles (Settings.GraphId1)
if FirstValid == count then
for idx = 1, index-1 do
SetValue (idx, 1, CalcIt (idx))
end
end
end
end
return CalcIt (index)
end -- OnCalculate()
|