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

 
moskitman:

Certo che lo è, però...

Dubito fortemente della correttezza del progetto

Qui https://www.mql5.com/ru/forum/119342 è una buona funzione per ottenere una lista di simboli disponibili nel terminale, in questo caso non vedo molto senso nel confrontare il simbolo dell'ordine con i nomi dei simboli del broker in questo account, ma in altri casi è molto utile.

E in questo caso per escludere i suffissi

string smbl=StringSubstr(OrderSymbol(),0,6);
if (smbl=="EURUSD") priceEU1=OrderOpenPrice();
 
Zolotai:

Può dirmi. Dov'è la sezione su quali impostazioni. Cioè, il layout, le caselle di controllo, le frecce, ecc.


Potresti per favore decifrare di cosa si tratta
 
Vinin:

Potresti decifrare quello di cui stiamo parlando
"Lego".
 
GSB:

Grazie.

La condizione è passata, l'errore era in un'altra parte del codice. :)

 

Nella guida è scritto che:

"Tenete presente che in MQL4 gli elementi della struttura si susseguono direttamente senza allineamento".

Cosa intende per Allineamento?

Se ho capito bene, gli elementi allineati saranno così:

struct trade_settings
  {
   uchar  slippage;     // значение допустимого проскальзывания -размер 1 байт
   char   reserved1;    // 1 байт пропуска
   short  reserved2;    // 2 байта пропуска
   int    reserved4;    // еще 4 байта пропуска. Обеспечили выравнивание на границу 8 байт
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
  };
e non allineati come questo:
struct trade_settings
  {
   uchar slippage;     // значение допустимого проскальзывания -размер 1 байт
   char reserved1;     // 1 байт пропуска
   short reserved2;    // 2 байта пропуска
   int reserved4;      // еще 4 байта пропуска. Обеспечили выравнивание на границу 8 байт
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
  };

Giusto?

Quello che mi sorprende è che nella programmazione il punto fondamentale è che il compilatore salta gli spazi, ma qui viene fuori che influisce su qualcosa...

 
hoz:

Nella guida è scritto che:

"Tenete presente che in MQL4 gli elementi della struttura si susseguono direttamente senza allineamento".

Cosa intende per Allineamento?

Se ho capito bene, gli elementi allineati saranno così:

e non allineati come questo: giusto?

Tutto decifrato nei commenti

еще 4 байта пропуска. Обеспечили выравнивание на границу 8 байт

Gli elementi di una struttura possono avere diversi tipi e corrispondentemente diverse lunghezze in byte, ma la memoria per ogni elemento è allocata allo stesso modo - dal membro massimo. Nell'esempio, è doppio 8 byte.

In effetti ci sono solo 3 elementi nella struttura ma il primo occupa solo 1 byte e dobbiamo allocare altri 7 byte "vuoti" per allinearlo con gli ultimi due elementi. È più facile descrivere una struttura specifica come questa

struct trade_settings
  {
   ulong slippage;     // значение допустимого проскальзывания, но потом наверняка понадобится приведение в int перед подстановкой в OrderSend()
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
  };
 

Quindi il compilatore aggiunge il numero richiesto di byte per ogni elemento? Intendo gli spazi, che non sono necessari nell'esempio?

E a proposito, se

GSB:

Le strutture possono avere diversi tipi e quindi diverse lunghezze in byte, ma la memoria per ogni elemento è allocata allo stesso modo - dal membro massimo. Nell'esempio, è doppio 8 byte.


Se è così, e c'è comunque una sola memoria allocata per ogni elemento, che differenza fa l'ordine in cui sono messi gli elementi della struttura?
 
hoz:

Quindi il compilatore aggiunge il numero richiesto di byte per ogni elemento? Intendo gli spazi, che non sono necessari nell'esempio?

E a proposito, se


Se è così e comunque viene allocata solo una memoria per ogni elemento, che differenza fa in quale ordine disporre gli elementi della struttura?

No, non lo fa. Se mettete prima l'int slippage, 4 byte saranno allocati, quindi dovreste aggiungere fino a 8 (int reserve) o usare long invece di int

Citazione da Aiuto

Внимание: данный пример иллюстрирует неправильно спроектированные данные. 
Лучше было бы сначала объявить данные take и stop большего размера типа double, а затем объявить член slippage типа uchar. 
В этом случае внутреннее представление данных будет всегда одинаково независимо от значения

L'opzione corretta, che non richiede allineamento, è

struct trade_settings
  {
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
   int slippage;       // значение допустимого проскальзывания
  };
 
Per favore consigliatemi, sto scrivendo un EA multivaluta, tirando fuori l'ask e il bid di altre valute, normalizzando, ma ci sono ancora cifre extra nel prezzo.
     USDCADAsk = NormalizeDouble(MarketInfo("USDCAD",MODE_ASK),Digits);            
     USDCADBid = NormalizeDouble(MarketInfo("USDCAD",MODE_BID),Digits);
     USDCHFAsk = NormalizeDouble(MarketInfo("USDCHF",MODE_ASK),Digits);
     USDCHFBid = NormalizeDouble(MarketInfo("USDCHF",MODE_BID),Digits);
     USDJPYAsk = NormalizeDouble(MarketInfo("USDJPY",MODE_ASK),Digits);
     USDJPYBid = NormalizeDouble(MarketInfo("USDJPY",MODE_BID),Digits);
     EURUSDAsk = NormalizeDouble(MarketInfo("EURUSD",MODE_ASK),Digits);
     EURUSDBid = NormalizeDouble(MarketInfo("EURUSD",MODE_BID),Digits);
     GBPUSDAsk = NormalizeDouble(MarketInfo("GBPUSD",MODE_ASK),Digits);
     GBPUSDBid = NormalizeDouble(MarketInfo("GBPUSD",MODE_BID),Digits);
     AUDUSDAsk = NormalizeDouble(MarketInfo("AUDUSD",MODE_ASK),Digits);
     AUDUSDBid = NormalizeDouble(MarketInfo("AUDUSD",MODE_BID),Digits);
     NZDUSDAsk = NormalizeDouble(MarketInfo("NZDUSD",MODE_ASK),Digits);
     NZDUSDBid = NormalizeDouble(MarketInfo("NZDUSD",MODE_BID),Digits);
 
Example2:
Per favore consigliatemi, sto scrivendo un EA multivaluta, estraggo l'ask e il bid di altre valute, normalizzo, ma ci sono ancora alcune cifre extra nel prezzo.

Le
cifre dovrebbero essere preferibilmente "tirate fuori" anche dal simbolo appropriato ;)
Motivazione: