Дилинговый центр Forex Euroclub • Программа для Forex | Форекс - TradingDesk Pro 5

Пример использования отладчика скриптов Содержание  Предыдущая  Следующая


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

 

Для иллюстрации создадим следующие функции:

EMA_Buy - показывает, присутствует ли сигнал на покупку, генерируемый экспоненциальной скользящей средней;

EMA_Sell - показывает, присутствует ли сигнал на продажу, генерируемый экспоненциальной скользящей средней.

 

Функция EMA_Buy

 

Inputs: Price(NumericSeries), Length(Numeric);

Variables: ShowPrice(0), CurrentEMA(0);

 

 

       ShowPrice = Price;

       CurrentEMA = XAverage(Price, Length);

 

       If ShowPrice > CurrentEMA Then

               EMA_Buy = True

       Else

               EMA_Buy = False;

 

Функция EMA_Sell

 

Inputs: Price(NumericSeries), Length(Numeric);

Variables: ShowPrice(0), CurrentEMA(0);

 

       ShowPrice = Price;

       CurrentEMA = XAverage(Price, Length);

 

       If ShowPrice < CurrentEMA Then

               EMA_Sell = True;

 

Входными параметрами для обеих этих функций будут являться Price (цена, используемая для расчета скользящей средней) и Length (период, используемый для расчета скользящей средней).

 

Далее создадим сигнал DebugSignal, который будет осуществлять покупку и продажу на основе значений функций EMA_Buy и EMA_Sell:

 

Inputs: Price(Close), Length(13);

Variables: EMA_Buy_Value(False), EMA_Sell_Value(False);

 

EMA_Buy_Value = EMA_Buy(Price, Length);

EMA_Sell_Value = EMA_Sell(Price, Length);

 

If EMA_Buy_Value Then Buy Next Bar At Market;

If EMA_Sell_Value Then Sell Next Bar At Market;

 

Данный сигнал действует следующим образом: если функция EMA_Buy вернула логическое значение True, значит, имеет место сигнал к покупке, и открывается соответствующая сделка;  если функция EMA_Sell вернула логическое значение True, значит, имеет место сигнал к продаже, и открывается соответствующая сделка.

 

Далее создадим стратегию DebugStrategy, куда добавим созданный нами сигнал.

 

DDImage_debug21

 

 

Применим стратегию DebugStrategy к графику и получим следующий результат:

 

DDImage_debug24

 

Очевидно, что имеет место какая-то ошибка, из-за которой все сделки мгновенно закрываются. Чтобы разобраться в проблеме применим созданную стратегию к графику, отметив пункт «Отладка», чтобы запустить отладчик скриптов.

 

DDImage_debug22

 

Откроется окно отладчика скриптов.

 

DDImage_debug23

 

 

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

 

По нажатию кнопки «Войти в функцию» мы попадаем в код функции EMA_Buy. На первом баре значения цены закрытия (переменная ShowPrice) и скользящей средней (переменная CurrentEMA) совпадают.

 

DDImage_debug25

 

Следовательно, функция EMA_Buy получает значение False. Функция EMA_Sell также получит значение False. Следовательно, на первом баре в сигнале DebugSignal переменные EMA_Buy_Value и EMA_Sell_Value имеют значения False.

 

DDImage_debug26

 

На втором баре цена закрытия (переменная ShowPrice) опускается ниже скользящей средней (переменная CurrentEMA).

 

DDImage_debug27

 

Тогда функция EMA_Buy получает значение False. Функция EMA_Sell получит значение True. Имеем, что на втором баре в сигнале DebugSignal переменная EMA_Buy_Value имеет значение False, а переменная EMA_Sell_Value имеет значения True. И на следующем баре открывается сделка на продажу.

 

DDImage_debug28

 

На третьем баре цена закрытия (переменная ShowPrice) поднимается выше скользящей средней (переменная CurrentEMA).

 

DDImage_debug29

 

Тогда функция EMA_Buy получает значение True. Переменная EMA_Buy_Value также получает значение True. Функция EMA_Sell получает значение False. Но по завершении работы этой функции мы видим, что параметр EMA_Sell_Value продолжает равняться True.

 

DDImage_debug30

 

Тогда происходит следующая ситуация: поскольку переменная  EMA_Buy_Value имеет значение True, то на следующем баре открывается сделка на покупку. Но поскольку переменная EMA_Sell_Value также имеет значение True, то на следующем баре открывается сделка на продажу. И мы получим ряд постоянно открывающихся и закрывающихся сделок.

 

Очевидно, что проблема состоит в присвоении переменным EMA_Buy_Value и  EMA_Sell_Value значений False, если проверка условий в функциях EMA_Buy и EMA_Sell соответственно не прошла.

 

Для устранения данной ошибки, изменим код функций EMA_Buy и EMA_Sell следующим образом (жирным выделены изменения):

 

Функция EMA_Buy

 

Inputs: Price(NumericSeries), Length(Numeric);

Variables: ShowPrice(0), CurrentEMA(0);

 

 

       ShowPrice = Price;

       CurrentEMA = XAverage(Price, Length);

 

       If ShowPrice > CurrentEMA Then

               EMA_Buy = True

       Else

               EMA_Buy = False;

 

Функция EMA_Sell

 

Inputs: Price(NumericSeries), Length(Numeric);

Variables: ShowPrice(0), CurrentEMA(0);

 

       ShowPrice = Price;

       CurrentEMA = XAverage(Price, Length);

 

       If ShowPrice < CurrentEMA Then

               EMA_Sell = True

       Else

               EMA_Sell = False;

 

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

 

Видим, что теперь переменная EMA_Buy_Value получила значение True, а значение переменной  EMA_Sell_Value изменилось на False. Таким образом, произойдет логичное закрытие короткой позиции.

 

 

DDImage_debug31

 

Применив стратегию Debug_Strategy к графику в обычном режиме, можно видеть сделки на графике, а также просмотреть отчет о доходности данной стратегии.

 

DDImage_debug32

 

 

DDImage_debug33

 

 

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