Evgeny Grizli (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
создание индикаторов, Создание индикатора по предложенному образцу у Вас
 
я немного его изменил начало вот такое:
--------------------------------------------------------------------
--
-- Построение спреда по нескольким инструментам:
-- spread := k * price(security) + k1 * price(tag1) + k2 * price(tag2) + a.
-- Можно добавлять дополнительные инструменты, модифицируя код индикатора.
--

Settings = {
   Name = "SpreadIndicator_1",
   k = 1, -- коэффициент, с которым учитывается цена основного инструмента
   tag1 = "SberB60", -- метка графика, откуда берётся цена дополнительного инструмента 1
   tag2 = "SberBD", -- метка графика, откуда берётся цена дополнительного инструмента 2
   k1 = -2, -- коэффициент, с которым учитывается цена дополнительного инструмента 1
   k2 = -3, -- коэффициент, с которым учитывается цена дополнительного инструмента 2
   a = 0, -- свободный член
   line = { { Name = "Spread_1", Color = RGB(0, 0, 255), Type = TYPE_LINE, Width = 1, } }
}

function Init()
   return 1
end
---------------------------------------------------------
далее не стал писать суть вот в чём:
Как видите дополнительные графики это 60 мин "SberB60" и второй Дневной "SberBD", в отдельном окне первого графика 5 минутки ниже окно я размещаю этот индикатор. Значит основным считается График 5 минутки ? Правильно я понял?
создание индикаторов, Создание индикатора по предложенному образцу у Вас
 
Точно! Появился такой индикатор! Спасибо!
есть один уточняющий вопрос: вот - "price(security)" или ещё вот так: "local securityPrice = C(index) " это основной инструмент? какой?
создание индикаторов, Создание индикатора по предложенному образцу у Вас
 
указанный пример  присутствует в Вашем материале:
"Программный комплекс QUIK –
фронт-офисная система прямого доступа
Создание индикаторов
технического анализа
с помощью скриптов Lua
Инструкция
© ARQA Technologies, октябрь 2013"
создание индикаторов, Создание индикатора по предложенному образцу у Вас
 
примерно так выглядит сообщение:

lua: spread_ind_1.lua:15: attempt to call global 'RGB' (a nil value)
stack traceback:
spread_ind_1.lua:15: in main chunk
[C]: in ?
создание индикаторов, Создание индикатора по предложенному образцу у Вас
 
вот такой пример:
--
-- Построение спреда по нескольким инструментам:
-- spread := k * price(security) + k1 * price(tag1) + k2 * price(tag2) + a.
-- Можно добавлять дополнительные инструменты, модифицируя код индикатора.
--

Settings = {
   Name = "SpreadIndicator",
   k = 1, -- коэффициент, с которым учитывается цена основного инструмента
   tag1 = "SberB", -- метка графика, откуда берётся цена дополнительного инструмента 1
   tag2 = "SberB60", -- метка графика, откуда берётся цена дополнительного инструмента 2
   k1 = -5, -- коэффициент, с которым учитывается цена дополнительного инструмента 1
   k2 = -5, -- коэффициент, с которым учитывается цена дополнительного инструмента 2
   a = 0, -- свободный член
   line = { { Name = "Spread", Color = RGB(0, 0, 255), Type = TYPE_LINE, Width = 1, } }
}

function Init()
   return 1
end

local function getTimeCode(dt)
   return (dt.year * 10000 + dt.month * 100 + dt.day) * 1000000 + (dt.hour * 10000 + dt.min * 100 + dt.sec)
end

--- Найти свечу, относящуюся к заданному времени или предшествующую ему, если для заданного времени нет свечи.
-- @param tag строковый идентификатор графика или индикатора
-- @param timeCode метка времени в формате yyyymmddhhmmss
-- @return искомая свеча или nil, если свеча не найдена.
local function getCandleByTimeCode(tag, timeCode)
   local numCandles = getNumCandles(tag)
   if numCandles < 2 then
       return nil
   end
   local lastCandle, n, _ = getCandlesByIndex(tag, 0, numCandles - 1, 1)
   if n ~= 1 then
       return nil
   end
   lastCandle = lastCandle[0]
   if getTimeCode(lastCandle.datetime) <= timeCode then
       return lastCandle
   end
   local b = numCandles - 1
   local a = b - 1
   local candle
   while true do
       local firstCandle, n, _ = getCandlesByIndex(tag, 0, a, 1)
       if n ~= 1 then
           return nil
       end
       firstCandle = firstCandle[0]
       local firstTimeCode = getTimeCode(firstCandle.datetime)
       if firstTimeCode == timeCode then
           return firstCandle
       elseif firstTimeCode < timeCode then
           candle = firstCandle
           break
       elseif a == 0 then
           return nil
       else
           a = math.max(0, 2 * a - b)
       end
   end
   while true do
       local c = math.floor((a + b) / 2)
       if c == a then
           return candle
       else
           local middleCandle, n, _ = getCandlesByIndex(tag, 0, c, 1)
           if n ~= 1 then
               return nil
           end
           middleCandle = middleCandle[0]
           local middleTimeCode = getTimeCode(middleCandle.datetime)
           if middleTimeCode == timeCode then
               return middleCandle
           elseif middleTimeCode < timeCode then
               a, candle = c, middleCandle
           else
               b = c
           end
       end
   end
end

--- Вычислить спред.
-- @param index номер свечи на графике
-- @return значение спреда или nil, если оно неопределено
local function getSpread(index)
   local timeCode = getTimeCode(T(index))
   local securityPrice = C(index)
   if securityPrice == nil then
       return nil
   end
   -- Получение свечей дополнительных инструментов
   local candle1 = getCandleByTimeCode(Settings.tag1, timeCode)
   local candle2 = getCandleByTimeCode(Settings.tag2, timeCode)
   if candle1 == nil or candle2 == nil then
       return nil
   end
   -- Получение цен дополнительных инструментов
   local price1 = candle1.close
   local price2 = candle2.close
   if price1 == nil or price2 == nil then
       return nil
   end
   -- Вычисление спреда
   local spread = Settings.k * securityPrice
           + Settings.k1 * price1
           + Settings.k2 * price2
           + Settings.a
   return spread
end

function OnCalculate(index)
   if index > 1 then
       local spread = getSpread(index - 1)
       if spread then
           SetValue(index - 1, 0, spread)
       end
   end
   return getSpread(index)
end
---------------------------------------------------------------
Вызывает ошибку по оператору "Color" это в 15 строчке. Пожалуйста про комментируйте. Почему ошибка?  
программа индикатора, вопрос по использованию getNumCandles
 
значит одновременно у меня получится снимать данные с двух графиков ?? да да идентификатор я также пропишу во втором графики но другое название.к примеру назову "SberB5" и "SberB10" - если это так можно - одновременно из двух графиков? то прекрасно! Спасибо
программа индикатора, вопрос по использованию getNumCandles
 
появился ещё один вопрос по этой же теме:
этот индикатор работает по одному идентификатором к примеру "Сбербанк". могу ли я использовать дополнительно и снимать данные с другим временным интервалом также в другой файл 2.txt???? В смысле в Вашем примере снимаются данные к примеру по 5 минутке, а можно ли добавить и ещё снимать одновременно по 10 минутке? при этом второй график рядом открыт.
программа индикатора, вопрос по использованию getNumCandles
 
Спасибо. Вопрос снят. У меня всё получилось и файл 1.txt создан. Появились данные.
программа индикатора, вопрос по использованию getNumCandles
 
вауу! у меня не задан! А каким лучше правилом пользоваться заполняя его? или произвольной формой. Пусть к примеру "SberB"?
программа индикатора, вопрос по использованию getNumCandles
 
--[[
*******************************************************************
Пример демонстрирует возможности получения данных с графиков
и индикаторов. "Свечки" индексируются по номеру.
Для исполнения также требуется наличие скрипта tpf.lua.
*******************************************************************
]]

dofile("tpf.lua")

function main(  )
file = io.open("1.txt", "w+t")
-- должен быть создан график или индикатор с идентификатором zzz
local x = getNumCandles("Сбербанк") -- получаем количество свечек на графике
local y = getLinesCount("Сбербанк") -- получаем количество линий у графика
-- у некоторых индикаторов линий может быть
-- больше чем одна
message("total ".. x .. " candles in " ..y .. " lines", 3)
for i=0,y-1 do
file:write("line = ".. i .. "\n")
-- получаем 10 первых свечей с каждой линии
t, num, legend = getCandlesByIndex("Сбербанк", i, 0, 10)
file:write("num = " .. num ..", legend = ".. legend .. "\n")
for j=0,num-1 do
--сохраняем каждую свечку в файл
table_save( "candle["..j .. "]", file, t[j])
end
end

file:close()
end

Это текст известной у Вас программы индикатора в Ваших образцах
Пожалуйста прокомментируйте использование это программе применительно на графике "Сбербанка" (взят для примера). Насколько я понял по ответы программы 0 Lines  видимо с таким идентификатором "Сбербанк" не находит свечек.
OnFuturesClientHolding, как работает данный коллбэк
 
спасибо. Вам.
OnFuturesClientHolding, как работает данный коллбэк
 
вы упростили программу и там отсутствует запись в файл log.log или в библиотеке была функция создания файла для наполнения его. ну это не важно.
я предположил, что эта библиотека как-то связана с этим.
это так?
OnFuturesClientHolding, как работает данный коллбэк
 
Вот эту функцию выполняет эта библиотека? Или я не понял?
OnFuturesClientHolding, как работает данный коллбэк
 
require"QL"
подскажите где мне найти эту библиотеку? у меня в терминале при загрузки программы вызывает ошибку так как не находит эту библиотеку.
Страницы: 1
Наверх