Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 154

 
paladin800:
Es decir, ¿hay que convertir 1,33182 en 1,3318? Simplemente se cortaría el 5º dígito después del punto decimal o se redondearía hasta el 4º dígito, por ejemplo, se tendría 1,3318 o 1,3319 a partir de 1,33186?

Mi pregunta es si hay un error o no. Al convertir de double a int en mi ejemplo, el resultado es uno menos. Por favor, compruébelo usted mismo.

   double max=NormalizeDouble(1.33182,4);  
   //double max=1.3318;
   Alert(int(max*10000));
La alerta debería dar 13318, pero da 13317. Si no se redondea a int, dará 13318,0 correctamente.
 

Dime si hay alguna diferencia en las expresiones:

if(bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize && bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize)

и

if(( bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize) && ( bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize))
 
sgreen:

Dime si hay alguna diferencia en las expresiones:

и

Si tienes la sospecha de que algo no está bien, hazlo:

if(bufferclose[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) && bufferopen[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) )
 
Rorschach:

Mi pregunta es si hay un error o no. Al convertir de double a int en mi ejemplo, el resultado es uno menos. Compruébelo usted mismo.

La alerta debería dar 13318, pero da 13317. Así si no reducir a int, entonces da correctamente 13318.0
La alerta no da un error. La cuestión es que la normalización lleva al número a una forma binaria, que es la más cercana al análogo decimal solicitado, mientras que puede no coincidir con él en más o en menos (en su caso) lado. Ya que lo que se expresa por una fracción decimal finita, no siempre se puede expresar por binario finito. Expresión
int(max*10000)

provoca el descarte de la parte fraccionaria en lugar del redondeo (es decir, similar a MathFloor() en lugar de MathRound()), y en su caso, el número normalizado bien podría ser igual a 13318 exactamente, pero digamos 13317,9999999999997

que, cuando se emite en forma fraccionaria con un número limitado de dígitos, provoca el redondeo al resultado correcto (esperado), y cuando se descarta la parte fraccionaria de.... lo verás por ti mismo.

Espero haberme explicado con claridad.

 
pronych:
¿existe un análogo del parcial de Sharp? o ¿cómo hacerlo?

no hay ningún análogo. se puede incrustar un trozo de definición usando #include <partial_class_code.mqh>.

Algunas personas incluso imitan la herencia múltiple de esta manera. // Yo no lo hago, me acostumbré a prescindir de ello. :)

 
paladin800:

Si sospecha que algo no funciona, hágalo:

Ya lo he hecho. Sólo por curiosidad.
 
sgreen:
Ya lo hice. Sólo por curiosidad.

Ya veo. Volviendo a su pregunta anterior, la esencia del registro se puede extraer de esta comparación:

if (A<=B && C<=D)     // 1
if ((A<=B) && (C<=D)) // 2

No hay ninguna diferencia entre estas entradas. Al mismo tiempo, te recomiendo que pongas entre corchetes los cálculos matemáticos dentro de los if-os:

if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
MetaDriver:
La alerta no produce un error. La cuestión es que la normalización lleva a un número a una forma binaria, que es la más cercana al análogo decimal solicitado, mientras que puede no coincidir con él en un sentido mayor o menor (en su caso). Ya que lo que se expresa por una fracción decimal finita, no siempre puede expresarse por una fracción binaria finita . Expresión

resulta en descartar la parte fraccionaria en lugar de redondear (es decir, se parece más a MathFloor() que a MathRound()), y en su caso el número normalizado podría ser 13317.999999999999997 en lugar de 13318 exactamente.

que, cuando se emite en forma fraccionaria con un número limitado de dígitos, provoca el redondeo al resultado correcto (esperado), y cuando se descarta la parte fraccionaria de.... lo verás por ti mismo.

Espero haberlo explicado claramente.

Gracias, ya veo.

Otra pregunta, ¿cómo puedo luchar contra esto si no puedo prescindir de la conversión a int?

 
¿Me puedes decir cómo tener en cuenta la comisión del broker a la hora de probar un EA?
 
Rorschach:

Gracias, ya veo.

Otra pregunta, ¿cómo se hace frente a esto si no se puede prescindir de la transferencia a int?

y añades un par de epsilones.

DBL_EPSILON

El número más pequeño para el que se cumple la condición 1,0+DBL_EPSILON != 1,0


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