Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 465

 
kashi_ann:

¿Qué estoy haciendo mal?

¿Este indicador no tiene parámetros de entrada? (Me refiero a la función iCustom(...))

(Espero que aquí sólo falte un paréntesis de cierre)

Y dado que sólo estás copiando 2 elementos, ¿los estás copiando en un buffer asignado estáticamente?

 
Querida,

Abrí el código del indicador para NT7
contiene si ( v>=a && v<b)
Necesito añadir otra condición: que no sea igual a 25

¿es correcto?
if ( v>=a && v<b && v<25 && v>25)
 

Artyom Trishkin
:

1. Puede iMaOnArray()
2. ¿Quizá te has equivocado de Momentum? Indicadores --> Osciladores --> Momentum
3. Tus MAs en la subventana son extrañas. ¿De dónde lo sacas todo? Indicadores --> Tendencia --> Media móvil

Artyom, gracias por la respuesta, resulta que está en el menú... Me he equivocado de indicadores :) He hecho clic en Indicators\Momentum en la ventana "Navigator" pero se añade a una nueva subventana cada vez y se ve desordenado.
¿Podría sugerirnos qué es lo que menos carga supone para el procesador si el procedimiento se repite a menudo?
1) Colocar mi indicador (complejo) en una subventana y tomar los valores de aquí
o
2)Leer el valor del indicador mediante OnTime(), utilizando (MQL4)iCustom.
Si he entendido bien, en el caso 2) el indicador no se dibuja en la ventana, se calcula a petición. Sin embargo, no entiendo si el código ejecutable del indicador se carga una vez o cada vez que se llama...
P.D. El segundo indicador se sigue añadiendo a la nueva subventana a través del menú ... ¿Cómo añadirlo a un indicador ya existente en una subventana?

 

Александр:
Уважаемые,

открыл код индикатора к NT7
вижу в нём if ( v>=a && v<b)
а мне надо добавить ещё условие: неравно числу 25

правильно ли будет следующее?
if ( v>=a && v<b && v<25 && v>25)

Nunca funciona, porque:"v<25 && v>25" es siempre falso.

Debería ser algo así:

v!=25

 
Yury Kirillov:

Nunca funciona, porque:"v<25 && v>25" es siempre falso.

Debería ser algo así:

v!=25

¡Gracias! Sí:

si (v>=a&& v<b && (v<25|| v>25)) osi ( v>=a && v<b && v!=25)

 
Александр:
gracias! otro foro sugirió: if ( ( v>=a && v<b && (v<25|| v>25))

En el mío lo escribiría así:

{if((v>=a)&&(v<b)&&(v!=25)) 
{
        //разные действия 
}}//if((v>=a)&&(v<b)&&(v!=25)) 

 
 
Oksana Berenko:

¿Este indicador no tiene parámetros de entrada? (Me refiero a la función iCustom(...))

(Espero que se haya perdido el paréntesis de cierre aquí solamente)

Y como sólo estás copiando 2 elementos, ¿los estás copiando en un buffer asignado estáticamente?

El indicador tiene muchos parámetros de entrada.

No entiendo dónde está el paréntesis que falta.

Me temo que no entiendo lo que significa un buffer estático. Si no le importa explicarlo, por favor.

 
Mike:

Artem, gracias por la respuesta, resulta que está en el menú... Tengo los indicadores en el lugar equivocado :) Hice clic en Indicators\Momentum en la ventana del Navegador pero se agrega a una nueva subventana cada vez y se ve desordenado.
¿Podría sugerirnos qué es lo que menos carga supone para el procesador si el procedimiento se repite a menudo?
1) Colocar mi indicador (complejo) en una subventana y tomar los valores de aquí
o
2)Leer el valor del indicador mediante OnTime(), utilizando (MQL4)iCustom.
Si he entendido bien, en el caso 2) el indicador no se dibuja en la ventana, se calcula a petición. Sin embargo, no entiendo si el código ejecutable del indicador se carga una vez o cada vez que se llama...
P.D. El segundo indicador se sigue añadiendo a la nueva subventana a través del menú ... ¿Cómo añadirlo a un indicador ya existente en una subventana?

Cuando se llama a un indicador a través de iCustom(), sus búferes no se muestran en la ventana, pero hasta donde yo sé (en versiones antiguas de MT definitivamente lo era), todos los objetos gráficos mostrados por el indicador se muestran en la ventana del gráfico.

Para colocar un indicador en una ventana de otro indicador, arrástrelo con el ratón desde la ventana del Navegador a la ventana del indicador necesario.

Sobre el menor consumo de tiempo del procesador - no lo he comprobado, no lo sé.

 

ayúdame a hacer las condiciones, termina la idea, ¿es fácil poner una marca en el gráfico según la condición?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
  //+------------------------------------------------------------------+
void OnTick()
{
        // скорость тиков
        int nTicksSpeed = TicksSpeed();
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TicksSpeed()
{
        MqlTick oTicks[5];
        ZeroMemory(oTicks);
        
        int nTicksCopied = CopyTicks(_Symbol, oTicks, COPY_TICKS_TRADE, 0, 5);
        
        int nSpeed = 0;

        if(nTicksCopied > 0)
        {
                // скорость роста
                if(oTicks[0].bid > oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid && oTicks[3].bid > oTicks[4].bid)
                                nSpeed = 4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid)
                                nSpeed = 3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid)
                                nSpeed = 2;
                                
                        else if(oTicks[1].bid > 0 && oTicks[0].bid > oTicks[1].bid)
                                nSpeed = 1 ;
                        
                }
        
                // скорость снижения
                if(oTicks[0].bid < oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid && oTicks[3].bid < oTicks[4].bid)
                                nSpeed = -4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid)
                                nSpeed = -3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid)
                                nSpeed = -2; 
                        else if(oTicks[1].bid > 0 && oTicks[0].bid < oTicks[1].bid)
                                nSpeed = -1 ; 
                }
        }
        
        return(nSpeed);
}

//+------------------------------------------------------------------+

if( nTickSpeed==-1)  отмечаем это место на графике g_Label.Text("-1 ")

if( nTickSpeed==-2)  отмечаем это место на графике g_Label.Text("-2 ")

if (nTickSpeed==-3)  отмечаем это место на графике g_Label.Text("-3 ")

if( nTickSpeed==-4)  отмечаем это место на графике g_Label.Text("-4 ")




if( nTickSpeed==1)  отмечаем это место на графике g_Label.Text("1 ")

if( nTickSpeed==2)  отмечаем это место на графике g_Label.Text("2 ")

if( nTickSpeed==3)  отмечаем это место на графике g_Label.Text("3 ")

if( nTickSpeed==4)  отмечаем это место на графике g_Label.Text("4 ")
 

Podrías sustituir los "si" del final por:

   switch(nTickSpeed)
     {
      case -4:
         g_Label.Text("-4");
         break;
      case -3:
         g_Label.Text("-3");
         break;
      case -2:
         g_Label.Text("-2");
         break;
      case -1:
         g_Label.Text("-1");
         break;
      case 1:
         g_Label.Text("1");
         break;
      case 2:
         g_Label.Text("2");
         break;
      case 3:
         g_Label.Text("3");
         break;
      case 4:
         g_Label.Text("4");
         break;
     }
Razón de la queja: