Смотри, как бесплатно скачать роботов
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Просмотров:
2055
Рейтинг:
голосов: 26
Опубликован:
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());
i-Monday_Sig i-Monday_Sig

Сигналы входов по системе "Понедельник"

Demo_FileReadArray Demo_FileReadArray

Скрипт демонстрирует пример использования функции FileReadArray()

Demo_FileReadDatetime Demo_FileReadDatetime

Индикатор демонстрирует пример использования функции FileReadDatetime()

X Bar Clear Close Trend X Bar Clear Close Trend

Альтернативный трендовый индикатор на основе паттерна пробоя закрытием эктремумов предыдущих баров.