Errores, fallos, preguntas - página 313

 

Por alguna razón no puedo obtener el beneficio actual de la cuenta en la función OnTester

Así es como obtengo 0

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_PROFIT));

Y así es como obtengo beneficios:

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_BALANCE)-100000);

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
stringo:

¿De qué estamos discutiendo? No ponemos

P.D. Seguro que hay un mensaje (quizás unas líneas más abajo)


Glory estoy de acuerdo - todas estas discusiones son tan largas, que se jodan ( discusiones ). :)

Pero entonces, lo que se llama en la pierna - usted, estoy seguro, sabe todo perfectamente bien a ti mismo, pero aún así, si esta función es externa y declarado sólo a través de una declaración, hay tales modificadores como "const" y "en" y "fuera". Tal vez haya un fallo en esta función. La cosa es que si es un parámetro retornable se da un aviso si no se devuelve (en caso de que se devuelva mediante "return") y teniendo una segunda forma de función, cuando el valor de retorno se devuelve mediante un parámetro, también debería darse un aviso, porque es un valor retornable. De lo contrario, si el resultado de éxito/fracaso se devolviera a través de un parámetro y el propio valor se devolviera a través del retorno, sería imposible. Y el éxito o el fracaso también se devuelve SIEMPRE. En otras palabras - ( http://users.telenet.be/bart.demeyere/C++InOutParameters.html ) aquí hay una solución que existe desde hace mucho tiempo.


Pero la conversación en general como que no me di cuenta de nada. En mi opinión, es necesario responder a estas preguntas, si no tiene previsto cambiar nada cardinalmente en la implementación actual algo como esto :) - "Sí, existe ese problema, se solucionará en las próximas versiones del programa, ahora hemos arreglado el código, y sólo estamos arreglando errores". Nadie ( creo que hasta el más inadecuado) se va a ofender, pero simplemente arreglar el problema en sí es importante y necesario.


Así que si habrá o no en esta versión tales modificadores muy ( MUY ) útiles en out y otros, permiten significativamente para minimizar los errores.


***

Tardaremos medio día en hacer toda esta correspondencia. He terminado. :)

 
Erm955:

Por alguna razón no puedo obtener el beneficio actual de la cuenta en la función OnTester

Así es como obtengo 0

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_PROFIT));

Y así es como obtengo beneficios:

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_BALANCE)-100000);


Declare una variable global y asigne el valor del saldo actual en OnInit().

En OnTester() calcula el beneficio total basándose en los resultados de todas las transacciones completadas:

Профит=ТекущийБбаланс - Начальный баланс

y la salida en OnTester().


Y lo que se intenta obtener ahora es el beneficio actual no fijado , que es cero si se cierran todas las posiciones.

 
Academic:


Glory estoy de acuerdo - todos estos debates consumen mucho tiempo, no te molestes con ellos ( debates ). :)

Habrá en esta versión tales modificadores muy ( MUY ) útiles en out y otros, permiten minimizar los errores.

"¿De qué estamos discutiendo?" - es una frase de mi infancia que significa "¿de qué estamos discutiendo?

Pasar un parámetro por referencia es exactamente lo que significa inout. Simplemente hay implementaciones que están fuera del control del compilador.

De hecho, es bastante fácil analizar el flujo de ejecución introduciendo funciones (el ejemplo que proporcionó Rashid). Hemos rechazado deliberadamente este enfoque. El motivo era que aumentaría considerablemente nuestro tiempo de compilación. Por eso elegimos la forma más sencilla: mostrar una advertencia. ¿Es mejor no hacer esa advertencia? Sí, deberías. Si se hace una inicialización explícita, no habrá ninguna advertencia.

También repito que tenemos una estimación abreviada para las expresiones lógicas. Significa en su caso que si el primer ObjectGetDouble devuelve false (por ejemplo, porque el objeto, fíjese el externo al programa, de repente no existe), el segundo ObjectGetDouble no será llamado

Документация по MQL5: Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this
Документация по MQL5: Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this
  • www.mql5.com
Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this - Документация по MQL5
 
stringo:

"¿De qué estamos discutiendo?" - es una frase de mi infancia que significa "¿de qué estamos discutiendo?

Pasar un parámetro por referencia es exactamente lo que significa inout. Simplemente hay implementaciones que están fuera del control del compilador.

