Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
khorosh
10107
khorosh  

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

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

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;}
// ............остальной код советника
Рустам
3623
Рустам  

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

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

khorosh
10107
khorosh  
FAQ:

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

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

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

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

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

Yury Reshetov
13498
Yury Reshetov  
khorosh:

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


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

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

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

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

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

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


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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий