Una pregunta para los expertos en MQL - página 16

 
artmedia70:

¿Existe tal símbolo?

¡¡¡Muchas gracias!!! Nunca habría encontrado un fallo así... En los libros de texto escriben muchas tonterías, y yo sólo copio sin mirar...
 

¿Podría decirme dónde está el error? ¿Por qué los resultados son diferentes?

//+------------------------------------------------------------------+
//|                                                       TestFr.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double FrUpz=0;
   double FrUp1 = GetFractal("0", 0, 1, MODE_UPPER);
   double FrUp2 = GetFractal("0", 0, 2, MODE_UPPER);
   double FrUp3 = GetFractal("0", 0, 3, MODE_UPPER);
   Print("# FrUp1=",FrUp1);
   Print("# FrUp2=",FrUp2);
   Print("# FrUp3=",FrUp3);
   for(int z=1;z<=3;z++)
      {
       FrUpz = GetFractal("0", 0, z, MODE_UPPER);
       Print("z=",z," FrUpz=",FrUpz);
      } 
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;
  for (i=3; i<k; i++) {
    if(mode==MODE_LOWER){
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iLow(sy,tf,i));
     } 
    }
    if(mode==MODE_UPPER){
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iHigh(sy,tf,i));
      }
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

Resultado:

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083

 
khorosh:

¿Podría decirme dónde está el error? ¿Por qué los resultados son diferentes?

Resultado:

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083


Para facilitar el control, la función se modifica ligeramente para devolver el número de compás

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i,k=iBars(sy,tf),kf;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }
//+------------------------------------------------------------------+

Resultado

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=3 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=2 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp1=13.0


 

Se ha añadido la inicialización explícita de todas las variables

double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i=0,k=iBars(sy,tf),kf=0;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }

Resultado

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

Necesidad de mostrar a los desarrolladores. Algo no está bien en las funciones

 

Me he dado cuenta de que el código

Print(ChartID()," ",ChartGetInteger(ChartID(),CHART_HEIGHT_IN_PIXELS,0))

colocado en el indicador produce resultados extraños. Por ejemplo, si está abierta la pestaña del gráfico, en la que se ha restablecido el indicador, los resultados de la altura de la ventana del gráfico principal son correctos.

Sin embargo, en cuanto salgo del gráfico "nativo" el resultado, por alguna razón, pasa a ser igual a 75 (por supuesto, en otros casos los resultados pueden ser diferentes), pero el valor del ID del gráfico sigue siendo el mismo.

Cuando vuelvo al gráfico "nativo", los valores de altura se vuelven correctos.

Una gran petición a los desarrolladores y a los "entendidos" para que expliquen cuál es la peculiaridad en este caso. ¡¿Es realmente la forma en que se pretendía?! ¡No lo puedo creer!

Si este es el caso, por favor sugiera el código que da el valor de altura correcto para el gráfico nativo cuando cualquier pestaña está abierta.
 
Vinin:

Se ha añadido la inicialización explícita de todas las variables

Resultado

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

Tenemos que mostrar a los desarrolladores. Algo no está bien en las funciones

Gracias por prestar atención a mi pregunta. Resulta que la causa era sólo porque dos variables de la función no estaban explícitamente inicializadas. Tendré que revisar todas las funciones de Kim y arreglarlo.
 

Buenas tardes.

El código de EA involucra el f-i de I.Kim. Lo que implica llamar a las bibliotecas "montadas". Se proporciona el código después de los "parámetros externos":

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

Sin embargo, accidentalmente (después de la misma actualización de mt4 - EA no funciona) me di cuenta de una extraña entrada en la ventana "propiedades de EA", pestaña "dependencias":

¿Pueden decirme qué significa este error y cómo solucionarlo (si ambas bibliotecas siguen estando presentes en la carpeta Include)? ¿Qué tiene que ver la carpeta Bibliotecas con esto?

 
Rita:

Buenas tardes.

El código de EA involucra el f-i de I.Kim. Lo que implica llamar a las bibliotecas "montadas". Se proporciona el código después de los "parámetros externos":

Sin embargo, accidentalmente (después de la misma actualización de mt4 - EA no funciona) me di cuenta de una extraña entrada en la ventana "propiedades de EA", pestaña "dependencias":

¿Pueden decirme qué significa este error y cómo solucionarlo (si ambas bibliotecas siguen estando presentes en la carpeta Include)? ¿Qué tiene que ver la carpeta Bibliotecas con esto?


stderror.mqh importa la función ErrorDescription de la biblioteca stdlib.ex4, que se encuentra en la carpeta Libraries, junto con el código fuente. Comprueba si tienes este archivo ahí, si no, consíguelo desde cualquier otro terminal.
 

Ambas carpetas (Incloud y Libraries) contienen fuentes stdlib. Por si acaso, he añadido-copiado de la carpeta de Incloud.

Pero el error descrito anteriormente sigue apareciendo en la pestaña "dependencias". Tal vez cambiar de alguna manera la llamada de estas funciones: En lugar de:

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

¿Poner la llamada de alguna otra manera?

¿O será imposible utilizar las funciones de I.Kim en la última versión de mt4 ahora?

 
Rita:

Ambas carpetas (Incloud y Libraries) contienen fuentes stdlib. Por si acaso, he añadido-copiado de la carpeta de Incloud.

Pero el error descrito anteriormente sigue apareciendo en la pestaña "dependencias". Tal vez cambiar de alguna manera la llamada de estas funciones: En lugar de:

¿Poner la llamada de alguna otra manera?

¿O será imposible utilizar las funciones de I.Kim en la última versión de mt4 ahora?


Asegúrate de que hay un archivo ejecutable stdlib.ex4 en la carpeta Libraries, aunque parece que no es de Kim, es un archivo estándar de la entrega.


Otra posibilidad es ver lo que saca la función Kim y averiguar qué es lo que falla.