De hecho, es bastante fácil analizar el flujo de ejecución introduciendo funciones (el ejemplo que proporcionó Rashid). Hemos rechazado deliberadamente este enfoque. El motivo era que aumentaría considerablemente nuestro tiempo de compilación. Por eso elegimos la forma más sencilla: mostrar una advertencia. ¿Es mejor no hacer esa advertencia? Sí, deberías. Si se hace una inicialización explícita, no habrá ninguna advertencia.

También repito que tenemos una estimación abreviada para las expresiones lógicas. Significa en tu caso que si el primer ObjectGetDouble devuelve false (por ejemplo, porque el objeto, fíjate el externo al programa, de repente no existe), el segundo ObjectGetDouble no será llamado


Correcto, no será llamado - este es un comportamiento estándar en el código C.

Los modificadores de entrada y salida pueden ser adicionales a las referencias. Y por defecto siempre están dentro y fuera de las referencias. Pero puedo pasar una referencia con el modificador in, lo que significa que el parámetro de esta función es siempre de entrada y no es posible escribir en él aunque se pase por referencia. ¿Has leído? http://users.telenet.be/bart.demeyere/C++InOutParameters.html


in: se leerá el parámetro (advertencia cuando no se lea en cada rama*)
(en: se leerá el parámetro (advertencia cuando no se lea en ninguna parte)
out: se escribirá el parámetro (advertencia cuando no se escribe en cada rama*)
(out): el parámetro puede ser escrito (advertencia cuando no se escribe en ninguna parte)
in sin out: el parámetro no se puede escribir en
out sin in: el parámetro no puede ser leído antes de ser escrito.
*en cada rama: en todos los flujos normales posibles a través de la función (ambas ramas en una sentencia if, todas las ramas en una sentencia case,... ), pero no cuando se lanza una excepción. Esta es la misma restricción que para una sentencia return, no tener un comportamiento indefinido.


Y sobre todo, introducir las palabras clave in y out, puede ayudarnos a encontrar algunos problemas ya en tiempo de compilación. ¿Y no queremos todos encontrar errores lo antes posible

 

Hay un modificador const. Pasar una referencia constante implica explícitamente un parámetro in sin ningún out. Definitivamente no introduciremos entidades adicionales in, out, inout

 
stringo:

Hay un modificador const. Al pasar una referencia constante se asume explícitamente el parámetro in sin ningún out. Definitivamente no introduciremos entidades adicionales in, out, inout

Si no lo haces, no lo harás. Pero debes darte cuenta de que entonces no conseguirás una optimización decente. Y si hubiera habido OUT en ese ejemplo, no se habría generado la advertencia. Pero todo en vano - IMHO - te llevará tres minutos pero hay muchos menos errores. Y si no quieres usarlo, no lo uses. Entonces todo es como siempre. Como ahora. :)


¿Cómo se hace sólo OUT sin IN? Lo que significa que siempre se devuelve algo, ya sabes, como el retorno de una función.

 

Los promotores.

1. ¿Supongo que el diferencial de los principales pares ha sido martillado desde mayo de 1993, unas 930 barras semanales en el momento actual?

Y en la historia profunda los bares se construían a base de días.

Por lo tanto, el Asesor Experto puede ser probado exactamente a partir de mayo de 1993 (si utilizamos un TF no inferior a D1)?

¿Podemos mirar más allá del 9 de mayo de 1993 en el GBPUSD (como se implementa en el EURUSD)?
 

Hola.

¿Puede explicar por qué al crear un objeto"Etiqueta gráfica" manualmente, no tiene el archivo bmp especificado para los estados de encendido y apagado?

Aquí está el código:

ObjectCreate(....);

.......

ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 0, "Images\on.bmp");
ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 1, "Images\off.bmp");

La etiqueta se crea de forma completamente correcta, en la posición especificada, con los colores especificados, etc., pero no se especifican "Images\on.bmp" y "Images\off.bmp". Si en la guía de MT5
haga clic en la lista de objetos y establezca estos archivos para el marcador manualmente, se establecerán. Pero, ¿por qué no lo hace ObjectSetString?

¿Qué te parece?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
MathX:

¿Qué te parece?

Prueba con

ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 0, "\\Images\\on.bmp");
ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 1, "\\Images\\off.bmp");


Pronto habrá cambios en el certificado.
Razón de la queja: