Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 890

 
evillive:

Va più o meno così:


Grazie, ma non è del tutto corretto. Avete diverse condizioni di chiusura per un mago e volete il contrario.

Mi è venuto in mente questo:

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;
           }           
          }
         }
Funzionerà? O cosa c'è di sbagliato?
 
rapid_minus:


Grazie, ma non è proprio quello di cui hai bisogno. Avete diverse condizioni di chiusura per un mago, ma avete bisogno del contrario.

Ecco come mi è venuto in mente:

Funzionerà? O cosa c'è di sbagliato?

E'... Come posso dirlo con delicatezza...

A cosa serve allora l'interruttore, se il codice è per un solo mago?

Ma puoi anche usare le ife se vuoi, ma dobbiamo pensare alle condizioni, quelle che hai ora non sono come dovrebbero essere.

Per esempio

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

non sarebbe incolpato al momento della compilazione?

 
evillive:

Questo è... Come posso dirlo con delicatezza...

A cosa serve allora l'interruttore, se il codice è per un solo mago?

Forse non capisco l'interruttore, ma nella sua espressione c'è un mago, che si confronta con diverse varianti di condizioni di chiusura.

ZS: ha visto il seguito. Non l'ho ancora compilato perché non ho finito il codice. I numeri non possono essere enumerati usando un'operazione AND?

Allora come posso uscirne? Ripetere per ogni mago?

ZZZY: In realtà, non è AND, ma OR.

 
rapid_minus:

Allora come si fa ad uscirne? Ripetere per ogni mago?

Sì...


E su un interruttore ancora si dovrebbe leggere un primer, lì al contrario, qualsiasi numero di varianti viene elaborato (caso 0:..., caso 1:..., caso N:..., dove numero = valore di un mago). Ero troppo pigro per scrivere nell'esempio, quindi ho avuto solo il tempo di scrivere due maghi e l'opzione predefinita ;)

 
evillive:

Immagino che non sia necessario scrivere la sala operatoria per ogni mago, dopo tutto?
 
rapid_minus:

Immagino che non ci sia bisogno di scrivere un OR per ogni mago, vero?
Dovremmo, Fedya, dovremmo (c)
 
evillive:

Sì...


E ancora leggere un primer su un interruttore, ci al contrario, qualsiasi numero di varianti viene elaborato (caso 0:..., caso 1:..., caso N:..., dove numero = valore di un mago). Ero troppo pigro per scrivere nell'esempio, quindi ho avuto solo il tempo di scrivere due maghi e l'opzione predefinita ;)

Grazie per il chiarimento dell'interruttore. Ho capito male.
 

Eppure nello scambio si ottiene la stessa ripetizione della stessa condizione di chiusura per diversi maghi come si fa con gli if.

L'unica domanda è quale variante mangerà più pezzi.

 
rapid_minus:

Eppure nello switch si ottiene la stessa ripetizione della stessa condizione di chiusura per diversi maghi come si fa con gli if.

L'unica domanda è quale variante mangerà più pezzi.

Mi sono perso qualcosa - stiamo già ottimizzando il codice?
 
rapid_minus:

Eppure nello scambio si ottiene la stessa ripetizione della stessa condizione di chiusura per diversi maghi come si fa con gli if.

L'unica domanda è quale variante mangerà più pezzi.

Questa è la stessa ramificazione di if(), sembra solo più ordinata ed è più facile da codificare se ci sono tre o più scelte singole di numeri interi tra cui scegliere. Se ci sono solo due opzioni, o se si stanno confrontando espressioni non numeriche, allora solo if(). E con if() potete combinare diverse opzioni (if( option1 && option2 || option3 ) {action;}), mentre in switch non potete direttamente, solo una alla volta.

interruttore
se()
interruttore (x)
{
caso 1: agire sull'opzione 1; pausa;
caso 2: azione sull'opzione 2; pausa;
caso 3: azione sull'opzione 3; pausa;
default: azione predefinita; break;
}
if( option1 ) { azione nell'opzione 1; }
else if( option2 ) { azioni per opzione 2; }
else if( option3 ) { azioni per opzione 3; }
else { azione predefinita; }