Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 854

 
yiduwi:

Ayuda, ¿cómo puedo averiguar la primera coordenada temporal de la línea de tendencia?

long  ObjectGetInteger( 
   long     chart_id,         // идентификатор графика 
   string   object_name,      // имя объекта 
   int      prop_id,          // идентификатор свойства 
   int      prop_modifier=0   // модификатор свойства, если требуется 
   );
 

¿Por qué no puedo hacer lo siguiente? Declaro una variable y un array globalmente y quiero asignar el valor de la variable al array inmediatamente.

int yo=6;
int masss[4]={0,0,yo,0};

Y el mismo problema con las funciones, si asignas una variable a un argumento, falla

void Fulr(int ty=yo){}
 
Seric29:

¿Por qué no puedo hacer lo siguiente? Declaro una variable y un array globalmente y quiero asignar el valor de la variable al array inmediatamente.

Y el mismo problema con las funciones si asignas una variable a un argumento, falla

Документация по MQL5: Основы языка
Документация по MQL5: Основы языка
  • www.mql5.com
Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные экспертные системы, предназначенные для...
 
Alekseu Fedotov:

Gracias.

 
Artyom Trishkin:

Aparentemente, es imposible decirlo con normalidad. En C++ sí se puede, creo que es porque mql4 trabaja a través de un descriptor, es decir, no tiene acceso directo a la memoria, porque cada valor tiene una dirección y si se accede a esa dirección se puede saber lo que hay, eso hace que mql4 sea excesivamente estático y limita muchas posibilidades, sobre todo trabajar con arrays.

 

¿Es posible hacer dos temporizadores en el EA? Por alguna razón pensé que OnTimer() era llamado en un hilo separado. Pero intenté añadir un bucle infinito en OnInit() y poner el temporizador antes, sólo funcionó el bucle, OnTimer() no fue llamado.

Necesito que dos acciones independientes se ejecuten constantemente en el temporizador. Cada uno con su propio intervalo. ¿Cómo se puede aplicar esto, lo sabe?

 
leonerd:

¿Es posible hacer dos temporizadores en el EA? Por alguna razón pensé que OnTimer() era llamado en un hilo separado. Pero traté de añadir un bucle infinito en OnInit() y poner el temporizador antes, sólo el bucle funcionó, OnTimer() no fue llamado.

Necesito que dos acciones independientes se ejecuten constantemente en el temporizador. Cada uno con su propio intervalo. ¿Cómo se puede aplicar esto, lo sabe?

Por ejemplo: cuenta hasta cien y ejecuta el primer código, cuenta hasta 150 y ejecuta el segundo código. Pero en el buen sentido, deberías hacerte una clase de multimedios.
 
Artyom Trishkin:

En este hilo quiero empezar a ayudar a aquellos que realmente quieren entender y aprender a programar en el nuevo MQL4 y quieren cambiar fácilmente a MQL5 - los lenguajes son muy similares.

Este blog será un buen lugar para discutir las tareas, los algoritmos de su solución y cualquier otra cuestión relacionada con la programación de MT de una manera u otra.

Espero que otros miembros experimentados de nuestro foro se unan a la discusión y la rama sea interesante para todos.

Buenas tardes. Estoy escribiendo un Asesor Experto de prueba para el autoestudio y la experiencia práctica. Ahora puede recibir una señal del indicador y tiene la función para abrir posiciones de COMPRA y VENTA ( Open_BUY_SELL() ). Hice esta función a partir de algunos scripts publicados en CodeBase.

PREGUNTA - ¿Puedo pedirle a algún entendido en este hilo que revise este código para que no sea engorroso? ???

Tengo dudas y temores especiales en estos lugares:

    m_trade         = new CTrade();
    m_symbol        = new CSymbolInfo();   
    m_position_info = new CPositionInfo();   
    m_account       = new CAccountInfo();
    
    m_symbol.Name(Symbol());
    m_symbol.RefreshRates();

¿Es apropiado escribir esto dentro de una función? ¿Merece la pena trasladarlo a OnInit()? Hice la función a partir de dos scripts, archivos fijados en el post

CEngine        engine;
CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;

CTrade         *m_trade;
CSymbolInfo    *m_symbol;
CPositionInfo  *m_position_info; 
CAccountInfo   *m_account;

Este lugar también es confuso, si entiendo bien - los objetos de las mismas clases se duplican entre sí. Sólo he dejado algunas declaraciones de trabajar con el indicador y otras de rehacer los scripts en una función.


Todavía no he conectado la función con la señal, quiero entender y limpiar el código primero. Entiendo que he cometido un error en alguna parte, pero aún me faltan conocimientos y experiencia para entender exactamente dónde y cómo corregirlo.

Por favor, apoyen.

 

Archivos adjuntos - EA, dos scripts e indicador.

El compilador no jurará, no hay errores que buscar, sólo algunas consideraciones estratégicas/tácticas, en cuanto a si está bien hacerlo, y si no, cómo debería haberse hecho.

Por favor.

Archivos adjuntos:
 
Artyom Trishkin:
Pero en el buen sentido - la clase multitimer necesidad de hacer.

no se pueden complicar las tareas sencillas ... dijo Me, que envolvió ociosamente la nueva función de definición de la barra en una clase ))))

al grano:

leonerd:

¿Es posible hacer dos temporizadores en un EA? Por alguna razón, pensé que OnTimer() era llamado en un hilo separado. Pero intenté añadir un bucle infinito en OnInit() y poner el temporizador antes, sólo funcionó el bucle, OnTimer() no fue llamado.

Necesito que dos acciones independientes se ejecuten constantemente en el temporizador. Cada uno con su propio intervalo. ¿Sabe cómo se puede aplicar esto?


#property strict
//--- input parameters
input int      Timer1=13;
input int      Timer2=21;
static int timer1=0,timer2=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if((timer1++)>Timer1) { timer1 = 0; Print("Timer №1"); }
   if((timer2++)>Timer2) { timer2 = 0; Print("Timer №2"); }
  }
//+------------------------------------------------------------------+
Razón de la queja: