Считаем фактор восстановления RECOVERI FACTOR

 
// (C)YURAZ 2008

// 1-необходимо найти самого большого лося

// 2-необходимо вычислить ФВ

double BegBalanc=10000;

void start()

{

double maxloss = getMaxLoss( );

double FR = AccountBalance() - BegBalanc / MathAbs(maxloss);

Comment("FR="+FR);

}


//
// ищем сильнейшего лося
//
double getMaxLoss( )
{
int i;
i = 0; 

while ( true )
{
if ( OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true )
{ 
if ( OrderProfit() < 0 && OrderProfit() <= _MaxLoss )

_MaxLoss = OrderProfit() ;

if ( OrderType() == 6 )

BegBalanc = OrderProfit(); // поднимем из истории счета баланс

i++;
} 
else
break;
}


if ( IsTesting() == true && i == 0)
{
_StartBalance = AccountBalance(); // если еще нет ордеров в истории и тестирование - то баланс взять просто
}

return( MaxLoss ) ; 
}

https://championship.mql5.com/2012/ru/news/

 

проблема нет усреднения ФВ

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

( что не показывает среднее значение которое будет наверно более качественным показателем ТС )

наверно логично усреднить сие значение

делаем просто

необходимо бежать по истории

считать - суммировать ФВ затем делить на количество операций при которых происходит изменения ФВ

 
YuraZ писал (а) >>

проблема нет усреднения ФВ

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

( что не показывает среднее значение которое будет наверно более качественным показателем ТС )

наверно логично усреднить сие значение

делаем просто

необходимо бежать по истории

считать - суммировать ФВ затем делить на количество операций при которых происходит изменения ФВ

Зачем? Правда, не знаю как народ, а меня интересует только финальное значение в конце промежутка тестирования.

Промежуточные значения не столь информативны.


Хмм, пересмотрел еще раз, появилось два вопроса.

1. У меня дикое подозрение, что код с вычислением ВФ ничего общего не имеет.

2. Зачем напрягаться, если по прогону тестера мы получаем прибыль и макс. просадку и остается лишь поделить одно на другое?

 
TheXpert писал (а) >>

Зачем? Правда, не знаю как народ, а меня интересует только финальное значение в конце промежутка тестирования.

Промежуточные значения не столь информативны.


Хмм, пересмотрел еще раз, появилось два вопроса.

1. У меня дикое подозрение, что код с вычислением ВФ ничего общего не имеет.

2. Зачем напрягаться, если по прогону тестера мы получаем прибыль и макс. просадку и остается лишь поделить одно на другое?

я хотел среднее получить на самом деле...

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

у меня тоже подозрение что мах просадка не есть мах лос :-)

 

Интересно наблюдать за ФВ в режиме реального времени. В тестере прогнать например.

Вот такой код, думаю правильно. Просадка через эквити считается. Начальный депозит нужно задать или вынести во внешнюю переменную.

int start()
{
 static double maxprofit=0.0,maxloss=0.0;
 double rf;
 
 if (IsVisualMode())
 {
  if (maxprofit<AccountEquity()) maxprofit=AccountEquity();
  if (maxloss<(maxprofit-AccountEquity())) maxloss=maxprofit-AccountEquity();
  if (maxloss>0) rf=(AccountEquity()-10000)/maxloss;
  GlobalVariableSet("value1",rf);
  //GlobalVariableSet("value2",rf);
 }
 //ваш код
}
Когда начнется тестирование, набросить на график визуализации этот индикатор...
Файлы:
 
Xupypr:

Интересно наблюдать за ФВ в режиме реального времени. В тестере прогнать например.

Вот такой код, думаю правильно. Просадка через эквити считается. Начальный депозит нужно задать или вынести во внешнюю переменную.

Когда начнется тестирование, набросить на график визуализации этот индикатор...

Если считать так как Вы предлогаете, то ВФ зависит от первоначальной суммме на балансе. Тогда как везде идет речь о профите/на макс. просадку. или я не прав?
 
001:

Если считать так как Вы предлогаете, то ВФ зависит от первоначальной суммме на балансе. Тогда как везде идет речь о профите/на макс. просадку. или я не прав?

rf=(AccountEquity()-10000)/maxloss;

ФВ=(Текущие средства - Первоначальный баланс)/Максимальная просадка

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