проблемма с отслеживанием разных советников

 
Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ?
 
Пишеш скрипт - он заодно и статистику сделает.
 
Itso:
Пишеш скрипт - он заодно и статистику сделает.

да только и остается.... ну можно и из советника в ексель кидать данны в принципе...

да точно

спасибо !!!!
 
nchnch писал (а):
Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ?

вчера выложили новый билд - там уже сортируются по комментариям
 
maxfade писал (а):
nchnch писал (а):
Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ?

вчера выложили новый билд - там уже сортируются по комментариям

Это уже легче :)))
 
Я для этих целей сделал простенький инклюдник:
//+------------------------------------------------------------------+
//|                                                   Statistika.mqh |
//|                                                       MetaQuotes |
//|                    http://www.alpari-idc.ru/ru/experts/articles/ |
//+------------------------------------------------------------------+
#property copyright "MetaQuotes"
#property link      "http://www.alpari-idc.ru/ru/experts/articles"
extern string TradesFileName="StatOnline.csv";
 
int StatBars;
int stat_FileHandle;
//+------------------------------------------------------------------+
//| обсчет результатов бектеста                                                          |
//+------------------------------------------------------------------+
void HistoryCalculate()
   {
   int historyTrades;
   int cancelledOrders;
   int cnt,i,znak,res,pos1,pos2;
   string curComment;
 
   TradesFileName=AccountNumber()+TradesFileName;
   for (cnt=HistoryTotal()-1;cnt>=0;cnt--)
      {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
         {
         if (OrderType()>OP_SELL) cancelledOrders++; else historyTrades++;
         } 
      }
   double trades[][13];// массив трейдов
   // 0 - тикет
   // 1 - прибыль в $
   // 2 - прибыль в пунктах
   // 3 - прибыль в $/лот
   // 4 - час открытия 
   // 5 - час закрытия
   // 6 - день недели открытия
   // 7 - день недели закрытия 
   // 8 - время удержания в мин
   // 9 - серия 
   // 10 баланс 
   // 11 коммент
   // 12 свободная информация (MagicNumber)
   string commentsTrades[][4];
   double cancells[][6]; // массив отмененных
   // 0 - тикет
   // 1 - час открытия 
   // 2 - час отмены
   // 3 - день открытия
   // 4 - день отмены
   // 5 - время удержания в мин
   ArrayResize(trades,historyTrades);
   ArrayResize(commentsTrades,historyTrades);
   ArrayResize(cancells,cancelledOrders);
   
   stat_FileHandle=FileOpen(TradesFileName,FILE_WRITE | FILE_CSV,";");
   if (stat_FileHandle<1)
      {
      Print("Не удалось открыть файл, ошибка ",GetLastError());
      return;
      }   
   cnt=0;
 
   // Запишем заголовки столбцов
   if(stat_FileHandle>0) res=FileWrite(stat_FileHandle,"ticket","Symbol","Profit,$",
      "Profit,point","$/lot","Open Hour","Close Hour","Open Day",
      "Close Day","Hold Time","Comment","TP or SL","Order Type","MagicNumber");
 
   for (i=0;i<HistoryTotal();i++)
      {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
         //Print("Обработка ордера в истории на позиции ",i);
         if (OrderType()<=OP_SELL)
            {
            trades[cnt][0]=OrderTicket();
            trades[cnt][1]=OrderProfit();
            if (OrderType()==OP_BUY) znak=1; else znak=-1;
            trades[cnt][2]=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT)*znak,0);
            //Print("Profit in points",trades[cnt][2]);
            trades[cnt][3]=trades[cnt][1]/(OrderLots()/0.1);
            trades[cnt][4]=TimeHour(OrderOpenTime());
            trades[cnt][5]=TimeHour(OrderCloseTime());
            trades[cnt][6]=TimeDayOfWeek(OrderOpenTime());
            trades[cnt][7]=TimeDayOfWeek(OrderCloseTime());
            trades[cnt][8]=(OrderCloseTime()-OrderOpenTime())/60;
            trades[cnt][9]=1;
            trades[cnt][10]=1;
            trades[cnt][12]=OrderMagicNumber();
            curComment=OrderComment();
            pos1=StringFind(curComment,"[tp]");
            if (pos1!=-1)
               {
               commentsTrades[cnt][0]=StringSubstr(curComment,0,pos1);
               commentsTrades[cnt][1]="[tp]";
               }
            pos2=StringFind(curComment,"[sl]");
            if (pos2!=-1)
               {
               commentsTrades[cnt][0]=StringSubstr(curComment,0,pos2);
               commentsTrades[cnt][1]="[sl]";
               }
            if (pos1==-1&&pos2==-1)
               {
               commentsTrades[cnt][0]=curComment;
               commentsTrades[cnt][1]="";
               }
            //Print("curComment=",curComment,"  pos1=",pos1,"  pos2=",pos2);
            if (OrderType()==OP_BUY) commentsTrades[cnt][2]="buy"; else commentsTrades[cnt][2]="sell";
            
            commentsTrades[cnt][3]=OrderSymbol();
            //Print("Запишем данные для ордера ",trades[cnt][0]);
            if(stat_FileHandle>0) res=FileWrite(stat_FileHandle,trades[cnt][0],commentsTrades[cnt][3],trades[cnt][1],
               trades[cnt][2],trades[cnt][3],trades[cnt][4],trades[cnt][5],trades[cnt][6],
               trades[cnt][7],trades[cnt][8],commentsTrades[cnt][0],commentsTrades[cnt][1],
               commentsTrades[cnt][2],trades[cnt][12]);
            if (res<0) Print("Ошибка записи в файл статистики сделок",GetLastError());  
            cnt++;
            }
         }// if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      }// for (i=0;i<OrdersTotal();i++)
   FileClose(stat_FileHandle);
   return;
   }


