Всем привет!
Для тестов нужно грузить файлы с последующей их обработкой, каким образом в советнике необходимо указать путь к фалу, чтобы он загружался для чтения в тестере стратегий? Конечно понимаю, что есть специальная папка для тестера, там же логи.. но она чистится при перезагрузке тестера, хотелось что-нибудь абсолютное ну или относительное... я не понимаю почему не могу читать файлы из директории советника??? или могу пока не понял как... научите примером, пожалуйста.
файлы .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) обратится к файлам в директории Вашего советника.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Для тестов нужно грузить файлы с последующей их обработкой, каким образом в советнике необходимо указать путь к фалу, чтобы он загружался для чтения в тестере стратегий? Конечно понимаю, что есть специальная папка для тестера, там же логи.. но она чистится при перезагрузке тестера, хотелось что-нибудь абсолютное ну или относительное... я не понимаю почему не могу читать файлы из директории советника??? или могу пока не понял как... научите примером, пожалуйста.
файлы .txt