Una domanda per gli esperti di MQL - pagina 7

 

Per ora funziona. Un'altra domanda.

C'è un altro pezzo di codice come questo.

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

Sarebbe corretto sostituirlo con -

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;    
     }
 
Guardo i tuoi esercizi e penso tra me e me:
- Si fanno un po' di maghi.
- poi si tiene traccia dei numeri del mago e a seconda del numero si assegna il valore numerico appropriato alla variabile MMMMMM

Domanda: non è più facile assegnare questo valore a un wizard una volta nell'inite e poi usarlo?
 
Rita:

Per ora funziona. Un'altra domanda.

C'è un altro pezzo di codice come questo.

Sarebbe corretto sostituirlo con -


if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 
     {     
            MMMMM = OrderMagicNumber()-200;   
     }
Naturalmente è solo per questo caso particolare
 

Grazie. per le risposte.

No, granit77, - non è esattamente il caso.

Mi è stato chiesto di sistemare-rifinire l'EA di qualcun altro (- spostare i maghi in globale). Sono 1800 linee di codice e complessi algoritmi di interazione degli ordini con diversi maghi.

Semplicemente non posso fisicamente prendere il tempo di studiare questi complicati circuiti di controllo. Trovo più facile sostituire le magie digitali con quelle "globali" e fissare quelle magie in alcune funzioni in modo puramente meccanico (senza andare in profondità).

 
Rita:

Grazie. per le risposte.

No, granit77, - non è esattamente il caso.

Mi è stato chiesto di sistemare-rifinire l'EA di qualcun altro (- spostare i maghi in globale). Sono 1800 linee di codice e complessi algoritmi di interazione degli ordini con diversi maghi.

Semplicemente non posso fisicamente prendere il tempo di studiare questi complicati circuiti di controllo. Trovo più facile sostituire le magie digitali con quelle "globali" e fissare quelle magie in alcune funzioni in modo puramente meccanico (senza andare in profondità).


Dov'è andato Leonid?
 
Lui commercia. Finge di non avere tempo per questo. Sta facendo la "grana" dell'arbitraggio sullo spread oro-argento.
 
Rita:
Lui commercia. Finge di non avere tempo. Sta facendo la "grana" dell'arbitraggio sullo spread oro-argento.
Beh, se mette i soldi nel cassetto, fingi di credere nell'arbitraggio.
 
Sì, - è quello che sto facendo...

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

E probabilmente l'ultima domanda.

Ecco questa parte del codice:

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

Per sostituire il caso 101-102-103.... con Magic_101, Magic_102, Magic_103...

Sarebbe corretto fare così:

   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ì - è quello che sto facendo...

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

Per sostituire 101-102-103.... a Magic_101 - Magic_102 - Magic_103 -...

Sarebbe corretto fare quanto segue:

Sbagliato. leggere la dichiarazione di switch https://docs.mql4.com/ru/basis/operators/switch
Nel tuo esempio, sostituisci semplicemente switch con 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);
      }

sostituire 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);
      ... ... ...
 
Grazie, abolk, per il chiarimento.
Motivazione: