Помогите разобратся почему не совпадает Maximal Drawdown в тестере (разница $6..)

 

Написал тему на EN forum но там пока еще никто не принял близко к серцу а тема по моему интересная так что перенесу и сюда:

В кратце проблема вот в чем:

Написал EA с целью подтвердить что понимаю и могу посчитать Maximal Drawdown (тот что в тестерском табе "Reports" ) и сам.

Черта с два.

Кто-то врет - или я или Tester. Я конечно, как всегда уверен что не я, но к сожалению опыт показывает друоге.

Так помогите пожалуйста разобратся... Вот тема в Англ. форуме, там код и картинки https://www.mql5.com/en/forum/149185

А вот и примерный рассчет МахDD

  • AccountCurrency = USD
  • Initial Deposit = 10,000
  • Symbol = EURUSD
  • LOTSIZE = 100,000
  • Operation = BUY
  • Lots = 0.1
  • Prc_Open = 1.37602
  • Prc_dd_t0 = Ask Price at local Max (upper left corner of the Yell. rectangle) = 1.37973
  • Prc_dd_tN = Bid Price at local Min (lower right corner of the Yell. rectangle) = 1.37631
  • Prc_Close = 1.37871
.. тоесть
Prc_Open - Цена откр. сделки
Prc_dd_t0 - Лучшая цена в период наибольшего локального DD
Prc_dd_tN - Худшая цена в период наибольшего локального DD

Prc_Close - Цена закр. сделки


Теперь считаем:

-------------------------------

Убыток за период локального DD : DD_money = ( Prc_dd_tN - Prc_dd_t0 ) * Lots * LOTSIZE = $34.20 USD

... теперь, так как Max DD % = DD_money / Equity к моменту t0 * 100 ...

... вычисляю Equity[ t0 ] = Balance + Profit() = 10,000 + ( 1.37973 - 1.37602 ) * 100,000 * 0.1 = 10,037.10

Таким образом Max DD % = 34.20 / 10,037.10 * 100 = 0.0034 = 0.34%

-------------------------------

Tester же говорит что Maximal Drawdown . . 40.80 (0.41%)

... a у меня (вверху) получается . . . . . . . . . . . 34.20 (0.34%)

-------------------------------

... и ни как не пойму откуда разница, вроде все правильно просчитал... Помогит пожалуйста, а то уже ум за разум заходит....

 
Решение вашего вопроса можете посмотреть здесь.
 

khorosh, не могу не согласится с вашим ответом seferer-у:

khorosh:

Цель вашего поста - показать как правильно считать просадку или показать, что тестер неправильно считает просадку? Дайте пожалуйста развернутый ответ, не будьте так лаконичны, здесь не все профессионалы. Спасибо за советник.

т.е., спасибо конечно за ссылку, чтиво бесспорно интересное но так как сроки подпирают а вы явно знакомы с проблемой, то уж пожалуйста дайте и вы "развернутый ответ"? По крайней мере укажите пожалуйста что доказывает статья - в коде ошибка или в тестере?

Я потому спрашиваю, что следить за изменением AccountEquity конечно не сложно но мне нужно рассчитать просадку за период который уже в прошлом так что мне етот метод не подходит...

 
4x4ever: ... но мне нужно рассчитать просадку за период который уже в прошлом так что мне етот метод не подходит...

Тоесть в тестере я код гоняю только для того чтоб научится как правильно считать Max Drawdown ... а в дейсвительности потом код должен будет работать на реале (или demo), изпользуая функции вроде iClose i iBarShift ...
 
4x4ever:

Тоесть в тестере я код гоняю только для того чтоб научится как правильно считать Max Drawdown ... а в дейсвительности потом код должен будет работать на реале (или demo), изпользуая функции вроде iClose i iBarShift ...
Тестер считает правильно и в коде нет ошибки поскольку результаты совпадают. Я дал направление, а уж жевать и глотать извольте сами. Мы с вами контракт не заключали и если вас поджимают какие-то сроки, то это меня никак не касается. Поскольку у меня есть своя работа и свои сроки.
 
...жевать и глотать не просил. "Тестер считает правильно" было вполне достаточно - спасибо, значит читаем дальше... а всю остальную вашу белиберду про контракт и т.д., никоим образом мною кстати не заслуженную, пропускаю мимо ушей, ибо сроки как сказал поджимают и времени на перепалку нет. :)
 

DD_money = ( Prc_dd_tN - Prc_dd_t0 ) * Lots * LOTSIZE = $34.20 USD
Предполагаю, что ошибка у вас закралась вот тут. Я думаю, что вам нужно отследить, чтобы
Prc_dd_tN по оси времени находилось правее, чем Prc_dd_t0. Так как, если худшая цена находится слева, то она демонстрирует рост, а не падение.

Извините, если что не так. Написал первое, что пришло в голову!

 
О чём спор? Тестер фиксирует просадки на истории. А мне нужно даже не сейчас, а когда устанавливаю СЛ в позиции. Потому в Комменте на графике сразу вижу убыток, который получу, если позиция закроется по СЛ. То же самое при доливках, локах и т.п., суммируя, вычитая или умножая. И заранее планируешь, как избегнуть неприятностей!
 
Да! Вот я уточнил:

"Maximal drawdown, максимальная просадка - это максимальная разница между одним из локальных верхних экстремумов графика изменения баланса и последующих нижних экстремумов:

MaximalDrawDown = Max of (Maximal Peak - next Minimal Peak)"
Я был прав в предыдущем комментарии.
 
cichiniov:
Да! Вот я уточнил:

"Maximal drawdown, максимальная просадка - это максимальная разница между одним из локальных верхних экстремумов графика изменения баланса и последующих нижних экстремумов:

MaximalDrawDown = Max of (Maximal Peak - next Minimal Peak)"

Да я понимаю Max_DD именнно так, но возможно что обяснил коряво. ( Prc_dd_tN - Prc_dd_t0 )... у меня всего лишь псевдо-код так сказать и то только для указанного примера BUY.

Я также *АБСОЛЮТНО* уверен что проверяю что Prc_dd_tN по оси времени находится правее, чем Prc_dd_t0 ... видно из логов и видно в визуализации Советника (желтые прямоугольники которые Советник рисует показывают период где произошла Макс Просадка)! Да и простым взглядом на график за период сделки видно что Max. DD произошел именно там где мой советник его показывает.


Тоесть - ошибка, если она у меня есть - не в том как я определяю где случился Max.DD (по времени и ценам). Остается что ошибка в том как я его вычисляю на базе этих данных... ошибки однако не вижу да и вычислить профит/убыль зная стар и стоп цену и колич. лотов не так уж сложно.

Если кто видит ошибку в вычислениях - скажите пожалуйста где. А если момент Максимального DD я определи правильно и убыток в этот период тоже посчитал правильно, то уж прошу покорно извинить но ТЕСТЕР СЧИТАЕТ НЕПРАВИЛЬНО!


 
4x4ever:

Да я понимаю Max_DD именнно так, но возможно что обяснил коряво. ( Prc_dd_tN - Prc_dd_t0 )... у меня всего лишь псевдо-код так сказать и то только для указанного примера BUY.

Я также *АБСОЛЮТНО* уверен что проверяю что Prc_dd_tN по оси времени находится правее, чем Prc_dd_t0 ... видно из логов и видно в визуализации Советника (желтые прямоугольники которые Советник рисует показывают период где произошла Макс Просадка)! Да и простым взглядом на график за период сделки видно что Max. DD произошел именно там где мой советник его показывает.


Тоесть - ошибка, если она у меня есть - не в том как я определяю где случился Max.DD (по времени и ценам). Остается что ошибка в том как я его вычисляю на базе этих данных... ошибки однако не вижу да и вычислить профит/убыль зная стар и стоп цену и колич. лотов не так уж сложно.

Если кто видит ошибку в вычислениях - скажите пожалуйста где. А если момент Максимального DD я определи правильно и убыток в этот период тоже посчитал правильно, то уж

прошу покорно извинить но ТЕСТЕР СЧИТАЕТ НЕПРАВИЛЬНО!

Тестер считает максимальную просадку по эквити, а не по балансу. Если вы считаете по балансу, то ваш результат не совпадёт с результатом тестера.
Причина обращения: