На рассмотрение профессионалов.

 

Зашла речь о максимальной просадке. Кое кем было высказано мнение, что тестер её меряет неправильно. Решил проверить. Написал код, включил его в советник и прогнал в тестовом режиме. Результат с тестером совпал. Код выложен ниже.---

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

double MaxDrawDown;
int deinit() {
 Print("MaxDrawDown=",MaxDrawDown);
   return (0);
} 

start(){ 
  static double MaxEquity;
  static double MinEquity;
         double DrawDown;
  static bool flag;
 
  if(!flag)
    {
     MaxEquity=AccountEquity();
     MinEquity=AccountEquity();
     flag = true;
    } 
  if(AccountEquity()>MaxEquity) 
    {MaxEquity=AccountEquity();MinEquity=AccountEquity();}
  
  if(AccountEquity()<MinEquity) 
    {MinEquity=AccountEquity();}
  
  DrawDown=MaxEquity-MinEquity;
  
  if(DrawDown>MaxDrawDown ) 
    {MaxDrawDown=DrawDown;}
// ............остальной код советника
 

Собсно что значит не вычисляя ? во время прогона у вас случился и максимум и минимум...

Логика тестера один в один. проблема что в онлайне Вы таким образом просадку не узнаете - вычислять таки придется.

 
FAQ:

Собсно что значит не вычисляя ? во время прогона у вас случился и максимум и минимум...

Логика тестера один в один. проблема что в онлайне Вы таким образом просадку не узнаете - вычислять таки придется.

Вопрос по максимумам и минимумам возник в связи с постом OnGoing, который удивился для чего какие-то максимумы и минимумы. Вот я и подумал, что может существует какой-то другой способ вычисления максимальной просадки, без максимумов и минимумов.? Т.е. в принципе расчёт правильный? А какие в онлайне проблемы возникнут? Можете пояснить почему этот способ не будет работать? Может вы имеете ввиду, что будут проблемы, если будет несколько советников и нельзя будет определять для каждого с таким кодом. Если Вы имели ввиду это, то понятно. Или что-то другое?

 
Потому что по истории (ордерам) вы сможете восстановить только кривую баланса, а вот кривую эквити вам придется синтезировать исходя из количества открытых в каждый момент ордеров, залога по каждому ордеру (валюта) и максимумов \ минимумов цены.
 
FAQ:
Потому что по истории (ордерам) вы сможете восстановить только кривую баланса, а вот кривую эквити вам придется синтезировать исходя из количества открытых в каждый момент ордеров, залога по каждому ордеру (валюта) и максимумов \ минимумов цены.

Если мы только запустили советник и истории ещё нет, разве мы не можем вычислять максимумы и минимумы эквити храня их в глобальных переменных и вычислять текущую и максимальную на данный момент просадку? Или я что-то недопонимаю? Или Вы рассматриваете ситуацию, когда есть уже какая-то история. А вы хотите, к примеру запустив скрипт, вычислить максимальную просадку с учётом истории ордеров? Тогда понятно. Но если мы только начали работать и истории нет или есть, но мы хотим вычислять просадку с момента запуска советника с этим кодом. то разве может что-то помешать?

 
khorosh:

Если мы только запустили советник и истории ещё нет, разве мы не можем вычислять максимумы и минимумы эквити храня их в глобальных переменных и вычислять текущую и максимальную на данный момент просадку? Или я что-то недопонимаю? Или Вы рассматриваете ситуацию, когда есть уже какая-то история. А вы хотите, к примеру запустив скрипт, вычислить максимальную просадку с учётом истории ордеров? Тогда понятно. Но если мы только начали работать и истории нет или есть, но мы хотим вычислять просадку с момента запуска советника с этим кодом. то разве может что-то помешать?


Проще считать показания индикатора эквити от Хирурга, нежели что-то хранить в каких-то переменных.
 
Reshetov:
Проще считать показания индикатора эквити от Хирурга, нежели что-то хранить в каких-то переменных.
Согласен, код был предназначен для прогона в тестере, меня лишь интересовало правильно ли я считаю в принципе, а то OnGoing зародил во мне сомнения.
 
Integer:

Не парьтесь, он здесь много чего не в тему высмеивал, и даже не в тему, а совсем мимо.
Спасибо за поддержку, а то у меня тут возникли сомнения, что я что то недопонимаю.
 
khorosh:

Зашла речь о максимальной просадке. Кое кем было высказано мнение, что тестер её меряет неправильно.

Тестер-то меряет максимальную просадку эквити правильно, только он не учитывает состояние баланса в этот момент что превращает это измерение в бессмыслицу.

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

 
khorosh:
Спасибо за поддержку, а то у меня тут возникли сомнения, что я что то недопонимаю.


Вообще максимальная просадка это не разница максимального и минимального эквити. На старте МаксЭквити=Эквити, МинЭквити=Эквити, Просадка=0. В процессе работы: если Еквити>МаксЭквити, то считаем просадку как МаксЭквити-МинЭквити, если полученное значение больше зафикисрованой ранее просадки, то запоминаем большее значение, тут же делаем сброс минимума - МинЭквити=МаксЭквити и запоминаем новый максимум МаксЕквити=Эквити.
 

Красными линиями показаны просадки, нужно найти максимальную.

Причина обращения: