В предыдущей своей статье я затронул тему графиков Рэнко. Данный тип графиков исключает фактор времени и представляет собой последовательность «кирпичиков» равного размера. В данной статье попробуем оценить результативность торговли с использованием графиков Рэнко на примере предложенной ниже стратегии.


Торговая идея

В данном случае не будем придумывать сложных алгоритмов, а будем просто следовать за ценой. Т.е. если нарисовался «кирпичик» другого цвета, то встаем в его сторону с трейлинг стопом в размере противоположного «кирпичика», тейк профит использовать не будем.


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


Торговый робот

Для написания торгового робота будет использовать визуальный конструктор стратегий Visual JForex. Общий вид робота представлен на рисунке ниже.



Рис.1 Общий вид торгового робота

Запускаться торговый робот будет по каждому тику нужного нам инструмента, что достигается путем фильтрации всех тиков логическим блоком «if». Торговый робот состоит из четырех функциональных блоков, каждый из которых более подробно будет описан ниже:


  • Блок установки трейлинг стопа
  • Блок установки начальных значений
  • Блок расчета Рэнко
  • Блок установки ордеров

Блок установки трейлинг стопа


После того, как все условия выполнились и позиция открылась, нам необходимо повесить на открытую позицию трейлинг стоп (Рис.2). Блоком «if» будем мониторить все торговые сообщения и при появлении сообщения «Position Fill» будем действовать. Нам необходимо получить сведения об открывшейся позиции, для чего блоком «Positions Viewer» просканируем все открытые позиции и блоком «Trailing Stop» повесим на них трейлинг стоп. Забегая вперед отмечу, что размер «кирпичика» у нас будет 10 пунктов. Соответственно, чтобы нарисовался противоположный «кирпичик», цене необходимо пройти в противоположном направлении 20 пунктов. Это и будет величина стоп лоса, который будет подтягиваться на величину «кирпичика», т.е. 10 пунктов.



Рис.2 Блок установки трейлинг стопа

Блок установки начальных значений


Как упоминалось выше, размер «кирпичика» будет составлять 10 пунктов. Посмотрев на график Рэнко в платформе JForex (Рис.3), можно заметить, что цена открытия и закрытия «кирпичика» находиться на уровнях кратных 10 пунктам. Т.е. идея вычисления Рэнко такова, что в момент запуска робота вычисляется ближайший относительно текущей цены уровень кратный десяти пунктам, пусть это будет переменная «price» и определяются нижний уровень, предположим, что цена движется вниз, переменная «price_down» равная «price» минус 10 пунктов, и верхний уровень, переменная «price_up» равная «price» плюс 20 пунктов. Если цена дошла до нижнего уровня, то нарисовался красный «кирпичик», а если до верхнего, то зеленый.


Вернемся к блоку установки начальных значений. Задачей данного блока является вычисление ближайшего кратного десяти пунктам уровня, от которого и будут отталкиваться дальнейшие вычисления. Вид данного блока в визуальном конструкторе Visual JForex представлен на рис.4. данный блок задействуется всего лишь один раз при запуске робота, поэтому нам необходимо его один раз выполнить и выключить. Достигается это первым «if» и последним «Assign» блоками, а также переменной «start_str», начальное значение которой равно «true». Т.е. блоком «if» мы проверяем переменную «start_str» на значение «true», а после выполнения необходимых действий блоком «Assign» присваиваем ей значение «false». Таким образом, блок установки первоначальных значений будет выполняться лишь один раз.


Для вычисления начального значения воспользуемся особенностью преобразования переменной одного типа «double» в переменную другого типа «integer», после чего происходит округление до ближайшего нижнего целочисленного значения. Первым блоком «Calculation» умножим текущее значение цены, переменная типа «double», на 10, а результат поместим в переменную «price_tmp» типа «integer». Допустим текущая котировка валютной пары EUR/JPY равна 130,83. На выходе данного блока получим значение 1308,0. Вторым блоком «Calculation» обратно разделим полученное значение на 10, результат поместим в переменную «price» типа «double». Таким образом, при текущей котировке 130,83 мы получим ближайший нижний уровень кратный 10 пунктам 130,8.



Рис.3 График Рэнко


Рис.4 Блок установки начальных значений

Блок расчета Рэнко


Данный блок является основным функциональным блоком всей стратегии, поскольку именно в нем формируются условия для открытия сделок. Общий вид данного блока представлен на Рис.5.



Рис.5 Блок расчета Рэнко

Принцип расчета «кирпичиков» Рэнко был изложен выше, однако есть небольшая особенность, которая заключается в том, что алгоритм расчета границ будет зависеть от типа предыдущего «кирпичика». Если предыдущий «кирпичик» был красный, то для формирования следующего красного «кирпичика» цена должна пройти расстояние вниз 10 пунктов, а для формирования зеленого вверх 20 пунктов, в то время как в случае, когда предыдущий «кирпичик» был зеленый, то для формирования красного «кирпичика» цена должна пройти вниз уже 20, а не 10 пунктов, а для формирования зеленого «кирпичика» цена должна пройти вверх 10, а не 20 пунктов.
На входе блока расчета Рэнко стоит своего рода переключатель в виде блока «if» и переменной «type_renko», который и будет направлять алгоритм в нужную ветку в зависимости от типа предыдущего «кирпичика». Далее происходит вычисления уровней «price_up» и «price_down» (Рис.6), по достижению которых и будет формироваться определенный «кирпичик» Рэнко.



Рис.6 Расчет уровней «price_up» и «price_down»

Поскольку уровни формирования очередного «кирпичика» рассчитаны, то остается следить пока цена дойдет до одного из них. Это реализовано с помощью блоков «if», в которых значение очередного тика сравнивается с уровнями «price_up» и «price_down». После достижения одного из уровней происходит перезапись начального уровня, от которого происходил расчет уровней «price_up» и «price_down». Если произошла смена типа «кирпичика», то блоком «Assign» переключателю «type_renko» присваивается противоположное значение и алгоритм начинает работать в другой ветке. Таким образом и происходит расчет «кирпичиков» Рэнко (Рис.7).



Рис. 7 Слежение за уровнями «price_up» и «price_down»

После достижения одного из уровней «price_up» или «price_down» формируется очередной «кирпичик». Были введены две переменные «Renko1» и «Renko2», где «Renko1» это сформированный «кирпичик», а «Renko2» это предыдущий «кирпичик». Данные о предыдущем записываются в «Renko2», а текущего в «Renko1». Происходит своего рода смещения, в результате которого у нас постоянно обновляется информация о двух последних «кирпичиках». После формирования каждого «кирпичика» устанавливается разрешающий сигнал, переменная «start».



Рис.8 Формирование сигналов

Блок установки ордеров


Поскольку все сигналы сформированы, то остается лишь сравнить их на соответствие требуемых условий (Рис. 9). Блоком «if» проверяем переменную «start» на значение «true». Далее блоками «if» сравниваем между собой два последних «кирпичика». После того как ордер отправлен на исполнение присваиваем переменной «start» значение «false», чтобы не происходило повторных открытий ордеров.



Рис. 9 Открытие ордеров

Вывод: Целью статьи было показать, как можно рассчитать Рэнко в визуальном конструкторе стратегий Visual JForex и построить простейшую торговую стратегию.

Translate to English Show original