Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 547

 
moskitman:

Por supuesto que sí, sin embargo...

Dudo mucho de la corrección del diseño

Aquí https://www.mql5.com/ru/forum/119342 es una buena función para obtener una lista de símbolos disponibles en el terminal, en este caso no veo mucho sentido en comparar el símbolo de la orden con los nombres de los símbolos del broker en esta cuenta, pero en otros casos es muy útil.

Y en este caso para excluir los sufijos

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

¿Puedes decirme? Dónde está la sección de qué ajustes. Es decir, el diseño, las casillas de verificación, las flechas, etc.


¿Podría descifrar de qué se trata?
 
Vinin:

¿Podrías descifrar de qué estamos hablando
"Lego".
 
GSB:

Gracias.

La condición pasó, el error estaba en otra parte del código. :)

 

En la ayuda está escrito que:

"Tenga en cuenta que en MQL4 los elementos de la estructura se suceden directamente sin alineación".

¿Qué quiere decir con Alineación?

Si lo he entendido bien, los elementos alineados tendrán este aspecto:

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

¿Verdad?

Lo que me sorprende es que en programación lo básico es que el compilador se salte los espacios, y aquí sale que afecta a algo...

 
hoz:

En la ayuda está escrito que:

"Tenga en cuenta que en MQL4 los elementos de la estructura se suceden directamente sin alineación".

¿Qué quiere decir con Alineación?

Si lo he entendido bien, los elementos alineados tendrán este aspecto:

y no alineados así: ¿Cierto?

Todo descifrado en los comentarios

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

Los elementos de una estructura pueden tener diferentes tipos y, en consecuencia, diferentes longitudes en bytes, pero la memoria para cada elemento se asigna igual: por el miembro máximo. En el ejemplo, es el doble de 8 bytes.

De hecho, sólo hay 3 elementos en la estructura, pero el primero ocupa sólo 1 byte y tenemos que asignar 7 bytes más "vacíos" para alinearlo con los dos últimos elementos. Es más fácil describir una estructura específica así

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

¿Así que el compilador añade el número de bytes necesario para cada elemento? Me refiero a los espacios, que no son necesarios en el ejemplo.

Y por cierto, si

GSB:

Las estructuras pueden tener diferentes tipos y, por tanto, diferentes longitudes en bytes, pero la memoria para cada elemento se asigna igual: por el miembro máximo. En el ejemplo, es el doble de 8 bytes.


Si es así, y de todos modos sólo hay una memoria asignada para cada elemento, ¿qué diferencia hay en el orden en que se colocan los elementos de la estructura?
 
hoz:

¿Así que el compilador añade el número de bytes necesario para cada elemento? Me refiero a los espacios, que no son necesarios en el ejemplo.

Y por cierto, si


Si es así y, de todos modos, sólo se asigna una memoria para cada elemento, ¿qué diferencia hay en el orden de disposición de los elementos de la estructura?

No, no es así. Si pones primero el deslizamiento int, se asignarán 4 bytes, por lo que deberás sumar 8 ( reserva int) o usar long en lugar de int

Cita de la ayuda

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

La opción correcta, que no requiere alineación, es

struct trade_settings
  {
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
   int slippage;       // значение допустимого проскальзывания
  };
 
Por favor, aconsejar, estoy escribiendo un EA multidivisa, sacando el ask y bid de otras monedas, normalizando, pero todavía hay dígitos extra en el precio.
     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:
Por favor, aconsejar, estoy escribiendo un EA multidivisa, sacar la demanda y la oferta de otras monedas, normalizar, pero todavía hay algunos dígitos extra en el precio.

Es preferible que los
dígitos se "saquen" también del símbolo correspondiente ;)
Razón de la queja: