Создание собственного сигнала
Сигнал – это набор правил, написанных на языке Trading Language, по которым формируются команды и выставляются ордера на открытие и закрытие позиций. В Trading Desk VPro уже встроено некоторое количество часто используемых сигналов, список которых постоянно расширяется, (более подробно они описаны в главе «Сигналы в системе Trading Desk VPro»). В этом разделе мы рассмотрим, как создать собственный сигнал при помощи редактора скриптов.
Мы рассмотрим создание двух простейших сигналов на основе скользящих средних, открывающих длинную позицию, и закрывающих ее.
Немного о создаваемом сигнале Сигналы на основе пересечения двух скользящих средних с разными периодами расчета являются одними из самых распространенных в трейдинге. Считается, что скользящая средняя с коротким периодом расчета показывает соглашение по поводу рыночной цены в краткосрочном периоде, сглаживая единичные колебания. Скользящая средняя с более длинным периодом расчета указывает на соглашение рыночной толпы по цене в среднесрочном и долгосрочном периоде. Если краткосрочная скользящая средняя находится выше среднесрочной скользящей средней, это означает что оценка рынком цены в краткосрочном периоде больше, чем в долгосрочном – или что текущая тенденция направлена вверх. Если краткосрочная скользящая средняя находится ниже среднесрочной скользящей средней, это означает противоположное и тренд направлен вниз. Соответственно сигнал изменения тенденции, например с нисходящей на восходящую (и соответственно сигнал на покупку), поступает, когда короткая скользящая пересекает длинную скользящую среднюю с длинным периодом снизу вверх. Сигнал на продажу поступает в противоположном случае. Пример на рисунке ниже.
Сигнал на открытие позиции. Чтобы создать собственный сигнал, откройте окно редактора скриптов, щелкните на нем правой кнопкой мыши и в появившемся контекстном меню выберите пункт “Новый сигнал”.
Далее в окне укажите имя создаваемого сигнала и нажмите ОК.
Определение входных параметров и переменных. На первом шаге необходимо определить входные параметры скользящих средних (их периоды расчета) и переменные, которые будут использоваться для построения сигнала. Значение параметра скользящей средней остается постоянным, пока выполняется программа. Но Вы можете самостоятельно менять это значение в тексте программы, тем самым оптимизируя сигнал для своих торговых идей. В дальнейшем входные параметры скользящих средних, указанные в тексте сигнала, можно настраивать на графике, когда вы примените к нему готовую стратегию.
Для начала объявим два параметра с названиями PeriodFast (это будет период расчета короткой скользящей средней) и PeriodSlow (период расчета длинной скользящей средней). Начальными значениями для них будут 5 и 15 свечей соответственно. Это означает что при применеии стратегии, основанной на этом сигнале на часовом графике периоды расчета скользящих средних будут 5 и 15 часов, а на дневном графике 5 и 15 дней. Начальные значения обозначаются в скобках рядом с названием параметра. Таким образом, необходимо напечатать в окне редактора следующее:
Inputs: PeriodFast(5), PeriodSlow(15);
Параметр PeriodFast определяет период для расчета быстрой, более чувствительной скользящей средней. Параметр PeriodSlow определяет период для расчета медленной, менее чувствительной скользящей средней. Для того чтобы легче было ориентироваться в коде сигнала, рекомендуем Вам использовать комментарии для каждой части кода. Комментарии в Trading Language выделяются фигурными скобками {}. В нашем случае комментарии могут выглядеть следующим образом:
Inputs: PeriodFast(5), {Период для расчета быстрой скользящей средней} PeriodSlow(15); {Период для расчета медленной скользящей средней}
В Trading Language возможно писать комментарии на русском языке. После того, как Вы написали комментарий, перейдите на новую строку нажатием клавиши Enter.
Для данного сигнала нам понадобится 2 переменные. Мы будем использовать переменные для проведения вычислений, необходимых для работы сигнала. Наши переменные будут содержать значения быстрой и медленной скользящих средних, которые мы вычислим.. Оставьте пустую строку после объявления входного параметра, а на новой строке напечатайте следующее:
Vars: FastMA(0), {Значение быстрой скользящей средней} SlowMA(0); {Значение медленной скользящей средней}
Переменная – это временно используемая ячейка памяти, где хранится информация, необходимая для работы программы. Число в скобках – начальное значение переменной, значение в начале работы программы, то есть значение на первом баре (когда ничего вычслить еще невозможно). Далее значение переменной по необходимости будет меняться вместе с тем, как программа будет перерасчитывать каждый бар.
Таким образом, после первого шага на экране редактора скриптов будет следующее:
Создание основного кода. На этом шаге мы создадим основной код программы. Сначала мы вычисляем короткую скользящую среднюю и дилнную скользящую среднюю, то есть присваиваем переменным FastMA и SlowMA значения. Поскольку в языке Trading Language есть большое количество готовых фунций, т.е. готовых формул, вам не нужно каждый раз писать в коде огромные формулы, достаточно заменить их готовой функцией. В данном случае мы будем использовать функцию AverageFC.
С помощью данной функции мы находим значение скользящей средней с периодом, равным значению параметра PeriodFast. То же самое вычисляем при помощи параметра PeriodSlow.
У функции AverageFC есть два параметра, которые мы можем менять - что использовать для рассчета - каков период рассчета В общем случае они выглядят они так:
AverageFC(Что_испорльзовать_для_расчета, какой_период расчета)
Какие параметры можно менять в каждой конкретной функции описано в в разделе хелпа по данной функции. Например, по AverageFC. Использование параметров при вычислениях позволяет сделать наш код более гибким для корректировок.
Вычисление двух скользящих в коде происходит следующим образом:
FastMA = AverageFC(Close, PeriodFast); SlowMA = AverageFC(Close, PeriodSlow);
Далее используем условный оператор If…Then. Как мы уже говорили, длинную позицию (позицию на покупку) следует открыть в том случае, если линия быстрой скользящей средней пересекает снизу вверх (на английском языке это звучит как «crosses above») линию медленной скользящей средней. Это говорит о начале восходящего тренда. Здесь нам поможет конструкция языка Trading Language Crosses Above. Вы можете сами видеть, что многие выражения языка Trading Language звучат аналогично фразам на английском языке, что облегчает интуитивное понимание и самостоятельное написание программ. Если обозначенное нами условие (пересечение снизу вверх) выполнено, то необходимо купить по цене закрытия текущего бара. Здесь используется зарезервированное слово Buy. Таким образом, констукция, которая подает сигнал на покупку:
If FastMA Crosses Above SlowMA Then Buy ("MOS") This Bar On Close;
что означает:
Если FastMA Пересекает Снизу_вверх SlowMA Тогда Купить ("MOS") На_этом Баре На Закрытии;
Слово в скобках (“MOS”) позволяет отобразить рядом со стрелочкой сигнала (когда он уже применен на графике) буквы MOS (MyOpenSignal) – название сигнала, что позволяет отделить затем на графике сделки, открытые именно этим сигналом.
После того, как Вы набрали весь код программы, нажмите на иконку на панели инструментов или нажмите комбинацию клавиш Ctrl+F7 для того, чтобы скомпилировать скрипт. По окончании создания сигнала на экране редактора скриптов должно быть следующее:
Текст сигнала имеет следующий вид (Вы можете его скопировать его из хелпа в окно редактора скриптов):
Inputs: PeriodFast(5), {Период для расчета быстрой скользящей средней} PeriodSlow(15); {Период для расчета медленной скользящей средней}
Vars: FastMA(0), {Значение быстрой скользящей средней} SlowMA(0); {Значение медленной скользящей средней}
FastMA = AverageFC(Close, PeriodFast); SlowMA = AverageFC(Close, PeriodSlow);
If FastMA Crosses Above SlowMA Then Buy ("MOS") This Bar On Close;
Если бы вы писали сигнал для открытия короткой позиции (позиции на продажу) вы бы использовали зарезервированное слово Sell вместо Buy.
На жестком диске сигнал сохраняется в виде файла *.stl в папке C:\Program Files\Trading Desk VPro\SCRIPTS.
Сигнал на закрытие позиции. Сигнал на закрытие позиции очень похож на сигнал открытия. На уровне кода разница между ними проявляется только лишь в условии, по которому будет закрыта позиция. Создадим новый сигнал с названием MyCloseSignal, введем такие же параметры, переменные и функции, как и в случае сигнала открытия
Inputs: PeriodFast(5), {Период для расчета быстрой скользящей средней} PeriodSlow(15); {Период для расчета медленной скользящей средней}
Vars: FastMA(0), {Значение быстрой скользящей средней} SlowMA(0); {Значение медленной скользящей средней}
FastMA = AverageFC(Close, PeriodFast); SlowMA = AverageFC(Close, PeriodSlow);
Перейдем к рассмотрению данного условного оператора.
Для закрытия длинной позиции (то есть фактически продажи, поскольку длинная позиция была покупкой) необходимо, чтобы медленная скользящая средняя пересекла сверху вниз (на английском языке это звучит как «crosses below») быструю скользящую среднюю. Для этого используется конструкция языка Trading Language Crosses Below. При выполнении данного условия (пересечение сверху вниз) нужно закрыть позицию по цене Close текущего бара, для чего используется зарезервированное слово ExitLong:
If SlowMA Crosses Below FastMA Then ExitLong This Bar On Close;
что означает:
Если SlowMA Пересекает Сверху_вверх SlowMA Тогда Выйти_из_длинной На_этом Баре На Закрытии;
После того, как Вы набрали весь код программы, нажмите на иконку на панели инструментов или нажмите комбинацию клавиш Ctrl+F7 для того, чтобы скомпилировать скрипт. По окончании создания сигнала на экране редактора скриптов должно быть следующее:
Для закрытия короткой позиции (позицию на продажу) используется слово ExitShort.
При создании собственной стратегии созданные сигналы будут доступны для выбора.
Из созданных самостоятельно сигналов или прилагаемых к Trading Desk VPro сигналов формируются стратегии. Вместе с Trading Desk VPro поставляются готовые стратегии. Создание собственной стратегии описано здесь. |