Fehler, Irrtümer, Fragen - Seite 108

 
Interesting:

Zuverlässiger? Warum ist das Abrufen von Handles bei der Initialisierung nicht zuverlässig? Warum ist es unzuverlässig, nach notwendigen Daten zu suchen? Und vor allem, warum ist das Vorhandensein von Kontrollen nicht zuverlässig?

Für Anfänger mag es nicht so einfach sein, aber mit der Zeit wird alles klar...

Ich versuche sogar, es sofort herauszufinden, nicht erst später... Ich möchte nicht einfach ein paar Aktionen kopieren, ohne ihre Bedeutung zu verstehen. Wenn ich den Code als integrierte Funktion wie in MQL4 habe, werde ich wahrscheinlich einen zusätzlichen Parameter mit der Anzahl der Balken hinzufügen.

 

Warum wird sie geladen?

 
simpleton:

"Gewöhnliche Zahlen" sind konstante Ausdrücke, die auch einen Typ haben. In diesem Fall ist es der Typ int.

Ein Ausdruck, der aus einer Multiplikation von zwei Unterausdrücken vom Typ int besteht, ist ebenfalls vom Typ int. An dieser Stelle kommt es zum Überlauf.

Und erst dann erfolgt bei der Initialisierung der Long-Variablen die implizite Konvertierung vom Typ des int-Ausdrucks in den Typ long.

Hier ist alles klar. Übrigens ist es in diesem Fall nicht notwendig, jeden der Operanden auf long zu setzen. Wir können einfach eine der beiden Methoden anwenden und die zweite implizit anwenden.

Das ist es, was ich sagen wollte, allerdings in einer weniger akademischen Sprache. Die Hauptsache ist, andere Beobachter zu warnen.

Die Frage ist eine andere. Wo in welchem Talmud steht, dass :

"Gewöhnliche Zahlen" sind konstante Ausdrücke, die auch einen Typ haben. In diesem Fall ist es der Typ int.

Zum Beispiel, wenn X auf 10000000000 gesetzt wird, dann wird es Long-Typ? Und warum nicht ulong oder datetime oder sogar string.?

Was ist der Typ der Zahl 255uchar odershort?

 
gumgum:

Warum wird sie geladen?

Wahrscheinlich, weil GBPJPY ein Cross-Pair ist und irgendwo im Code Margin-Berechnungen durchgeführt werden. IMHO
 
simpleton:

Es scheint eine Verwechslung zwischen dem Protokoll und dem Code zu geben. Der obige Code funktioniert "sauber". Und um ein solches Protokoll zu erhalten, musste ich die Variablen A und B vom Typ int oder uint und die Variable X vom Typ uint machen:

Und hier ist die Arbeit des ursprünglichen Codes:

Build 314 (20. August 2010).

Ich habe einen anderen Code zitiert

long A = AccountInfoInteger(ACCOUNT_LOGIN);  // 661701
long B = A;
long C = 661701;

Print(" A=",A,"  B=",B,"  C=",C);

long X =(long)10000;

long L1 = A*X;
long L2 = B*X;
long L3 = C*X;

Print(" L1=",L1,"   L2=",L2,"   L3=",L3);

Achten Sie besonders auf die erste Zeile, da Ihr Konto möglicherweise eine andere Nummer hat. Nachschlagen und in langes C setzen =

Erneut geprüftes Ergebnis

2010.08.25 20:23:12     Servis (EURUSD,H1)       L1=2322042704   L2=2322042704   L3=6617010000
2010.08.25 20:23:12     Servis (EURUSD,H1)       A=661701  B=661701  C=661701

Build 314 (20. August 2010).

 
Bitte sagen Sie mir, warum die Funktion SymbolInfoDouble(_Symbol,SYMBOL_POINT) einen fünfstelligen Wert von 0,00001 nach dem Dezimalpunkt für USDCHF anzeigt, obwohl der akzeptierte Wert für dieses Paar 0,0001 ist?
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
Получение рыночной информации / SymbolInfoDouble - Документация по MQL5
 
rut_:
Bitte sagen Sie mir, warum die Funktion SymbolInfoDouble(_Symbol,SYMBOL_POINT) des Paares USDCHF eine fünfstellige Punktgröße nach dem Dezimalpunkt 0,00001 erzeugt, wenn dieses Paar für den Punktwert 0,0001 akzeptiert wird?

Warum glauben Sie, dass dieses Instrument 4-stellig ist? Das Terminal zeigt deutlich, dass die Kurse 5-stellig sind.
 
sergey1294:
Was macht Sie denken, es gibt 4 Ziffern in diesem Instrument, das Terminal zeigt deutlich, dass die Zitate gibt es 5 Ziffern

Diese Funktion kann auch bei Konten mit fünf Ziffern unterschiedliche Punktwerte zurückgeben, dies hängt von den Einstellungen ab, die vom Broker akzeptiert werden.

Ein Maklerunternehmen hat zum Beispiel folgenden Kommentar

