任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 547

 
moskitman:

当然是这样,但是...

我强烈怀疑该设计的正确性

这里https://www.mql5.com/ru/forum/119342,是一个很好的函数,可以在终端获得可用的符号列表,在这种情况下,我认为将订单符号与这个账户中的经纪人符号名称进行比较没有什么意义,但在其他情况下,它非常有用。

而在这种情况下,要排除后缀

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

你能告诉我。关于什么设置的部分在哪里。就是说,布局、复选框、箭头等。


请你解读一下它是关于什么的
 
Vinin:

你能解读一下我们在说什么吗?
"乐高"。
 
GSB:

谢谢你。

条件通过了,错误是在代码的另一部分。:)

 

在帮助中 写道。

"请记住,在MQL4中,结构元素直接跟随对方,没有对齐。"

你说的结盟 是什么意思?

如果我理解正确的话,对齐的元素将看起来像这样。

struct trade_settings
  {
   uchar  slippage;     // значение допустимого проскальзывания -размер 1 байт
   char   reserved1;    // 1 байт пропуска
   short  reserved2;    // 2 байта пропуска
   int    reserved4;    // еще 4 байта пропуска. Обеспечили выравнивание на границу 8 байт
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
  };
而不是像这样对齐。
struct trade_settings
  {
   uchar slippage;     // значение допустимого проскальзывания -размер 1 байт
   char reserved1;     // 1 байт пропуска
   short reserved2;    // 2 байта пропуска
   int reserved4;      // еще 4 байта пропуска. Обеспечили выравнивание на границу 8 байт
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
  };

对吗?

令我惊讶的是,在编程中,基本观点是编译器会跳过空格,而在这里却出现了它会影响一些东西......

 
hoz:

在帮助中 写道。

"请记住,在MQL4中,结构元素直接跟随对方,没有对齐。"

你说的结盟 是什么意思?

如果我理解正确的话,对齐的元素将看起来像这样。

和不结盟这样的:对吗?

在评论中全部解密

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

一个结构中的元素可以有不同的类型和相应的不同的字节长度,但每个元素的内存分配是一样的--按最大成员分配。在这个例子中,它是双8字节。

事实上,结构中只有3个项目,但第一个项目只占1个字节,我们必须再分配7个字节的 "空",使其与最后两个项目对齐。像这样描述一个具体的结构是比较容易的

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

因此,编译器为每个元素添加所需的字节数?我指的是空格,这在例子中是不需要的?

顺便说一下,如果

GSB:

结构可能有不同的类型,因此以字节为单位的长度也不同,但每个项目的内存分配是相同的--以最大成员为单位。在这个例子中,它是双8字节。


如果是这样,反正每个元素只分配到一个内存,那么结构中的元素以何种顺序放置又有什么区别呢?
 
hoz:

因此,编译器为每个元素添加所需的字节数?我指的是空格,这在例子中是不需要的?

顺便说一下,如果


如果是这样,而且每个项目只分配一个内存,那么以什么顺序排列结构中的元素有什么区别?

如果你把int slippage放在前面,4个字节将被分配,所以你应该加到8(int reserve)或者用long代替int。

帮助中的引言

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

正确的选项是,不需要对齐,是

struct trade_settings
  {
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
   int slippage;       // значение допустимого проскальзывания
  };
 
请指示,我正在编写一个多货币的EA,拉出其他货币的卖出价和买入价,正常化,但价格中仍有多余的数字。
     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:
请指教,我正在编写一个多币种的EA,拉出其他币种的卖出价和买入价,正常化,但价格中仍有一些额外的数字。

数字 最好也能从相应的符号中 "拉出来";)