Руководство по созданию Торговых Скриптов
Последнее обновление
Введение
ZuluTrade создала новое поколение торговых стратегий, которые позволяют Трейдерам запрограммировать и размещать свои собственные торговые роботы и индикаторы напрямую через их Трейдерские Счета ZuluTrade, без регистрации внешних программ или посторонних участников!
ZuluScripts реализованы с использованием Языка Запроса ZuluTrade (zql), который был разработан для совместимости с наиболее часто используемыми языками скриптов в среде рынка Форекс.
Все, что Вам необходимо для использования Торговых Скриптов - это Трейдерский счет со включенной опцией ZuluTrade+, как показано во вкладке Настройки - Настройки Соединения Вашего Брокерского Счета, Вашего счета.
Доступ к Редактору Торговых Скриптов ZuluTrade
Для того чтобы получить доступ к Торговым Скриптам ZuluTrade, как только Вы зарегистрируете счет в ZuluTrade и соедините его с платформой ZuluTrade+, наведите на Торговую Станцию ZuluTrade и нажмите на "ZuluScripts ".
Появится новое окно с названием "Торгующий Клиент".
В верхнем правом углу Вы найдете 4 различные вкладки, которые активируют рабочий режим Редактора Скриптов.
Первая вкладка устанавливает режим для создания Скриптов, вторая - для создания Пользовательских Индикаторов, третья - для создания Заголовков и последняя вкладка выводит Глоссарий ZQL, где Вы сможете найти подробную информацию для каждой команды языка ZQL.
Наверх
Создание ZuluScript
Для создания Вашего скрипта ZuluScript нажмите на кнопку Редактора Скриптов ""Создание Скрипта"".
После создания нового скрипта, панель редактора заполняется шаблоном кода zql - именно на этой панели, где вводится код скрипта.
Ниже панели справа расположены три кнопки, которые помогут Вам в создании Вашего скрипта ZuluScript - Сохранить, Компилировать и Разместить.
Сохранить -Кнопка Сохранения сохраняет Ваш скрипт в любой момент времени.
Однако сохранение изменений в этом скрипте не означает, что данное изменение будет готово к использованию. Любое изменение должно быть сперва Компилировано и Размещено, перед тем как оно станет доступным для использования.
Компилировать - Компиляция Скрипта проведет проверку кода на содержание синтаксических ошибок. В случае если компиляция завершена успешно, то будут созданы двоичные файлы, связанные с нашим скриптом, после чего скрипт будет запущен.
Если выполнить компиляцию не удается, то ошибки, появляющиеся в течение процесса, будут перечислены в панели ""Вывод Компилятора"".
Ниже приведен пример неуспешной компиляции:
Разместить – Для того чтобы разместить скрипт, скрипт сначала должен быть компилирован. Как только данное условие будет выполнено и .zql файл будет создан, Вы сможете затем Разместить скрипт и применить его на Торговой Станции ZuluTrade!
MetaData – В правой части окна Вы можете изменить Данные Вашего скрипта.
Графа
"Имя "- имя, которое будет отображаться при прикреплении скрипта к графику.
Поле "Имя Файла" – имя файла, под которым скрипт будет сохранен на сервере ZuluTrade. Изменение имени файла необязательно. Но если Вы решили изменить имя, то убедитесь в том, что имя файла имеет суффикс .zql.
В поле "Описание" Вы вводите краткое описание, которое будет отображаться при прикреплении скрипта к графику. Описание может напомнить Вам точную функциональность скрипта, поэтому в данной графе укажите более подробную информацию.
Список Скриптов – Ниже полей с Данными располагается список всех сохраненных скриптов. Обратите, пожалуйста, внимание на то, что все новые созданные скрипты будут сохраняться автоматически.
Выбранный текущий скрипт (чей код отображен на панели редактирования)будет выделен.
Удаление скрипта-В случае если Вы хотите удалить скрипт, то достаточно нажать на значок ""x"" справа от имени скрипта и подтвердить свой выбор в новом всплывающем окне.
Пример Скрипта – рассмотрим пример zql скрипта, который Вы можете использовать для тестирования:
#property copyright "Copyright © 2014, Zulutrade Inc"
#property link "www.zulutrade.com"
extern int BuyThreshold = 40;
extern int SellThreshold = 30;
extern double Lots = 1;
extern int MagicNumber = 33;
extern string comment = "by example script";
extern int maxOpenPositions = 3;
extern int shift = 1;
int RSILength = 14;
int TimeOfFirstBar = 0;
int init() {
}
int start() {
double RSI = 0.0;
if (isFirstTickOfCurrentBar()) {
RSI = iRSI(NULL, PERIOD_H1, RSILength, PRICE_CLOSE, shift);
Print("Got RSI value for period H1 and shift ", shift, " equals to ", RSI);
// Buy Condition
if ( RSI >= BuyThreshold && OrdersTotal() < maxOpenPositions) {
if (doBuy() == false) {
return (0);
}
}
// Close condition
if ( RSI <= SellThreshold && OrdersTotal() > 0) {
if(doClose() == false) {
return(0);
}
}
}
}
// Figures out the first tick of a new bar
bool isFirstTickOfCurrentBar() {
if (TimeOfFirstBar != Time[1]) {
TimeOfFirstBar = Time[1];
return (true);
}
return (false);
}
// Close an order checking magic number to make sure it is generated from current script
bool doClose() {
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if (OrderClose( OrderTicket(), OrderLots(), Ask, 0, White) == -1) {
Print ("Failed to close trade ", OrderTicket(),", error # ", GetLastError());
return(false);
}
Print ("Successfully closed trade ", OrderTicket(),", error # ", GetLastError());
return(true);
}
// Open a new order
bool doBuy() {
int ticket = OrderSend( Symbol(), OP_BUY, Lots, Ask, 0, 0.0, 0.0, comment, MagicNumber, 0, Lime);
if (ticket < 0) {
Print ("Failed to open trade, error # ", GetLastError());
return (false);
}
Print ("Successfully opened ticket ", ticket);
return (true);
}
Данный скрипт проверяет в каждом цикле количество открытых позиций. Если нет открытых позиций и соблюдены некоторые условия индикатора, скрипт откроет новую позицию. В противном случае, если имеется много открытых позиций, то он закроет одну.
ВНИМАНИЕ: Данный скрипт не может применяться для реальной торговой стратегии, и предназначен только для показа.
Если в какой-либо момент времени Вам нужно создать новый скрипт, достаточно нажать на кнопку «Создать Скрипт» и повторить процесс.
Наверх
Создание Пользовательского Индикатора
Пользовательские индикаторы могут быть созданы и использованы в другом торговом скрипте, который расширит список технических индикаторов, доступных уже в этом языке.
Пользовательские индикаторы могут быть использованы в любом скрипте ZuluScript, используя функцию iCustom() ZQL после сохранения, компилирования и размещения Вашего пользовательского индикатора.
Внимание:В настоящий момент мы не можем изображать Пользовательские индикаторы на графиках.
Для того чтобы создать Пользовательский Индикатор, нужно нажать на кнопку Редактора Скриптов "Создать Индикатор".
Убедитесь, пожалуйста, в том, что Редактор переведен на вкладку Пользовательские Индикаторы:
Как все будет готово, Вы должны Редактировать, Дать Имя, Сохранить и Разместить Ваш пользовательский индикатор!
Функции "Редактировать", "Дать имя", "Сохранить" и "Разместить" Ваш пользовательский индикатор аналогичны функциям для скриптов ZuluScript.
Примечание: Имя индикатора будет в дальнейшем называться функцией iCustom() для того, чтобы получить доступ к Вашим скриптам ZuluScripts.
Рассмотрим пример Пользовательского Индикатора, который Вы можете использовать для тестирования:
extern int index = 0;
int MODE = 0;
int init() {
return(0);
}
int start() {
double value = iCustom(NULL, NULL, "my_new_indicator", 0, index);
Print("my_new_indicator value for bar ", index, " is ", value);
}
Наверх
Создание Заголовка
Здесь Вы можете определить повторно используемые функции, которые могут быть импортированы и использованы любым Скриптом или Пользовательским Индикатором.
Помните, что Заголовки не являются ZQL скриптами, поэтому они не нуждаются в функции init(), start() or deinit().
Для создания Заголовка необходимо нажать на кнопку Редактора Скриптов "Создать Заголовок".
Убедитесь, пожалуйста, в том, что Редактор переведен во вкладку Заголовки:
Примечание I: Это имя файла, которое нужно использовать в #include<> directive скрипт, к функциям которого Вы хотите получить доступ.
Примечание II:Заголовки просто сохраняются. Нет необходимости выполнять компиляцию или размещение, так как код будет скомпилирован и размещен при импортировании Скрипта или Пользовательского Индикатора.
Использование заголовка в новом Скрипте также легко, как и включение файла заголовка
#include "my_common_functions.zqh"
int init() {
}
int start() {
printMyBalance();
}
Наверх
Глоссарий
В Глоссарии Вы можете найти подробную информацию для каждой команды ZQL языка.
Просто нажмите на буквы сверху для перехода к списку буквы. Также, нажав на буквенные заголовки, Вы можете развернуть/свернуть функцию каждой буквы а, нажав на имя/заголовок функции, Вы можете развернуть/свернуть детали функции.
Наверх
Использование Скрипта на Вашем Трейдерском счете
После успешной компиляции Скрипта и его размещения, Вы можете закрыть окно Редактора Скрипта и прикрепить Скрипт к Графику.
Для этого наведите курсор на желаемую валютную пару и период. В этом примере, на графике EURUSD с временным интервалом в 1Ч.
Нажмите на кнопку ZuluScripts (выделены на скриншоте ниже) и выберите нужный Вам скрипт.
Если Вы удержите курсор мыши на скрипте, появится строка-подсказка с описанием Скрипта.
Для того чтобы запустить скрипт на выбранном Графике/Интервале, просто нажмите на имя скрипта, после чего появится новое окно, содержащее как описание скрипта, так и любые поля инициализации для внешних переменных скрипта.
Настроив параметры согласно Вашим предпочтениям, нажмите на кнопку "Запуск" и скрипт будет прикреплен к графику!
Примечание: Скрипт будет запущен на этом графике с серверов ZuluTrade, независимо от того, включен ли Ваш ПК, или авторизованы Вы в счете или нет.
Вкладка ZuluScripts -Здесь Вы можете просмотреть все активные в настоящий момент скрипты по каждому Графику/Интервалу, а также текущую версию и время последнего обновления.
Вы также можете навести на сам График, на котором запущен Скрипт, через значок График.
Вкладка Сообщения - Любые сообщения, сгенерированные Вашим Скриптом, ZuluTrade, принтерами, касающиеся Вашего Скрипта, будут отображаться в этом разделе.
Наверх
Остановка и Скрытие Скрипта
Вы можете Остановить и Убрать Скрипт из списка Размещенных Скриптов в любой момент.
Остановка Скрипта-Для остановки выполнения скрипта на запущенном Графике/Интервале Вам достаточно навести курсор на вкладку "ZuluScripts" под графиком, нажать на значок "х" справа от Скрипта, который Вы желаете Остановить, и подтвердить Остановку в новом появившемся окне.
Примечание: Остановка скрипта будет осуществлена только на Графике/Интервале. Скрипт останется в Вашем Редакторе Скриптов и в Ваших Торговых Размещенных Скриптах
Скрытие Скрипта - Для того чтобы скрыть скрипт достаточно навести курсор на раздел ZuluScripts , нажать на значок "х" у его имени и подтвердить действие в новом появившемся окне.
Примечание: Скрипта будет удален только из списка доступных Скриптов Вашего Трейдерского Счета. Данный скрипт не будет удален из окна Редактора Скриптов.
Наверх
Пособие для Инвесторов ZQL Standalone Compiler
Начать с ZQL Standalone Compiler
ZQL Standalone Compiler - это автономный режим компилятора скрипта ZQL, который zulutrade предлагает на своей веб-платформе. Он скомпилирует любой совместимый с ZQL скрипт (напр., mq4) в .zl файл.
Cкачать
ZQL Standalone Compiler распространяется через сайт Lirunex Global.
Компилятор доступен в форматах zip и tar.
Требования
- Java JDK 6 (рекомендуем использовать хотспот Java JDK 6)
Установка
Просто извлеките загруженный вами файл в директорию по своему выбору. Вы можете установить ZQL Standalone Compiler на любую операционную систему, которая поддерживает форматы zip или tar. Просмотрите примечания для версии с целью получения дополнительной информации.
Быстрый тур
Теперь, когда вы скачали ZQL Standalone Compiler, следующее, что вы должны сделать: обсудить вид дистрибуции и изучить структуру директории компилятора, основные конфигурации, файлы логов и т.д.
Структура директории
Директория |
Описание |
lib/
|
Содержит зависимости от библиотек компилятора. |
conf/
|
Содержит важные файлы, которые не должны быть изменены. |
run.bat
|
Скрипт запуска для Windows. |
run.sh
|
Скрипт запуска для Linux/Unix. |
Опции компиляции
Имя параметра
|
Короткое имя параметра
|
Цена
|
Описание
|
help |
h |
- |
Вывести сообщение справки на консоль. |
class |
c |
Значение любой строки |
Сгенерированное имя класса. |
package |
p |
Любая строка в форме package path |
Сгенерированное имя пакета |
output |
o |
Значение любой строки |
Имя скомпилированного файла без расширения |
zqh |
z |
Любая строка в форме адреса директории (относительная или абсолютная) |
Включить адреса директории в кастомные файлы zqh |
name |
n |
Имена нужных скриптов
если у вас есть пробелы, поместите их между " в Windows и \" в Linux
|
Имя скрипта, показываемое после загрузки Lirunex Global системы |
description |
d |
Описание нужных скриптов
если у вас есть пробелы, поместите их между " в Windows и \" в Linux
|
Описание скрипта, показываемое после загрузки Lirunex Global системы |
Примеры
Скомпилируйте скрипт специалиста по изменениям |
Вывод |
run.bat -c MyCustomExpert -p org.test -o my_expert -n "My Expert" custom_expert.zql
|
my_expert.zl |
Скомпилируйте скрипт специалиста по изменениям со скриптом заголовка (напр., директория заголовков) |
Вывод |
run.bat -c MyCustomExpert -p org.test -o my_expert -n "My Expert" -z headers custom_expert.zql
|
my_expert.zl |
Наверх