1 pips (пункт) равен:

для валютных пар с 5 знаками после запятой - минимальному изменению 4-го знака после запятой (0,0001);
для валютных пар с 3 знаками после запятой - минимальному изменению 2-го знака после запятой (0,01).

und eine andere hat 1 Pips gleich der fünften Ziffer.

 
SHOOTER777:

Genau das wollte ich sagen, allerdings in weniger akademischer Form. Und vor allem, um andere Suchende zu warnen.

Die Frage ist eine andere. Wo in welchem Talmud steht, dass :

"Gewöhnliche Zahlen" sind konstante Ausdrücke, die ebenfalls einen Typ haben. In diesem Fall ist es der Typ int.

Zum Beispiel, wenn X auf 10000000000 gesetzt wird, dann wird es Long-Typ? Und warum nicht ulong oder datetime oder sogar string.?

Was ist der Typ der Zahl 255uchar odershort?

Die Konstante 10000000000 ist bereits vom Typ long.

Wie soll ich es formulieren? Normale Sprachen verfügen über Suffixe - Modifikatoren, die es ermöglichen, den Typ einer Konstanten ohne explizite Typumwandlung anzugeben. Für MQL5 habe ich es nur für Float gefunden. Daher ist es unmöglich, Konstanten der Typen uchar, ushort, uint, ulong, char, short und long (wenn der konstante Wert in den Typ int passt) ohne explizite Typkonvertierung zu definieren.

Die Konstante 255 hat den Typ int. Sie können etwas in den Typbeschreibungen finden, z. B. werden Zeichenkonstanten mit dem Typ ushort deklariert. Außerdem gibt es Informationen über Konstanten vom Typ datetime, color, bool, double und string.

Sie können versuchen, die Größe des konstanten Typs zu drucken, solange die sizeof-Operation eingeführt wird (aber warum wird sie eingeführt, bitte erklären Sie einem der Entwickler):

void OnStart()
{
  Print("sizeof true                = ", sizeof true);
  Print("sizeof 'a'                 = ", sizeof 'a');
  Print("sizeof 255                 = ", sizeof 255);
  Print("sizeof 200000000           = ", sizeof 20000000);
  Print("sizeof 10000000000         = ", sizeof 10000000000);
  Print("sizeof C'128,128,128'      = ", sizeof C'128,128,128');
  Print("sizeof D'2004.01.01 00:00' = ", sizeof D'2004.01.01 00:00');
  Print("sizeof 1.0f                = ", sizeof 1.0 f);
  Print("sizeof 1.0                 = ", sizeof 1.0);
  Print("sizeof \"Xa!\"               = ", sizeof "Xa!");
  Print("sizeof \"Xa-xa-xa!!!\"       = ", sizeof "Xa-xa-xa!!!");
}

/* Вывод в лог (хронология - сверху вниз):
GF      0       1 (EURUSD,M15)  02:03:23        sizeof true                = 1
IS      0       1 (EURUSD,M15)  02:03:23        sizeof 'a'                 = 2
LF      0       1 (EURUSD,M15)  02:03:23        sizeof 255                 = 4
JI      0       1 (EURUSD,M15)  02:03:23        sizeof 200000000           = 4
EQ      0       1 (EURUSD,M15)  02:03:23        sizeof 10000000000         = 8
DG      0       1 (EURUSD,M15)  02:03:23        sizeof C'128,128,128'      = 4
JN      0       1 (EURUSD,M15)  02:03:23        sizeof D'2004.01.01 00:00' = 8
GE      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0f                = 4
GR      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0                 = 8
QJ      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa!"               = 12
ER      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa-xa-xa!!!"       = 12
*/

Im Allgemeinen funktioniert von den Suffixen nur f für Doppelkonstanten, indem es sie in Float umwandelt, was an sizeof-type einer solchen Konstante zu erkennen ist.

Hier ist die einzige sinnvolle Verwendung der sizeof-Operation, die ich finden konnte. :)

 
SHOOTER777:

Ich habe Ihnen einen anderen Code gegeben

Achten Sie besonders auf die erste Zeile, da Ihr Konto möglicherweise eine andere Nummer hat. Nachschlagen und in langes C setzen =

Erneut geprüftes Ergebnis

Build 314 (20. August 2010).

Nein, ich habe nicht die gleiche Wirkung wie Sie. Ich muss nur die Bit-Versionen von MT5 überprüfen. Ich habe die 64-Bit-Version, welche ist Ihre?

Führt der geänderte Code, den ich getestet habe, übrigens zu den gleichen Ergebnissen wie ich?

Wenn ja, dann ist das, was ich sehe, dem Fehler mit dem "Ursprung" eines Wertes sehr ähnlich - d.h. der Code kann sich unterschiedlich verhalten (sowohl korrekt als auch inkorrekt), je nachdem, woher der Wert, auf dem die weiteren Berechnungen basieren, ursprünglich kam.

Grund der Beschwerde: