Илья Просто
Илья Просто Ответы на вопросы
02 мая 2020, 19:38

Тест lua скрипта на исторических данных возможен? Как?

Тест lua скрипта на исторических данных возможен? Как?
14 Комментариев
  • luks sluk
    02 мая 2020, 20:17
    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 – легенда (подпись) графика
  • Виталий Саханов
    02 мая 2020, 20:20
    но тестировать lua на исторических данных это как гланды удалять через задницу
  • Rostislav Kudryashov
    02 мая 2020, 21:58
    Что ты хочешь тестировать? 1) Торговую стратегию или 2) подачу заявок из робота?
    Для 1) я предпочитаю C# в WealthLab'е.
    Для 2) использую Lua в Quik Junior.
    Если хочешь максимально приблизить тестирование высокочастотной стратегии в WealthLab'е к реальности, можешь скриптом QLua набрать историю нескольких дней по бидам и оферам с дискретностью 0.1-0.5 сек.
    PS Имея историю котировок, например с Финама, для тестирования торговой стратегии можно использовать автономный интерпретатор Lua,  на заморачиваясь с добыванием хакнутого WealthLab. Или вообще любой компилятор или интерпретатор твоего любимого языка программирования. Хоть JavaScript или Excel VBA.
      • Rostislav Kudryashov
        02 мая 2020, 22:50
        Илья Просто, если с Финама скачать историю в формате .csv с разделителями ";", Excel берёт такой файл как родной.
  • luks sluk
    02 мая 2020, 23:02
    На графике — Интервал — Тиковый
    Функция getCandlesByIndex умеет получать тиковые данные.
  • luks sluk
    02 мая 2020, 23:27
    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(); -- Удаляет источник данных, отписывается от получения данных
  • Александр
    03 мая 2020, 13:45
    Берешь и эмулируешь все функции квика и тогда можно написать.
  • luks sluk
    29 июля 2020, 17:41
    WebQuik прекрасно принимает и передает всю необходимую информацию через Websocket. Рабочий пример https://github.com/DmitryPukhov/pytrade
    WebQuik <--> Websocket <--> Python

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн