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();
"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...
"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?
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.
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 ;)
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
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
Potresti decifrare quello di cui stiamo parlando
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ì:
e non allineati come questo: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...
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
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
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?
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
L'opzione corretta, che non richiede allineamento, è
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 ;)