Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 967

 

Come faccio ad ottenere il prezzo di apertura di una barra e se non riesco ad ottenere il prezzo di apertura per uscire?

Ha abbozzato alcune opzioni. Ma forse esiste un codice migliore e più corretto?

   if(iOpen(Symbol(),Period(),0)==0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     }
  if(iOpen(Symbol(),Period(),0)==0.0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0.0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     } 
  if(iOpen(Symbol(),Period(),0)==0 && iOpen(Symbol(),Period(),0)==0.0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0 && iOpen(Symbol(),Period(),0)!=0.0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     }     
 
ilvic:

Come faccio ad ottenere il prezzo di apertura di una barra e se non riesco ad ottenere il prezzo di apertura per uscire?

Ha abbozzato alcune opzioni. Ma forse esiste un codice migliore e più corretto?

Le funzioni iXXXX hanno senso solo se state eseguendo una richiesta una tantum, senza loop e senza chiamare altre funzioni iXXXX.

Se hai bisogno di ottenere il prezzo di apertura solo una volta, allora vedi l'aiutodi iOpen:

Valore di ritorno

*** 0 in caso di errore.

Quindi bisogna interrogare il prezzo e controllare se è zero: se non è zero allora il prezzo viene ricevuto, se è zero allora è un errore.

double open=iOpen(Symbol(),Period(),0);
if(open==0.0)
   retutn;
 
Potete dirmi come inserire il parametro 9 con una griglia (#CL) in modo che il compilatore non generi un errore?
enum Symboll_
  {
   AUDUSD=0,
   NZDUSD=1,
   USDCAD=2,
   USDCHF=3,
   USDJPY=4,
   EURJPY=5,
   EURUSD=6,
   GBPUSD=7,
   #CL   =8
  };
 
Vladimir Karputov:

Le funzioni iXXXX hanno senso solo se state eseguendo una richiesta una tantum, senza cicli e senza chiamare altre funzioni iXXXX.

Se hai bisogno di ottenere il prezzo di apertura solo una volta, vedi l'aiuto diiOpen:

Valore di ritorno

*** 0 in caso di errore.

Quindi bisogna interrogare il prezzo e controllare che sia zero: se non è zero allora il prezzo viene ricevuto, se è zero allora è un errore.

Grazie. Un'altra domanda. Dobbiamo usare le parentesi in questo codice o non fa differenza?

   double   open=iOpen(Symbol(),Period(),0);
   if(open==0.0)
     {
      return;
     }
 
xxz:
Potete dirmi come inserire il parametro 9 con una griglia (#CL) in modo che il compilatore non generi un errore?

Come questo:

   enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };
 
ilvic:

Grazie. Un'altra domanda. Si devono usare le parentesi in questo codice o non fa differenza?

   double   open=iOpen(Symbol(),Period(),0);
   if(open==0.0)
      return;

Andrà bene. In generale, le parentesi sono destinate a un gruppo di azioni. Se c'è solo un'azione, non servono a niente.

int n;
double y;
if(бла-бла-бла)
         n = бла-бла;
else
  {
         n = бла-бла;
         y = бла;
  )
 
Vladimir Karputov:

Ecco fatto:

Grazie mille!

Perché ho provato così e non ha funzionato:

  enum  Symboll_
  {
   SIM_0,  //AUDUSD
   SIM_1,  //NZDUSD
   SIM_2,  //USDCAD
   SIM_3,  //USDCHF
   SIM_4,  //USDJPY
   SIM_5,  //EURJPY
   SIM_6,  //EURUSD
   SIM_7   //#CL
  };  
 
xxz:

Grazie mille!

Perché ho provato così e non ha funzionato:

O come questo:

   enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };
   string my_symbol[9]=
     {
      "AUDUSD",
      "NZDUSD",
      "USDCAD",
      "USDCHF",
      "USDJPY",
      "EURJPY",
      "EURUSD",
      "GBPUSD",
      "#CL"
     };
 
Vladimir Karputov:

o questo:

Questo è quello giusto!

In quelle varianti usciva o solo un numero di serie oSIM_1,...ecc.

 
Quando si testa un EA multivaluta, c'è un problema con la dimensione del lotto. Ho un fisso di 0,03, ma durante il test gli ordini appaiono con il volume di 0,1. Immediatamente appare un fallimento sul grafico. Sono solo io?