Ребят, кто знает, помогите пожалуйста. Очень нужно) Выгружать в файл значения Закрытия\Открытия баров за месяц\год где-то, для статистики. Как это возможно сделать из МТ5? Исторические данные есть в файлах hcc, но как их открыть, я не нашел. В итоге можно либо с каждым новым баром записывать значение в файл. Или же запустить скрипт, но т.к. он не проходит по всем барам. Думаю, можно загрузить в него список из несколько тысяч значений и все по очереди в цикле записать. Как лучше сделать?
Запись массива Open[] в файл csv:
//+------------------------------------------------------------------+ //| Open to csv.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" #property script_show_inputs input int count_bars=50; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- double Open[]; double open=0; int copied=CopyOpen(Symbol(),Period(),1,count_bars,Open); if(copied==-1 || copied<count_bars) { Print("Copied ",copied," -> error"); return; } //--- correct way of working in the "file sandbox" ResetLastError(); int filehandle=FileOpen("open.csv",FILE_WRITE|FILE_CSV); if(filehandle!=INVALID_HANDLE) { for(int i=0;i<copied;i++) FileWrite(filehandle,DoubleToString(Open[i],Digits())); FileClose(filehandle); Print("FileOpen OK"); } else Print("Operation FileOpen failed, error ",GetLastError()); } //+------------------------------------------------------------------+
Созданный файл искать в папке "каталог данных терминала"\MQL5\Files
Файлы:
Open_to_csv.mq5
3 kb
Vladimir Karputov:
Запись массива Open[] в файл csv:
Созданный файл искать в папке "каталог данных терминала"\MQL5\Files
Спасибо, но это в скрипте. Это у меня работает. Просто в документации не написано, что должно работать только в скрипте. Думал, можно как-то еще реализовать в советнике.
Fresto:
Спасибо, но это в скрипте. Это у меня работает. Просто в документации не написано, что должно работать только в скрипте. Думал, можно как-то еще реализовать в советнике.
Спасибо, но это в скрипте. Это у меня работает. Просто в документации не написано, что должно работать только в скрипте. Думал, можно как-то еще реализовать в советнике.
Ну перекиньте этот код в советник. Только выставьте флаг окончания записи - иначе будете на каждом тике перезаписывать файл :). Можно и в индикаторе, только тоже нужно флаг создать - чтобы не писать по новой на каждом тике.
Vladimir Karputov:
Ну перекиньте этот код в советник. Только выставьте флаг окончания записи - иначе будете на каждом тике перезаписывать файл :)
Ну перекиньте этот код в советник. Только выставьте флаг окончания записи - иначе будете на каждом тике перезаписывать файл :)
Просто вот я и перекинул в советник, но там не работает данная функция, поэтому и спросил на форуме. Можете пожалуйста проверить в советнике у себя. Просто код один и тот же, но в скрипте работает, а в советнике нет.
P.s. у меня есть блок кода из 1 статьи, который возвращает, если не закончился текущий бар.
Вот советник:
//+------------------------------------------------------------------+ //| Open to csv.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 parameter input int count_bars=50; // Count bars //--- bool end_write=false; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- end_write=false; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(end_write) return; double Open[]; double open=0; int copied=CopyOpen(Symbol(),Period(),1,count_bars,Open); if(copied==-1 || copied<count_bars) { Print("Copied ",copied," -> error"); return; } //--- correct way of working in the "file sandbox" ResetLastError(); int filehandle=FileOpen(Symbol()+" "+EnumToString(Period())+" open.csv",FILE_WRITE|FILE_CSV); if(filehandle!=INVALID_HANDLE) { FileWrite(filehandle,"Open"); for(int i=0;i<copied;i++) FileWrite(filehandle,DoubleToString(Open[i],Digits())); FileClose(filehandle); Print("FileOpen OK"); end_write=true; } else Print("Operation FileOpen failed, error ",GetLastError()); } //+------------------------------------------------------------------+
здесь уже имя файла (на символе "USDCAD" и периоде "M1" имеет вид
USDCAD PERIOD_M1 open.csv
Файлы:
Open_to_csv.mq5
5 kb
Vladimir Karputov:
Вот советник:
здесь уже имя файла (на символе "USDCAD" и периоде "M1" имеет вид
Вот непонятно. Я открыл ваш файл, изменил только название файла, куда записывается. В итоге он не записывает ничего. Только в скрипте работает всё. В индикаторе тоже не работает.
Fresto:
Вот непонятно. Я открыл ваш файл, изменил только название файла, куда записывается. В итоге он не записывает ничего. Только в скрипте работает всё. В индикаторе тоже не работает.
Вот непонятно. Я открыл ваш файл, изменил только название файла, куда записывается. В итоге он не записывает ничего. Только в скрипте работает всё. В индикаторе тоже не работает.
Могу предположить: что-то не то с руками ;). Уж извините, если что не так.
И в журнал посматривайте - там будут сообщения если:
- скопировано меньше, чем запрошено.
- не удалось открыть файл.
Vladimir Karputov:
Могу предположить: что-то не то с руками ;). Уж извините, если что не так.
И в журнал посматривайте - там будут сообщения если:
- скопировано меньше, чем запрошено.
- не удалось открыть файл.
Надеюсь, что дело в руках) Потом что открыл ваш файл и изменил 1 строчку)
Выводит только сообщение об успешности.
2017.03.30 12:16:46.681 count_bars=50 2017.03.30 12:17:18.156 2016.01.04 10:00:00 FileOpen OK
Fresto:
Надеюсь, что дело в руках) Потом что открыл ваш файл и изменил 1 строчку)
Выводит только сообщение об успешности.
Надеюсь, что дело в руках) Потом что открыл ваш файл и изменил 1 строчку)
Выводит только сообщение об успешности.
Не, не, не. Ищем лекарство для пук. Определённо.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
P.s. в скрипте всё работает. Хочу спросить, можно ли подобное сделать и в советнике.
Вот если что файл.