Как тестер учитывает свопы

 
Исходная задача: получить распределение прибыли по дням недели.
Для решения написал модуль, подключаемый к советнику директивой компилятора include:
//+------------------------------------------------------------------+ //| b-SharingDoW.mqh | //| Ким Игорь В. aka KimIV | //| http://www.kimiv.ru | //| | //| 03.02.2006 Sharing the Deals on Weekdays. | //| Распределение сделок по дням недели. | //| | //| Для использования добавить строки: | //| - вне функций : #include <b-SharingDoW.mqh> | //| - в функции deinit(): WriteDealsInfo(); | //+------------------------------------------------------------------+ //------- Внешние параметры модуля ----------------------------------- extern string _P_b_SharingDoW = "---------- Параметры модуля b-SharingDoW"; extern bool sdUseModule = False; extern string sdOutFileName = "SharingDoW.csv"; //------- Глобальные переменные модуля ------------------------------- //+------------------------------------------------------------------+ //| Сбор и запись в файл информации о распределении сделок. | //+------------------------------------------------------------------+ void WriteDealsInfo() { double op[5]={0,0,0,0,0}, ou[5]={0,0,0,0,0}; int nd, vs[5]={0,0,0,0,0}; string text=""; if (IsTesting() && sdUseModule) { text="Показатель;ПН;ВТ;СР;ЧТ;ПТ"; WritingLineInFile(sdOutFileName, text); for (int i=0; i<HistoryTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { nd=TimeDayOfWeek(OrderOpenTime())-1; if (OrderProfit()>0) op[nd]+=OrderProfit(); else ou[nd]+=OrderProfit(); if (OrderSwap()>0) op[nd]+=OrderSwap(); else ou[nd]+=OrderSwap(); vs[nd]++; } } } } text="Чистая прибыль"; for (i=0; i<5; i++) { text=text+";"+DoubleToStr(op[i]+ou[i], 2); } WritingLineInFile(sdOutFileName, text); text="Общая прибыль"; for (i=0; i<5; i++) { text=text+";"+DoubleToStr(op[i], 2); } WritingLineInFile(sdOutFileName, text); text="Общий убыток"; for (i=0; i<5; i++) { text=text+";"+DoubleToStr(ou[i], 2); } WritingLineInFile(sdOutFileName, text); } } //+------------------------------------------------------------------+ //| Запись строки в файл | //+------------------------------------------------------------------+ void WritingLineInFile(string FileName, string text) { int file_handle=FileOpen(FileName, FILE_READ|FILE_WRITE, " "); if (file_handle>0) { FileSeek(file_handle, 0, SEEK_END); FileWrite(file_handle, text); FileClose(file_handle); } } //+------------------------------------------------------------------+
 
Эксперименты с этим модулем выявили несоответствие в методе учёта свопов. Я положительные свопы прибавляю к прибыли, а отрицательные - к убыткам. Тестер же все свопы прибывляет к прибыли. Внёс в модуль такие изменения:
nd=TimeDayOfWeek(OrderOpenTime())-1; if (OrderProfit()>0) op[nd]+=OrderProfit(); else ou[nd]+=OrderProfit(); op[nd]+=OrderSwap(); vs[nd]++;

Теперь итоги соответствуют итогам тестера.

К чему я это написал? Да так... для сведения... кто не знает... я не знал, теперь знаю :-)
 
О! Ничего себе? А разработчики не могли бы сами это сделать? Спасибо Игорь, теперь блин все результаты надо пересматривать...
 
К чему я это написал? Да так... для сведения... кто не знает... я не знал, теперь знаю :-)
ОК, спасибо!)
 
К чему я это написал? Да так... для сведения... кто не знает... я не знал, теперь знаю :-)
ОК, спасибо. Будем знать.
 
цйуйцу
 
Что такое "цйуйцу"?
 
Editor:
Что такое "цйуйцу"?

https://www.mql5.com/ru/forum/50379
Причина обращения: