Обсуждение статьи "Собственное представление торговой истории и создание графиков для отчетов" - страница 5

 
Можно ли считать историю теста тестера в свои файлы? Не из советника, а путем накидывания скрипта?
 
ANG3110:
Можно ли считать историю теста тестера в свои файлы? Не из советника, а путем накидывания скрипта?

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

 

Хочу использовать Вашу разработку для анализа истории при оптимизации в момент деинициализации.

Подскажите, пожалуйста, как это лучше сделать, что бы получить изменение баланса в один массив? Инструмент торгуется только текущий.

 
Aleksey Vyazmikin:

Хочу использовать Вашу разработку для анализа истории при оптимизации в момент деинициализации.

Подскажите, пожалуйста, как это лучше сделать, что бы получить изменение баланса в один массив? Инструмент торгуется только текущий.

Для этого лучше использовать доработанный класс из моей второй статьи. Класс "ReportCreator"

Используя данный класс я с помощью вот этого кода в OnDeinit в своих роботах выгружаю отчеты оптимизации:

//+------------------------------------------------------------------+
//|                                                  ShortReport.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#include "ReportCreator.mqh"
//+------------------------------------------------------------------+
//| File writer                                                      |
//+------------------------------------------------------------------+
void writer(string fileName,string headder,string row)
  {
   bool isFile=FileIsExist(fileName,FILE_COMMON); // Флаг существует ли файл
   int file_handle=FileOpen(fileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_COMMON|FILE_SHARE_WRITE|FILE_SHARE_READ); // Открываем файл
   if(file_handle) // Если файл открылся
     {
      FileSeek(file_handle,0,SEEK_END); // Перемещаем курсор в конец файла
      if(!isFile) // Еси это новосозданный фай - пишем заголовок
         FileWrite(file_handle,headder);
      FileWrite(file_handle,row); // Пишем сообщение
      FileClose(file_handle); // Закрываем файл
     }
  }
//+------------------------------------------------------------------+
//| History saver                                                    |
//+------------------------------------------------------------------+
void SaveReportToFile(string fileName)
  {
   if(FileIsExist(fileName,FILE_COMMON))
     {
      FileDelete(fileName,FILE_COMMON);
     }

   DealDetales history[];
   CDealHistoryGetter dealGetter;
   dealGetter.getDealsDetales(history,0,TimeCurrent());

   CReportCreator reportCreator;
   reportCreator.Create(history,0);

   TotalResult totalResult;
   reportCreator.GetTotalResult(totalResult);

   int total= ArraySize(history);
   for(int i=0;i<total;i++)
     {
      writer(fileName,
             "Symbol;DT open;Day open;DT close;Day close;Volume;Long/Short;Price in;Price out;PL for one lot;PL for deal;Open comment;Close comment;",
             history[i].symbol+";"+
             TimeToString(history[i].DT_open) + ";" +
             EnumToString(history[i].day_open) + ";" +
             TimeToString(history[i].DT_close) + ";" +
             TimeToString(history[i].day_close) + ";" +
             DoubleToString(history[i].volume)+";"+
             (history[i].isLong ? "Long" : "Short")+";"+
             DoubleToString(history[i].price_in) + ";" +
             DoubleToString(history[i].price_out) + ";" +
             DoubleToString(history[i].pl_oneLot) + ";" +
             DoubleToString(history[i].pl_forDeal) + ";" +
             history[i].open_comment + ";" +
             history[i].close_comment + ";");
     }

   writer(fileName,"","===========================================================================================================================================");
   writer(fileName,"","PL;"+DoubleToString(totalResult.total.PL)+";");
   writer(fileName,"","Recovery factor;"+DoubleToString(totalResult.total.recoveryFactor)+";");
   writer(fileName,"","Profit factor;"+DoubleToString(totalResult.total.profitFactor)+";");
   writer(fileName,"","Draw Down in percent;"+DoubleToString(totalResult.total.maxDrawdown.inPercents)+";");
   writer(fileName,"","Draw Down by pl;"+DoubleToString(totalResult.total.maxDrawdown.byPL)+";");
   writer(fileName,"","Draw Down for a deal;"+DoubleToString(totalResult.total.maxDrawdown.forDeal)+";");
  }
//+------------------------------------------------------------------+
Данный код находится в отдельном файле который я подключаю через #include к роботу.
Причина обращения: