Características del lenguaje mql5, sutilezas y técnicas - página 203

 
Los comentarios no relacionados con este tema han sido trasladados a "Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos".
 

Estamos ampliando las secuencias de inicialización "{ ... }", en la próxima compilación se permitirá cualquier expresión, no sólo una constante.

En lugar de este cambio, habrá una restricción en el uso de constantes para las enumeraciones (como para una expresión normal): si una constante no es parte de un enum, se generará un error apropiado.

El análisis de los códigos existentes ha demostrado que la secuencia de un solo cero "{0}" se utiliza a menudo de forma incorrecta.

Por ejemplo, así:

MqlTradeRequest request={0};


Esta notación significa establecer el valor de cero para el primer campo de la estructura y poner a cero el resto de los campos.

Para la línea de código anterior, según las nuevas reglas, habrá un error ya que el primer campo tiene el tipo ENUM_TRADE_REQUEST_ACTIONS, una enumeración que carece del valor "0".

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


La forma correcta sería:

MqlTradeRequest request={};
 
Ilyas:

Esto es correcto:

MqlTradeRequest request={};

¿Y entonces a qué sería igual request.action?

 
mktr8591:

¿Y entonces a qué sería igual request.action?

Cero, por supuesto, ya que si se llama a ZeroMemory para el objeto de esta estructura

 

¿Cómo puedo seguir las series temporales y los indicadores basados en ellas?

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Slava, 2021.05.29 18:16

Quiero recordarles.

1. Para cada símbolo, para el que está abierto al menos un gráfico, un hilo separado está trabajando para procesar los ticks entrantes. Varios gráficos pueden estar abiertos para algún símbolo, pero seguirá habiendo un solo hilo.

2. El hilo de símbolos maneja las series de tiempo, no los gráficos. Es decir, las mismas matrices de datos que se someten a la solicitud de CopyRates.

3. es inútil preguntar a su símbolo en OnTick o OnCalculate, si está sincronizado. ¡Claro que sí!

4. Todas las series temporales se manejan en orden, de menor a mayor. Primero aplicamos el tick, y luego el cálculo de todos los indicadores, creados en esta serie temporal. Si pide datos para el mismo símbolo H1 del indicador, trabajando en M1, nunca obtendrá datos con el tick aplicado. Los datos siempre estarán un poco más atrás, independientemente de los trucos que se apliquen. Porque un hilo por símbolo con un procesamiento de tiempo consecutivo.

5. La afirmación anterior no se aplica a los EAs y a los scripts, porque los EAs y los scripts trabajan cada uno en sus propios hilos separados.


 
Andrey Khatimlianskii:

¿Cómo puedo seguir las series temporales y los indicadores basados en ellas?

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Slava, 2021.06.01 06:34

Cuando se solicita por primera vez, el indicador puede no recibir datos de su símbolo, sino de otro marco temporal, sólo por una razón: la serie temporal requerida aún no se ha construido o ya se ha destruido después de algún tiempo, cuando no había solicitudes.

Después de una solicitud fallida, sólo tiene que enviar un comando a su gráfico para actualizarlo y terminar OnCalculate inmediatamente. Está garantizado que OnCalculate será llamado y las series de tiempo estarán listas en ese momento

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.11.30 09:48

Memo

Acción/tipo de programa Cambio de TF o símbolo Cambio de cuenta
Indicador Ejecutar OnDeinit y OnInit, los cambios globales del objeto de clase (reinicio completo). No ocurre nada, excepto que prev_calculado se pone a cero.
EA Ejecuta OnDeinit y OnInit, el objeto de clase global no cambia. Ejecutar OnDeinit y OnInit, los cambios globales del objeto de clase (recarga completa).
El comportamiento destacado de los indicadores ha cambiado. Ahora es lo mismo que el EA.
 
fxsaber:
El comportamiento del indicador destacado ha cambiado. Ahora coincide con el EA.

La cuestión es diferente: ¿podría tratarse de un descuido y no de un cambio deliberado de comportamiento? ¿Lo has descubierto?

 
Artyom Trishkin:

La cuestión es diferente: ¿podría tratarse de un descuido y no de un cambio deliberado de comportamiento? ¿Lo has reconocido?

No lo hice. La retroalimentación es casi inexistente. Sin embargo, aquí hay una característica que acabo de descubrir.

const bool Init = EventSetMillisecondTimer(1);
const long Account = AccountInfoInteger(ACCOUNT_LOGIN);

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTimer()
{
  if (Account != AccountInfoInteger(ACCOUNT_LOGIN))
    Alert(TOSTRING(Account) + TOSTRING(AccountInfoInteger(ACCOUNT_LOGIN)));
}

Este Asesor Experto alerta cuando se cambia entre cuentas. Parece que no debería hacerlo según la norma.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.11.30 09:48

Memo

Acción/tipo de programa Cambio de TF o símbolo Cambio de cuenta
Indicador Ejecutar OnDeinit y OnInit, los cambios globales del objeto de clase (reinicio completo). No ocurre nada, excepto que prev_calculado se pone a cero.
EA Ejecuta OnDeinit y OnInit, el objeto de clase global no cambia. Ejecutar OnDeinit y OnInit, los cambios globales del objeto de clase (recarga completa).
Sin embargo, esto se debe al temporizador.
 
fxsaber:

Este asesor avisa cuando se cambia de cuenta. Parece que no debería hacerlo, según la norma

Sin embargo, esto sucede debido al temporizador.

Nadie ha garantizado que otros manejadores de eventos se interrumpan (o no se ejecuten).

Después de la alerta, ocurren tanto el deinit como el init, ¿verdad?