Визуализация тестирования. Графики состояния счета.

Andrey Khatimlianskii | 6 июля, 2007

Введение

Думаю, не только у меня при тестировании в режиме визуализации возникало желание видеть информацию о состоянии счета в более информативном виде.
Сколько было свободной маржи перед открытием последней позиции? Куда "смотрит" кривая баланса? Насколько большие просадки по эквити были за последние сутки?

На некоторые из этих вопросов пытаются ответить статья Визуализация тестирования. Расширение функциональности.. Но и в ней нет инструмента, позволяющего просматривать информацию по счету легко и быстро. В этой статье будут рассмотрены программные средства, реализующие графики состояния счета при тестировании в режиме визуализации. В качестве примера будут рассмотрены графики Баланса и Эквити. Также будут даны инструкции по созданию графиков некоторых других показателей счета.



Это просто?

Казалось бы, что может быть проще написания индикатора, отображающего Баланс? Единственный буфер заполняется по мере появления баров последним известным значением Баланса. Вот и весь алгоритм.
Но есть одна проблема: индикатор, отображаемый на графике визуализации тестирования, не имеет доступа к состоянию тестируемого счета. Все функции, отвечающие за эту информацию, возвращают значения реального счета.
Именно эту "особенность" мы и научимся обходить. Для этого необходимо:

Для передачи актуальных данных мы будем использовать Глобальные переменные терминала, а для их отображения - стандартные функции пользовательских индикаторов.



Это просто!

В эксперта, который будет тестироваться, необходимо добавить код сохранения значения Баланса в Глобальную переменную. Достаточно одной строки в начале функции start():

int start()
{
   // сохранение последнего значения баланса в гл. переменную
   GlobalVariableSet( "vGrafBalance", AccountBalance() );
 
   // код эксперта
 
   return(0);
}

Код индикатора будет не намного сложнее:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
 
double balance[];
 
int init()
{
    IndicatorShortName( "vGrafBalance" );
    IndicatorDigits( 2 );
 
    SetIndexStyle( 0, DRAW_LINE );
    SetIndexBuffer( 0, balance );
    SetIndexLabel( 0, "Balance" );
}
int start()
{
    balance[0] = GlobalVariableGet( "vGrafBalance" );
    return(0);
}

Все! Можно компилировать индикатор, новую версию эксперта и приступать к тестированию!

После нажатия кнопки Старт и прикрепления к графику индикатора, можно увидеть примерно следующее:



Как видите, кривая баланса отображает реальное развитие ситуации - при закрытии каждой сделки ее значение меняется.



А можно еще?

Все остальные графики делаются абсолютно аналогично:

Обратите внимание, что имя переменной для каждой характеристики должно быть уникальное, то есть не совпадать с именами других переменных.
Кроме того, оно должно совпадать с именем переменной, считываемой индикатором.


Второй пример показывает, как добавить к графику Баланса график Эквити.
Код эксперта:

int start()
{
   // сохранение последнего значения баланса в гл. переменную
   GlobalVariableSet( "vGrafBalance", AccountBalance() );
   // сохранение последнего значения эквити в гл. переменную
   GlobalVariableSet( "vGrafEquity", AccountEquity() );
 
   // код эксперта
 
   return(0);
}

Код индикатора:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
 
double equity[];
 
int init()
{
    IndicatorShortName( "vGrafEquity" );
    IndicatorDigits( 2 );
 
    SetIndexStyle( 0, DRAW_LINE );
    SetIndexBuffer( 0, equity );
    SetIndexLabel( 0, "Equity" );
}
int start()
{
    equity[0] = GlobalVariableGet( "vGrafEquity" );
    return(0);
}

Пример использования:




Можно наложить один индикатор на другой, тогда будет видно соотношение двух характеристик:




Заключение

В статье был описан процесс создания индикаторов, отображающих состояние счета. Были рассмотрены простейшие индикаторы - индикаторы Баланса и Эквити.
При желании вы можете создать любые другие графики: % прибыльных сделок, Математическое ожидание выигрыша, Средний лот или Прибыль позиции в пунктах - доступно все.

Информация может выглядеть красиво!