Discusión sobre el artículo "La escritura de un Expert Advisor mediante las librerías estándar de las clase de trading de MQL5" - página 2

[Eliminado]  
Trolls:

¿Qué estoy haciendo mal? ¿Por qué no se imprime la oferta?

Aquí está el registro de trabajo


2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0

Aquí está el código



Utilice \my_symbol.RefreshRates();\ en lugar de \my_symbol.Refresh();\. ¡Entonces funciona!
 
-Alexey-:
Utilice \my_symbol.RefreshRates();\ en lugar de \my_symbol.Refresh();\. ¡Entonces funciona!

Gracias.

Esta es probablemente una pregunta para los desarrolladores o la persona que escribe la Ayuda.

El artículo dice

mysymbol.Refresh()
Se utiliza para actualizar todos los datos de un símbolo. Cuando se especifica un nuevo nombre de símbolo para una clase, se llama automáticamente.


mysymbol.RefreshRates()
Utilizado para actualizar las cotizaciones. Cuando se establece un nuevo símbolo, se llama automáticamente.

1. Resulta que no todos los datos ?

2. Cuál es la diferencia entre especificar un nuevo símbolo y establecer un nuevo símbolo ?

3. No entiendo la palabra automáticamente. Parece que he establecido un símbolo con el comando mi_símbolo.Nombre(_Símbolo), pero la actualización no se produjo....

 
Trolls:

El artículo decía

mysymbol.Refresh()
Se utiliza para actualizar todos los datos de un símbolo. Cuando se especifica un nuevo nombre de símbolo para una clase, se llama automáticamente.

mysymbol.RefreshRates()
Se utiliza para refrescar las cotizaciones. Cuando se establece un nuevo símbolo, se llama automáticamente.

1. Resulta que no todos los datos ?

2. Cuál es la diferencia entre especificar un nuevo carácter y establecer un nuevo carácter?

3. No entiendo la palabra automáticamente. Parece que he establecido el símbolo con el comando mi_símbolo.Nombre(_Símbolo), pero la actualización no se produjo....

Ese raro momento en el que no tienes que esperar una respuesta del autor del artículo o del autor del libro de referencia :) Basta con mirar el código fuente para ver que RefreshRates() duplica completamente la función SymbolInfoTick(), que "devuelve los precios actuales del símbolo especificado en una variable de tipo MqlTick". Por lo tanto, cuando los autores dicen "sobre la actualización de las cotizaciones", en realidad están hablando de la actualización de los valores de una variable de tipo MqlTick.

2. Existe una línea de este tipo en el código fuente

void  Name(string name)  { m_name=name; Refresh();}
Esto indica que al llamar a la función Name(), sólo se activa automáticamente la función Refresh(). No he encontrado ninguna información sobre la activación automática de la función RefreshRates() al llamar a la función Name(). Por lo tanto, resulta que "a fecha de hoy" el cambio de un símbolo de la función Name() no activa automáticamente la función RefreshRates(). Tendremos que actualizar los valores de la variable de tipo MqlTick ("refresh quotes") de forma independiente y forzada.
 
Trolls:

¿Qué estoy haciendo mal? ¿Por qué Bid no se imprime? Aquí está el registro de trabajo 2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0

Aquí está el código

void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }

Aquí está la respuesta de por qué el valor Bid se imprime como cero. El código fuente muestra que la función Bid() está descrita por la línea

double  Bid()  const { return(m_tick.bid);}

Así, el valor de la función Bid() está ligado al valor de uno de los elementos de una variable de tipo MqlTick. Y esta variable no se actualiza automáticamente cuando se cambia un símbolo, sino mediante una llamada adicional de la función RefreshRates(). En su código, la función Refresh() es llamada - de hecho, es llamada dos veces (teniendo en cuenta el cuerpo de la función Name()) - y la función RefreshRates() no es llamada ni una sola vez.

[Eliminado]  
Probablemente puedas mejorar el código añadiendo una llamada a Refresh() en la parte final deRefresh(). entonces todos los datos estarán realmente actualizados.....
 
Interesting:
Tal vez pueda mejorar el código añadiendo la llamada RefreshRates () en la parte final deRefresh(). entonces todos los datos se actualizarán realmente......
He añadido la llamada RefreshRates() a la función Name(). Pero aún así - estos son parches a nivel de un usuario individual para sus necesidades.
[Eliminado]  
Yedelkin:
He añadido la llamada RefreshRates() a la función Name(). Pero aún así - estos son parches a nivel de un usuario individual para sus necesidades.

Pero si los desarrolladores ponen Refresh() en otros lugares (a su discreción) será una solución normal para la mayoría de los usuarios.

Si decimos que Refresh actualiza todos los datos, entonces todos los datos deberían ser realmente actualizados. IMHO


 
Interesting:

Pero si los desarrolladores lo ponen en Refresh() y en otros lugares (a su discreción) será una solución normal para la mayoría de los usuarios.

Si decimos que Refresh actualiza todos los datos, entonces todos los datos deberían actualizarse realmente. IMHO

No hay discusión con eso. Pero aún así, una solución normal para los usuarios sería una descripción clara y comprensible de los diseños disponibles y sus propiedades. Entonces el propio usuario averiguará cómo utilizar estos constructos. Y puesto que tal solución es difícil de conseguir debido a varias razones, aquellos que se hagan preguntas adicionales a sí mismos y a los demás avanzarán :)
[Eliminado]  
Yedelkin:
No hay nada que objetar. Pero aun así, la solución normal para los usuarios sería una descripción clara y comprensible de los diseños disponibles y sus propiedades. Entonces, el propio usuario averiguará cómo utilizar estas construcciones. Y como esa solución es difícil de conseguir por diversas razones, los que se hagan preguntas adicionales a sí mismos y a los demás avanzarán :)

No sé, yo uso la biblioteca estándar sólo con fines de estudio. Escribo todos mis proyectos en mis propios componentes.

Voy a esperar hasta que los constructores se hacen más conveniente, entonces voy a renunciar a la biblioteca estándar en conjunto....

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 

Por cierto, he descubierto que la clase CHistoryOrderInfo tiene un par de líneas como esta

return(FormatType(str,Type()));
...
FormatType(type,Type())

Pero la función Type() está ausente en la clase.