Тестирование МТ4-советника в тестере МТ5. Используем торговый отчет с тестера МТ4. Есть готовое решение?

 

Есть потребность протестировать mql4-советник в тестере МТ5, потому что тестер МТ4 не показывает просадки по эквити. И в МТ5 спреды более приближенные к реальности.


Протестировал в МТ4 по ценам открытия, на таймфрейме М1. Сохранил торговый отчет.

Идея такая: Советник, который будет читать торговый отчет (а там же есть время открытия и закрытия сделок), и в нужное время осуществлять торговые операции.

Есть готовое решение?


 
danminin:

Есть потребность протестировать mql4-советник в тестере МТ5, потому что тестер МТ4 не показывает просадки по эквити. И в МТ5 спреды более приближенные к реальности.


Протестировал в МТ4 по ценам открытия, на таймфрейме М1. Сохранил торговый отчет.

Идея такая: Советник, который будет читать торговый отчет (а там же есть время открытия и закрытия сделок), и в нужное время осуществлять торговые операции.

Есть готовое решение?


Если есть исходники, можно переделать на мультиплатформенный вариант. Для универсальной работы с ордерами достаточно использовать библиотеку MT4Orders, остальное возможно придется дописывать. 

 
Почему может код не работать? mql5

#property strict



int t;
int Handle;                         // Файловый описатель

string File_Name="StrategyTester.csv",        // Имя файла
   
       Text,                        // Текст описания события
       Str_DtTm;                    // Дата и время события(строка)
datetime Dat_DtTm;                  // Дата и время события(дата)


bool pr;



#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>

CPositionInfo o_position;
CTrade o_trade;



int OnInit()
{

Handle=FileOpen("StrategyTester.csv",FILE_READ|FILE_CSV ,";");// Открытие файла
   

return(INIT_SUCCEEDED);
}



void OnTick()
  {
  
   
   if(Handle<0)                        // Неудача при открытии файла
     {

     Alert("Ошибка при открытии файла ",GetLastError());//..такое сообщ

      return;                          // Выход из start()      
     }
     
     
     
   
   
   bool b=FileSeek(Handle,0,SEEK_SET);
   
   
   
   while(FileIsEnding(Handle)==false)  // До тех пор, пока файловый ..
     { 
     
                                   

      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      
      Alert (Str_DtTm);
      Alert (Text);



      Dat_DtTm=StringToTime(Str_DtTm);   // Преобразование типа данных
      
      if (TimeCurrent()==Dat_DtTm)
      
         {
         
         if (Text=="buy")
            {
            pr=o_trade.Buy(1,_Symbol);           
            }
            
         
         if (Text=="sell")
            {
            pr=o_trade.Sell(1,_Symbol);           
            }
            
         
         if (Text=="close")
            {
            zakrit_vse();
            }
         
         
         
         return;
         }
      
       
       
     }





  }








void OnDeinit(const int reason)
{
FileClose( Handle );                // Закрываем файл
}












void zakrit_vse()
{
   
   bool proverka=true; 



  for (int i=PositionsTotal(); i>=1; i--)       
  {
   if(o_position.SelectByIndex(i-1)==true ) 
     {
         o_trade.PositionClose(o_position.Ticket());
     }
  } 

}






Советник и CSV-файл прилагаю.
Файлы:
 
Вообще удаляет csv-файл из папки, при обращении к нему.




Когда же файл помещаю в общую папку для всех клиентских терминалов и FileOpen() использую с ключом FILE_COMMON, то не может прочитать данные из файла.





создал файл csv просто с числом.

иероглифы какие-то показывает при чтении с этого файла.

Причина обращения: