Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 890

 
evillive:

Es algo así:


Gracias, pero no es del todo correcto. Tienes varias condiciones de cierre para un mago y quieres lo contrario.

Se me ocurrió esto:

void CritCloseBuy()
   {
    if (OrderSelect(Ord, SELECT_BY_POS, MODE_TRADES)==true)
    {
      if ((OrderMagicNumber()==10011&&10033)&&(...условия1...)
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }
           if ((OrderMagicNumber()==10022&&10044&&10066)&&(...новые условия...))
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }           
          }
         }
¿Funcionará? ¿O qué pasa?
 
rapid_minus:


Gracias, pero eso no es exactamente lo que necesitas. Tienes varias condiciones de cierre para un mago, pero necesitas lo contrario.

Así es como se me ocurrió:

¿Funcionará? ¿O qué pasa?

Es... Cómo puedo decir esto con delicadeza...

¿Para qué sirveel cambio entonces, si el código es para un mago?

Pero también puedes usar ifhes si quieres, pero tenemos que pensar en las condiciones, las que tienes ahora no son como deberían ser.

Por ejemplo

if ((OrderMagicNumber()==10011&&10033)&&(...)

¿no se culparía en tiempo de compilación?

 
evillive:

Esto es... Cómo decirlo suavemente...

¿Para qué sirve el interruptor entonces, si el código es para un mago?

Tal vez no entiendo el interruptor, pero en su expresión hay un mago, que se compara con varias variantes de las condiciones de cierre.

ZS: vio la secuela. Todavía no lo he compilado porque no he terminado el código. ¿Los números no se pueden enumerar mediante una operación AND?

Entonces, ¿cómo puedo salir de ella? ¿Repite para cada mago?

ZZZY: En realidad, no es AND, sino OR.

 
rapid_minus:

Entonces, ¿cómo se sale de ella? ¿Repetirlo para cada mago?

Sí.


Y sobre un interruptor todavía debe leer una cartilla, allí por el contrario, se procesa cualquier número de variantes (caso 0:..., caso 1:..., caso N:..., donde número = valor de un mago). Me dio pereza escribir en el ejemplo, así que sólo tuve tiempo de escribir dos magos y la variante por defecto ;)

 
evillive:

Supongo que, después de todo, no hay que escribir el quirófano para cada mago.
 
rapid_minus:

Supongo que no tienes que escribir un quirófano para cada mago, ¿verdad?
Deberíamos, Fedya, deberíamos (c)
 
evillive:

Sí.


Y todavía leer una cartilla sobre un interruptor, allí por el contrario, cualquier número de variantes se procesa (caso 0:..., caso 1:..., caso N:..., donde número = valor de un mago). Me dio pereza escribir en el ejemplo, así que sólo tuve tiempo de escribir dos magos y la variante por defecto ;)

Gracias por la aclaración del cambio. Lo entendí mal.
 

Y sin embargo, en el cambio se repite la misma condición de cierre para diferentes magos que con los ifs.

La única pregunta es qué variante comerá más bits.

 
rapid_minus:

Y sin embargo, en el cambio se repite la misma condición de cierre para diferentes magos que con los ifs.

La única pregunta es qué variante comerá más bits.

¿Me he perdido algo? ¿Ya estamos optimizando el código?
 
rapid_minus:

Y sin embargo, en el cambio se repite la misma condición de cierre para diferentes magos que con los ifs.

La única pregunta es qué variante comerá más bits.

Esta es la misma ramificación que if(), sólo que se ve más ordenada y es más fácil de codificar si hay tres o más opciones simples de enteros para elegir. Si sólo hay dos opciones, o si se están comparando expresiones no numéricas, entonces sólo si(). Y mediante if() se pueden combinar varias opciones (if( opción1 && opción2 || opción3 ) {acción;}), mientras que switch no se puede utilizar directamente, sólo una a la vez.

cambiar
si()
cambiar (x)
{
caso 1: Actuar sobre la opción 1; break;
caso 2: acción sobre la opción 2; break;
caso 3: acción sobre la opción 3; break;
por defecto: acción por defecto; break;
}
if( opción1 ) { acción en la opción 1; }
else if( option2 ) { acciones por opción 2; }
else if( option3 ) { acciones por opción 3; }
else { acción por defecto; }