Uma pergunta para os especialistas em MQL - página 7

 

Está funcionando até agora. Uma pergunta a mais.

Há outra peça de código como esta.

 
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;
                                    }

Seria correto substituí-lo 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;    
     }
 
Estou olhando para seus exercícios e pensando para mim mesmo:
- Você faz alguns feiticeiros.
- então você mantém um registro dos números mágicos e dependendo do número você atribui o valor numérico apropriado à variável MMMMMM

Pergunta: não é mais fácil atribuir este valor a um feiticeiro uma vez no inite e depois usá-lo?
 
Rita:

Está funcionando até agora. Uma pergunta a mais.

Há outra peça de código como esta.

Seria correto substituí-lo por -


if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 
     {     
            MMMMM = OrderMagicNumber()-200;   
     }
É claro que é apenas para este caso em particular
 

Obrigado. para as respostas.

Não, granit77, - não é exatamente esse o caso.

Pediram-me para consertar - redefinir a EA de outra pessoa (- mover os mágicos para o mundo inteiro). São 1800 linhas de código e algoritmos complexos de interação de ordens com diferentes feitiços.

Simplesmente não tenho tempo para estudar fisicamente estes complicados circuitos de controle. Acho mais fácil substituir magias digitais por magias "globais" e consertar essas magias em algumas funções de forma puramente mecânica (sem ir fundo nelas).

 
Rita:

Obrigado. para as respostas.

Não, granit77, - não é exatamente esse o caso.

Pediram-me para consertar - redefinir a EA de outra pessoa (- mover os mágicos para o mundo inteiro). São 1800 linhas de código e algoritmos complexos de interação de ordens com diferentes feitiços.

Simplesmente não tenho tempo para estudar fisicamente estes complicados circuitos de controle. Acho mais fácil substituir magias digitais por magias "globais" e consertar essas magias em algumas funções de forma puramente mecânica (sem ir fundo nelas).


Para onde Leonid foi?
 
Ele comercializa. Ele finge que não tem tempo. Ele está fazendo a "massa" de arbitragem sobre o spread de ouro-prata.
 
Rita:
Ele comercializa. Ele finge que não tem tempo. Ele está fazendo a "massa" de arbitragem sobre o spread de ouro-prata.
Bem, se ele coloca o dinheiro na gaveta, finja acreditar na arbitragem.
 
Sim, - isso é o que estou fazendo...

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

E provavelmente a última pergunta.

Aqui está esta parte do 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 substituir o caso 101-102-103.... com Magic_101, Magic_102, Magic_103...

Seria correto fazê-lo desta forma:

   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:
Sim - isso é o que estou fazendo...

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

Para substituir 101-102-103.... para Magic_101 - Magic_102 - Magic_103 -...

Seria correto fazer o seguinte:

leia sobre a declaração de interruptor https://docs.mql4.com/ru/basis/operators/switch
Em seu exemplo, basta substituir o interruptor por se

      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);
      }

substituir por.

      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);
      ... ... ...
 
Obrigado, abolk, pelo esclarecimento.