Diskussion zum Artikel "Die Umsetzung des Mehrwährungsmodus in MetaTrader 5" - Seite 3

 
Lizar:

Die hexadezimale Logik ist überall gleich. Sie können hier über Zahlensysteme lesen. Dort können Sie über positionale Zahlensysteme lesen und Verweise auf 16 und Binärzahlen sehen. Dort gibt es auch weitere Beispiele für die Umwandlung von einem System in ein anderes.

Alle bitweisen Operationen sind für das Binärsystem gedacht. Über bitweise Operationen in MQL5 hier.

Diese Artikel sind gut zu lesen, wenn man bereits weiß, wovon man spricht :)

Zum Beispiel verwenden Sie das Präfix "0x" in der Aufzählung. Soweit ich das verstehe, bedeutet das, dass hexadezimale Zahlen geschrieben werden, während der Ausdruck "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" die "bitweise UND-Operation" verwendet. Sie schreiben, dass bitweise Operationen für das Binärsystem bestimmt sind. Wie verhält sich dann der &-Operator (für das Binärsystem) zu hexadezimalen Zahlen?

Eine weitere Frage: Wenn ich richtig verstanden habe, entspricht der Ausdruck "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" dem Ausdruck"flag_event !"= CHARTEVENT_NEWBAR_M1". Ist das richtig? Und wenn ja, warum sollte man bitweise Operationen verwenden?

 

Вы же пишите, что побитовые операции предназначены для двоичной системы

Wo ist der Unterschied? Die Zahlen in der CPU sind sowieso binär.

Selbst wenn du also 255 oder FF in deinem Kopf "siehst" und mit 8 oder 0x00000100 vergleichst, gibt es keinen Unterschied.


Yedelkin:

Noch eine Frage: Wenn ich richtig verstanden habe, ist der Ausdruck "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" äquivalent zum Ausdruck"flag_event !"= CHARTEVENT_NEWBAR_M1". Ist das richtig? Und wenn ja, warum sollte man dann bitweise Operationen verwenden?

Ja, in dieser Situation bedeutet es genau das, aber bitweise Operationen sind breiter anwendbar und allgemeiner als nur Vergleiche, insbesondere da es zum klassischen Verhalten geworden ist, bitweise Operationen zu verwenden, wenn man mit Konstanten arbeitet.
 
sergeev:

Wo liegt der Unterschied? Die Zahlen in der CPU sind ohnehin binär.

Selbst wenn Sie also 255 oder FF in Ihrem Kopf "sehen" und sie mit 8 oder 0x00000100 vergleichen, gibt es keinen Unterschied.

Der Unterschied ist terminologischer Natur. Aber ich habe deinen Worten entnommen, dass es für Programmierer keine Rolle spielt.

sergeev:

Ja, in dieser Situation bedeutet es genau das, aber Bitoperationen sind breiter angelegt und allgemeiner als nur Vergleiche, zumal es bereits zu einem klassischen Verhalten geworden ist, Bitoperationen zu verwenden, wenn man mit Konstanten arbeitet.

Aha! Wenn ich also mit Bitoperationen nicht vertraut bin, kann ich Ausdrücke mit Vergleichsoperatoren sicher umschreiben? Vielen Dank für die Klarstellung!

 
Yedelkin:

Diese Artikel sind gut zu lesen, wenn man schon weiß, worum es geht :)

Sie verwenden zum Beispiel das Präfix "0x" in Ihrer Aufzählung. Soweit ich das verstehe, bedeutet das, dass hexadezimale Zahlen geschrieben werden, während der Ausdruck "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" die"bitweise UND-Operation" verwendet. Sie schreiben, dass bitweise Operationen für das Binärsystem bestimmt sind. Wie verhält sich dann der &-Operator (für das Binärsystem) zu hexadezimalen Zahlen?

Alle diese Systeme stellen Zahlen nur visuell anders dar, und wenn eine Zahl zehn ist, ist sie überall zehn. Für den Computer werden ALLE Zahlen, egal in welchem System wir sie schreiben, in Binärzahlen umgewandelt. Sogar die Buchstaben, die ich schreibe, werden in Binärzahlen umgewandelt. In anderen Systemen werden Zahlen hauptsächlich aus Gründen der Übersichtlichkeit oder aus Gewohnheit beschriftet. Manche Leute machen das, um schlauer auszusehen. In diesem Fall wurden hexadezimale Zahlen aus Gründen der Kompaktheit der Schrift und der besseren Übersichtlichkeit verwendet. Klarheit entsteht, wenn man weiß, wie Hexadezimalzahlen gebildet werden.

Eine weitere Frage: Wenn ich richtig verstanden habe, ist der Ausdruck "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" äquivalent zum Ausdruck"flag_event !"= CHARTEVENT_NEWBAR_M1". Ist das richtig? Und wenn ja, warum sollte man dann bitweise Operationen verwenden?

Nein, das ist nicht immer der Fall. Es hängt davon ab, was in flag_event geschrieben wurde. Wenn nur CHARTEVENT_NEWBAR_M1 in flag_event geschrieben wurde, dann ist flag_event = CHARTEVENT_NEWBAR_M1. WennCHARTEVENT_NEWBAR_M1|CHARTEVENT_NEWBAR_M5 inflag_event geschrieben wurde, dann ist flag_event != CHARTEVENT_NEWBAR_M1.Aber in beiden Fällen wird die Bedingung (flag_event & CHARTEVENT_NEWBAR_M1)!=0erfüllt .

Wenn SieCHARTEVENT_NEWBAR_M5 in flag_event schreiben , dann ist flag_event != CHARTEVENT_NEWBAR_M1. Aber (flag_event & CHARTEVENT_NEWBAR_M1)=0.

Um diese Tricks zu verstehen, müssen Sie Zahlensysteme und bitweise Operationen verstehen. Andernfalls sind Sie tot.

 
Yedelkin:

Ich verstehe! D.h. wenn es für mich etwas ungewöhnlich ist, bitweise Operationen zu verwenden, kann ich Ausdrücke mit Vergleichsoperatoren sicher umschreiben? Vielen Dank für die Klarstellung!

Sie können sie immer ersetzen, aber das kann zusätzliche Berechnungen erfordern. Seien Sie vorsichtig mit diesem Fall :).
 
Lizar:
Sie können ihn jederzeit ersetzen, aber das kann zusätzliche Berechnungen erfordern. Seien Sie in diesem Fall vorsichtig :).

Also gut! Noch eine Frage. Wenn Sie hexadezimale Zahlen schreiben, verwenden Sie den Zweiergrad. Ist es sinnvoll, Zweiergrade zu verwenden, oder ist es auch eine Frage der Gewohnheit? Könnte man z.B. solche Kombinationen verwenden: 0x00000003, 0x00000009, usw.?

 
Yedelkin:

Also gut! Noch eine Frage. Wenn Sie hexadezimale Zahlen schreiben, verwenden Sie Zweierpotenzen. Ist es sinnvoll, Zweierpotenzen zu verwenden, oder ist es auch eine Frage der Gewohnheit? Könnte man z.B. solche Kombinationen verwenden: 0x00000003, 0x00000009, usw.?

Nein. Das liegt an der Verwendung von bitweisen Operationen. Im Spion addiere ich mehrere Zahlen (Ereignisse) zu einer Zahl (in flag_event), und im EA nehme ich mehrere Zahlen aus einer Zahl heraus, um zu sehen, welche Ereignisse der Spion gesendet hat. Und vice versa.

Oh, ich habe das nicht genau gelesen. Ja, das könnte man, aber ich hätte wahrscheinlich nicht genug Zahlen, um alle Ereignisse zu erfassen. Der Grad zwei wird verwendet, weil ich mit einer binären Darstellung der Zahl arbeite und in Hexadezimal schreibe. Jedes Bit steht für ein anderes Ereignis.

 
Hut ab, meine Herren :) Ein wahres Meisterwerk. Eine einfache, aber elegante und leistungsfähige Lösung. Tausend Dank, Konstantin, und herzlichen Glückwunsch :-)
 

Standardmäßig ist price[rates_total-1] gleich dem Schlusskurs des letzten nicht beendeten Balkens, der wiederum gleich dem letzten Geldkurs ist, d.h. wir erhalten standardmäßig immer den Geldkurs vom Spion.

Wenn Sie den Briefkurs erzwingen wollen, ersetzen Sie diese Zeile z.B. durch die folgende.


Autor, es tut mir leid, vielleicht habe ich nicht zu Ende gelesen, aber kann diese Funktion nicht nur Preisereignisse an den Expert Advisor weitergeben, sondern z.B,

Ereignisse eines Indikators oder deren Kombinationen/Variationen aus anderen Instrumenten, d.h. so als ob das Signal dort bereits eingegangen wäre. Wenn ja, wie ist dies zu implementieren.

Ich danke Ihnen für Ihre Antwort.

 
artall:

Standardmäßig ist price[rates_total-1] gleich dem Schlusskurs des letzten nicht beendeten Balkens, der wiederum gleich dem letzten Geldkurs ist, d.h. wir erhalten standardmäßig immer den Geldkurs vom Spion.

Wenn Sie den Briefkurs erzwingen wollen, ersetzen Sie diese Zeile z.B. durch die folgende.


Autor, es tut mir leid, vielleicht habe ich nicht zu Ende gelesen, aber kann diese Funktion nicht nur Preisereignisse an den Expert Advisor weitergeben, sondern z.B,

Ereignisse eines Indikators oder deren Kombinationen/Variationen aus anderen Instrumenten, d.h. so als ob das Signal dort bereits eingegangen wäre. Wenn ja, wie ist dies zu implementieren.

Vielen Dank für die Antwort.


Zu diesem Zweck ist es besser, den Indikator selbst zu verwenden, indem man die Standardfunktion EventChartCustom an der richtigen Stelle darin einbettet.