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

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


Этот (мой) код именно сохраняет максимальную просадку за всё время работы советника, т.е. в нем нет сброса переменных max и min при закрытии сделки (сделок), когда эквити равно балансу и нет min за всё время.

Написал его чисто для примера и попроще(для понятности) - как сравнение с тестером.

Насчет вашего кода не понятно зачем использовать здесь:

  if(AccountEquity()>MaxEquity) 
    {MaxEquity=AccountEquity();MinEquity=AccountEquity();}

сбрасывается MinEquity

MinEquity=AccountEquity();

Если например в ситуации когда AccountEquity()>MaxEquity отсутствует возможность закрыть или открыть ордер (ордера), по разным причинам, тем более не надо сбрасывать MinEquity=AccountEquity();

Вообще одно и то-же можно многими способами по разному запрограммить - главное правильный алгоритм.

Если в реальный советник вставлять - лучше записывать переменные в файлы (с проверкой).

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

 
serferrer:


Этот (мой) код именно сохраняет максимальную просадку за всё время работы советника, т.е. в нем нет сброса переменных max и min при закрытии сделки (сделок), когда эквити равно балансу и нет min за всё время.

Написал его чисто для примера и попроще(для понятности) - как сравнение с тестером.

Насчет вашего кода не понятно зачем использовать здесь:

сбрасывается MinEquity

Если например в ситуации когда AccountEquity()>MaxEquity отсутствует возможность закрыть или открыть ордер (ордера), по разным причинам, тем более не надо сбрасывать MinEquity=AccountEquity();

Вообще одно и то-же можно многими способами по разному запрограммить - главное правильный алгоритм.

Если в реальный советник вставлять - лучше записывать переменные в файлы (с проверкой).

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

MinEquity сбрасывается в момент, когда обновляется новый максимум, что свидетельствует, что предыдущий минимум пройден и после образования нового максимума нужно будет искать новый минимум могущий дать относительно нового максимума просадку большую, чем найденная ранее. Здесь надо иметь ввиду, что мы должны вычислять просадку относительно последнего максимума по минимуму образовавшемуся после этого максимума и отбирать среди них максимальную. Смотрите подтверждение в постах Integer, который также считает, что это правильно. Думаю, что именно по этой причине у вас есть расхождение с тестером.

 
serferrer, ваш вариант покажет неправильную просадку, в случае череды убыточных оредеров. Можно получить подряд 10 убыточных ордеров с убытком каждого по 100 и слить 1000, а максимальная просадка при этом будет только 100, это неправильно.
 
Integer:
serferrer, ваш вариант покажет неправильную просадку, в случае череды убыточных оредеров. Можно получить подряд 10 убыточных ордеров с убытком каждого по 100 и слить 1000, а максимальная просадка при этом будет только 100, это неправильно.


Повторяюсь - Написал его чисто для примера и попроще(для понятности) - как сравнение с тестером.

И он никак не окончательный.

Если делать окончательный код - нужно добавить туда многие другие возможности.

 
serferrer:


Повторяюсь - Написал его чисто для примера и попроще(для понятности) - как сравнение с тестером.

И он никак не окончательный.

Если делать окончательный код - нужно добавить туда многие другие возможности.


Для примера чего и срвнения с чем в тестере? Ваш код не считает просадку на счете, и не может использоваться как пример для расчета просадки счета и поэтому не может использоваться для сравнения расчетов просадки счета в тестере.
 
khorosh:

MinEquity сбрасывается в момент, когда обновляется новый максимум, что свидетельствует, что предыдущий минимум пройден и после образования нового максимума нужно будет искать новый минимум могущий дать относительно нового максимума просадку большую, чем найденная ранее. Здесь надо иметь ввиду, что мы должны вычислять просадку относительно последнего максимума по минимуму образовавшемуся после этого максимума и отбирать среди них максимальную. Смотрите подтверждение в постах Integer, который также считает, что это правильно. Думаю, что именно по этой причине у вас есть расхождение с тестером.


Это ваше мнение, я его понял, сам считаю что это не верно и просадку нужно считать от цены открытого ордера (ордеров), а не от максимума эквити, повторюсь:

Если например в ситуации когда AccountEquity()>MaxEquity отсутствует возможность закрыть или открыть ордер (ордера), по разным причинам.

 
Integer:

Для примера чего и срвнения с чем в тестера? Ваш код не считает просадку на счете, и не может использоваться как пример для расчета просадки счета и поэтому не может использоваться для сравнения расчетов просадки счета в тестере.


Для сравнения и наглядного примера, чтоб было понятней даже не программистам что тестер считает не верно.

Absolute Drawdown - просадка от начального баланса, показывающая, насколько уменьшался баланс относительно первоначального значения;
Maximal Drawdown - денежная просадка, показывающая максимальную зафиксированную просадку в денежном выражении (перепад между последним максимумом и текущим минимумом); может превышать Absolute Drawdown, показывая величину возможного убытка даже если торговля ведется положительно;
Relative Drawdown - относительная просадка, показывает максимальную просадку в процентах относительно начального депозита;

http://www.onix-trade.net/forum/index.php?showtopic=82146&st=0&p=342915&#entry342915

Integer:

Вы согласны что в моем примере - Максимальная просадка 1013.00 (50.85%) Относительная просадка 50.85% (1013.00) и это правильно?

 
serferrer:


Для сравнения и наглядного примера, чтоб было понятней даже не программистам что тестер считает не верно.

Absolute Drawdown - просадка от начального баланса, показывающая, насколько уменьшался баланс относительно первоначального значения;
Maximal Drawdown - денежная просадка, показывающая максимальную зафиксированную просадку в денежном выражении (перепад между последним максимумом и текущим минимумом); может превышать Absolute Drawdown, показывая величину возможного убытка даже если торговля ведется положительно;
Relative Drawdown - относительная просадка, показывает максимальную просадку в процентах относительно начального депозита;

http://www.onix-trade.net/forum/index.php?showtopic=82146&st=0&p=342915&#entry342915

Integer:

Вы согласны что в моем примере - Максимальная просадка 1013.00 (50.85%) Относительная просадка 50.85% (1013.00) и это правильно?


Нет, с вами я совсем и ни в чем не согласен.
 
khorosh:

Поясните, где вы встречали такой параметр как минимальная просадка, в каком отчёте. Считаю, что максимальное падение эквити, найденное при прогоне теста, может повториться при реальной торговле, поэтому считаю правильным отсчитывать его от максимума.

Про минимальную просадку пардон опечатка. Пост исправил. Ну а почему нет никакого смысла считать максимальное падение эквити на открытом ордере находящемся в свободном полете - вроде вполне доступно объяснил.
 
Reshetov:

Ну если Вам это не нужно или Вы не понимаете для чего это нужно, зачем встревать в разговор, да еще и свое мнение навязывать?
Читайте внимательней. Я спросил зачем это нужно другим, не себе. Свое мнение не навязываю, лишь объяснил логику.
Причина обращения: