Время удержания сделки (статистика совы на заданном участке тестера)

 

Добрый день коллеги!

Необходимо решить вопрос стат информации, отражающей после прогона в тестере время удержания каждой сделки в часах/днях и барах.

Лучше даже с выгрузкой в отдельный файл, дабы проще потом было перенести в excel и там провести анализ полученного.

Как лучше можно это сделать, кто-то затевался?

 
Vitaliy Hudyakov:

Добрый день коллеги!

Необходимо решить вопрос стат информации, отражающей после прогона в тестере время удержания каждой сделки в часах/днях и барах.

Лучше даже с выгрузкой в отдельный файл, дабы проще потом было перенести в excel и там провести анализ полученного.

Как лучше можно это сделать, кто-то затевался?

Через OnTester() можно сделать.

Перебрать историю ордеров (этого прогона в тестере) в цикле и собрать нужную статистику. Я так и делаю, только не в файл вывожу, а в журнал, уже посчитанную и оформленную статистику в компактном виде.

 
Sergey Basov:

Через OnTester() можно сделать.

Перебрать историю ордеров (этого прогона в тестере) в цикле и собрать нужную статистику. Я так и делаю, только не в файл вывожу, а в журнал, уже посчитанную и оформленную статистику в компактном виде.


Благодарю! Все получилось!!
 
Vitaliy Hudyakov:

Добрый день коллеги!

Необходимо решить вопрос стат информации, отражающей после прогона в тестере время удержания каждой сделки в часах/днях и барах.

Лучше даже с выгрузкой в отдельный файл, дабы проще потом было перенести в excel и там провести анализ полученного.

Как лучше можно это сделать, кто-то затевался?


А что, сразу в excel нельзя записывать? Вопрос не подколка. Я сам не знаю. Поэтому спрашиваю. Если можно, то как надо прописать открытие файла в советнике? Заранее благодарю. Тип excel_евского  файла там явно при открытии вроде не разрешён, но можно ли сформировать и получится ли так, чтобы просто можно было открыть этот файл Excel_ем.
 

Мне недавно была нужна некоторая статистика, я написал индикатор для мт5 который при работе советника в режиме визуализации пишет информацию в файл.

Если очень, очень, очень надо могу подправить чтобы писал нужную информацию.

Если вы сами сможете исправить, могу  выложить код.

 
Alexey Viktorov:

Мне недавно была нужна некоторая статистика, я написал индикатор для мт5 который при работе советника в режиме визуализации пишет информацию в файл.

Если очень, очень, очень надо могу подправить чтобы писал нужную информацию.

Если вы сами сможете исправить, могу  выложить код.


Буду признателен за код. С интересом его рассмотрю и надеюсь применю в своём тестировании.
 
piranija:

Буду признателен за код. С интересом его рассмотрю и надеюсь применю в своём тестировании.

Только для MT5

//+------------------------------------------------------------------+
//|                                                  WriteResult.mq5 |
//|                                                         Viktorov |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Viktorov"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots   0
input string   fileName =  "TradeResult";   // Имя файла для записи
int fileHandle = -1;

/**************Custom indicator initialization function**************/
int OnInit()
{
 fileHandle = FileOpen(fileName+".csv", FILE_CSV|FILE_READ|FILE_WRITE|FILE_COMMON);
 ulong  fileSize = FileSize(fileHandle);
 bool fileSeek = FileSeek(fileHandle, (long)fileSize, SEEK_SET);
 FileWrite(fileHandle, "Тип", "Лот", "Profit в деньгах", "Profit в пунктах");
 FileClose(fileHandle);
 return(INIT_SUCCEEDED);
}/*******************************************************************/

/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  ENUM_DEAL_TYPE type = -1;
  static int total = -1;
  HistorySelect(0, TimeCurrent());
 if(MQLInfoInteger(MQL_TESTER) && HistoryDealsTotal() > total)
  {
   total = HistoryDealsTotal();
   ulong ticket = HistoryDealGetTicket(total-1);
   type = (ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket, DEAL_TYPE);
    if(HistoryDealGetInteger(ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT)
     {
      HistorySelectByPosition(HistoryDealGetInteger(ticket, DEAL_POSITION_ID));
      double priceOpen = HistoryDealGetDouble(HistoryDealGetTicket(0), DEAL_PRICE);
      double priceClose = HistoryDealGetDouble(ticket, DEAL_PRICE);
      double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT);
      int pipsProfit = int(profit > 0 ? fabs(priceOpen-priceClose)/_Point : -fabs(priceOpen-priceClose)/_Point);
      type = (ENUM_DEAL_TYPE)HistoryDealGetInteger(HistoryDealGetTicket(0), DEAL_TYPE);
      double lot = HistoryDealGetDouble(HistoryDealGetTicket(0), DEAL_VOLUME);
      fileHandle = FileOpen(fileName+".csv", FILE_CSV|FILE_READ|FILE_WRITE|FILE_COMMON);
      ulong  fileSize = FileSize(fileHandle);
      bool fileSeek = FileSeek(fileHandle, (long)fileSize, SEEK_SET);
      FileWrite(fileHandle, (type == DEAL_TYPE_SELL ? "Sell" : type == DEAL_TYPE_BUY ? "Buy" : EnumToString(type))
                                                     , DoubleToString(lot, 2)
                                                     , DoubleToString(profit, 2)
                                                     , pipsProfit);
      FileClose(fileHandle);
     }
  }
   
//--- return value of prev_calculated for next call
   return(rates_total);
}/*******************************************************************/
Файлы:
 
Alexey Viktorov:

Только для MT5


Спасибо, буду работать.