OOP vs. prozedurale Programmierung - Seite 5

 
Petros Shatakhtsyan:

Hier ist eine einfache Aufgabe (es würde viel Schreibarbeit erfordern, sie im Detail zu erklären).

Alles geschieht in OnTick(). Angenommen, wir prüfen eine Bedingung und eröffnen einen Auftrag. Die Bedingung ist nicht wichtig, nehmen wir an, es ist ein Maximum oder Minimum.

Der Roboter steht natürlich auf einem Chart und erhält Kurse dieses Symbols. Es ist klar, dass wir nicht nur eine Funktion OnTick haben, sondern auch andere Funktionen: OnTrade, OnTimer, benutzerdefinierte Funktionen, usw.

Daher müssen alle Variablen, die gemeinsam genutzt werden, außerhalb dieser Funktionen am Anfang des Codes deklariert werden. Zum Beispiel der Name des Symbols, der Briefkurs, der Geldkurs, der Spread, die Anzahl der Ziffern der Notierung, usw. Es wird Dutzende von ihnen geben.

Dieser Roboter handelt nur auf einem Symbol, d.h. dort, wo er steht. Nehmen wir an, es gibt 20 solcher Charts und wir werden denselben Roboter auf allen installieren, um gleichzeitig mit allen 20 Paaren zu handeln.

Es handelt sich jedoch nicht um einen Multiwährungs-Handelsroboter, wie einige Händler auf dem Markt bemerkt haben.


Hier müssen wir ihn in einen Mehrwährungsroboter verwandeln. D.h. wir legen es auf ein beliebiges Diagramm (nur auf 1 Diagramm) und es öffnet Geschäfte für 20 Paare. Das bedeutet, dass wir es im Tester im Einzelplatzmodus starten und es wird mit den Paaren handeln, die in Market Watch sind.

Hier ist, wie Sie es ohne OOP implementieren werden. Werden Sie alle gemeinsamen Variablen in Arrays mit 20 Elementen umwandeln?

Und was ist mit den Funktionen, die für alle Paare gleichzeitig aufgerufen werden?

Ohne OOP geht es nicht. :)


P.S. Ich möchte anmerken, dass ich keine russische Ausbildung habe, und deshalb habe ich lange geschrieben und keine Zeit gehabt, mehrere Seiten zu lesen.

Um eine Mehrwährungs-Engine zu erstellen, müssen Sie zunächst eine Mehrwährungs-Engine schreiben und nicht einen Roboter neu entwerfen, der für ein Paar angepasst ist.

Die Methode zur Erstellung einer Multicurrency-Engine erfordert keine Verwendung von OOP. Wir können einen Codeblock schreiben, der die Ticks aller Währungspaare aufnimmt und überall die gleichen Analyse- und Orderplatzierungsfunktionen anwendet. Die Auftragsfunktionen selbst enthalten Variablen, deren Werte sich je nach Paar ändern. Diese Werte werden von dem Block, der Ticks empfängt, geändert.

 
Реter Konow:
Es wäre wünschenswert, dass sie zu einer konkreten Aufgabe führen. Diese Beschreibung ist nicht sehr klar. In meiner Praxis ändert sich der Algorithmus nicht, wenn sich externe Parameter ändern. Sie wird im Voraus für beliebige Werte dieser Parameter universal gemacht. Es ist also nicht ganz klar, was Sie meinen. Beschreiben Sie es anhand eines konkreten Beispiels.

So müssen beispielsweise 100 Trailing-Stop-Varianten in einen Expert Advisor gepackt werden. Wenn man prozedural programmiert, entsteht ein Chaos wie dieses:

if(Trailing_01_ON){
    Trailing1();
}

if(Trailing_02_ON){ Trailing2(); } ...

...

...

if(Trailing_99_ON){ Trailing99(); }

100 identische Codefragmente. Wenn das Programm läuft, wird nur einer der nachlaufenden Stopps aktiviert, und die restlichen 99 ifs verbrauchen nur Ressourcen.

Nun zur OOP-Variante. Während der Initialisierung des Expert Advisors skalieren wir das Array mit Zeigern entsprechend der Anzahl der Trails und erstellen nur Objekte für die enthaltenen Trails. Daher wird der folgende Code immer funktionieren:

for(int i=0;i<cnt;i++){
   p[i].Main();
} 

Wenn ein Trailing-Stop aktiviert ist, dann ist cnt=1, d.h. es gibt nichts Unnötiges.

 
Dmitry Fedoseev:

