[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 318

 
Zhunko:
No lo he comprobado, pero de alguna manera.


Gesto completamente inútil suficiente double res=NormalizeDouble(res,1) matemáticamente todavía manejar double res = 3; o double res = 3.0;

La diferencia sólo será visible en la impresión (gráfico), pero esto no está en la descripción del autor del problema.

 
FAQ:


Gesto completamente inútil suficiente double res=NormalizeDouble(res,1) matemáticamente todavía manejar double res = 3; o double res = 3.0;

La diferencia sólo será visible en la impresión (gráfico), pero esto no está en la descripción del autor del problema.

Bueno, puedes hacerlo de esta manera:

double MathRoundDec(double dValue) 
 {
  return(MathRound(10 * dValue) / 10);  
 }
Creo que la primera variante es mejor. Funcionará más rápido.
 
Zhunko:

Bueno, podría ser así:

Creo que la primera opción es la mejor. Funcionará más rápido.


Esta opción.

 double res=NormalizeDouble(res,1);

debería ser el más rápido

 
Gracias a todos. El lunes te informaré, ¡probaré todas las opciones!
 
La versión de Vadim es un 20-25% más rápida, pero el efecto empieza a aparecer de forma constante cuando el número de iteraciones supera el millón. (comprobado)
 
FAQ:
La versión de Vadim es un 20-25% más rápida, pero el efecto empieza a aparecer de forma constante cuando el número de iteraciones supera el millón. (comprobado)

Muéstrame el código, ¿cómo lo has comprobado?
 
FAQ:
La versión de Vadim es un 20-25% más rápida, pero el efecto empieza a aparecer de forma constante cuando el número de iteraciones supera el millón. (probado)
¡Muchas gracias!
 
okvseok:

la forma correcta de escribirlo: if (OrderSelect (OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY) == OrderTakeProfit() == OrderClosePrice()) Stop=false // es decir, si la última orden del final cerró en Take Profit (toma de beneficios al alcanzar un determinado nivel), el Stop=false? (Parada en las variables globales)

esta pregunta ha surgido porque la orden se abre por una condición if((iClose(NULL,0,1)<ma) && Stop==True)...

 

Nunca comparar, tomas no normalizadas, inútil. Y por cierto, el precio de cierre de una orden de toma puede ser diferente del precio de toma (real/demo (online))

Por lo tanto, sería más correcto medir el módulo de diferencia de precios, comparándolo con el valor de prueba.

if(MathAbs(OrderTakeProfit()-OrderClosePrice())<2*Point){Stop=false;}
 
Vinin:

Muéstrame el código, cómo lo has probado

   double in = 3.24857,res;
   int i, pretime = GetTickCount();
   for(i=0;i<1000000;i++){res=MathRound(in*10)/10;}
   Print("Stage 1 : ",GetTickCount()-pretime);
   pretime = GetTickCount(); 
   for(i=0;i<1000000;i++){res=NormalizeDouble(in,1);}
   Print("Stage 2 : ",GetTickCount()-pretime);  
Me sorprendió a mí mismo :)))
Razón de la queja: