Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2159
- Рейтинг:
- Опубликован:
- 2013.04.02 13:54
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Скрипт получает значения индикатора Скользящее среднее и записывает их в бинарный файл в поддиректории "Data" локальной папки терминала. Во входных параметрах скрипта можно указать параметры для расчета индикатора MA, имя валютной пары и таймфрейм, а также дату, начиная с которой будем рассчитывать значения индикатора.
Помимо самих значений индикатора MA в файл также записываются и соответствующие им значения времени, предварительно приведенные к типу double.
Код:
//--- покажем окно входных параметров при запуске скрипта #property script_show_inputs //--- параметры для получения данных из терминала input string InpSymbolName="EURJPY"; // валютная пара input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_M15; // таймфрейм input int InpMAPeriod=10; // период сглаживания input int InpMAShift=0; // смещение индикатора input ENUM_MA_METHOD InpMAMethod=MODE_SMA; // тип сглаживания input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // тип цены input datetime InpDateStart=D'2013.01.01 00:00'; // дата начала копирования данных //--- параметры для записи данных в файл input string InpFileName="MA.csv"; // имя файла input string InpDirectoryName="Data"; // имя директории //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { datetime date_finish=TimeCurrent(); double ma_buff[]; datetime time_buff[]; int size; //--- получим хэндл индикатора MA ResetLastError(); int ma_handle=iMA(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpMAShift,InpMAMethod,InpAppliedPrice); if(ma_handle==INVALID_HANDLE) { //--- не удалось получить хэндл индикатора PrintFormat("Ошибка получения хэндла индикатора. Код ошибки = %d",GetLastError()); return; } //--- находимся в цикле, пока индикатор не рассчитает все свои значения while(BarsCalculated(ma_handle)==-1) Sleep(20); // задержка, чтобы индикатор успел вычислить свои значения PrintFormat("В файл будут записаны значения индикатора, начиная с %s",TimeToString(InpDateStart)); //--- скопируем значения индикатора ResetLastError(); if(CopyBuffer(ma_handle,0,InpDateStart,date_finish,ma_buff)==-1) { PrintFormat("Не удалось скопировать значения индикатора. Код ошибки = %d",GetLastError()); return; } //--- скопируем время появления соответствующих баров ResetLastError(); if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1) { PrintFormat("Не удалось скопировать значения времени. Код ошибки = %d",GetLastError()); return; } //--- получим размер буфера size=ArraySize(ma_buff); //--- освободим память, занимаемую индикатором IndicatorRelease(ma_handle); //--- откроем файл для записи значений индикатора (если его нет, то создастся автоматически) ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN); if(file_handle!=INVALID_HANDLE) { PrintFormat("Файл %s открыт для записи",InpFileName); PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); //--- сначала запишем размер выборки данных FileWriteDouble(file_handle,(double)size); //--- запишем время и значения индикатора в файл for(int i=0;i<size;i++) { FileWriteDouble(file_handle,(double)time_buff[i]); FileWriteDouble(file_handle,ma_buff[i]); } //--- закрываем файл FileClose(file_handle); PrintFormat("Данные записаны, файл %s закрыт",InpFileName); } else PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError()); }
![X Bar Clear Close Trend](https://c.mql5.com/i/code/indicator.png)
Альтернативный трендовый индикатор на основе паттерна пробоя закрытием эктремумов предыдущих баров.
![Demo_FileReadDatetime](https://c.mql5.com/i/code/indicator.png)
Индикатор демонстрирует пример использования функции FileReadDatetime()
![Demo_FileReadDouble](https://c.mql5.com/i/code/indicator.png)
Индикатор демонстрирует пример использования функции FileReadDouble()
![Demo_FileSize](https://c.mql5.com/i/code/script.png)
Скрипт демонстрирует пример использования функции FileSize()