getCandlesByIndex Функция предназначена для получения информации о свечках по идентификатору, необходимо нужному графику назначить уникальный идентификатор, нужный график должен быть открыт.
-- Функция предназначена для получения КОЛИЧЕСТВА ЛИНИЙ в графике (индикаторе) по выбранному идентификатору
getLinesCount(tag); -- Возвращает число
-- tag - (STRING) идентификатор графика (индикатора), о котором писалось выше
-- Функция предназначена для получения информации о КОЛИЧЕСТВЕ СВЕЧЕЙ по выбранному идентификатору
getNumCandles(tag); -- Возвращает число
-- tag - (STRING) идентификатор графика (индикатора), о котором писалось выше
-- Функция предназначена для получения информации о свечах по идентификатору (заказ данных для построения графика функция не осуществляет, поэтому для успешного доступа нужный график должен быть открыт)
t, n, l = getCandlesByIndex (tag, line, first_candle, count);
-- Параметры:
-- tag – (STRING) строковый идентификатор графика или индикатора
-- line – (NUMBER) номер линии графика или индикатора. Первая линия имеет номер 0
-- first_candle – (NUMBER) индекс первой свечи. !!! ПЕРВАЯ (САМАЯ ЛЕВАЯ) СВЕЧКА ИМЕЕТ ИНДЕКС 0 !!!
-- count – (NUMBER) количество запрашиваемых свечей
-- Возвращаемые значения:
-- t – таблица, содержащая запрашиваемые свечи, пример работы:
local O = t[i].open; -- Получить значение Open для указанной свечи (цена открытия свечи)
local H = t[i].high; -- Получить значение High для указанной свечи (наибольшая цена свечи)
local L = t[i].low; -- Получить значение Low для указанной свечи (наименьшая цена свечи)
local C = t[i].close; -- Получить значение Close для указанной свечи (цена закрытия свечи)
local V = t[i].volume; -- Получить значение Volume для указанной свечи (объем сделок в свече)
local T = t[i].datetime; -- Получить значение datetime для указанной свечи
-- Где i - индекс свечи от 0 до n-1
-- n – количество свечей в таблице t
-- l – легенда (подпись) графика
luks sluk, спасибо! Вариант...
Таймфрейм, соответственно, тот, который открыт на графике? И минимальный — 1 мин.?
И получается нужно ручками делать цикл, где от 0 до getNumCandles() — 1 будет вызываться рабочая функция скрипта?
И сделки как таковые нужно «имитировать», ну и результаты сбрасывать в Лог? (это я сейчас и так делаю на реальных данных для тестирования внутри торгового дня)
Саханов Виталий, это да, но я сунулся в TSLab, а там еще похлеще будет… Во всяком случае там с наскоку не разберешься… И навыки программирования не особо в помощь. Я даже не понял пока — какие навыки там были бы полезны… )
Что ты хочешь тестировать? 1) Торговую стратегию или 2) подачу заявок из робота?
Для 1) я предпочитаю C# в WealthLab'е.
Для 2) использую Lua в Quik Junior.
Если хочешь максимально приблизить тестирование высокочастотной стратегии в WealthLab'е к реальности, можешь скриптом QLua набрать историю нескольких дней по бидам и оферам с дискретностью 0.1-0.5 сек.
PS Имея историю котировок, например с Финама, для тестирования торговой стратегии можно использовать автономный интерпретатор Lua, на заморачиваясь с добыванием хакнутого WealthLab. Или вообще любой компилятор или интерпретатор твоего любимого языка программирования. Хоть JavaScript или Excel VBA.
Rostislav Kudryashov, спасибо за ответ, коллега!
«Что ты хочешь тестировать? 1) Торговую стратегию или 2) подачу заявок из робота?» — и то и другое.
Но в идеале хотелось бы тестировать в самом Квике, или в чем-то, что так же показывает график, свечи. А вообще в идеале — чтоб еще и треугольнички сделок на графике отображались… )
Чтоб визуализировано было.
Так то понятно, что можно любой алгоритм хоть на Паскале реализовать и протестировать… НО! Это означает, что нужно руками написать некую имитацию подачи данных. И интерпретатор данных. Опять же понятно — есть массив котировок с Финама того же, в тхт или в csv, ну и делай с ним что хочешь. Но мне этот «движок» руками писать — как-то не хочется. Надеялся, что он уже есть. В том же Квике ну элементарно же было бы разработчикам сделать имитатор на любом отрезке графика, по которому имеются данные. Эхх...
Кроме того, хотелось бы сразу увидеть кривую эквити, так сказать, по итогам работы скрипта… А тут — опять же — выгружать в файл, потом обрабатывать в Экселе? Колхоз какой-то… (
Кстати, про данные с Финама. Я что-то не смог скачать оттуда тики (по Бренту пробовал, за 1-2 апреля, конкретно). Минимум — минутки получается скачать. И с mfd.ru аналогично. Возможно вообще тики получить? Подскажите, пожалуйста, путь.
И еще про «автономный интерпретатор Lua». Читал про отладчик Lua - Decoda. Он не позволит как-то поизящнее прогнать скрипт через массив данных? Т.е. его можно использовать именно не как отладчик, а как тестировщик на истории?
PPS Пока больше всего понравился вариант с getCandlesByIndex. Использование стандартных средств для получения данных, ну и использование «естественной среды» скрипта. Минимум изменений. Просто вместо бесконечного цикла в реальном масштабе времени — конечный цикл по свечкам. Красиво. Но результаты — ручками лопатить… И свечки только минутные получается… Дискретность большевата для меня… Но для начала — пойдет. Даже интересно.
CreateDataSource() -- Функция предназначена для создания таблицы Lua и позволяет работать со свечами, полученными с сервера QUIK
ds, Error = CreateDataSource (class_code, sec_code, interval [, param]);<br />CreateDataSource возвращает таблицу QLua с параметрами, получать значения которых можно следующим образом:
local O = ds:O(i); -- Получить значение Open для указанной свечи (цена открытия свечи)
local H = ds:H(i); -- Получить значение High для указанной свечи (наибольшая цена свечи)
local L = ds:L(i); -- Получить значение Low для указанной свечи (наименьшая цена свечи)
local C = ds:C(i); -- Получить значение Close для указанной свечи (цена закрытия свечи)
local V = ds:V(i); -- Получить значение Volume для указанной свечи (объем сделок в свече)
local T = ds:T(i); -- Получить значение Time для указанной свечи (время открытия свечи (таблица datetime))
-- Где i - индекс свечи (от 1 до ds:Size())
local Size = ds:Size(); -- Возвращает текущий размер (количество свечей в источнике данных)
ds:Close(); -- Удаляет источник данных, отписывается от получения данных
luks sluk, спасибо! Я использую как раз CreateDataSource().
И потом «ds:SetEmptyCallback();» — подписываюсь на обновления и соответственно получаю автоматически обновляемые данные в реальном масштабе времени.
Получается — по сути можно делать все то же самое, просто в цикле с 0. И работать с имеющимся массивом данных. Спасибо!
WebQuik прекрасно принимает и передает всю необходимую информацию через Websocket. Рабочий пример https://github.com/DmitryPukhov/pytrade WebQuik <--> Websocket <--> Python
Freedom Holding Corp. привлек $300 млн в рамках частного размещения своих акций
Freedom Holding Corp. (NASDAQ: FRHC), международный инвестиционный и технологический холдинг, провел успешное частное размещение обыкновенных акций, по итогам которого привлек $300 миллионов....
В открытой студии ТРЕЙДЕР ТВ на Smart-Lab Conf 2026 — Владимир Семёнов. Также можно посмотреть на других площадках: YouTube / VK video Повод для разговора — его статья на СмартЛабе...
АЛРОСА на дне (18 руб за 1 акцию), но со дна продолжают стучать - есть ли шансы на иксы?
5 лет назад акции АЛРОСы стоили 150 рублей за 1 акцию и были сверхпопулярны — классный вечный сектор (все девушки любят бриллианты), большие дивиденды. Но тут бац и минус 80% и у нормального...
Трамп поддержит пакет санкций покойного сенатора Грэма против России
Документ предусматривает возможность введения высоких пошлин против стран, продолжающих закупать российские нефть, газ и уран...
Опрос по индексу ММВБ на сегодня! Будем расти или падать?! Ну шо бандитушки?! Поторговали сегодня маленько?! Рынок чуть порос! Молодец! Нефть вот маленько подросла! А нефть всегда радует наш рынок! Он...
Макс Рыженок, такая доходность из-за амортизации, так себе сравнение, а то что тут дефолтник в некоторых выпусках дает на 20% ниже ликвидной компании для меня вообще секрет, очевидно что это не пос...
Трамп решиил брать МЗДУ в Ормузе с проходящих судов.
— Решил возглавить грабёж новой сделкой.
— С каждым разом — он всё больше удивляет своей деградацией!
— И судя по отскоку котировок жижки — э...
Марэк, казаньоргсинтез живет взаймы…… давно ли и с какого… уя?
После прихода Сибура, и долги все рукотворные.
Как можно прибыльную компанию загнать в такой зад???
Все больше не хочу…
Страна...
Дивиденды Россети Центр и Приволжье
Сегодня на мой индивидуальный инвестиционный счёт поступили дивиденды от компании Россети Центр и Приволжье.
Выплатили 0.0725 руб. на акцию (в 2025 году в...
Дивиденды Россети Центр и Приволжье
Сегодня на мой индивидуальный инвестиционный счёт поступили дивиденды от компании Россети Центр и Приволжье.
Выплатили 0.0725 руб. на акцию (в 2025 году в...
На азс у них бенз пока есть, сам вчера заправлялся на новориге, но не дешево. Печально конечно, еслибы не били по нпз, то шансов больше, сейчас не знаю, как спасаться будут. На скока знаю, может инфа ...
-- Функция предназначена для получения КОЛИЧЕСТВА ЛИНИЙ в графике (индикаторе) по выбранному идентификатору getLinesCount(tag); -- Возвращает число -- tag - (STRING) идентификатор графика (индикатора), о котором писалось выше -- Функция предназначена для получения информации о КОЛИЧЕСТВЕ СВЕЧЕЙ по выбранному идентификатору getNumCandles(tag); -- Возвращает число -- tag - (STRING) идентификатор графика (индикатора), о котором писалось выше -- Функция предназначена для получения информации о свечах по идентификатору (заказ данных для построения графика функция не осуществляет, поэтому для успешного доступа нужный график должен быть открыт) t, n, l = getCandlesByIndex (tag, line, first_candle, count); -- Параметры: -- tag – (STRING) строковый идентификатор графика или индикатора -- line – (NUMBER) номер линии графика или индикатора. Первая линия имеет номер 0 -- first_candle – (NUMBER) индекс первой свечи. !!! ПЕРВАЯ (САМАЯ ЛЕВАЯ) СВЕЧКА ИМЕЕТ ИНДЕКС 0 !!! -- count – (NUMBER) количество запрашиваемых свечей -- Возвращаемые значения: -- t – таблица, содержащая запрашиваемые свечи, пример работы: local O = t[i].open; -- Получить значение Open для указанной свечи (цена открытия свечи) local H = t[i].high; -- Получить значение High для указанной свечи (наибольшая цена свечи) local L = t[i].low; -- Получить значение Low для указанной свечи (наименьшая цена свечи) local C = t[i].close; -- Получить значение Close для указанной свечи (цена закрытия свечи) local V = t[i].volume; -- Получить значение Volume для указанной свечи (объем сделок в свече) local T = t[i].datetime; -- Получить значение datetime для указанной свечи -- Где i - индекс свечи от 0 до n-1 -- n – количество свечей в таблице t -- l – легенда (подпись) графикаТаймфрейм, соответственно, тот, который открыт на графике? И минимальный — 1 мин.?
И получается нужно ручками делать цикл, где от 0 до getNumCandles() — 1 будет вызываться рабочая функция скрипта?
И сделки как таковые нужно «имитировать», ну и результаты сбрасывать в Лог? (это я сейчас и так делаю на реальных данных для тестирования внутри торгового дня)
Для 1) я предпочитаю C# в WealthLab'е.
Для 2) использую Lua в Quik Junior.
Если хочешь максимально приблизить тестирование высокочастотной стратегии в WealthLab'е к реальности, можешь скриптом QLua набрать историю нескольких дней по бидам и оферам с дискретностью 0.1-0.5 сек.
PS Имея историю котировок, например с Финама, для тестирования торговой стратегии можно использовать автономный интерпретатор Lua, на заморачиваясь с добыванием хакнутого WealthLab. Или вообще любой компилятор или интерпретатор твоего любимого языка программирования. Хоть JavaScript или Excel VBA.
«Что ты хочешь тестировать? 1) Торговую стратегию или 2) подачу заявок из робота?» — и то и другое.
Но в идеале хотелось бы тестировать в самом Квике, или в чем-то, что так же показывает график, свечи. А вообще в идеале — чтоб еще и треугольнички сделок на графике отображались… )
Чтоб визуализировано было.
Так то понятно, что можно любой алгоритм хоть на Паскале реализовать и протестировать… НО! Это означает, что нужно руками написать некую имитацию подачи данных. И интерпретатор данных. Опять же понятно — есть массив котировок с Финама того же, в тхт или в csv, ну и делай с ним что хочешь. Но мне этот «движок» руками писать — как-то не хочется. Надеялся, что он уже есть. В том же Квике ну элементарно же было бы разработчикам сделать имитатор на любом отрезке графика, по которому имеются данные. Эхх...
Кроме того, хотелось бы сразу увидеть кривую эквити, так сказать, по итогам работы скрипта… А тут — опять же — выгружать в файл, потом обрабатывать в Экселе? Колхоз какой-то… (
Кстати, про данные с Финама. Я что-то не смог скачать оттуда тики (по Бренту пробовал, за 1-2 апреля, конкретно). Минимум — минутки получается скачать. И с mfd.ru аналогично. Возможно вообще тики получить? Подскажите, пожалуйста, путь.
И еще про «автономный интерпретатор Lua». Читал про отладчик Lua - Decoda. Он не позволит как-то поизящнее прогнать скрипт через массив данных? Т.е. его можно использовать именно не как отладчик, а как тестировщик на истории?
Функция getCandlesByIndex умеет получать тиковые данные.
И потом «ds:SetEmptyCallback();» — подписываюсь на обновления и соответственно получаю автоматически обновляемые данные в реальном масштабе времени.
Получается — по сути можно делать все то же самое, просто в цикле с 0. И работать с имеющимся массивом данных. Спасибо!
WebQuik <--> Websocket <--> Python