Weniger Code, mehr Action... einen EA schreiben - Seite 5

 
Vladimir Simakov:

Was wollen Sie damit erreichen? Um ehrlich zu sein, verstehe ich das nicht. Zuerst dachte ich, es sei ein Rahmenwerk vorgesehen, aber nein, keine Wrapper-Klassen für Indikatoren, Aufträge, Standardalgorithmen für die Entscheidungsfindung, nichts. Viel lesbarer ist zwar dieses Konstrukt: fast.Get(2)>=slow.Get(1); (nur als Beispiel), aber die Erklärung:

CMA fast=new CMA(NULL,0,12,...);

CMA slow=new CMA(NULL,0,100,...);

Jetzt können wir darüber diskutieren, während Sie, IMHO, auf der Stelle trampeln.

z. B. statt fast.Get(2)>=slow.Get(1); ist dies ein ganz legaler und funktionierender Code:

table[FAST_MA][1] >=table[SLOW_MA][2]

Es funktioniert wie eine Tabellenkalkulation mit Excel. Sie wird in einer Tabelle zusammengefasst, nicht durch einzelne Griffe, da die Daten (Formeln) voneinander abhängig sein können.

Das ist möglich (ich habe es nur noch nicht in einer bestimmten Bibliothek getan):

fast=table[FAST_MA]; slow=table[SLOW_MA];

und dann ist schnell[2]>langsam[1] noch einfacher zu lesen

und alle internen Berechnungen werden "bei Bedarf" durchgeführt.

 
Maxim Kuznetsov:

auch z.B. anstelle von fast.Get(2)>=slow.Get(1); ganz legaler und funktionierender Code:

table[FAST_MA][1] >=table[SLOW_MA][2]

es funktioniert wie bei einer Tabellenkalkulation, bei Excel. Sie wird in einer Tabelle zusammengefasst, nicht durch einzelne Griffe, da die Daten (Formeln) voneinander abhängig sein können.

Das ist möglich (ich habe es nur noch nicht in einer bestimmten Bibliothek getan):

fast=table[FAST_MA]; slow=table[SLOW_MA];

und dann liest schnell[2]>langsam[1] noch einfacher

und alle internen Berechnungen werden "bei Bedarf" durchgeführt

Es ist eine Art Krücke. Zu den Wischpuffern, die das Terminal ohnehin erstellt, fügen wir auch Arrays von Doubles hinzu. Ich verstehe, dass Sie Speicher für sie auf die volle Tiefe der Geschichte (für M1 USHORT_MAX, wenn ich mich richtig erinnere *8 Byte) reservieren oder planen Sie, teure ArrayResize regelmäßig in den Prozess zu verwenden?
 
Vasiliy Sokolov:

Ich stimme zu, dass es sehr schwierig ist, Ihren Code zu lesen, selbst wenn Sie die Sprache beherrschen.

Diese Regel gilt eigentlich für jeden Code von Dritten. Die Frage ist nur, welcher Code nicht schwer, aber leichter zu lesen ist.

Und hier ist es einfacher, fast immer MQL4-Code zu lesen und zu bearbeiten. Die Entwickler haben es einmal erraten.

 
fxsaber:

Diese Regel gilt eigentlich für jeden Code von Dritten. Die Frage ist nur, welcher Code nicht schwierig, aber leichter zu lesen ist.

Und es ist einfacher zu lesen und zu bearbeiten fast immer MQL4-Code. Die Entwickler haben es einmal erraten.

Aber lassen Sie mich Ihnen eine Frage stellen. Was war die Vermutung? Standard C/C++, mit Ausnahme spezifischer Abfragen in Bezug auf Handel und Diagramme, kann als "windows.h" in C++ betrachtet werden.

Also, Respekt an die Entwickler, dass sie das Rad nicht neu erfunden haben, obwohl das Verbot von Links ein eindeutiges Minus ist, konnte ich mich nicht freuen, als ich in C/C++ nach mql fiel. Deshalb, wenn ein Wunder geschieht, vielleicht sollten Sie in Erwägung ziehen, als Alternative, wie C # usafe, vor allem für Leute wie mich, wie wenn Sie die Wand zu schlagen wollen, töten Sie sich, wir haben Sie gewarnt.

 
Vladimir Simakov:

Lassen Sie mich Ihnen eine Frage stellen. Wie lautet die Vermutung?

Kodobase ist voll von MT5 EAs, die Remakes von MT4 EAs sind. Vergleichen Sie den Code des Originals und des Remakes.


Es ist natürlich viel einfacher, die Logik des MT4-Originals zu verstehen. Aber es ist noch einfacher, wenn man etwas in TS korrigieren muss. Nicht umsonst ist MQL4 ein Standard für die Diskussion von Handelsalgorithmen in Foren auf der ganzen Welt. Keine andere Sprache, sondern MQL4. Und es hat eine große Rolle bei der Popularität von MT4 gespielt, nicht umgekehrt.


Und wenn wir über MT5 Konvertierungen sprechen, sind sie krumm - sie funktionieren nicht immer. Ein einfaches Beispiel. Sie senden eine Aufforderung zur Schließung einer Position, erhalten aber einen Handelsauftrag, anstatt die Position zu schließen. Es gibt eine Reihe von Tricks, die gelöst werden müssen, um zum echten Konto zu gelangen. Mit MT4 ist das einfach und zuverlässig.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
fxsaber:

Die kodobase ist voll von MT5 EAs, die Remakes von MT4 EAs sind. Vergleichen Sie den Code des Originals und des Remakes.


Offensichtlich ist es viel einfacher, die Logik des MT4-Originals zu verstehen. Aber es ist noch einfacher, wenn man etwas in TS korrigieren muss. Nicht umsonst ist MQL4 ein Standard für die Diskussion von Handelsalgorithmen in Foren auf der ganzen Welt. Keine andere Sprache, sondern MQL4. Und es hat eine große Rolle bei der Popularität von MT4 gespielt, nicht umgekehrt.


Und wenn wir über MT5 Konvertierungen sprechen, sind sie krumm - sie funktionieren nicht immer. Ein einfaches Beispiel. Sie senden eine Aufforderung zur Schließung einer Position, erhalten aber einen Handelsauftrag, anstatt die Position zu schließen. Es gibt eine Reihe von Tricks, die gelöst werden müssen, um zum echten Konto zu gelangen. Mit MT4 ist das einfach und zuverlässig.

Es ist also verrückt, mit Ordnungen/Stellungen in Analogie zu arbeiten. In mql4 habe ich eine Wrapper-Klasse dafür, in mql5 habe ich zwei verschiedene, denn in mt4 ist es eine Entität, und in mt5 gibt es zwei verschiedene, jetzt ist der Plan, eine Wrapper-Klasse auf sie zu implementieren und vergessen, über die Arbeit mit Bestellungen, wie ich für ein halbes Jahr auf mql4 haben.
 
Und ja, mt5 wurde geschaffen, um an der Börse zu arbeiten, und es ist ein anderes Prinzip der Arbeit mit Aufträgen / Positionen, so lernen die Mathematik und nicht jammern, alles funktioniert gut und reibungslos gibt, aber die Handelsmechanik der Börse und Forex haben zuerst zu lernen und berücksichtigen ihre Unterschiede. Alles, was dazu nötig ist, haben die Entwickler in den Docks angegeben und beschrieben, und dann liegt es an Ihnen.
 
Vladimir Simakov:
Es ist also unsinnig, mit Ordnungen/Stellungen in Analogie zu arbeiten. Ich habe eine Wrapper-Klasse für sie in mql4 und zwei verschiedene in mql5, weil es in mt4 eine Entität und in mt5 zwei verschiedene sind. Jetzt habe ich vor, die Wrapper-Klasse auf sie zu implementieren und vergessen, mit Bestellungen zu arbeiten, wie ich vor einem halben Jahr auf mql4 tat.
Wladimir Simakow:
Das ist der Grund, warum wir das Gleiche in Mathematik lernen sollten und nicht meckern, alles funktioniert gut und geht gut, aber zuerst müssen wir die Handelsmechanik von Börse und Forex lernen und ihre Unterschiede berücksichtigen. Alles, was dazu nötig ist, haben die Entwickler in den Docks angegeben und beschrieben, und dann liegt es an Ihnen.

Versuchen Sie, Ihren Horizont zu erweitern, denn was Sie geschrieben haben, ist wirklich zum Jammern.

 
Vladimir Simakov:
Es scheint eine Krücke zu sein. Neben Wischpuffern, die das Terminal ohnehin erstellt, fügen wir auch Arrays doppelt hinzu. Ich verstehe, dass Sie gehen, um Speicher für Sie auf die volle Tiefe der Geschichte zu reservieren (für M1 USHORT_MAX, wenn ich mich richtig erinnere *8 Byte) oder planen Sie, teure ArrayResize regelmäßig in den Prozess der Operation verwenden?

Ich weise ihnen natürlich Speicherplatz zu. Nur so tief, wie es für Berechnungen und Fehlersuche erforderlich ist. In dem vorliegenden Fragment sind es 30, was mehr als genug ist. Wenn es irgendwo notwendig sein wird, z.B. die Standardabweichung der Tiefe 50 zu berechnen, dann sollte der Cache vergrößert werden. Und das nur, um die Berechnungen zu beschleunigen.

 
fxsaber:

Versuchen Sie, Ihren Horizont zu erweitern, denn was Sie geschrieben haben, ist wirklich zum Jammern.

Mir geht es gut, aber so ist die Verbindung zwischen Position und Auftrag in mql5 implementiert (als Teil der letzten Arbeit war es im Prinzip in dieser Form bereits in der Bibliothek für Hedge-Konten enthalten).

CHedge::CheckOrder(void){
   if (!CheckPointer(cOrder)) return;
   switch(cOrder.Control()){
      case ORDER_FULL:        cPosition=NewPosition(cOrder);
      case ORDER_REMOVE:
      case ORDER_ERROR:       delete cOrder;}}