который вызываю в еще более простом скрипте:

//+------------------------------------------------------------------+
//|                                                 TradesToFile.mq4 |
//|                                                             Rosh |
//|                    http://www.alpari-idc.ru/ru/experts/articles/ |
//+------------------------------------------------------------------+
#property copyright "Rosh"
#property link      "http://www.alpari-idc.ru/ru/experts/articles/"
#include <StatistikaOnline.mqh>
 
#property show_inputs
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   HistoryCalculate();
//----
   return(0);
  }
//+------------------------------------------------------------------+
результат открываю в Экселе

 
Rosh:
Я для этих целей сделал простенький инклюдник:
//+------------------------------------------------------------------+
//|                                                   Statistika.mqh |
//|                                                       MetaQuotes |
//|                    http://www.alpari-idc.ru/ru/experts/articles/ |
//+------------------------------------------------------------------+
#property copyright "MetaQuotes"
#property link      "http://www.alpari-idc.ru/ru/experts/articles"
extern string TradesFileName="StatOnline.csv";
 
int StatBars;
int stat_FileHandle;
//+------------------------------------------------------------------+
//| обсчет результатов бектеста                                                          |
//+------------------------------------------------------------------+
void HistoryCalculate()
   {
   int historyTrades;
   int cancelledOrders;
   int cnt,i,znak,res,pos1,pos2;
   string curComment;
 
   TradesFileName=AccountNumber()+TradesFileName;
   for (cnt=HistoryTotal()-1;cnt>=0;cnt--)
      {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))
         {
         if (OrderType()>OP_SELL) cancelledOrders++; else historyTrades++;
         } 
      }
   double trades[][13];// массив трейдов
   // 0 - тикет
   // 1 - прибыль в $
   // 2 - прибыль в пунктах
   // 3 - прибыль в $/лот
   // 4 - час открытия 
   // 5 - час закрытия
   // 6 - день недели открытия
   // 7 - день недели закрытия 
   // 8 - время удержания в мин
   // 9 - серия 
   // 10 баланс 
   // 11 коммент
   // 12 свободная информация (MagicNumber)
   string commentsTrades[][4];
   double cancells[][6]; // массив отмененных
   // 0 - тикет
   // 1 - час открытия 
   // 2 - час отмены
   // 3 - день открытия
   // 4 - день отмены
   // 5 - время удержания в мин
   ArrayResize(trades,historyTrades);
   ArrayResize(commentsTrades,historyTrades);
   ArrayResize(cancells,cancelledOrders);
   
   stat_FileHandle=FileOpen(TradesFileName,FILE_WRITE | FILE_CSV,";");
   if (stat_FileHandle<1)
      {
      Print("Не удалось открыть файл, ошибка ",GetLastError());
      return;
      }   
   cnt=0;
 
   // Запишем заголовки столбцов
   if(stat_FileHandle>0) res=FileWrite(stat_FileHandle,"ticket","Symbol","Profit,$",
      "Profit,point","$/lot","Open Hour","Close Hour","Open Day",
      "Close Day","Hold Time","Comment","TP or SL","Order Type","MagicNumber");
 
   for (i=0;i<HistoryTotal();i++)
      {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
         //Print("Обработка ордера в истории на позиции ",i);
         if (OrderType()<=OP_SELL)
            {
            trades[cnt][0]=OrderTicket();
            trades[cnt][1]=OrderProfit();
            if (OrderType()==OP_BUY) znak=1; else znak=-1;
            trades[cnt][2]=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT)*znak,0);
            //Print("Profit in points",trades[cnt][2]);
            trades[cnt][3]=trades[cnt][1]/(OrderLots()/0.1);
            trades[cnt][4]=TimeHour(OrderOpenTime());
            trades[cnt][5]=TimeHour(OrderCloseTime());
            trades[cnt][6]=TimeDayOfWeek(OrderOpenTime());
            trades[cnt][7]=TimeDayOfWeek(OrderCloseTime());
            trades[cnt][8]=(OrderCloseTime()-OrderOpenTime())/60;
            trades[cnt][9]=1;
            trades[cnt][10]=1;
            trades[cnt][12]=OrderMagicNumber();
            curComment=OrderComment();
            pos1=StringFind(curComment,"[tp]");
            if (pos1!=-1)
               {
               commentsTrades[cnt][0]=StringSubstr(curComment,0,pos1);
               commentsTrades[cnt][1]="[tp]";
               }
            pos2=StringFind(curComment,"[sl]");
            if (pos2!=-1)
               {
               commentsTrades[cnt][0]=StringSubstr(curComment,0,pos2);
               commentsTrades[cnt][1]="[sl]";
               }
            if (pos1==-1&&pos2==-1)
               {
               commentsTrades[cnt][0]=curComment;
               commentsTrades[cnt][1]="";
               }
            //Print("curComment=",curComment,"  pos1=",pos1,"  pos2=",pos2);
            if (OrderType()==OP_BUY) commentsTrades[cnt][2]="buy"; else commentsTrades[cnt][2]="sell";
            
            commentsTrades[cnt][3]=OrderSymbol();
            //Print("Запишем данные для ордера ",trades[cnt][0]);
            if(stat_FileHandle>0) res=FileWrite(stat_FileHandle,trades[cnt][0],commentsTrades[cnt][3],trades[cnt][1],
               trades[cnt][2],trades[cnt][3],trades[cnt][4],trades[cnt][5],trades[cnt][6],
               trades[cnt][7],trades[cnt][8],commentsTrades[cnt][0],commentsTrades[cnt][1],
               commentsTrades[cnt][2],trades[cnt][12]);
            if (res<0) Print("Ошибка записи в файл статистики сделок",GetLastError());  
            cnt++;
            }
         }// if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      }// for (i=0;i<OrdersTotal();i++)
   FileClose(stat_FileHandle);
   return;
   }


