Мелочь, но все же неточность. (ошибка в тестере при подсчете общей прибыли в отчете)

 

Прогонял в тестере систему1 и систему2 по отдельности. Получил прибыль $161.91 и $137.86 соответственно.

Затем прогнал систему3 (объединены вышеназванные две системы). Получил прибыль $299.76


Постоянно получается при различных входных параметрах систем разница в один цент: $161.91 + $137.86 = $299.77

 
getch:

Прогонял в тестере систему1 и систему2 по отдельности. Получил прибыль $161.91 и $137.86 соответственно.

Затем прогнал систему3 (объединены вышеназванные две системы). Получил прибыль $299.76


Постоянно получается при различных входных параметрах систем разница в один цент: $161.91 + $137.86 = $299.77

Результаты округления, например свопы не кратны целым числам, т.е. чистым пипсам, т.ч. ничего удивительного.
 
Да, дело в округлении-нормализации. Свопы не при чем только. Система3 = Система1 + Система2 абсолютно точно по всем сделкам. И прибыли совпадают по каждой сделке. Но суммарно куда-то пропадает-появляется этот цент.
 

Ну, - один цент, - это ещё по божески! У меня вот в аналогичной ситуации (эксперт работает по ценам открытия) получается при обьединении расхождение в 10%, разумеется, - в худшую сторону....

 
getch:
Да, дело в округлении-нормализации. Свопы не при чем только. Система3 = Система1 + Система2 абсолютно точно по всем сделкам. И прибыли совпадают по каждой сделке. Но суммарно куда-то пропадает-появляется этот цент.

Теоретически может быть так:
1-ая система с результатом aaa.004 округляется до aaa.00
2-ая система с результатом bbb.003 округляется до bbb.00

Их сумма с результатом aaa.004 + bbb.003 = ccc.007 округляется до ccc.01
 
Теоретически такой вариант вполне может быть. Но в данном случае не подходит. В первой системе 100 сделок по 0.1 лот каждая. Во второй 200 сделок по 0.1 лот каждая. В третьей системе 300 (100 + 200) сделок по 0.1 лот каждая, полностью повторяющих сделки первой и второй систем. В третьей системе первая и вторая не зависят друг от друга.
 
getch:
Теоретически такой вариант вполне может быть. Но в данном случае не подходит.

Почему не подходит? Аргументируйте, пожалуйста. Свопы накапливаются?
 
// Подсчет текущей общей прибыли
double ProfitExact()
{  
  static double pe_Profit = 0;
  static double pe_Balance = 0;
  double pe_Temp;
  
  if (pe_Balance == 0)
    pe_Balance = AccountBalance();
 
  if (NormalizeDouble(pe_Balance - AccountBalance(), 2) != 0)
  {
    pe_Temp = NormalizeDouble(AccountBalance() - pe_Balance, 2);
    
//    Print("Temp = " + DoubleToStr(pe_Temp, 2));
    pe_Profit = NormalizeDouble(pe_Profit + pe_Temp, 2);
    pe_Balance = AccountBalance();
  }
  
  return(pe_Profit);
}
 
int deinit()
{
  Print("Profit = " + DoubleToStr(ProfitExact(), 2));
 
// ... тело советника ...
}
 
int start()
{
  ProfitExact();
 
// ... тело советника ...
}

Билд 211 от 27-го февраля.

Таким верным способом подсчитанная общая прибыль отличается в большом количестве случаев от значения общей прибыли в отчете тестера.

У меня отличия в 1-2 цента. Тестировал USDJPY на всех тиках M1 постоянным лотом 0.1

 
Тут нужно еще один момент принимать во внимание. Допустим, при тестировании кроссов на долларовом депозите один и тот же тест может приводить к разным значениям, так как перевод стоимости кросса в доллары требует последнего значения котировки по прямым парам. А ведь это значение со временем меняется. И чем больше будет временной промежуток между тестами, тем больше будет расхождение.
 
Хорошее замечание... Но данное расхождение присутствует на долларовом депозите с торговлей только на мажоре USDJPY.
 
getch:
Хорошее замечание... Но данное расхождение присутствует на долларовом депозите с торговлей только на мажоре USDJPY.

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