Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Demo_FileWrite - скрипт для MetaTrader 5
- Просмотров:
- 2336
- Рейтинг:
- Опубликован:
- 2013.04.01 11:08
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Скрипт определяет сигналы формируемые индикатором MACD и записывает их в файл. Во входных параметрах скрипта можно указать параметры для расчета индикатора MACD, имя валютной пары и таймфрейм, а также дату, начиная с которой будем анализировать данные. Файл с сигналами индикатора будет находиться в поддиректории "Data" локальной папки терминала.
Код:
Сначала получаем массив значений индикатора и массив времени за определенный период:
//--- время окончания - текущее date_finish=TimeCurrent(); //--- получим хэндл индикатора MACD ResetLastError(); int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice); if(macd_handle==INVALID_HANDLE) { //--- не удалось получить хэндл индикатора PrintFormat("Ошибка получения хэндла индикатора. Код ошибки = %d",GetLastError()); return; } //--- находимся в цикле, пока индикатор не рассчитает все свои значения while(BarsCalculated(macd_handle)==-1) Sleep(10); // задержка, чтобы индикатор успел вычислить свои значения //--- скопируем значения индикатора за определенный период ResetLastError(); if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1) { PrintFormat("Не удалось скопировать значения индикатора. Код ошибки = %d",GetLastError()); return; } //--- скопируем соответствующее время для значений индикатора ResetLastError(); if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1) { PrintFormat("Не удалось скопировать значения времени. Код ошибки = %d",GetLastError()); return; }
Далее определим сигналы индикатора и время их формирования:
//--- получим размер буфера macd_size=ArraySize(macd_buff); //--- проанализируем данные и сохраним сигналы индикатора в массивы ArrayResize(sign_buff,macd_size-1); ArrayResize(time_buff,macd_size-1); for(int i=1;i<macd_size;i++) { //--- сигнал на покупку if(macd_buff[i-1]<0 && macd_buff[i]>=0) { sign_buff[sign_size]=true; time_buff[sign_size]=date_buff[i]; sign_size++; } //--- сигнал на продажу if(macd_buff[i-1]>0 && macd_buff[i]<=0) { sign_buff[sign_size]=false; time_buff[sign_size]=date_buff[i]; sign_size++; } }
И наконец, запишем значения полученных сигналов в файл, используя функцию FileWrite():
//--- откроем файл для записи значений индикатора (если его нет, то создастся автоматически) ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV); if(file_handle!=INVALID_HANDLE) { PrintFormat("Файл %s открыт для записи",InpFileName); PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); //--- сначала запишем количество сигналов FileWrite(file_handle,sign_size); //--- запишем время сигналов и их значения в файл for(int i=0;i<sign_size;i++) FileWrite(file_handle,time_buff[i],sign_buff[i]); //--- закрываем файл FileClose(file_handle); PrintFormat("Данные записаны, файл %s закрыт",InpFileName); } else PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
Сигналы входов по системе "Понедельник"
Demo_FileReadArrayСкрипт демонстрирует пример использования функции FileReadArray()
Индикатор демонстрирует пример использования функции FileReadDatetime()
X Bar Clear Close TrendАльтернативный трендовый индикатор на основе паттерна пробоя закрытием эктремумов предыдущих баров.