Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 547

 
moskitman :

Elbette öyle ama...

Tasarımın doğruluğundan kesinlikle şüpheliyim

Burada https://www.mql5.com/ru/forum/119342 , terminalde mevcut olan sembollerin bir listesini almak için iyi bir fonksiyondur, bu durumda sipariş sembolünü isimleriyle karşılaştırmanın pek bir anlamı görmüyorum. Bu hesaptaki komisyoncu sembolleri, ancak diğer durumlarda çok kullanışlıdır.

Ve bu durumda, ekleri hariç tutmak için

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

Söyleyebilir misin? Hangi parametrelerle ilgili bölüm nerede. Yani tasarım, onay işaretleri, oklar vb.


Ne hakkında konuştuğunu deşifre edebilir misin?
 
Vinin :

Ne hakkında olduğunu deşifre edebilir misin?
"Lego"
 
GSB :

Sayesinde.

Koşul geçti, hata kodun başka bir bölümündeydi. :)

 

Kılavuz şunları söylüyor:

"MQL4'te bir yapının öğelerinin hizalama olmadan doğrudan birbirini takip ettiği akılda tutulmalıdır."

Hizalama ile ne kastedilmektedir?

Doğru anlarsam, hizalanmış öğeler şöyle görünecek:

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

Doğru?

Programlamada temel noktanın derleyicinin boşlukları atlaması beni şaşırtıyor ve sonra bunun bir şeyi etkilediği ortaya çıkıyor ...

 
hoz :

Kılavuz şunları söylüyor:

"MQL4'te bir yapının öğelerinin hizalama olmadan doğrudan birbirini takip ettiği akılda tutulmalıdır."

Hizalama ile ne kastedilmektedir?

Doğru anlarsam, hizalanmış öğeler şöyle görünecek:

ve şu şekilde hizalanmadı: Doğru mu?

Yorumlarda herşey anlatılıyor

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

Yapının öğeleri farklı bir türe ve buna bağlı olarak bayt cinsinden farklı bir uzunluğa sahip olabilir, ancak her öğe için bellek, maksimum üyeye göre aynı şekilde tahsis edilir. Örnekte, bu çift 8 bayttır.

Aslında, yapıda yalnızca 3 öğe vardır, ancak ilki yalnızca 1 bayt kaplar ve onu son iki öğeyle hizalamak için 7 bayt "sahte" bayt da tahsis edilmelidir. Beton yapıyı şu şekilde tanımlamak daha kolaydır:

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

Onlar. derleyicinin her eleman için gerekli sayıda bayt eklediği ortaya çıktı? Örnekte ihtiyaç duyulmayan boşlukları mı kastediyorum?

Ve bu arada, eğer

GSB :

Yapılar farklı bir türe ve buna bağlı olarak bayt cinsinden farklı bir uzunluğa sahip olabilir, ancak maksimum üyeye göre her öğenin belleği aynıdır. Örnekte, bu çift 8 bayttır.


Eğer öyleyse ve hepsi aynıysa, her öğe için bir bellek tahsis edilirse, yapının öğelerini hangi sırayla düzenlemek ne fark eder?
 
hoz :

Onlar. derleyicinin her eleman için gerekli sayıda bayt eklediği ortaya çıktı? Örnekte ihtiyaç duyulmayan boşlukları mı kastediyorum?

Ve bu arada, eğer


Eğer öyleyse ve hepsi aynıysa, her öğe için bir bellek tahsis edilirse, yapının öğelerini hangi sırayla düzenlemek ne fark eder?

Hayır eklemez, önce int kaymasını koyarsanız 4 bayt tahsis edilecektir, bu nedenle 8'e kadar ( int rezerv) eklemeniz veya int yerine long kullanmanız gerekir.

Yardım'dan alıntı

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

Hizalama yapmanız gerekmeyen doğru seçenek

 struct trade_settings
  {
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
   int slippage;       // значение допустимого проскальзывания
  };
 
Lütfen söyleyin, çok para birimli bir danışman yazıyorum, diğer para birimlerinin talep ve tekliflerini geri çekiyorum, normalleştiriyorum, ancak fiyatın hala fazladan sayıları var.
      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 :
Lütfen söyleyin, çok para birimli bir danışman yazıyorum, diğer para birimlerinin talep ve tekliflerini geri çekiyorum, normalleştiriyorum, ancak fiyatın hala fazladan sayıları var.

Rakamların
karşılık gelen karakterden "çıkarılması" da istenir;)