Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 547

 
moskitman:

Natürlich ist es das, aber...

Ich bezweifle stark die Richtigkeit des Entwurfs

Hier https://www.mql5.com/ru/forum/119342 ist eine gute Funktion, um eine Liste der verfügbaren Symbole im Terminal zu erhalten, in diesem Fall sehe ich nicht viel Sinn darin, das Auftragssymbol mit den Brokersymbolnamen in diesem Konto zu vergleichen, aber in anderen Fällen ist es sehr nützlich.

Und in diesem Fall, um Suffixe auszuschließen

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

Können Sie mir das sagen? Wo befindet sich der Abschnitt über die Einstellungen? Das heißt, das Layout, die Kontrollkästchen, die Pfeile, usw.


Würden Sie bitte entschlüsseln, worum es sich handelt?
 
Vinin:

Würden Sie entziffern, worüber wir reden
"Lego".
 
GSB:

Ich danke Ihnen.

Die Bedingung wurde erfüllt, der Fehler lag in einem anderen Teil des Codes. :)

 

In der Hilfe heißt es, dass:

"Beachten Sie, dass in MQL4 Strukturelemente direkt aufeinander folgen, ohne dass sie ausgerichtet werden."

Was meinen Sie mit " Ausrichtung"?

Wenn ich es richtig verstanden habe, werden die ausgerichteten Elemente wie folgt aussehen:

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

Richtig?

Was mich überrascht, ist, dass bei der Programmierung der grundlegende Punkt ist, dass der Compiler Leerzeichen überspringt, aber hier kommt heraus, dass es etwas beeinflusst...

 
hoz:

In der Hilfe heißt es, dass:

"Beachten Sie, dass in MQL4 Strukturelemente direkt aufeinander folgen, ohne dass sie ausgerichtet werden."

Was meinen Sie mit " Ausrichtung"?

Wenn ich es richtig verstanden habe, werden die ausgerichteten Elemente wie folgt aussehen:

und nicht-ausgerichtet, wie hier: Richtig?

Alles entschlüsselt in den Kommentaren

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

Die Elemente einer Struktur können unterschiedliche Typen und dementsprechend unterschiedliche Längen in Bytes haben, aber der Speicher für jedes Element wird auf die gleiche Weise zugewiesen - durch das maximale Mitglied. Im Beispiel handelt es sich um doppelte 8 Bytes.

Tatsächlich gibt es nur 3 Elemente in der Struktur, aber das erste belegt nur 1 Byte und wir müssen 7 weitere Bytes "leer" zuweisen, um es mit den letzten beiden Elementen abzugleichen. Es ist einfacher, eine bestimmte Struktur wie folgt zu beschreiben

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

Der Compiler fügt also die erforderliche Anzahl von Bytes für jedes Element hinzu? Ich meine Leerzeichen, die in dem Beispiel nicht benötigt werden?

Und übrigens, wenn

GSB:

Strukturen können unterschiedliche Typen und daher unterschiedliche Längen in Bytes haben, aber der Speicher für jedes Element wird auf die gleiche Weise zugewiesen - durch das maximale Mitglied. Im Beispiel handelt es sich um doppelte 8 Bytes.


Wenn dies der Fall ist und für jedes Element ohnehin nur ein Speicherplatz zugewiesen wird, welchen Unterschied macht es dann, in welcher Reihenfolge die Elemente der Struktur angeordnet sind?
 
hoz:

Der Compiler fügt also die erforderliche Anzahl von Bytes für jedes Element hinzu? Ich meine Leerzeichen, die in dem Beispiel nicht benötigt werden?

Und übrigens, wenn


Wenn das so ist und für jedes Element ohnehin nur ein Speicherplatz zugewiesen wird, welchen Unterschied macht es dann, in welcher Reihenfolge man die Elemente der Struktur anordnet?

Nein, tut es nicht. Wenn Sie int slippage zuerst eingeben, werden 4 Bytes zugewiesen, also sollten Sie 8 addieren (int reserve) oder long anstelle von int verwenden.

Zitat von Help

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

Die richtige Option, die keine Ausrichtung erfordert, ist

struct trade_settings
  {
   double take;        // значения цены фиксации прибыли
   double stop;        // значение цены защитного стопа
   int slippage;       // значение допустимого проскальзывания
  };
 
Bitte beraten Sie, ich schreibe eine Multi-Währung EA, ziehen Sie die Ask und Bid von anderen Währungen, normalisieren, aber es gibt immer noch zusätzliche Ziffern im Preis.
     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:
Bitte beraten Sie, ich schreibe eine Multi-Währung EA, ziehen Sie die Ask und Bid von anderen Währungen, normalisieren, aber es gibt noch einige zusätzliche Ziffern im Preis.

Auch die
Ziffern sollten möglichst aus dem entsprechenden Symbol "herausgezogen" werden ;)