Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 547

 
moskitman:

Claro que é, no entanto...

Duvido muito que o projeto esteja correto

Aqui https://www.mql5.com/ru/forum/119342 é uma boa função para obter uma lista dos símbolos disponíveis no terminal, neste caso não vejo muito sentido em comparar o símbolo do pedido com os nomes do símbolo do corretor nesta conta, mas em outros casos é muito útil.

E neste caso, para excluir os sufixos

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

Você pode me dizer. Onde está a seção sobre quais configurações. Ou seja, o layout, caixas de seleção, setas, etc.


Por favor, você poderia decifrar do que se trata
 
Vinin:

Você poderia decifrar do que estamos falando
"Lego".
 
GSB:

Obrigado.

A condição passou, o erro estava em outra parte do código. :)

 

Na ajuda está escrito que:

"Tenha em mente que na MQL4 os elementos da estrutura se sucedem diretamente uns aos outros sem alinhamento".

O que você quer dizer com Alinhamento?

Se eu entendi corretamente, os elementos alinhados ficarão assim:

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

Certo?

O que me surpreende é que na programação o ponto básico é que o compilador pula espaços, mas aqui se percebe que afeta algo...

 
hoz:

Na ajuda está escrito que:

"Tenha em mente que na MQL4 os elementos da estrutura se sucedem diretamente uns aos outros sem alinhamento".

O que você quer dizer com Alinhamento?

Se eu entendi corretamente, os elementos alinhados ficarão assim:

e não-alinhados como este: Certo?

Todos decifrados nos comentários

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

Os elementos de uma estrutura podem ter diferentes tipos e comprimentos correspondentes em bytes, mas a memória para cada elemento é alocada da mesma forma - pelo membro máximo. No exemplo, é o dobro de 8 bytes.

Na verdade, existem apenas 3 itens na estrutura, mas o primeiro ocupa apenas 1 byte e temos que alocar mais 7 bytes "vazios" para alinhá-lo com os dois últimos itens. É mais fácil descrever uma estrutura específica como esta

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

Então o compilador adiciona o número necessário de bytes para cada elemento? Refiro-me a espaços, que não são necessários no exemplo?

E, a propósito, se

GSB:

As estruturas podem ter tipos diferentes e, portanto, comprimentos diferentes em bytes, mas a memória para cada item é alocada da mesma forma - pelo membro máximo. No exemplo, é o dobro de 8 bytes.


Se for, e de qualquer forma há apenas uma memória alocada para cada elemento, que diferença faz a ordem em que os elementos da estrutura são colocados?
 
hoz:

Então o compilador adiciona o número necessário de bytes para cada elemento? Refiro-me a espaços, que não são necessários no exemplo?

E, a propósito, se


Se assim for e apenas uma memória for alocada para cada item de qualquer forma, que diferença faz em que ordem os elementos da estrutura podem ser dispostos?

Se você colocar int slippage primeiro, 4 bytes serão alocados, então você deve somar até 8 ( int reserva) ou usar longo em vez de int

Citação da Ajuda

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

A opção correta, que não requer alinhamento, é

struct trade_settings
  {
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
   int slippage;       // значение допустимого проскальзывания
  };
 
Por favor, avise, estou escrevendo um EA multimoeda, retirando a compra e venda de outras moedas, normalizando, mas ainda há dígitos extras no preço.
     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, avise, estou escrevendo um EA multi-divisas, retire a compra e venda de outras moedas, normalize, mas ainda há alguns dígitos extras no preço.

Os dígitos também devem ser preferencialmente "arrancados" do símbolo apropriado ;)
Razão: