English 中文 Español Deutsch 日本語 Português
Визуализация тестирования. Графики состояния счета.

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

MetaTrader 4Тестер | 6 июля 2007, 08:43
4 231 14
Andrey Khatimlianskii
Andrey Khatimlianskii

Введение

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

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



Это просто?

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

  • получить информацию о состоянии счета из эксперта;
  • передать ее в индикатор и отобразить.

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



Это просто!

В эксперта, который будет тестироваться, необходимо добавить код сохранения значения Баланса в Глобальную переменную. Достаточно одной строки в начале функции 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);
}

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




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




Заключение

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

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

Последние комментарии | Перейти к обсуждению на форуме трейдеров (14)
Yuriy Zaytsev
Yuriy Zaytsev | 24 июл. 2007 в 06:46

Визуализация тестирования!

Шикарная штука

Идеи... это штука сложная

Попов изобрел радио! но есть англичанин опс... вылетело из головы имя... кажется ( Маркони )

Когда говорят о радио все помнят Попова, как изобретателя... порой одни и те же идеи приходят людям паралельно а вспоминают одного

( еще зависит от территории - на западе изобретателем радио считают Маркони)

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

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

Но идея лежащая под сукном мертва! а выпущеная на волю уже общее достояние...

я бы гордился, если бы мои идеи пусть даже в роли Маркони попали бы в общее достояние...

[Удален] | 2 авг. 2007 в 12:05

Не ввязываясь в полемику, типа чисто для инфы...

Согласно закона "Об авторском праве и смежных правах" ст. 6 "Объект авторского права. Общие положения"

пункт 2."Авторское право распространяется как на обнародованные произведения, так и на необнародованные произведения, существующие в какой-либо объективной форме:

- письменной (рукопись, машинопись, нотная запись и так далеее);

- устной (публичное произнесение, публичное исполнение и так далее);

- и так далее.......................................................................................

пункт 4. "Авторское право не распространяется на идеи, методы, процессы, системы, способы, концепции, принципы, открытия, факты."

P.S. Идея сама по себе ничего не стоит с точки зрения авторского права, а вот ее выражение в объективной форме - да, но это уже другая история....

[Удален] | 14 янв. 2009 в 22:38

komposter, спасибо за отличную статью!

P.S .Только ссылка на статью "Визуализация тестирования. История сделок." не работает почему-то.

Andrey Khatimlianskii
Andrey Khatimlianskii | 14 янв. 2009 в 23:39
oranger:

komposter, спасибо за отличную статью!

P.S .Только ссылка на статью "Визуализация тестирования. История сделок." не работает почему-то.

"Историю сделок" я объединил с "Расширением функциональности". Они, по сути, об одном и том же.

А тут исправить забыл ;)

[Удален] | 19 июн. 2013 в 03:19
Что-то никак у меня не получается прикрутить данный индикатор. Может быть, кто-нибудь выложит пример индикатора и советника в формате mql4.
MT4TerminalSync - система синхронизации терминалов MetaTrader 4 MT4TerminalSync - система синхронизации терминалов MetaTrader 4
Данная статья относится к тематике: "Расширение возможностей MQL 4 - программ путем использования функций операционных систем, а также других средств разработки программ". Статья посвящена описанию примера программной системы, реализующей задачу синхронизации нескольких копий терминала на основе одного источника-шаблона.
Технический Анализ: невозможное - возможно! Технический Анализ: невозможное - возможно!
Ответ на вопрос: почему невозможное может быть возможным, когда многое говорит об обратном? Рассуждения о техническом анализе.
Terminal Service Client. Как подружить Pocket PC с большим братом. Terminal Service Client. Как подружить Pocket PC с большим братом.
Подключение к удаленному компьютеру с терминалом МТ4 через КПК.
Взаимодействие между MetaTrader 4 и Matlab посредством CSV-файлов Взаимодействие между MetaTrader 4 и Matlab посредством CSV-файлов
Пошаговые инструкции по организации обмена массивами данных между MetaTrader 4 и Matlab посредством CSV-файлов.