Введение в Zorro Trader

Zorro – простая бесплатная оболочка и обширная библиотека функций для разработки и тестирования торговых стратегий. Имеется поддержка автоматической торговли. Оболочка реализована на Adventure Game Studio, для написания индикаторов и стратегий используется язык Lite-C (упрощённая версия языка Си). Поддерживается разработка мультитаймфреймовых и мультивалютных стратегий. Сама программа бесплатная, но некоторые плагины и торговые системы распространяются на платной основе.

../_images/Zorro-01.png

Рис. 1. Внешний вид программы Zorro Trader

Установка программы Zorro

Откроем в любом браузере сайт zorro-trader.com, при желании заполним несколько полей с вариантами ответов на простые вопросы, ниже выберем страну и введём свой электронный адрес (Your email address). Нажмём кнопку Download. Через некоторое время на указанный адрес придёт письмо со ссылкой на скачивание программы.

После запуска инсталлятора надо согласиться с лицензионным соглашением (выбрать опцию YES – I accept), несколько раз нажать кнопку Next (Далее), ввести своё имя (или просто любую последовательность символов), выбрать каталог для установки программы, опять нажать кнопку Next и, наконец, нажать Finish.

Скачивание котировок

На той же Web-странице ниже можно скачать несколько архивов с историей котировок (Price History). Содержимое архивов (файлы с расширением .bar) надо распаковать в подкаталог History в ту папку, куда устанавливалась программа.

Для скачивания текущих котировок и для реальной торговли можно зарегистрировать аккаунт (демо- или реальный) в FXCM.

Чтобы скачать котировки, надо:

  • в главном окошке программы Zorro в поле Ассount выбрать FXCM и Demo (или Real, если счёт реальный);
  • в поле User (Пользователь) написать номер своего счёта, а правее — пароль;
  • в раскрывающемся списке Script выбрать Download (Загрузка);
  • нажать кнопку Edit (Редактировать);
  • раскомментировать строку #define PRICE_HISTORY;
  • установить год, с которого начнётся загрузка (т.е. первый год, за который у вас отсутствуют данные), присвоив нужное значение переменной StartDate;
  • установить год, которым должна закончиться загрузка, присвоив нужное значение переменной EndDate;
  • сохранить изменения;
  • в главном окне программы Zorro нажать кнопку Trade;
  • следить за выводимыми сообщениями: если всё в порядке, то сначала появится надпись Login FXCM (Подключаюсь), затем Loading... (Загружаю), потом Done (Выполнено) и Logout... ok (Отключаюсь... Всё в порядке).

Возможно подключение Zorro к программе Metatrader 4, его настройку мы рассмотрим позже.

Также имеется скрипт Convert для импорта исторических котировок из файлов CSV, скачанных с сайта www.histdata.com.

Чтобы добавить новый финансовый инструмент в список доступных для тестирования и торговли, надо в том же скрипте Download раскомментировать строку #define ADD_ASSET "Тикер" и вписать тикер добавляемого инструмента, после чего нажать кнопку Trade. Не желательно добавлять новый инструмент в среду, т.к. текущие параметры по добавляемому инструменту записываются в специальный файл настроек и потом используются при тестировании, а по средам обычно увеличенное значение ролловера (платы за перенос позиций через ночь).

Подробнее про экспорт и импорт данных можно прочитать на сайте разработчиков программы Zorro.

Пересечение скользящих средних

Приведём код торговой системы на основе двух простых скользящих средних. Когда скользящая средняя с меньшим периодом (быстрая SMA) пересекает снизу вверх скользящую среднюю с большим периодом (медленную SMA), мы открываем длинную позицию. Когда быстрая SMA пересекает медленную сверху вниз – переворачиваемся, т.е. закрываем длинную и открываем короткую позицию.

Откроем невзрачное главное окно программы Zorro и в раскрывающемся списке Script выберем последний пункт New Script (Новый скрипт). Автоматически откроется окно текстового редактора, в нём надо ввести текст программы на языке Lite-C:

// CrossSMA: пересечение простых скользящих средних.
function run()  // Функция, которая вызывается для каждого ценового бара.
{
   StartDate = 20140101; // Начальная дата.
   EndDate = 20141231;   // Конечная дата.
   Capital = 100; // Начальная сумма на торговом счёте.
   Lots = 1; // Размер открываемых позиций (соответствует 0.01 в Metatrader4/5).
   vars Close = series(priceClose());  // Серия цен закрытия баров.
   vars SMA1 = series(SMA(Close, 20)); // Серия значений индикатора SMA с меньшим периодом.
   vars SMA2 = series(SMA(Close, 80)); // Серия значений индикатора SMA с большим периодом.

   if(crossOver(SMA1, SMA2))  // Если линия SMA1 пересекла линию SMA2 снизу вверх,
      enterLong();            // то открываем длинную позицию (автоматически закрываются короткие).
   if(crossUnder(SMA1, SMA2)) // Если линия SMA1 пересекла линию SMA2 сверху вниз,
      enterShort();           // то открываем короткую позицию (автоматически закрываются длинные).

   set(LOGFILE);  // Записывать все сделки в лог-файл.
   plot("SMA1", SMA1, 0, DARKBLUE); // График быстрой SMA (0 - на том же графике, где цена).
   plot("SMA2", SMA2, 0, PURPLE);   // График медленной SMA.
}

Чтобы правильно отображались символы кириллицы в комментариях, надо открыть диалог настроек, выполнив команду меню Options ‣ Font, и в поле Набор символов выбрать пункт Кириллица.

Сохраним скрипт под именем CrossSMA.c в каталог Strategy. Выберем его из раскрывающегося списка Script в главном окне программы. Справа от имени скрипта из раскрывающегося списка Asset выберем нужный финансовый инструмент, например EUR/USD. С помощью ползунка Period (Период) выставим нужный таймфрейм, на котором хотим тестировать нашу торговую систему, например, 1440, что соответствует дневному графику (в сутках 1440 минут).

В каталоге, куда была установлена программа Zorro, в подкаталоге History, имеется файл AssetsFix.dta; там хранятся все данные по торговым инструментам, в частности, стоимость пункта (столбец PIPCost) для 0.01 лота. После установки по умолчанию считается, что мы открыли счёт в FXCM и основной валютой является евро. Если мы хотим, чтобы стоимость пункта для валютной пары EUR/USD равнялась 0.1, надо вписать это значение на пересечении соответствующей строки и столбца (в том же подкаталоге уже есть файл AssetsUS.dta, в котором хранятся правильные значения для долларового счёта).

Вернёмся к главному окну программы Zorro. Нажмём кнопку Test. Красно-зелёный индикатор под кнопками покажет, как продвигается процесс тестирования. По окончании вычислений под индикатором появится надпись, сообщающая итоговую прибыль или убыток в процентах и пунктах. Аббревиатура CAGR (Compound Annual Growth Rate) означает: совокупный среднегодовой темп роста, этот параметр находится по формуле

\[\text{CAGR} = ( S / S_0 )^{1/y} - 1 = \sqrt[y]{S / S_0} - 1 ,\]

где \(S_0\) и \(S\) – соответственно, начальный и конечный капитал; \(y = d / 250\) – число лет; \(d\) – число рабочих дней, попадающих в период тестирования; 250 – число рабочих дней в году. По даной формуле результат вычисляется в относительных единицах, для получения процентов надо умножить на 100.

Теперь можно нажать кнопку Result, чтобы посмотреть отчёт о результатах тестирования. Будет выведен график (рис.2) и таблица с параметрами (рис.3). Благодаря тому, что мы установили флаг LOGFILE, в каталоге Log появится файл testtrades.csv со сведениями о всех сделках (если вы всё сделали правильно, то в этом файле будет три строки).

../_images/ZorroCrossSMA-01.png

Рис. 2. График с результатами тестирования торговой системы

../_images/ZorroCrossSMA-02.png

Рис. 3. Результаты тестирования торговой системы

Мы так подобрали параметры, чтобы программа совершила всего 3 сделки: две убыточные и одну прибыльную. Они показаны на графике (см. рис.2) красными и зелёной линиями. Свечи тестируемого финансового инструмента показаны чёрным цветом, шкала для ценового графика расположена слева. Синим цветом показана быстрая скользящая средняя, фиолетовой – медленная. Синяя гистограмма поверх графика цены показывает рост эквити (сумму на торговом счёте с учётом всех закрытых и ещё открытых сделок), оранжевая – просадку эквити (drawdown). Шкала делений для эквити расположена справа.

Торговля по стохастику

Проверим ещё одну классическую торговую стратегию: будем использовать стохастический осциллятор. Выберем уровни перекупленности и перепроданности 80 и 20. Когда линия стохастика пересекает уровень перекупленности 80 сверху вниз, открываем короткую позицию (и закрываем длинную, если она ещё не закрылась по тейку или стопу). Когда линия стохастика пересекает уровень перепроданности 20 снизу вверх, открываем длинную позицию (и закрываем короткую). При открытии ордеров автоматически ставим стоп-лосс и тейк-профит; их величину вычисляем в зависимости от текущей волатильности. Величину волатильности измеряем с помощью индикатора ATR. Для сопровождения позиции используем скользящий стоп (трейлинг-стоп) 25 пунктов (выбрали фиксированную величину, чтобы показать, как программируется такой вариант).

Текст скрипта:

function run(){
  BarPeriod = 240;      // Таймфрейм H4.
  StartDate = 20140101; // Начальная дата - 1 января 2014.
  EndDate = 20140915;   // Конечная дата - 15 сентября 2014.
  Lots = 1;    // Размер позиции (0.01 лот).

  // Стохастический осциллятор с параметрами 6, 3, 3;
  // результат записывается в rSlowK и rSlowD:
  Stoch(6, 3, MAType_EMA, 3, MAType_EMA);

  vars stoch1 = series(rSlowD); // или rSlowK.
  var threshold = 20; // Пороговый уровень.

  Stop = 2*ATR(100);       // Уровень стоп-лосса.
  TakeProfit = 5*ATR(100); // Уровень тейк-профита.
  Trail = 25*PIP;          // Трейлинг-стоп 25 пунктов.

  if(crossOver(stoch1, threshold)) // Когда стохастик пересекает нижний уровень снизу вверх,
    enterLong();                   // открываем длинную позицию (автоматически закрываются продажи).
  else if(crossUnder(stoch1, (100-threshold))) // Когда пересекает верхний уровень сверху вниз,
    enterShort();                 // открываем короткую позицию (автоматически закрываются покупки).

  plot("Stoch1", stoch1, NEW, RED);         // График стохастика в новом подокне.
  plot("Threshold1", (100-threshold), 0, BLACK); // В этом же подокне уровень 80.
  plot("Threshold2", threshold, 0, BLACK);       // В этом же подокне уровень 20.
  PlotWidth = 600;     // Ширина графика в пикселах.
  PlotHeight1 = 300;   // Высота графика в пикселах.
}

По сравнению с предыдущей программой, мы явно указали рабочий таймфрейм, установив значение зарезервированной переменной BarPeriod (в минутах). Результат тестирования для валютной пары USD/CHF показан на рис.4.

../_images/ZorroStoch-01.png

Рис. 4. Результаты тестирования торговли по стохастику

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

Ссылки


Теги: Zorro, Торговые системы




Комментарии

Комментариев пока нет.

* Обязательные поля
(Не публикуется)
 
Жирный Курсив Подчеркнутый Перечеркнутый Степень Индекс Код PHP Код Кавычки Вставить линию Вставить маркированный список Вставить нумерованный список Вставить ссылку Вставить e-mail Вставить изображение Вставить видео
 
Улыбка Печаль Удивление Смех Злость Язык Возмущение Ухмылка Подмигнуть Испуг Круто Скука Смущение Несерьёзно Шокирован
 
1000
Captcha
Refresh
 
Введите код:
 
Запомнить информацию введенную в поля формы.