который вызываю в еще более простом скрипте:

//+------------------------------------------------------------------+
//|                                                 TradesToFile.mq4 |
//|                                                             Rosh |
//|                    http://www.alpari-idc.ru/ru/experts/articles/ |
//+------------------------------------------------------------------+
#property copyright "Rosh"
#property link      "http://www.alpari-idc.ru/ru/experts/articles/"
#include <StatistikaOnline.mqh>
 
#property show_inputs
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   HistoryCalculate();
//----
   return(0);
  }
//+------------------------------------------------------------------+
результат открываю в Экселе







скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами.....




 
nchnch писал (а):

скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами.....





Вы бы цитировали более экономно. У Вас клавиша Del не работает?

Читайте документацию. Либо на сайте, либо в словаре MetaEditor

Включаемые файлы обычно размещаются в директории Include
 
Rosh:
Я для этих целей сделал простенький инклюдник

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

Для nchnch : Да вроде тут уже ничего вставлять не надо, раскидать по соответствующим директориям, компильнуть (можно просто перезапустить МТ) и запустить скрипт. )
 
stringo писал (а):
nchnch писал (а):

скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами.....





Вы бы цитировали более экономно. У Вас клавиша Del не работает?

Читайте документацию. Либо на сайте, либо в словаре MetaEditor

Включаемые файлы обычно размещаются в директории Include
На счет клавиши учту ...был не прав :))

в остальном понятно

спасибо