Известно, что котировки ряда фьючерсов выражаются через доллар.
Например, фьючерс на золото примерно отражает в пунктах текущую цену унции в долларах. Это не очень удобно, т.к. на брокерском счёте размещены рубли. Ставить стопы на изменение фьючерса в долларовых пунктах тоже не всегда уместно. Например, при снижении котировки фьючерса на индекс РТС в долларовых пунктах на 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() |