Una pregunta para los expertos en MQL - página 7

 

Hasta ahora está funcionando. Una pregunta más.

Hay otro trozo de código como este.

 
if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) {
        switch (OrderMagicNumber()) {
            case 212:  MMMMM = 12;   break;
            case 211:  MMMMM = 11;   break;
            case 210:  MMMMM = 10;   break;
            case 209:  MMMMM = 9;    break;
                                    }

¿Sería correcto sustituirlo por -

if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 
     {     
            if ( OrderMagicNumber()==Magic_212)  MMMMM = 12;   
            if ( OrderMagicNumber()==Magic_211)  MMMMM = 11;   
            if ( OrderMagicNumber()==Magic_210)  MMMMM = 10;   
            if ( OrderMagicNumber()==Magic_209)  MMMMM = 9;    
     }
 
Miro sus ejercicios y pienso para mí:
- Empiezas unos cuantos magos
- entonces llevas la cuenta de los números de los magos y dependiendo del número asignas el valor numérico apropiado a la variable MMMMMM

Pregunta: ¿no es más fácil asignar este valor a un asistente una vez en el inite y luego utilizarlo?
 
Rita:

Hasta ahora está funcionando. Una pregunta más.

Hay otro trozo de código como este.

¿Sería correcto sustituirlo por -


if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 
     {     
            MMMMM = OrderMagicNumber()-200;   
     }
Es, por supuesto, sólo para este caso particular
 

Gracias. para las respuestas.

No, granit77, - ese no es exactamente el caso.

Me han pedido que arregle-refine el EA de otra persona (- mover los magos a global). Son 1800 líneas de código y complejos algoritmos de interacción de órdenes con diferentes magos.

Simplemente no puedo dedicar físicamente el tiempo necesario para estudiar estos complicados circuitos de control. Me parece más fácil sustituir las magias digitales por las "globales" y fijar esas magias en algunas funciones de forma puramente mecánica (sin profundizar en ellas).

 
Rita:

Gracias. para las respuestas.

No, granit77, - ese no es exactamente el caso.

Me han pedido que arregle-refine el EA de otra persona (- mover los magos a global). Son 1800 líneas de código y complejos algoritmos de interacción de órdenes con diferentes magos.

Simplemente no puedo dedicar físicamente el tiempo necesario para estudiar estos complicados circuitos de control. Me parece más fácil sustituir las magias digitales por las "globales" y fijar esas magias en algunas funciones de forma puramente mecánica (sin profundizar en ellas).


¿Dónde ha ido Leonid?
 
Comercia. Finge que no tiene tiempo. Está haciendo "pasta" de arbitraje en el diferencial oro-plata.
 
Rita:
Comercia. Finge que no tiene tiempo. Está haciendo "pasta" de arbitraje en el diferencial oro-plata.
Bueno, si pone el dinero en el cajón, finge creer en el arbitraje.
 
Sí, - eso es lo que estoy haciendo...

--------------------------

Y probablemente la última pregunta.

Aquí está esta parte del código:

//double getNextOrderPriceByNum(int TTTT, double DDDD) {

   if (StepSum == FALSE && StepMultiply == FALSE) {

      switch (TTTT) {
      case 101:
         return (DDDD - Step * Point);
      case 102:
         return (DDDD - Step * MathPow(1, 1) * Point);
      case 103:
         return (DDDD - Step * MathPow(1, 2) * Point);
      ... ... ...
         
      }
      return (0);
   }
 

Para sustituir el caso 101-102-103.... con Magic_101, Magic_102, Magic_103...

¿Sería correcto hacerlo así?

   if (StepSum == FALSE && StepMultiply == FALSE) {

switch (TTTT) {
for (i=0; i<k; i++)                           {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
  if (OrderSymbol() == Symbol())                 {
    double Result ;
    if ( OrderMagicNumber()==Magic_101)  Result = (DDDD - Step * Point);   
    if ( OrderMagicNumber()==Magic_102)  Result = (DDDD - Step * MathPow(1, 1) * Point);   
    if ( OrderMagicNumber()==Magic_103)  Result = (DDDD - Step * MathPow(1, 2) * Point); 
                                                    }}}
      return (Result);
                     }
                                                   }
 
Rita:
Sí, eso es lo que estoy haciendo...

--------------------------

Para reemplazar 101-102-103.... a Magic_101 - Magic_102 - Magic_103 -...

¿Sería correcto hacer lo siguiente?

incorrecto. lea sobre la declaración del interruptor https://docs.mql4.com/ru/basis/operators/switch
En tu ejemplo, sólo tienes que sustituir switch por if

      switch (TTTT) {
      case 101:
         return (DDDD - - Step * Point);
      case 102:
         return (DDDD - Step * MathPow(1, 1) * Point);
      case 103:
         return (DDDD - Step * MathPow(1, 2) * Point);
      }

reemplazar con.

      if(TTT==Magic_101) return (DDDD - - Step * Point);
      else if(TTT==Magic_102) return (DDDD - Step * MathPow(1, 1) * Point);
      else if(TTT==Magic_103) return (DDDD - Step * MathPow(1, 2) * Point);
      ... ... ...
 
Gracias, abolk, por la aclaración.