| / | Форум |
|
nchnch
20.10.2006 15:40
Я запустил несколько версий советника. и мне надо определить
эффективность каждой версии. Magik номер они мне пишут в коментариях
к ордеру. но по коментариям ордера не сортируются. в ексель тоже
не копируется. а в отчет вообще не попадают. Как решить проблемму
если тестирую на одном счете ?
|
|
Увеличьте эффективность групповой работы Поставьте TeamWox и увеличьте эффективность групповой работы в вашей компании. TeamWox позволяет хранить всю рабочую информацию в одном месте: письма, документы, файлы, платежи и история сообщений в чате. Так решается проблема сохранности данных и удобной групповой работы с ними. |
|
Itso
20.10.2006 16:15
Пишеш скрипт - он заодно и статистику сделает.
|
|
nchnch
20.10.2006 16:26
Itso писал (а): Пишеш скрипт - он заодно и статистику сделает. да только и остается.... ну можно и из советника в ексель кидать данны в принципе... да точно спасибо !!!! |
|
maxfade
20.10.2006 16:38
nchnch писал (а): Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ? вчера выложили новый билд - там уже сортируются по комментариям |
|
nchnch
20.10.2006 17:03
maxfade писал (а): nchnch писал (а): Я запустил несколько версий советника. и мне надо определить эффективность каждой версии. Magik номер они мне пишут в коментариях к ордеру. но по коментариям ордера не сортируются. в ексель тоже не копируется. а в отчет вообще не попадают. Как решить проблемму если тестирую на одном счете ? вчера выложили новый билд - там уже сортируются по комментариям Это уже легче :))) |
|
solandr
20.10.2006 17:24
|
33759 |
Rosh
20.10.2006 18:11
Я для этих целей сделал простенький инклюдник:
//+------------------------------------------------------------------+ //| 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
21.10.2006 22:25
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); } //+------------------------------------------------------------------+результат открываю в Экселе ![]() скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами..... |
5198 |
stringo
21.10.2006 23:54
nchnch писал (а): скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами..... Вы бы цитировали более экономно. У Вас клавиша Del не работает? Читайте документацию. Либо на сайте, либо в словаре MetaEditor Включаемые файлы обычно размещаются в директории Include |
|
Figar0
22.10.2006 00:22
Rosh писал (а): Спасибо, делал что-то подобно, но не так красиво и наглядно вышло.
.. Возьму на вооружение.Я для этих целей сделал простенький инклюдник Для nchnch : Да вроде тут уже ничего вставлять не надо, раскидать по соответствующим директориям, компильнуть (можно просто перезапустить МТ) и запустить скрипт. ) |
|
nchnch
22.10.2006 00:25
stringo писал (а): На счет клавиши учту ...был не прав :))nchnch писал (а): скажите а куда инклудник ставить то. ????? скрипт понятно в вайл со скриптами..... Вы бы цитировали более экономно. У Вас клавиша Del не работает? Читайте документацию. Либо на сайте, либо в словаре MetaEditor Включаемые файлы обычно размещаются в директории Include в остальном понятно спасибо |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий