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

 
Vikon:

¡Hola!

No consigo averiguar qué intervalo debe mostrar un objeto gráfico

en todos los plazos.

Gracias.

OBJ_ALL_PERIODS=2097151

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов - Документация по MQL5
 
C-4:
¿Alguien sabe si el compilador tiene una clave para obtener mensajes sobre las funciones y variables no utilizadas, como se hace en MQL4?

¿Cómo se hace esto en mql4?

Al preguntarle sobre la posibilidad de no mostrar advertencias sobre las funciones no utilizadas, Renat dijo que no lo haría. En relación con el uso de bibliotecas enchufables. Solía estar en la antigua construcción. Ahora no lo es. Resulta muy incómodo buscar en el cuerpo de la EA aquellas funciones que no se utilizan. Sólo habla de variables no utilizadas si las encuentra en el cuerpo de una función, no en start() o OnTick()

 
artmedia70:

¿Cómo se hace en mql4?

Al preguntarle sobre la posibilidad de no mostrar advertencias sobre las funciones no utilizadas, Renat dijo que no lo haría. Debido al uso de las bibliotecas de plugins. Solía estar en la antigua construcción. Ahora no lo hace. Resulta muy incómodo buscar en el cuerpo de la EA aquellas funciones que no se utilizan. Sólo habla de variables no utilizadas si las encuentra en el cuerpo de una función, no en start() o OnTick()

Porque en POO no son funciones, sino métodos. Cada biblioteca puede tener un montón de clases con muchos métodos, algunos de los cuales no se utilizan. Además, las clases también hacen referencia a otras bibliotecas, algunos de cuyos métodos tampoco se utilizan. Esto puede dar lugar a un enorme desorden de métodos no utilizados.

A juzgar por la cantidad de código compilado, el compilador elimina automáticamente los métodos no utilizados. Es decir, no tiene sentido buscarlos por uno mismo, porque este trabajo lo hace el compilador.

 
Reshetov:

Porque en POO, no son funciones, sino métodos. Cada biblioteca puede tener un montón de clases con muchos métodos, algunos de los cuales no se utilizan. Además, las clases también hacen referencia a otras bibliotecas, algunos de cuyos métodos tampoco se utilizan. Esto puede dar lugar a una enorme pila de métodos no utilizados.

A juzgar por el tamaño del código compilado, el compilador elimina automáticamente los métodos no utilizados. Es decir, no tiene sentido buscarlos por uno mismo, porque el compilador hace este trabajo.

Este no es el problema. El problema es exactamente encontrar métodos no utilizados en sus clases. Tengo más de quinientos métodos propios. Las interrelaciones son muy complejas. El código de tiempo de ejecución es inevitable. Puede ser muy útil echar un vistazo a lo que ya no se utiliza.
 
Reshetov:

Porque en POO, no son funciones, sino métodos. Cada biblioteca puede tener un montón de clases con muchos métodos, algunos de los cuales no se utilizan. Además, las clases también hacen referencia a otras bibliotecas, algunos de cuyos métodos tampoco se utilizan. Esto puede dar lugar a una enorme pila de métodos no utilizados.

A juzgar por el tamaño del código compilado, el compilador elimina automáticamente los métodos no utilizados. Es decir, no tiene sentido buscarlos por uno mismo porque el compilador hace este trabajo.

Yuri, esto es natural. Pero cuando das el código fuente a un cliente, quieres limpiarlo. Y así comienza el tortuoso proceso. No hay muchas plantillas - varias para ciertas clases de CT. Tengo que limpiar las funciones que no están involucradas en este caso. Me gustaría tener un "botón mágico" que apunte a las funciones y variables no utilizadas sólo en el cuerpo del EA.
 

Espero que la discusión de la pregunta anterior haya terminado. Es difícil saber cuándo el tema está cerrado y es apropiado hacer su pregunta. ¿Puedes darme una pista? No puedo averiguar cómo llenar un array 2D con los resultados de los cálculos deSt_handle yMA_handle, sólo puedo pasarlos a un array unidimensional.

/+------------------------------------------------------------------+
//|                                                           11.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input int      Input1=0;
input int      Input2=0;

//--- indicator buffers
double         Label1Buffer[];
double      MA[10000][400];  
int         St_handle; 
int         MA_handle; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int Kp     =51; // с Kp начанается К% на Kp_end заканчивается
   int Kp_end =400;// с Kp начанается К% на Kp_end заканчивается
   int MAp    =2;  // с MAp начанается D% на MAp_end заканчивается
   int MAp_end=31// с MAp начанается D% на MA_end заканчивается
   ENUM_STO_PRICE price_field=1; // цена расчета стохастика 0 Low/High    1 Close/Close


   St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field);  
  
   for(MAp=2;MAp<MAp_end;MAp++)
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle);
   }
    
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
C-4:
Este no es el problema. El problema es exactamente encontrar métodos no utilizados en sus clases.

¿Qué quiere decir: métodos no utilizados en sus clases? Esta no es la práctica en OOP. Un programador normal de POO, a diferencia de la programación algorítmica, crea clases con todos los campos y métodos necesarios, como se dice, para todas las ocasiones, ya que la misma clase puede ser utilizada posteriormente en otras aplicaciones o pasar a formar parte de la biblioteca de clases. Por no mencionar el hecho de que incluso dentro de un proyecto es mejor crear clases completas, no despojadas, para no tener que buscar en el código fuente y añadir los campos y métodos necesarios más tarde.

En OOP cualquier economía, a la que mucha gente se acostumbra en la programación algorítmica, puede resultar perjudicial más adelante. Todo lo que no se utiliza debe ser excluido del código por el compilador y no por el programador.

Por supuesto, la programación orientada a objetos da lugar a un código fuente más grande en comparación con la programación algorítmica. Pero esto no es una desventaja, sino una ventaja, porque gran parte del código "extra" de este proyecto puede reutilizarse en otros proyectos.

C-4:


Tengo más de quinientos métodos propios. Las interrelaciones son muy complejas. El código rudimentario es inevitable. Es muy útil para ver rápidamente lo que ya no se utiliza.

No hay que tratar de hacer un acertijo, es decir, meter todo en una sola clase. Tienes que crear bibliotecas de clases, es decir, dividir la funcionalidad en clases separadas y no te olvides de incluir comentarios en estas cosas y entonces todo se arreglará por sí solo. Al principio, cuando empecé a aprender Java después de Pascal, yo también intenté hacerlo todo de una sola vez, es decir, en lugar de utilizar la POO, creé una clase con todo lo que necesitaba para una determinada tarea, al igual que en la programación algorítmica. El resultado era un lío no universal que era imposible de aplicar en cualquier lugar posteriormente, por no mencionar que era difícil de entender dicho código.
 
Andrei-1:

¿Puedes darme una pista? No consigo averiguar cómo llenar un array bidimensional con los resultados de los cálculos deSt_handle yMA_handle, sólo puedo pasarlos a un array unidimensional.

¿Qué sentido tiene? Es decir, ¿por qué hacer una joroba en lugar de utilizar la navaja de Occam? Es decir, ¿cuál es la ventaja de una matriz bidimensional sobre dos matrices unidimensionales? Al fin y al cabo, primero hay que meter algo de dos unidimensionales creadas por indicadores por defecto en una bidimensional, y luego sacar algo de ahí. Estás haciendo un trabajo innecesario y tratando de arrastrar a los demás.

Si hubiera un problema con las matrices unidimensionales, entonces valdría la pena.

 
Después de husmear en el foro me encontré con la cantidad de memoria que esto va a tomar, ¡mucho! Decidí llenar un array unidimensional, buscar una señal en él, sobrescribir y buscar una señal de nuevo. todavía quiero 10K ciclos. Así. Una o dos búsquedas por hora son suficientes para mí.
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field); // создание хэндла стохастика 
  
   for(MAp=1;MAp<MAp_end;MAp++) //перебор сглаживаний 
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle); // создание хэндла сглаженного стохастика
    CopyBuffer(MA_handle,0,0,400,MA); // заполнение одномерного массива значениями стохастика
    if(MA[1]>6) Alert(MA[1]); // начинается поиск сигнала
    
   }
 

Lo siento si esto se sale del tema...

ayuda que puede ...

en el procedimiento dll de delphi 7...

procedure test1(var data: array of Double); stdcall;
begin
ShowMessage('Entered ');

fin;

en mt4 :

#importar "gayss.dll"
void test1( double &data[] );
#importar

ArrayResize(data, 6);
data[0]= 2;
data[1]= 4;
data[2]= 8;
data[3]= 16;
data[4]= 21;

datos[5]= 3;

prueba1(datos);

y aparece un error... 2014.02.06 17:39:04.241 pila dañada, comprobar llamada a función DLL en 'SOG_2014.mq4' (80,7)

Quien sabe cómo hacerlo bien...