Работа с графиками в Quik

Сегодня хочу рассказать немного о том, как работать с графиками Квика в Lua скриптах.
И так как написано в документации, для работы с графиками разработчики нам предоставили 3 функции :
getNumCandles()
getLinesCount()
getCandlesByIndex()
Вначале расскажу немного подробнее про каждую из них.

getNumCandles (строковый идентификатор графика)
Даная функция возвращает нам количество свечей (точек, если линия) для графика с идентификатором, который мы туда передали в качестве аргумента. Напомню, идентификаторы для графиков задаются в настройках графика: вкладка Дополнительно. К сожалению, в отличии от qpile, где мы могли не задавать идентификатор для графиков цен инструментов, в луа идентификатор необходимо задавать для всех графиков.

getLinesCount (строковый идентификатор графика)
Данная функция возвращает количество линий для графика с идентификатором указанным в качестве аргумента. Актуальна для индикаторов состоящих из более чем одной линии, например Аллигатор. Для графика цены данная функция вернет нам 1.

getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count)
Это главная функция для работы с графиками в Квик. Она нам возвращает, собственно, свечки, а если точнее — таблицу с свечами.
Параметры которые мы передаем в функцию :

tag – строковый идентификатор графика или индикатора;
line – номер линии графика или индикатора, первая линия имеет номер 0;
first_candle – индекс первой свечки, первая (самая левая) свечка имеет индекс 0;
count – количество запрашиваемых свечек.

Возвращаемые значения:

t – таблица содержащая запрашиваемые свечки,
n – количество свечек в таблице t ,
l – легенда (подпись) графика.

Приведу немного примеров. В качестве запрашиваемого графика подразумеваю график цены инструмента. Для графиков с большим числом линий необходимо будет просто указывать другой номер линии.
С помощью следующего кода получаем последнюю свечку графика с идентификатором price и выводим несколько ее параметров с помощью сообщения терминала Quik

t={}
number_of_candles=getNumCandles('price')
t,_,legend=getCandlesByIndex('price',0,number_of_candles-1,1)
message(legend.."Close="..t[0].close.." Open="..t[0].open.." Vol="..t[0].volume,1)

Как мы видим по описанию, данная функция возвращает нам 3 значения. 2 из них мы принимаем, второе пропускаем с помощью «глупой переменной» (dummy variable). Первое значение — таблица Луа, содержащая свечки. Если наш запрос к графику прошел успешно, то данная таблица будет не пустой. Ключом в данной таблице являются целые числа и начинается нумерация с 0. Так что первая и единственная, запрошенная нами свеча запрашивается вот так

t[0]

Так как свеча также является таблицей, то для получения, собственно, интересующей нас информации, мы должны обратится к нужным нам полям. Открываем документацию и читаем :

Свечки графика

Описание параметров свечки графика:

Параметр Тип            Описание
open          NUMBER   Цена открытия
close         NUMBER   Цена закрытия
high           NUMBER   Максимальная цена сделки
low            NUMBER   Минимальная цена сделки
volume      NUMBER   Объем последней сделки
datetime    TABLE       Дата и время
doesExist  NUMBER   Признак расчета индикатора при наличии свечки. Возможные значения: «0» – индикатор не рассчитан,«1» – индикатор рассчитан

В примере мы запросили последнюю свечку, но данный подход можно применять для получения любой свечи с графика, если она нам нужна одна. Для этого нам нужно просто изменить параметр first_candle – индекс первой свечки, который в нашем примере мы указали равным количеству свечей на графике — 1.

Рассмотрим следующий пример. Запросим несколько свечей, а именно, количество указанное в переменной amount:

t={}
res=0
legend=""
number_of_candles=getNumCandles('price')
amount=10
t,res,legend=getCandlesByIndex('price',0,number_of_candles-amount-1,amount)
message(" Получили "..res.." свечек",1)
message(legend.."Close="..t[0].close.." Open="..t[0].open.." Vol="..t[0].volume,1)
message(legend.."Close="..t[res-1].close.." Open="..t[res-1].open.." Vol="..t[res-1].volume,1)

Запрашивая несколько свечей стоит всегда помнить, что в качестве параметра first_candle нужно всегда указывать индекс самой «левой» свечки. И помнить, что нумерация начинается с 0 ;)
На выходе, если все удалось, мы получим таблицу с ровно 10 свечками. В данном примере я, также, принял от вызываемой функции значение n – количество свечек в таблице tи присвои его переменной res.

Источник: http://www.qlua.org/blog/rabota-s-grafikami-v-quik/

Администрирование

Сегодня
Вчера
Эта неделя
Прошлая неделя
Этот месяц
Прошлый месяц
Вся статистика
48
3
48
26686
103
219
26764

IP: 3.145.18.228
Время: 2024-09-16 18:44:20
Счетчик joomla