Расчет просадки - страница 2

 
Dmitiry Ananiev:

2000 -100 -100 -100 -1500 -10 -10 -10 30

вот есть такой ряд 

2000 - пополнение счета, -1500 снятие. Сколько просадка в %% ? 

 

.

здесь два участка расчёта просадки.

Каждое пополнение\снятие задаёт начало новому участку расчёта.

 

Расчет fxsabera мне показался самым правильным. 
Набросал скрипт для расчета максимальной просадки. Но что -то ни с одним мониторингом не сходятся цифры. Посмотрите, где я ошибся ? 

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

input int mag=21334;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  OnStart()
  {
   datetime optime=D'05.05.2017';
   double endBal = AccountBalance();
   double curBal = endBal;
   double maxBal = endBal;
   double MaxDD = 0;
   double DD = 0 ;
   double gain = 1;
   double rezDD = 1-gain;

   

   for(int i=OrdersHistoryTotal(); i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderType()==6)
           {
            endBal-=OrderProfit();
            maxBal = endBal;
            curBal = endBal;
            gain = gain*(1-DD);
            DD=0;
            MaxDD=0;
            Print ("new Balance   ","   ",curBal,"   ",maxBal,"  ",endBal,"   ",st5(DD));
           }
         //if(OrderSymbol()==_Symbol && OrderMagicNumber()==mag)
           {
            if(OrderType()<=1)
              {
               if(OrderOpenTime()<optime) break;

               double profit=OrderProfit()+OrderCommission()+OrderSwap();
               curBal-=profit;
               if(curBal>maxBal) maxBal=curBal;
               if(maxBal==0) continue;

               DD=(maxBal-endBal)/maxBal;
               
               Print(OrderTicket(),"   ",profit,"   ",curBal,"   ",maxBal,"  ",endBal,"   ",st5(DD));
               
              }
           }
        }
     }
     rezDD = 1-gain;
     Print("Текущая просадка = ",st2(rezDD*100), " %  ");
  }
string st5(double x) {return DoubleToString(x,5);}
string st2(double x) {return DoubleToString(x,2);}

//+------------------------------------------------------------------+
 
Dmitiry Ananiev:

Набросал скрипт для расчета максимальной просадки. Но что -то ни с одним мониторингом не сходятся цифры. Посмотрите, где я ошибся ? 

У Вас сортировка по CloseTime, а нужно по OpenTime.

 
Dmitiry Ananiev:

2000 -100 -100 -100 -1500 -10 -10 -10 30

вот есть такой ряд 

2000 - пополнение счета, -1500 снятие. Сколько просадка в %% ? 

надо еще знать сколько депозит

например миллиард, ну и снимите 2к

а если доллар, снимаем 2к

надеюсь разница ощутима и говорит о недостающих данных для расчета

 
Иван ! А где ты увидел Close Time? По OpenTime отбор идет. Или ты о чем то другом ?
Renat Akhtyamov:

надо еще знать сколько депозит

например миллиард, ну и снимите 2к

а если доллар, снимаем 2к

надеюсь разница ощутима и говорит о недостающих данных для расчета

Ну так расчет идет от конца к началу. В конце нам остаток денег известен. Вот и записываем все сделки и счиатем. 

Расчет такой. Берем последний баланс и последнюю сделку. Если сделка минусовая, то пишем новый баланс и расчитываем просадку. Запоминаем ее. След сделка если минусовая, то баланс до нее увеличичвается, расчитываем просадку заново иона будет больше предыдущей. Вообщем расчитываем баланс задом наперед и высчитываем просадку на текущий момент. 

Пока писал, разобрался где был неправ. Надо запоминать еще и минимальный баланс тогда будет расчет максимальной просадки. А так получилось что я посчитал текущую просадку. 

 

я когда делал индикатор сбора статистики тоже столкнулся с несовпадением данных с мониторинга сигналов mql5 и своими расчетами.

Долго мучался но надо было сделать 1в1 


В итоге выяснил, что если сделки закрываются в одно и тоже время (сетка, усреднение) по общему стоплоссу, тогда и возникают не стыковки. 

В этом случае расчет сделок происходит по возрастанию тикетов. 

Да и весь перебор делал по сортировке closetime - только таким способом добился идентичностьи. 

Но в итоге - на 1 из 20 счетов все равно не сходятся данные между моим индикатором, статистикой с HTML и сервисом Сигналы.

 

Получается код для текущей просадки. Кто проверит на корректность ? 

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