Discusión sobre el artículo "Indicador NRTR y módulos comerciales en su base para el Asistente de MQL5"

 

Artículo publicado Indicador NRTR y módulos comerciales en su base para el Asistente de MQL5:

En este artículo se describe el indicador NRTR y el sistema comercial creado en su base. Para este propósito, se crea el módulo de las señales comerciales a través de las cuales se crean las estrategias basadas en las combinaciones del NRTR e indicadores comerciales que confirman la tendencia.

El código completo del indicador se encuentra en el archivo adjunto NRTR.mq5.

Veamos el trabajo del indicador, colocando en el gráfico dos NRTR con diferentes parámetros: el primero con el período 12 y el ancho 0,1%; el segundo con el período 120 y el ancho 0,2%.

Autor: Dmitrii Troshin

 
MetaQuotes Software Corp.:

Publicado el artículo Indicador NRTR y módulos comerciales basados en él para MQL5 Wizard:

Autor: Dmitrii Troshin


No entiendo cómo acceder a través de iCustom ... por favor explique

debería haber algo como

double iCustom (
stringsymbol, // nombre del símbolo
int timeframe, // timeframe
stringname, // carpeta/nombre del indicador
... // lista de parámetros de entrada del indicador
int mode, // fuente de datos
int shift// desplazamiento
);

que es específicamente en nuestro caso

//+------------------------------------------------------------------+
//| NRTRvolatile|
//+------------------------------------------------------------------+
//iBufferNumber
//0
//1 
//2 - señal arriba
//3 - señal abajo
double indNRTRvolatile(string sSymbol=NULL,
                int tf=PERIOD_M5,
                int period=12,                  //periodo dinámico
                double K=1,                       /factor de escala
                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("Objeto NRTRvolatile no creado: Error ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,iShift));
}  


sólo da algunas tonterías, es decir, los precios actuales si se refiere a la memoria intermedia 2 o 3

 
gedd:

No entiendo cómo acceder a través de iCustom ... por favor explique

Los buffers 2,3 contienen señales que se actualizan sólo en el momento del cambio de tendencia.

Soporte/Resistencia están en los buffers 0,1 - estas son las líneas que vemos como líneas

CopyBuffer() - tiene tres sobrecargas, pero ninguna de ellas tiene tres parámetros.

Una variante del código para obtener los valores de los buffers

void OnStart()
{
double arr[];
int handle =iCustom(Symbol(),0,"NRTRvolatile",12,1);
CopyBuffer(handle,0,0,1,arr);
Print("Canal Bajo",arr[0]);
CopyBuffer(handle,1,0,1,arr);
Print("Canal Superior",arr[0]);
CopyBuffer(handle,2,0,1,arr);
Print("Señal arriba.",arr[0]);
CopyBuffer(handle,3,0,1,arr);
Print("Señal Abajo".,arr[0]);
}

Este es el script

 
Dmitrii Troshin:

Los buffers 2,3 contienen señales que se actualizan sólo en el momento del cambio de tendencia.

Soporte/Resistencia están en los buffers 0,1 - estas son las líneas que vemos como líneas

CopyBuffer() - tiene tres sobrecargas, pero ninguna de ellas tiene tres parámetros.

Una variante del código para obtener los valores de los buffers

Esto es un script


Sí, ahora está más claro

sobre CopyBuffer - es de la librería de compatibilidad mql4, más precisamente de 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);
  }
 

probablemente sí

//+------------------------------------------------------------------+
//| NRTRvolatile|
//+------------------------------------------------------------------+
//iBufferNumber
//0
//1 
//2 - señal arriba
//3 - señal abajo
double indNRTRvolatile(string sSymbol=NULL,
                int tf=PERIOD_M5,
                int period=12,                  //periodo dinámico
                double K=1,                       /factor de escala
                int iBufferNumber=0,
                int iShift=0)
{
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   double handle=iCustom(sSymbol,timeframe,"NRTRvolatile",period,K);
   
   if(handle<0)
     {
      Print("Objeto NRTRvolatile no creado: Error ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,iBufferNumber,iShift));

}

 

¿Es posible actualizar NRTRvolatile para que aparezca un cuadro de mensaje cuando se añada una flecha?

 
gedd:

¿Es posible actualizar NRTRvolatile para que aparezca un cuadro de mensaje al añadir una flecha?


Quizás en las funciones LongCondition y ShortCondition.

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

añadir algo como Alerta"Texto". No sé si funcionará. El caso es que ya no tengo este código en mi ordenador. Todo lo que tenía el año pasado lo guardé en el pasado:) Así que no puedo probarlo. Y todavía tengo la Nochevieja sonando en mi cabeza :)

 

En el propio indicador, en algún lugar por aquí

 // cambios de tendencia 
  
      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;
      }
 

La ruta a los archivos de inclusión debe corregirse a

#include <Expert\\ExpertSignal.mqh>
 

ambas variantes son posibles. Variante derecha

#include <Expert\ExpertSignal.mqh>

se puede ver en otros módulos en la carpeta Include\Expert\Signal