Обсуждение статьи "Индикатор NRTR и торговые модули на его основе для Мастера MQL5"

 

Опубликована статья Индикатор NRTR и торговые модули на его основе для Мастера MQL5:

В статье описан индикатор NRTR и торговая система, созданная с его использованием. Для этих целей создаётся модуль торговых сигналов, с помощью которых создаются стратегии, основанные на комбинациях NRTR и дополнительных индикаторов, подтверждающих тренд.

Посмотрим работу индикатора, поместив на график два NRTR с различными параметрами: у первого — период 12 и ширина 0.1%; у второго — период 120 и ширина 0.2%.

Автор: Dmitrii Troshin

 

убей не понял как к нему обратиться через iCustom ... поясните пож-та

должно быть что то типа 

double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );

то есть конкретно в нашем случае 

//+------------------------------------------------------------------+
//| NRTRvolatile                                                     |
//+------------------------------------------------------------------+
//iBufferNumber
//0
//1 
//2 - signal up
//3 - signal down
double indNRTRvolatile(string sSymbol=NULL,
                int tf=PERIOD_M5,
                int period=12,                  //динамический период
                double K=1,                       //коэффициент масштаба
                int iBufferNumber=0,
                int iShift=0)
{
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   double handle=iCustom(sSymbol,timeframe,"NRTRvolatile",period,K,iBufferNumber,iShift);
   
   if(handle<0)
     {
      Print("Объект NRTRvolatile не создан: Ошибка ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,iShift));
}  


только выдает какую то ерунду, то есть текущие цены если обратиться по буферу 2 или 3

 
gedd:

убей не понял как к нему обратиться через iCustom ... поясните пож-та

В буферах 2,3 находятся сигналы они обновляются только в момент смены тренда.

Поддержка/Сопротивление находятся в буферах 0,1 - именно их мы видим в качестве линий

CopyBuffer() - имеет три перегрузки, но ни одна не имеет трех параметров

Вариант кода для получения значений буферов

void OnStart()
{
double arr[];
int handle =iCustom(Symbol(),0,"NRTRvolatile",12,1);
CopyBuffer(handle,0,0,1,arr);
Print("Нижний канал  ",arr[0]);
CopyBuffer(handle,1,0,1,arr);
Print("Верхний канал ",arr[0]);
CopyBuffer(handle,2,0,1,arr);
Print("Сигнал вверх  ",arr[0]);
CopyBuffer(handle,3,0,1,arr);
Print("Сигнал вниз   ",arr[0]);
}

Это скрипт

 
Dmitrii Troshin:

В буферах 2,3 находятся сигналы они обновляются только в момент смены тренда.

Поддержка/Сопротивление находятся в буферах 0,1 - именно их мы видим в качестве линий

CopyBuffer() - имеет три перегрузки, но ни одна не имеет трех параметров

Вариант кода для получения значений буферов

Это скрипт


да стало понятней

насчет CopyBuffer - она из библиотеки совместимости с mql4 , точнее отсюда initmql4__1.mqh

double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
 

наверно так

//+------------------------------------------------------------------+
//| NRTRvolatile                                                     |
//+------------------------------------------------------------------+
//iBufferNumber
//0
//1 
//2 - signal up
//3 - signal down
double indNRTRvolatile(string sSymbol=NULL,
                int tf=PERIOD_M5,
                int period=12,                  //динамический период
                double K=1,                       //коэффициент масштаба
                int iBufferNumber=0,
                int iShift=0)
{
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   double handle=iCustom(sSymbol,timeframe,"NRTRvolatile",period,K);
   
   if(handle<0)
     {
      Print("Объект NRTRvolatile не создан: Ошибка ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,iBufferNumber,iShift));

}

 

Можно ли проапгрейдить NRTRvolatile так, чтобы при добавлении стрелки выскакивало окошко с сообщением?

 
gedd:

Можно ли проапгрейдить NRTRvolatile так, чтобы при добавлении стрелки выскакивало окошко с сообщением?


Возможно в функциях LongCondition и ShortCondition 

int SignalNRTR::LongCondition(void)
   {
   int idx   =StartIndex();
   if(UpSignal(idx))
   { 
   Alert"Text";   
   return 100;
   }
   else return 0;
   }

добавить что-то вроде Alert"Text". Вот не знаю будет ли работать. Дело в том что у меня на компьютере уже нет этого кода. Всё что было в прошлом году я отставил в прошлом:) Поэтому попробовать не могу. Да и в голове ещё НГ звенит :)

 

В самом индикаторе где-то здесь

 // trend changes 
  
      if(trend>0) Buff_Up[i]=value;
      if(trend<0) Buff_Dn[i]=value;

      if(trend_prev<0  &&  trend>0) 
      {
      Alert("Text");
      Sign_Up[i]=value;
      Buff_Up[i]=0.0;
      }
      if(trend_prev>0 && trend<0)
      {
      Alert("Text");
      Sign_Dn[i]=value;
      Buff_Dn[i]=0.0;
      }
Причина обращения: