포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 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 байт

구조의 요소는 다른 유형을 가질 수 있으며 그에 따라 바이트 길이가 다를 수 있지만 각 요소의 메모리는 max 멤버에 따라 동일하게 할당됩니다. 이 예에서 이것은 8바이트의 두 배입니다.

실제로 구조에는 3개의 요소만 있지만 첫 번째 요소는 1바이트만 차지하고 마지막 두 요소와 정렬하기 위해 7바이트의 "더미" 바이트도 할당해야 합니다. 콘크리트 구조는 다음과 같이 설명하기 쉽습니다.

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

저것들. 컴파일러 자체가 각 요소에 필요한 바이트 수를 추가한다는 것이 밝혀졌습니다. 예에서 필요하지 않은 공백을 의미합니까?

그리고 그건 그렇고, 만약

GSB :

구조는 다른 유형을 가질 수 있으며 따라서 바이트 단위의 길이도 다를 수 있지만 max 멤버에 따라 각 요소의 메모리는 동일합니다. 이 예에서 이것은 8바이트의 두 배입니다.


그렇다면 모든 요소에 대해 하나의 메모리가 할당되는데 구조의 요소를 배열하는 순서에 어떤 차이가 있습니까?
 
hoz :

저것들. 컴파일러 자체가 각 요소에 필요한 바이트 수를 추가한다는 것이 밝혀졌습니다. 예에서 필요하지 않은 공백을 의미합니까?

그리고 그건 그렇고, 만약


그렇다면 모든 요소에 대해 하나의 메모리가 할당되는데 구조의 요소를 배열하는 순서에 어떤 차이가 있습니까?

아니요, 추가하지 않습니다. int slippage를 먼저 넣으면 4바이트가 할당되므로 최대 8( int 예비)을 추가하거나 int 대신 long을 사용해야 합니다.

도움말에서 인용

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

정렬을 수행할 필요가 없는 올바른 옵션

 struct trade_settings
  {
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
   int slippage;       // значение допустимого проскальзывания
  };
 
말해주세요, 저는 다중 통화 고문을 작성하고 있으며, 다른 통화의 매도 및 매수를 제거하고, 정상화하고 있지만, 가격에는 여전히 추가 숫자가 있습니다.
      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 :
말해주세요, 저는 다중 통화 고문을 작성하고 있으며, 다른 통화의 매도 및 매수를 제거하고, 정상화하고 있지만, 가격에는 여전히 추가 숫자가 있습니다.

숫자
는 해당 문자에서 "제거"하는 것도 바람직합니다.)
사유: