Errores, fallos, preguntas - página 168

 
Manov:

Tienes"posible uso de la variable no inicializada 'local_low'".

¿Qué dice si

Si la variable se inicializa con algo, la advertencia desaparece. Pero como puedes ver por ti mismo, la inicialización de la variable 'local_low' en este fragmento de código es innecesaria. Así que la advertencia no interfiere con la vida en absoluto.
 
Renat:

Vuelva a leer mis respuestas desde el punto de vista de un gerente de una empresa de software que ha sacado al mercado muchos proyectos de software.

De lo contrario, quedándose en el nivel de "cualquier programador", no entenderá cuál es el error.

:) Como nunca llegaré a dirigir una empresa de software, me quedaré para siempre en el nivel de "cualquier programador" (es decir, un programador aficionado, a mi entender).

...Y como el programador aficionado nunca consigue una descripción lógica del error, concluye que, o bien no hay ningún error en su trozo de código, o bien el error es tan complicado que nadie puede describirlo en el lenguaje de la lógica. Llegados a este punto, podemos considerar que ambas partes se entienden, la cuestión ha terminado.

 
Yedelkin:
Si la variable se inicializa con algo, la advertencia desaparece. Pero, como puedes ver por ti mismo, la inicialización de la variable local_low es redundante en este trozo de código. Así que la advertencia no interfiere con la vida en absoluto.
Un código concreto es probablemente sí. pero el compilador tendrá que ser lo más"infalible" posible.
 
Así que el monitor se encendió y le dijo al programador: nunca escondas la inicialización detrás de una condición, nunca uses una variable de bucle después del cuerpo del bucle, comprueba la división por cero, no multipliques las entidades innecesariamente, no escribas if (a==true) ...
 
Manov:
... El compilador tendrá que ser lo más"infalible" posible.
No lo discuto. Es una advertencia útil. Cuantas más advertencias de este tipo tenga, mejor entenderá su propio código.
 
Vigor:
... no escribir si (a==true) ...

Por cierto, en primavera tuve entrenamiento de Asesores Expertos, en el que, habiendo leído mucha literatura, inserté condiciones de tipo if(a). Pero los expertos comenzaron a trabajar sólo después de que cambié estas condiciones por condiciones como if (a==true). Ahora apenas puedo dejar este hábito.
 
Yedelkin:

Pero debido al uso de la interrupción de la variable bool en la línea 9 justo después de la inicialización de la variable local_low en la línea 8, resulta que en la línea 15 se garantizará la inicialización de la variable local_low. Así que en este punto, la advertencia "posible uso de la variable no inicializada 'local_low'" no significa "garantizado", sino sólo la posible presencia de una rama de paso en la que la variable no está inicializada.
En su ejemplo, si Ac-k=0 , el operador for no se ejecutará en absoluto y se garantizará que local_low no sea inicializado. ¿O está mal?
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 

Si enviamos una solicitud para modificar una posición con los mismos topes, obtendremos un error. Pero si envía una solicitud para modificar una orden pendiente con los mismos parámetros, la solicitud se ejecutará. ¿Es así como lo hemos planificado y no es necesario comprobar los parámetros para ver si hay cambios?

¿Por qué atascar el servidor con peticiones innecesarias, por ejemplo, en caso de un error en el Asesor Experto o una lógica incorrecta de su funcionamiento?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Valmars:
En su ejemplo, si Ac-k=0 , entonces la sentencia for no se ejecutará en absoluto y se garantiza que local_low no se inicializa. ¿O está mal?

Eso es exactamente así. Si Ac-k<=1, el operador for no debe ejecutarse en absoluto y se garantiza que la variable local_low no se inicializa. Pero como la interrupción de la variable bool sigue siendo falsa (línea 3), en virtud de la condición de la línea 13, la variable no inicializada local_low nunca (debería) ser utilizada en los cálculos. En particular, una expresión con la variable local_low de la línea 15 no debe ser evaluada [a menos que, por supuesto, la sentencia if funcione exactamente como se indica en la ayuda:) ].

En otras palabras, si se garantiza que la variable local_low no está inicializada, también se garantiza que no (debería) utilizarse en los cálculos.

 

void Graf()
{
if(
ObjectFind
(0, "H")<0) ObjectCreate(0, "H",OBJ_HLINE
,0,0,h,0);
if(ObjectFind(0, "L")<0) ObjectCreate(0, "L",OBJ_HLINE,0,0,l,0)
;
ObjectSetDouble
(0, "H",
OBJPROP_PRICE
,h)
; ObjectSetDouble(0, "L",OBJPROP_PRICE,l)
;
string bal = DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE),2)
;
string
equ =
DoubleToString
(AccountInfoDouble(ACCOUNT_EQUITY),2)
; string spread = DoubleToString(((Ask-Bid)/_Point),0)
; string space = ""
; string info= bal+space+equ+space+spread
;
if (ObjectFind(0, "info")<0) ObjectCreate(0, "info",OBJ_LABEL,0,0,0)
; ObjectSetInteger(0, "info",OBJPROP_XDISTANCE,0)
;ObjectSetInteger(0, "info",
OBJPROP_YDISTANCE
,15)
; ObjectSetString(0, "info",OBJPROP_TEXT,info)
;
ObjectSetInteger
(
0, "
info
",
OBJPROP_FONTSIZE
,36)
; ObjectSetInteger(0, "info",OBJPROP_COLOR,Maroon)
; return
; }

Aquí hay un trozo de código. La función imprime los valores de balance, equidad y spread en cada tick. Pero la información se muestra por alguna razón, no por la garrapata anterior... Por favor, ayúdenme a entender por qué. En MT4 un código similar cambia los valores con cada nuevo tick, y en MT5 con un nuevo tick se muestra la información del tick anterior.
Razón de la queja: