Главная > QUIK, Полезные программы для QUIK, Торговый робот > Торговый робот «Автоматическое определение таймфрейма»

Торговый робот «Автоматическое определение таймфрейма»

Мы часто используем универсальную функцию OHLC, для получения данных по какой-то определенной свече, будь то непосредственно карта OHLC, или объем, или время. Но в данной функции есть четкая привязка к определенному таймфрейму, и к определенному инструменту. И для того чтоб их поменять, требуется изменить настройки в торговом роботе, изменить настройки самого графика, и перезагрузить торгового робота в QUIK. Это правильно для системной работы: один раз настроил и не мешаешь роботу торговать. Но в некоторых торговых стратегиях требуется динамично управлять текущим интервалом на графике. Например при тестировании алгоритма, для поиска какого-то определенного параметра. Да много для чего можно использовать.

Реализован новый торговый робот опять же на доброй и проверенной годами функции OHLC — назовем ее OHLC2. Точнее из нее взят перебор времени для поиска конкретной свечи. Главное отличие в том, что в OHLC2 мы использовали функцию GET_CANDLE а в новой будем использовать GET_CANDLE_EX, нужное нам свойство которой — округлять заданное ей время до наименьшего, по которому есть свеча. Подробнее читайте в руководстве по языку.

Основная задача данного торгового робота — это определить таймфрейм на открытом графике инструмента. Инструмент задается тоже динамично — через идентификатор (свойства графика цены — вкладка дополнительно — идентификатор. В это поле записываем значение из переменной IDENTIFICATION в настройках робота). Как же нам искать таймфрейм? Берем текущее время и ищем самую последнюю свечу — функция GET_CANDLE_EX автоматически округляет в меньшую сторону время пока оно не совпадет с последней свечой. Запоминаем ее точное время. Затем от этого найденного точного времени отнимаем минимальный таймфрейм (единица) и опять ищем свечу. Функция GET_CANDLE_EX опять окрулгяет в меньшую сторону время пока не найдет свечу. Таким образом находим вторую свечу на графике, и опять запоминаем ее точное время. Остается вычесть из первого времени второе — и мы получаем значение текущего таймфрейма на графике!

Вот что получилось у меня:

Автоматическое определение таймфрейма

В настройках у меня стоял поиск третьей свечи (текущая свеча, которая еще формируется — нулевая). В таблице мы видим карту OHLCV, значение текущего таймфрейма на графике, точное время и дату свечи. при включенном роботе, меняю таймфрейм на графике — и робот тут же его заново определяет и ищет нужную свечу. Единственное ограничение — таймфрейм от 1 до 60 минут.

Код торгового робота на QPILE доступен только зарегистрированным пользователям.


  1. Kalikazandr
    5 Июнь 2011 в 12:15 | #1

    Отличный код! Один недостаток: появилась новая свеча и бывшая определенная свеча N должна сместится сразу на N+1. А смещение происходит лишь через 10-15сек. Очень критичное запаздывание. Если есть возможность как-то ускорить- скиньте в личку kalikazandr@mail.ru

    Евгений Reply:

    Привет.

    Не совсем понял по поводу смещения.

    Kalikazandr Reply:

    Привет! Текущая свеча = 0 (в настройках), расчетная:NUMBER=3. Образовалась новая свеча, соответственно 3-я свеча сместилась на 1 в сторону 0 и значения OHLC (третьей свечи) должны измениться . Вот только происходит это со значительным запаздыванием(засекал-от 15 до 20сек)

    Вот как то так)

    Евгений Reply:

    Ааа. Понял, суть в том что при появлении новой свечи робот начинает цикл определения таймфрейма с самого начала.

    Kalikazandr Reply:

    А как-то ускорить можно? очень долго))

    Евгений Reply:

    Здесь два пути:

    1. Если робот определил таймфрейм и по алгоритму последний не меняется — то больше модуль определения таймфрейма не работает, а работает обычный OHLC, у которого нет задержки.

    2. Запустил у себя — у меня нет задержки такой. Попробуйте на другом компьютере запустить.

    Kalikazandr Reply:

    Все наладил. Дело оказалось действительно в разнице времени с сервером.

    Спасибо за участие

    Евгений Reply:

    Отлично!

  2. vasilev
    12 Январь 2012 в 12:49 | #2

    Евгений, приветствую!

    Подскажите, как можно использовать функцию OHLC в других роботах? например я хочу вызвать ее передав ей переменную NUMBER

    X = OHLC (1)

    что я получу взамен? Коллекцию с именем Х или массив? как получить значения этого массива?

    я пробую:

    OPEN0= GET_VALUE (OHLC (0+1), «OPEN»)

    OPEN1= GET_VALUE (OHLC (0+2), «OPEN»)

    получаю нулевые значения :(

    может быть функцию доработать командой RESULT создающей, например, коллекцию значений?

    Евгений Reply:

    Привет.

    Использовать просто:

    где NUMBER — номер свечи, OHLC которой надо найти.

    OHLC (NUMBER)

    И после такого вызова у вас появляются переменные:

    OPEN, HIGH, LOW, CLOSE, VOLUME со значениями равными искомым. Которые сразу можно использовать как переменные.

    Предварительно, так же как и в этой статье переменные нужно обнулить в блоке переменных.

    Евгений Reply:

    В догонку: функция как раз и избавляет пользователя от работы со всякими массивами и коллекциями, предоставляя готовые переменные с нужными значениями. Вот тут: www.hirobot.ru/2010/04/ka...grafika-2-chast/ та же функция, только без автоопределения таймфрейма. посмотрите, сразу после вызова OHLC (X) мы выводим искомые переменные в таблицу, и они несут числовые значения.

Необходимо войти на сайт, чтобы написать комментарий.