Die wichtigere Frage ist hier nicht "wie", sondern "warum"? Warum etwas programmieren, das bereits im Terminal implementiert ist - öffnen Sie einfach die gewünschte Anzahl von Charts und weisen Sie ihnen einen EA zu. Darüber hinaus müssen die Parameter für verschiedene Symbole und Zeitrahmen unterschiedlich sein.


Im Terminal wurde noch nichts implementiert. Erstens wird nur ein Diagramm anstelle von 20 geöffnet; zweitens können Sie im Tester nicht viele Paare gleichzeitig testen, da alle offenen Positionen berücksichtigt werden.

Sagen Sie mir nicht, dass es den Modus "Alle Symbole in MarketWatch ausgewählt" gibt.

 

Ein Programmierer, der nicht versteht, wie das Konzept "Objekt" beschrieben wird, kann als Amateurprogrammierer betrachtet werden, der die Kunst der modernen Programmierung nicht beherrscht.

 
Dmitry Fedoseev:

So müssen beispielsweise 100 Trailing-Stop-Varianten in einen Expert Advisor gepackt werden. Wenn man prozedural programmiert, entsteht ein Chaos wie dieses:

100 identische Codefragmente. Wenn das Programm läuft, wird nur einer der nachlaufenden Stopps aktiviert, und die restlichen 99 ifs verbrauchen nur Ressourcen.

Nun zur OOP-Variante. Während der Initialisierung des Expert Advisors skalieren wir das Array mit Zeigern entsprechend der Anzahl der Trails und erstellen nur Objekte für die enthaltenen Trails. Daher wird der folgende Code immer funktionieren:

Wenn ein nachlaufender Balken aktiviert ist, ist cnt=1, d.h. es gibt nichts Unnötiges.

Das ist ein sehr, sehr merkwürdiger Ansatz, um die Aufgabe mit den Nachläufen im Allgemeinen zu lösen. Eine solche Aufgabe sollte es nicht geben - 100 verschiedene Arten von Trailing Stops und für jede eine andere Funktion.

Sie müssen diese Typen in einer oder mehreren Formeln zusammenfassen, um eine gemeinsame Trailing-Stop-Funktion zu erhalten. Das ist alles. Natürlich werden Sie mit grauen Zellen arbeiten müssen, aber OOP hat damit nichts zu tun...

 
Реter Konow:

Eine sehr, sehr seltsame Herangehensweise an das Trailing-Stop-Problem als Ganzes. Es sollte nicht 100 verschiedene Arten von Trailing Stops und für jede eine andere Funktion geben.

Diese Typen müssen in eine oder mehrere Formeln und eine gemeinsame Schlussfunktion komprimiert werden. Das ist alles. Natürlich werden Sie mit grauen Zellen arbeiten müssen, aber das hat nichts mit OOP zu tun...


Angenommen, ein Trailing-Stop auf MA, und es gibt Dutzende davon.

Und warum etwas komprimieren, wenn man auch einfach leben kann?
 
Dmitry Fedoseev:

Gehen wir davon aus, dass es mehrere Dutzend MA gibt, die sich im Rückstand befinden.

Und warum sollte etwas komprimiert werden, wenn man mit Leichtigkeit leben kann?


Es stellt sich heraus, dass der Kern Ihres Arguments zugunsten von OOP darauf beruht, eine von Natur aus lächerliche Entscheidung zu erleichtern. Das ist ein zweifelhaftes Argument...


Warum Dutzende von verschiedenen Nachlauffunktionen? Ist es für einen ernsthaften OOP-Programmierer schwierig, ein universelles Programm zu schreiben?

 
Реter Konow:


Es stellt sich heraus, dass der Kern Ihres Arguments zugunsten von OOP darauf beruht, eine von Natur aus lächerliche Lösung zu ermöglichen. Ein zweifelhaftes Argument...

Warum ist das auf einmal lächerlich?

Wie lächerlich wäre es, 100 Wenns zu verwenden?

 
Dmitry Fedoseev:

Warum ist das auf einmal lächerlich?

Es wäre lächerlich, 100 Iffos zu verwenden.

Sie müssen nicht 100 iffos verwenden. Sie müssen das Problem effizienter lösen und eine einzige Funktion mit nachträglichen Anpassungen an verschiedene Parameter erstellen.
 
Реter Konow:
Sie brauchen nicht 100 ifofs zu verwenden. Sie müssen die Aufgabe effizienter lösen und eine Funktion mit Nachlauf erstellen, die sich an verschiedene Parameter anpasst.

Und wie wollen Sie den Trailing-Stop an unterschiedliche Parameter anpassen? Es wird immer noch einige Zweige des Algorithmus geben, die bei bestimmten Parameterkombinationen nie ausgeführt werden.

Grund der Beschwerde: