MQL5 TESTER OPEN_READ_FILE

 
Всем привет! 

Для тестов нужно грузить файлы с последующей их обработкой, каким образом в советнике необходимо указать путь к фалу, чтобы он загружался для чтения в тестере стратегий? Конечно понимаю, что есть специальная папка для тестера, там же логи.. но она чистится при перезагрузке тестера, хотелось что-нибудь абсолютное ну или относительное... я не понимаю почему не могу читать файлы из директории советника??? или могу пока не понял как... научите примером, пожалуйста. 

файлы .txt
 
Matvey Alekseev:
Всем привет! 

Для тестов нужно грузить файлы с последующей их обработкой, каким образом в советнике необходимо указать путь к фалу, чтобы он загружался для чтения в тестере стратегий? Конечно понимаю, что есть специальная папка для тестера, там же логи.. но она чистится при перезагрузке тестера, хотелось что-нибудь абсолютное ну или относительное... я не понимаю почему не могу читать файлы из директории советника??? или могу пока не понял как... научите примером, пожалуйста. 

файлы .txt

Используйте общую папку терминала - в таком случае и тестер и терминал будут обращать к одной и той-же папке. 

Подготовка к проверке:

в MetaEditor'е меню "Файл" -> "Открыть общую папку данных". В открывшейся папке перейти в папку "Files" (или создать, если она стёрта), после чего скопировать в папку "Files" тестовый файл "test.tx" (он прикреплён к данному посту).


//+------------------------------------------------------------------+
//|                                        Open from FILE_COMMON.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input string   InpFileName="test.txt";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- correct way of working in the "file sandbox" 
   ResetLastError(); 
   int filehandle=FileOpen(InpFileName,FILE_READ|FILE_TXT|FILE_COMMON); 
   if(filehandle!=INVALID_HANDLE) 
     { 
      PrintFormat("%s file is available for reading",InpFileName); 
      PrintFormat("Data path: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
      PrintFormat("Commondata path: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH)); 
      FileClose(filehandle); 
     } 
   else Print("Operation FileOpen failed, error ",GetLastError()); 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

И результат, который выводит эксперт запущенный в режиме отладки:

2017.04.24 00:00:00   test.txt file is available for reading
2017.04.24 00:00:00   Data path: C:\Users\barab\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\Files\
2017.04.24 00:00:00   Commondata path: C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\Common\Files\

Обратите внимание, при тестировании действительно каждый агент имеет свой папку [data folder]. Но при этом общая папка едина и для тестера и для терминала.

Файлы:
 

Добавлено:

в MQL5 для операций с файлами существует понятие "песочница" - это строго определённая папка в которую программы MQL5 могут писать файлы и считывать файлы.

Примечание

Из соображений безопасности в языке MQL5 строго контролируется работа с файлами. Файлы, с которыми проводятся файловые операции средствами языка MQL5, не могут находиться за пределами файловой "песочницы".

То есть Вы НЕ СМОЖЕТЕ чистым MQL5 (без вызова WinAPI) обратится к файлам в директории Вашего советника.

 
@Vladimir Karputov Спасибо большое! Про общую папку не знал - в моём случае это, конечно, решение. Безопасность и песочницу оставим на совести разработчиков, по мне так каждый проект должен иметь свой root каталог в котором у него естественно root права... может в MQL6 таки перестанут рогами упираться и сделают по-человечески =) перемудрили....