Скачать MetaTrader 5

Обсуждение статьи "Переход на новые рельсы: пользовательские индикаторы в MQL5"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
188077
MetaQuotes Software Corp.  

Опубликована статья Переход на новые рельсы: пользовательские индикаторы в MQL5:

Описание особенностей создания индикаторов в MQL5 в сравнении с MQL4, а также описание новых возможностей.

Автор: Андрей

Vasiliy Smirnov
13592
Vasiliy Smirnov  

Я вот чего-то теперь не понял, мне чтоб иметь High & Low другого периода в индикаторе надо заводить теперь 2 буфера под них???


и в статье

CopyHigh


почему неправильно работают функции, н-р:

//+------------------------------------------------------------------+
//| Получим High для заданного номера бара                           |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }

Rashid Umarov
Админ
12662
Rashid Umarov  

Что означает - "неправильно"?  Надо ведь приводить конкретные примеры вместо общих заявлений "все плохо".

Попробуйте запустить пример из раздела CopyHigh():

//+------------------------------------------------------------------+
//|                                                   HighAndLow.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#property description "Пример вывода значений High[i] и Low[i]"
#property description "для баров, выбранных случайным образом"

double High[],Low[];
//+------------------------------------------------------------------+
//| Получим Low для заданного номера бара                            |
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+
//| Получим High для заданного номера бара                           |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- выводим на каждом тике значения High и Low для бара с индексом,
//--- равным секунде поступления тика
   datetime t=TimeCurrent();
   int sec=t%60;
   printf("High[%d] =%G  Low[%d] =%G",
          sec,iHigh(Symbol(),0,sec),
          sec,iLow(Symbol(),0,sec));
  }
//+------------------------------------------------------------------+

Вот что получилось у меня, все показывает верно.



Vasiliy Smirnov
13592
Vasiliy Smirnov  
Rosh   :

Что означает - "неправильно"?  Надо ведь приводить конкретные примеры вместо общих заявлений "все плохо".

Попробуйте запустить пример из раздела CopyHigh():

Вот что получилось у меня, все показывает верно.




Прошу прощения за неконкретность претензий.

Мне кажется, если пишется функция, то подразумевается, что она работает под разными параметрами. Иначе в них просто нет смысла.

Добавим параметр TimeFrame. И протестируем программку под другим параметром, например, равном текущему,т.е. например на дневном графике зададим равным PERIOD_D1.


//+------------------------------------------------------------------+
//|                                                   HighAndLow.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property description "Пример вывода значений High[i] и Low[i]"
#property description "для баров, выбранных случайным образом"

double High[],Low[];
input ENUM_TIMEFRAMES TimeFrame;
//+------------------------------------------------------------------+
//| Получим Low для заданного номера бара                            |
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+
//| Получим High для заданного номера бара                           |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- выводим на каждом тике значения High и Low для бара с индексом,
//--- равным секунде поступления тика
   datetime t=TimeCurrent();
   int sec=t%60;
   printf("High[%d] =%G  Low[%d] =%G",
          sec,iHigh(Symbol(),TimeFrame,sec),
          sec,iLow(Symbol(),TimeFrame,sec));
  }
//+------------------------------------------------------------------+
Rashid Umarov
Админ
12662
Rashid Umarov  
zfs   :


Прошу прощения за неконкретность претензий.

Мне кажется, если пишется функция, то подразумевается, что она работает под разными параметрами. Иначе в них просто нет смысла.

Добавим параметр TimeFrame. И протестируем программку под другим параметром, например, равном текущему,т.е. например на дневном графике зададим равным PERIOD_D1.



Проверил Ваш вариант - работает тоже верно. Запускал в виде скрипта на таймфрейме D1  с параметрами H1 и D1. Значения были верны (проверял три последних бара)

Файлы:
Vasiliy Smirnov
13592
Vasiliy Smirnov  
Rosh   :


Проверил Ваш вариант - работает тоже верно. Запускал в виде скрипта на таймфрейме D1  с параметрами H1 и D1. Значения были верны (проверял три последних бара)



Да, работает хорошо. Видимо мой косяк, подразумеваю в направлении массивов дело. Но почему при тестировании я получил разные данные для меня останется секретом. Спасибо за внимание. Когда начинаешь что-то новое, всегда мучают сомнения.
Prival
4616
Prival  

только начал изучать. скачал положил в папку D:\MetaTrader 5\MQL5\Indicators 

откомпелировал, накинул на график. некоторые индикаторы ничего не показывают  ((. 

Так и должно быть ? или я что то не то сделал. 

не показывают индикаторы CrossMa.mq5, Toned_WPR.mq5 и HistogramSample.mq5

остальные работают 

Vasily
1261
Vasily  
Rosh:

Что означает - "неправильно"?  Надо ведь приводить конкретные примеры вместо общих заявлений "все плохо".

Попробуйте запустить пример из раздела CopyHigh():

Вот что получилось у меня, все показывает верно.



весь массив копировать данных???

помоему очень не экономично можно же 1 элемент скопировать

Комбинатор
16519
Комбинатор  

Prival:

Так и должно быть ? или я что то не то сделал.

Привет, Сергей. Статья писалась с пылу с жару, для самых первых публичных билдов. С тех пор очень многое поменялось, возможно, некоторые индикаторы требуют доработки.

Пересмотрю, как только будет время.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий