Я запустил несколько версий советника. и мне надо определить
эффективность каждой версии. Magik номер они мне пишут в коментариях
к ордеру. но по коментариям ордера не сортируются. в ексель тоже
не копируется. а в отчет вообще не попадают. Как решить проблемму
если тестирую на одном счете ?
- MetaTrader Market – крупнейший магазин торговых приложений
- Подпишитесь на торговый сигнал прямо в MetaTrader 5
- История - MetaTrader 5 для Android
Пишеш скрипт - он заодно и статистику сделает.
Itso:
Пишеш скрипт - он заодно и статистику сделает.
Пишеш скрипт - он заодно и статистику сделает.
да только и остается.... ну можно и из советника в ексель кидать данны в принципе...
да точно
спасибо !!!!
nchnch писал (а):
Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ?
Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ?
вчера выложили новый билд - там уже сортируются по комментариям
maxfade писал (а):
вчера выложили новый билд - там уже сортируются по комментариям
nchnch писал (а):
Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ?
Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. 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); } //+------------------------------------------------------------------+результат открываю в Экселе
![](https://c.mql5.com/mql4/forum/2006/10/statistika.png)
Rosh:
Я для этих целей сделал простенький инклюдник:
который вызываю в еще более простом скрипте:
![](https://c.mql5.com/mql4/forum/2006/10/statistika.png)
скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами.....
Я для этих целей сделал простенький инклюдник:
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+результат открываю в Экселе
![](https://c.mql5.com/mql4/forum/2006/10/statistika.png)
скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами.....
Rosh:
Я для этих целей сделал простенький инклюдник
Спасибо, делал что-то подобно, но не так красиво и наглядно вышло.
.. Возьму на вооружение.Я для этих целей сделал простенький инклюдник
Для nchnch : Да вроде тут уже ничего вставлять не надо, раскидать по соответствующим директориям, компильнуть (можно просто перезапустить МТ) и запустить скрипт. )
stringo писал (а):
Вы бы цитировали более экономно. У Вас клавиша Del не работает?
Читайте документацию. Либо на сайте, либо в словаре MetaEditor
Включаемые файлы обычно размещаются в директории Include
На счет клавиши учту ...был не прав :))nchnch писал (а):
скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами.....
скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами.....
Вы бы цитировали более экономно. У Вас клавиша Del не работает?
Читайте документацию. Либо на сайте, либо в словаре MetaEditor
Включаемые файлы обычно размещаются в директории Include
в остальном понятно
спасибо
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь