Vasiliy Sokolov: Voreingenommenheit gegenüber const-Methoden. Ich wurde Programmierer in C# - und dort gibt es das nicht, weil die durch den Modifikator auferlegte Beschränkung nicht wirksam ist.
Ich dachte naiverweise, dass dieser Modifikator dem Compiler auch mitteilt, wo er beim Kompilieren optimalen nativen Code erstellen soll....
Die meiste Zeit im Strategietester wird für die Arbeit der Infrastruktur aufgewendet (Scrollen der Balken, Emulation der Handelsumgebung usw.). Der Expert Advisor-Code selbst benötigt viel weniger Zeit.
Andererseits hat das Profiling gezeigt, dass die wichtigsten ressourcenintensiven Methoden von CSTartegy die BuyInit-, SellInit-, BuySupport- und SellSupport-Methoden sind - d.h. die Expert Advisor-Logik selbst. Alle anderen Methoden werden in optimaler Weise in flachen Code kompiliert oder einfach weggelassen, wenn sie nicht gebraucht werden. Deshalb ist die OOP-Programmierung auf hoher Ebene gerechtfertigt.
Beachten Sie, dass bei mehr oder weniger komplexen Expert Advisors mit vielen Regeln und einer umfangreichen Infrastruktur die Programmierung in einer ursprünglich flachen Form (ohne Funktionen und OOP) zu unvermeidlichen Programmierfehlern führen wird, und dass die Leistung eines solchen Expert Advisors infolgedessen noch geringer sein wird als mit OOP. Die Zeiten von Assembler sind vorbei. Der Compiler hat den Menschen in bestimmten Bereichen der Optimierung schon längst besiegt. Es bleibt dem Menschen überlassen, eine zunächst kompetente und skalierbare Architektur mit einer minimalen Anzahl von Schnittstellen und guter Handhabbarkeit zu definieren. .
Ich bin mit Händen und Füßen für OOP. Solange sich dahinter nicht nur Krückenlösungen verstecken, wie bei Multisymbol OnTick. Was offiziell von Entwicklern nicht als Krückenlösung angesehen wird.
Anton Zverev: Ich bin mit Händen und Füßen für OOP. Solange sich dahinter nicht nur Krückenlösungen verstecken, wie bei Multisymbol OnTick. Was offiziell von Entwicklern als keine Krückenlösung angesehen wird.
Leider kann man hier auf der Benutzerebene nichts machen. Obwohl OnTick in CStrtategy multivalent ist, wird seine Multivalenz auch durch Krücken emuliert. Es wird einfach bei jedem eingehenden Ereignis der Tick eines anderen Instruments abgefragt, und wenn er sich geändert hat, wird ein neues OnTick-Ereignis für dieses Instrument erzeugt. Bei FORTS bietet CStrategy übrigens dank des OnBookEvent-Ereignisses ein echtes Multicurrency-OnTick. Aber auch hier handelt es sich um eine Emulation bei der Arbeit im Testprogramm.
Eine weitere Möglichkeit besteht darin, CStrategy mit einem Ressourcenindikator zu versehen. Beim Start startet CStrategy eine Instanz dieses Indikators auf dem erforderlichen Symbol und empfängt von ihm das Ereignis eines neuen Ticks. Dann wird es in OnTick CStrategy umgewandelt. Das ist eine klassische Krücke, aber die gesamte Implementierung ist meisterhaft hinter den Kulissen versteckt, und jede Strategie arbeitet auf einheitliche Weise, ohne zu wissen, wie diese Ticks empfangen wurden.
Leider kann hier auf Benutzerebene nichts getan werden. Obwohl OnTick in CStrtategy mehrwährungsfähig ist, wird die Mehrwährungsfähigkeit auch durch Krücken emuliert. Es wird einfach bei jedem eingehenden Ereignis der Tick eines anderen Instruments abgefragt, und wenn er sich geändert hat, wird ein neues OnTick-Ereignis für dieses Instrument erzeugt. Bei FORTS bietet CStrategy übrigens dank des OnBookEvent-Ereignisses ein echtes Multicurrency-OnTick. Aber auch hier handelt es sich um eine Emulation bei der Arbeit im Testprogramm.
Leider fehlen bei diesem Ansatz die Ticks.
Eine andere Möglichkeit besteht darin, CStrategy mit einem Ressourcenindikator zu versehen. Beim Start startet CStrategy eine Instanz dieses Indikators auf dem erforderlichen Symbol und empfängt von ihm das Ereignis der Ankunft eines neuen Ticks. Dann wird es in OnTick CStrategy umgewandelt. Das ist eine klassische Krückenvariante, aber die gesamte Implementierung ist meisterhaft hinter den Kulissen versteckt, und jede Strategie arbeitet auf einheitliche Weise, ohne zu wissen, wie diese Ticks empfangen wurden.
Ja, diese Variante und von den Entwicklern genehmigt. Aber IMHO erscheint sie furchtbar krückenhaft, wenn man bedenkt, wie die Ressourcen eines optimierten Testers für eine Aufgabe verschwendet werden, die für andere Plattformen die einfachste ist. OOP versteckt die Krücke sicherlich meisterhaft.
Ja, diese Option wird von den Entwicklern befürwortet. Aber IMHO erscheint sie furchtbar krüppelhaft, wenn man bedenkt, wie die Ressourcen eines optimierten Testers für die einfachste Aufgabe auf anderen Plattformen verwendet werden. OOP versteckt die Krücke sicherlich meisterhaft.
Nun, so schlimm ist es nicht. Denn die Indikatoren in MQL sind sehr schnell und arbeiten in ihrem eigenen Thread. Es stellt sich heraus, dass wir einen Mini-Listener starten, der uns das Eintreffen eines neuen Ereignisses meldet. Ich werde über diese Implementierung in den nächsten Teilen des Artikels nachdenken.
Ich habe diagonal gelesen, sehr nützliche Artikel, ich komme kaum durch - vielleicht habe ich etwas übersehen, ich interessiere mich für Anhänger, aber viele Daten fehlen im Impuls, bitte Fingerzeig... oder muss ich sie selbst eingeben?????
'Ask' - function not defined Impulse.mqh 51 20
'Ask' - function not defined Impulse.mqh 51 28
'PendingOrders' - undeclared identifier Impulse.mqh 56 16
'GetOrder' - object pointer expected Impulse.mqh 58 44
'IsMain' - member function not defined Impulse.mqh 59 34
'Modify' - member function not defined Impulse.mqh 66 19
'Delete' - member function not defined Impulse.mqh 69 19
'Bid' - function not defined Impulse.mqh 85 20
'Bid' - function not defined Impulse.mqh 85 28
'PendingOrders' - undeclared identifier Impulse.mqh 90 16
'GetOrder' - object pointer expected Impulse.mqh 92 44
'IsMain' - member function not defined Impulse.mqh 93 34
'Modify' - member function not defined Impulse.mqh 100 19
'Delete' - member function not defined Impulse.mqh 103 19
'Bid' - function not defined Impulse.mqh 118 23
'Bid' - function not defined Impulse.mqh 118 31
'Bid' - function not defined Impulse.mqh 124 7
'Ask' - function not defined Impulse.mqh 136 23
'Ask' - function not defined Impulse.mqh 136 31
'Ask' - function not defined Impulse.mqh 142 7
20 error(s), 0 warning(s) 21 1
Сергей Криушин: Ich habe diagonal gelesen, sehr nützliche Artikel, ich komme kaum durch - vielleicht habe ich etwas übersehen, ich interessiere mich für Anhänger, aber viele Daten fehlen im Impuls, bitte Fingerzeig... oder muss ich sie selbst eingeben????
Schönen guten Tag. Bitte aktualisieren Sie die Trading Engine auf die neueste Version. Sie ist dem fünften Teil des Artikels beigefügt.
Сергей Криушин: Ich habe diagonal gelesen, sehr nützliche Artikel, ich komme kaum durch - vielleicht habe ich etwas übersehen, ich interessiere mich für Anhänger, aber viele Daten fehlen im Impuls, bitte Fingerzeig... oder muss ich sie selbst eingeben????
Wenn Sie etwas nicht verstehen, können Sie in diesem Thread Fragen stellen.
Voreingenommenheit gegenüber const-Methoden. Ich wurde Programmierer in C# - und dort gibt es das nicht, weil die durch den Modifikator auferlegte Beschränkung nicht wirksam ist.
Ich dachte naiverweise, dass dieser Modifikator dem Compiler auch mitteilt, wo er beim Kompilieren optimalen nativen Code erstellen soll....
Ich verwende ihn selbst zur Selbstkontrolle.
Die meiste Zeit im Strategietester wird für die Arbeit der Infrastruktur aufgewendet (Scrollen der Balken, Emulation der Handelsumgebung usw.). Der Expert Advisor-Code selbst benötigt viel weniger Zeit.
Andererseits hat das Profiling gezeigt, dass die wichtigsten ressourcenintensiven Methoden von CSTartegy die BuyInit-, SellInit-, BuySupport- und SellSupport-Methoden sind - d.h. die Expert Advisor-Logik selbst. Alle anderen Methoden werden in optimaler Weise in flachen Code kompiliert oder einfach weggelassen, wenn sie nicht gebraucht werden. Deshalb ist die OOP-Programmierung auf hoher Ebene gerechtfertigt.
Beachten Sie, dass bei mehr oder weniger komplexen Expert Advisors mit vielen Regeln und einer umfangreichen Infrastruktur die Programmierung in einer ursprünglich flachen Form (ohne Funktionen und OOP) zu unvermeidlichen Programmierfehlern führen wird, und dass die Leistung eines solchen Expert Advisors infolgedessen noch geringer sein wird als mit OOP. Die Zeiten von Assembler sind vorbei. Der Compiler hat den Menschen in bestimmten Bereichen der Optimierung schon längst besiegt. Es bleibt dem Menschen überlassen, eine zunächst kompetente und skalierbare Architektur mit einer minimalen Anzahl von Schnittstellen und guter Handhabbarkeit zu definieren.
.
Ich dachte naiverweise, dass dieser Modifikator dem Compiler auch mitteilt, wo er bei der Kompilierung optimalen nativen Code erstellen soll.....
Ich verwende ihn selbst zur Selbstkontrolle.
Ich bin mit Händen und Füßen für OOP. Solange sich dahinter nicht nur Krückenlösungen verstecken, wie bei Multisymbol OnTick. Was offiziell von Entwicklern als keine Krückenlösung angesehen wird.
Leider kann man hier auf der Benutzerebene nichts machen. Obwohl OnTick in CStrtategy multivalent ist, wird seine Multivalenz auch durch Krücken emuliert. Es wird einfach bei jedem eingehenden Ereignis der Tick eines anderen Instruments abgefragt, und wenn er sich geändert hat, wird ein neues OnTick-Ereignis für dieses Instrument erzeugt. Bei FORTS bietet CStrategy übrigens dank des OnBookEvent-Ereignisses ein echtes Multicurrency-OnTick. Aber auch hier handelt es sich um eine Emulation bei der Arbeit im Testprogramm.
Eine weitere Möglichkeit besteht darin, CStrategy mit einem Ressourcenindikator zu versehen. Beim Start startet CStrategy eine Instanz dieses Indikators auf dem erforderlichen Symbol und empfängt von ihm das Ereignis eines neuen Ticks. Dann wird es in OnTick CStrategy umgewandelt. Das ist eine klassische Krücke, aber die gesamte Implementierung ist meisterhaft hinter den Kulissen versteckt, und jede Strategie arbeitet auf einheitliche Weise, ohne zu wissen, wie diese Ticks empfangen wurden.
Leider kann hier auf Benutzerebene nichts getan werden. Obwohl OnTick in CStrtategy mehrwährungsfähig ist, wird die Mehrwährungsfähigkeit auch durch Krücken emuliert. Es wird einfach bei jedem eingehenden Ereignis der Tick eines anderen Instruments abgefragt, und wenn er sich geändert hat, wird ein neues OnTick-Ereignis für dieses Instrument erzeugt. Bei FORTS bietet CStrategy übrigens dank des OnBookEvent-Ereignisses ein echtes Multicurrency-OnTick. Aber auch hier handelt es sich um eine Emulation bei der Arbeit im Testprogramm.
Leider fehlen bei diesem Ansatz die Ticks.
Eine andere Möglichkeit besteht darin, CStrategy mit einem Ressourcenindikator zu versehen. Beim Start startet CStrategy eine Instanz dieses Indikators auf dem erforderlichen Symbol und empfängt von ihm das Ereignis der Ankunft eines neuen Ticks. Dann wird es in OnTick CStrategy umgewandelt. Das ist eine klassische Krückenvariante, aber die gesamte Implementierung ist meisterhaft hinter den Kulissen versteckt, und jede Strategie arbeitet auf einheitliche Weise, ohne zu wissen, wie diese Ticks empfangen wurden.
Leider geht dieser Ansatz daneben.
Ja, diese Option wird von den Entwicklern befürwortet. Aber IMHO erscheint sie furchtbar krüppelhaft, wenn man bedenkt, wie die Ressourcen eines optimierten Testers für die einfachste Aufgabe auf anderen Plattformen verwendet werden. OOP versteckt die Krücke sicherlich meisterhaft.Ich habe diagonal gelesen, sehr nützliche Artikel, ich komme kaum durch - vielleicht habe ich etwas übersehen, ich interessiere mich für Anhänger, aber viele Daten fehlen im Impuls, bitte Fingerzeig... oder muss ich sie selbst eingeben????
Ich habe diagonal gelesen, sehr nützliche Artikel, ich komme kaum durch - vielleicht habe ich etwas übersehen, ich interessiere mich für Anhänger, aber viele Daten fehlen im Impuls, bitte Fingerzeig... oder muss ich sie selbst eingeben????
Wenn du etwas nicht verstehst, kannst du in diesem Thread Fragen stellen.