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
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿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!
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....
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
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.¿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
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
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.
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.
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
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 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....
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.