QPile. Циклы на примере High Low за n-периодов / QUIK Profit
Главная Quikprofit twiiter Quikprofit Rss

QPile. Циклы на примере High Low за n-периодов

Июль 30, 2010 | 14 комментариев

QPile самоучитель. Цикл
В данной статье рассмотрим основы применения циклов на примере создания инструмента High/Low за определенный интервал времени.

Задаем техническое задание.

Необходимо создать модуль под рабочим названием «HHLL» (максимум среди максимумов и минимум среди минимумов).

В задачу модуля входит выводить на экран максимальное и минимальное значение за период n по заданному инструменту.

Внимание!

  • Для лучшего понимания данной статьи необходимо ознакомиться с предыдущими статьями цикла «Торговый робот. Шаг за шагом«.
  • Для функционирования данного модуля понадобится программный продукт fGetBar

Исходные данные.

  • Инструмент – акции сбербанка («SBER03″, «EQBR»)
  • Таймфрейм – 15 минут (15)
  • Период n= 60 свечей (60)

После того как исходные данные определены встает вопрос: «как научить модуль распознавать минимум (максимум) за период?»

И ответ будет достаточно прост: перебором всех значений и сопоставлением их с предыдущими значениями.

Рассмотрим на примере максимума, а минимум добавим позже. Первым делом составим блок-схему:

Поясним, что же значит данная блок-схема.

  1. в начале цикла переменной i присваивается значение поочередно от 1 до 60
  2. переменной High присваиваем максимальное значение для свечи под номером i
  3. сравниваем значение high с переменной olderHigh (предыдущий максимум)
  4. если значение high больше предыдущего максимума (olderHigh), тогда переменной предыдущего максимума присваиваем значение текущего максимума.
  5. переход в начало цикла.

Таким образом мы перебираем все максимальные значения за последних 60 свечей сравнивая их друг с другом и выясняя абсолютный максимум за период.

Теперь перейдем к техническим вопросам:

  1. Как написать цикл на QPile
  2. Как присвоить переменной High (Low) максимальное (минимальное) значение для свечи под номером i.

Приступаем.

Как написать цикл на QPile

Язык QPile предполагает 2 варианта синтаксиса цикла.

Первый вариант для текстовых значений переменной:

1
2
3
FOR переменная IN список значений
                последовательность инструкций
END FOR

Второй вариант для числовых значений переменной:

1
2
3
4
FOR переменная FROM значение1 TO значение2
 
                последовательность инструкций
END FOR

Еще немного теории.

В строке «END FOR» допускается только один пробел.

Дополнительными операторами служат:

  • «BREAK» — выход из цикла расчета;
  • «CONTINUE» — переход к следующему расчету цикла.

Рекомендуется перед расчетом цикла обнулять переменные, которые в этом цикле используются.

Таким образом наш модуль будет иметь вид:

1
2
3
4
5
6
7
High = 0
for i from 1 to 60
   older_High = максимум свечи номер i
   if older_High > High
      High = older_High
   end if
end for

Как присвоить переменной High (Low) максимальное (минимальное) значение для свечи под номером i

С данным вопросом нам поможет справиться программный продукт fGetBar

Синтаксис функции.

fGetBar (fGB_SecCode, fGB_ClassCode, fGB_Interval, fGB_CandleNumber)

  • fGB_SecCode – код инструмента
  • fGB_ClassCode – код класса
  • fGB_Interval — выбранный таймфрейм. Указывается в формате ММ (в минутах) либо для дневного графика – «-1», недельного – «-2», месячного – «-3»
  • fGB_CandleNumber — порядковый номер свечи. Отсчет производится в обратном порядке начиная с текущей не закрытой свечи (№1).

Функция возвращает значения OHLC+Volume заданной по номеру свечи. Значения записываются в массив.

Так как для реализации данного модуля требуется более одного параметра свечи (High и Low) воспользуемся функцией в 2 этапа:

Создадим массив candleData, в который будут записаны OHLC+Volume свечи под номером i

1
candleData = fGetBar("SBER03", "EQBR", 15, i)

Присвоим переменным older_High и older_Low соответствующие значения из массива candleData.

1
2
older_High = get_value (candleData, "High") + 0
older_Low = get_value (candleData, "Low") + 0

Соединив воедино все составные части модуля и добавив необходимые атрибуты портфеля QPile получаем замечательный инструмент:

Для удобства можно скачать файл с модулем HH_LL

Понравилось? Следите за обновлениями по RSS! Также можете следить за обновлениями в Twitter.
          0 проголосовавших

Комментарии

14 ответов to “QPile. Циклы на примере High Low за n-периодов”

  1. Алексей
    Август 9th, 2010 @ 18:03

    Прошу уточнить следующие -
    QUIKDDE является необходимым модулем для создания робота или без этого модуля можно обойтись, скажем создав простого робота с 2 вашими функциями. ??

  2. Алексей
    Август 10th, 2010 @ 15:42

    Ну, граждане )) Если вы в течении 2 дней не отвечаете на простой вопрос… что будет если переведу вам деньги за вашу продукцию??? Ждать месяц??? Или больше?
    Мне интересна покупка ваших функций, однако, без ответа на вопросы здесь — что думать?

  3. Ю.Р.
    Август 10th, 2010 @ 23:02

    Модуль QUIKDDE необходим при связке терминала QUIK и робота, написанного на языке, отличном от QPile. Все примеры рассмотренные в рамках курса «Торговый робот. Шаг за шагом» реализованы на встроенном языке QPile и поэтому QUIKDDE не требуется.

  4. Ю.Р.
    Август 10th, 2010 @ 23:12

    Система «оплата — получение продукта» полностью автоматизирована, ссылка на скачивание приходит в течение нескольких минут с момента поступления денежных средств.

  5. Денис
    Август 21st, 2010 @ 13:01

    Чем этот цикл может пригодиться в торговом роботе, который описан в шаге 7?

  6. Саша Талант
    Август 22nd, 2010 @ 20:55

    Подумайте над этим вопросом самостоятельно. А в следующих уроках постараемся воплотить в жизнь Ваши мысли.

  7. Денис
    Август 24th, 2010 @ 17:13

    По моему мнению этот цикл может пригодиться при написании нового робота. Для входа в позицию при пробитии минимума или максимума.
    Но это получится новый робот…

  8. Саша Талант
    Август 24th, 2010 @ 22:52

    А как насчет увеличения (добавления) позиции при пробитии экстремумов?

  9. Денис
    Август 25th, 2010 @ 12:03

    То же вариант. Но это увеличение параметров, которые необходимо правильно задать. В шаге 7 их 4 штуки. С этой функцией получится уже 5.
    Я не хочу сказать, что эта функция бесполезна и не нужна. Просто эту стратегию необходимо тестировать в программе технического анализа и получить эти параметры, и с увеличением их числа эта задача является более затруднительной.

  10. Алекс
    Ноябрь 28th, 2010 @ 13:25

    Саша, подскажите, пожалуйста, как в Вашем роботе задать именно пересечение MA так, чтобы остальное время он бездействовал?

  11. Юлия
    Ноябрь 28th, 2010 @ 15:17

    Не совсем понятен вопрос. В робота как раз заложен алгоритм, который реагирует на пересечение. Если было пересечение и второй индикатор не противоречит, то отправляется заявка.

  12. Алекс
    Ноябрь 28th, 2010 @ 17:18

    Изложу суть проблемы. Робот открывает позицию, тут же выставляется стоп-заявка, если она срабатывает, а условие открытия позиции сохраняется, тут же открываетя новая, заведомо убыточная.

  13. Юлия
    Ноябрь 29th, 2010 @ 15:37

    Самый простой способ — регулирование частоты пересчета портфеля. Например, если таймфрейм графика 15 минут нет никакого смысла в пересчете портфеля каждые 10 сек. Достаточно 1-2 пересчетов за таймфрейм. Если такой вариант не устраивает — пишите заявку на info@quikprofit.ru на изготовление плагина. То есть технически возможно сделать плагин, который ограничивал бы заявки от вашего робота, например в слйчае срабатывания стопа.

  14. Алекс
    Декабрь 7th, 2010 @ 17:14

    Спасибо за предложение, но всё оказалось проще. Достаточно было добавить ещё одну закрытую свечу и обратное условие на ней и всё заработало.

Оставить комментарий





Поля помеченные (*) обязательны к заполнению

Страница 1 из 11
  • Меню

  • Облако тегов

  • Рубрики

  • Для пользователя