Automatisierung der Suche nach Strategien. - Seite 3

 
Aliaksandr Hryshyn:

Es gibt in der Tat eine Menge Kleinigkeiten.

Ich versuche, ein universelles System zu schaffen, so dass man mit minimalem Aufwand verschiedene Möglichkeiten zur Analyse von Indikatoren, Candlesticks usw. hinzufügen kann. Jede Funktion hat Informationen darüber, mit welchen Daten sie arbeiten kann und welche Daten ausgegeben werden. Auch die Indikatoren werden beschrieben, welche Art von Daten sie liefern. Die Daten werden in einfache und komplexe Typen eingeteilt, z. B. {double} und {int,double}. Sie werden in Kategorien eingeteilt, z. B. "Preis" und "Positionen im Diagramm", ein anderes Beispiel: "gerade Linie" (kann zur Definition von Kanälen verwendet werden) usw. Sie werden nach "Skalentyp" eingeteilt. Unterteilt nach "Skalentyp", z.B. "Konstant" (Strategieparameter), "Index" (es gibt ein Minimum und ein Maximum), "Verhältnis" (es gibt nur einen Bezugspunkt, z.B. Preis, Volumen), usw. Es ist notwendig, die Strategie auf konsistente Weise zu modifizieren, es gibt eine solche Nuance, die Modifikation an einer Stelle kann die Bedingungen der Modifikation an einer anderen Stelle beeinflussen.

Das ist richtig... Um die Anzahl der Kombinationen der Suche zu reduzieren und die oben genannten Einschränkungen (Typ, Skala, Kategorie), für jetzt wird es genug und Punktänderungen (Hinzufügen / Entfernen von einem / wenige Funktionen) sein.

"Rekombination ist auch spontan, aber von ganz fertigen Lösungen" - dieser Gedanke kam mir in den Sinn), ist es schwer vorstellbar, wie sie realisiert werden kann. Eine Gruppe kombinierter Funktionen wird wahrscheinlich mehr Verbindungen zur "Außenwelt" haben als eine einzelne Funktion, so dass es weniger Möglichkeiten gibt, das Ganze einzuklemmen. Der Algorithmus wird sehr kompliziert, lassen wir es für bessere Zeiten)).

Lassen Sie mich den Gedanken verdeutlichen. Um die Anzahl der Varianten zu reduzieren und die Änderung in einem Block hat keine Auswirkungen auf die anderen Blöcke sollte noch universeller sein. Der Trick ist, dass dieselben Aufgaben mit verschiedenen Methoden erreicht werden können und oft ist nicht von vornherein klar, welche die bessere ist. Wir haben zum Beispiel eine bestimmte universelle Aufgabe namens TRANSFORMATION definiert. Es gibt etwa ein Dutzend Oszillatoren, die diese Übersättigung jeweils auf ihre eigene Weise definieren. Nehmen wir an, dass wir im Oszillatorskript die Aufgabe gestellt haben, ALLE Indikatoren oder alle Methoden auszuprobieren. Dann müssen wir die Interaktion dieser Blöcke mit dem Rest des Codes standardisieren. Nehmen wir an, wir haben als Standard für die Interaktion den Prozentsatz des Tops gewählt. Der Generator fügt nacheinander einfach ein Blockstück mit dem Namen Oversold1 in den Code ein, findet die zu testenden Variablen in diesem speziellen Block, führt einen Volkin-Forward durch und merkt sich die Testergebnisse. Dann erstellt er eine neue Version des Expert Advisors, bereits mit dem Block Oversold 2, der ebenfalls Prozentsätze ausgibt, obwohl der ursprüngliche Indikator ganze Zahlen anzeigt, und zwar sogar mit einem anderen Vorzeichen als Null, usw. Am Ende des Tests verlässt er den erfolgreichsten Block und geht zu einer anderen Aufgabe über.

Dabei ist es nicht notwendig, so viele Blöcke vorzubereiten, 2 oder 3 Blöcke sind ausreichend. Die Hauptsache ist, dass die Interaktion hergestellt wird.

Genauso verhält es sich mit Abhängigkeiten. Es gibt A, B, C. Erstens, wenn A größer als B ist, dann ist C wahr. Dann, wenn B größer als A ist, und so weiter.

Dann können wir zu komplexeren Wechselwirkungen übergehen.

 

"Um die Anzahl der Optionen zu reduzieren und die Änderung einer Option hat keine Auswirkungen auf die anderen Blöcke sollte vielseitiger sein." => "Sagen wir, wir wählen den Interaktionsstandard - Prozente von oben." - Ich verstehe, was Sie meinen)). Es geht darum, die Indikatoren auf eine einzige Sichtweise zu bringen, d. h. um eine Vorverarbeitung. In meinem System ist alles zu formalisiert, ich möchte alles beibehalten, ich arbeite bereits an der Implementierung solcher Dinge wie Skala, Kategorie, ich habe bereits herausgefunden, wie man es macht, es gibt wirklich eine Verbindung von einigen Blöcken wirkt sich die Verbindung von Blöcken an anderen Stellen. Die Standardisierung von Indikatoren geht über die Beschreibung des Indikators selbst und je nach dem werden bestimmte Blöcke automatisch verbunden. Einer der Blöcke kann einfach die Berechnung des Prozentsatzes eines Wertes von einem anderen sein, nur müssen diese Werte eine Verbindung zwischen ihnen haben, die z.B. kontrolliert wird:

  1. Percent( Open[0] , Open[3] )
  2. Prozent(Open[0], Alligator[3])
  3. Prozent(Volumen[0], Alligator[3])

Die 1. und 3. Option sind gut und logisch, aber 3 macht keinen Sinn.

Es werden auch Indizes berechnet, zum Beispiel Open[ Max_on_position(iAC,0,30) ] ]

 
Youri Tarshecki:

Gleichzeitig ist es nicht notwendig, so viele Blöcke vorzubereiten, 2 oder 3 Blöcke werden ausreichen. Die Hauptsache ist, dass man eine Interaktion herstellt.

Genauso verhält es sich mit den Abhängigkeiten. Es gibt A, B, C. Wir prüfen zuerst, ob A größer als B ist, dann ist C wahr, dann, ob B größer als A ist, und so weiter.

Dann können wir zu komplexeren Wechselwirkungen übergehen.

Es ist bereits vorhanden.

Sie ist wie folgt implementiert:

  1. es gibt die Grundtypen int,double,bool
  2. komplexe Typen werden aus den Basistypen erstellt (man kann sie hinzufügen), z.B. (int,double) - Koordinate im Diagramm, (x,b) - Koeffizienten der Geradengleichung, (a,b,c,d) - Unterstützung für bis zu 4 Werte.
  3. Indikatoren werden als eine Menge komplexer Typen mit einem Element dargestellt
  4. Konstanten werden als komplexe Typen dargestellt, dies sind die Strategieparameter, die optimiert werden
  5. Funktionen erhalten bestimmte komplexe Typen von Variablen als Eingabe, ihre Anzahl ist nicht begrenzt, die Ausgabe sind ebenfalls komplexe Typen.
  6. den Funktionen ist es egal, woher diese Daten stammen, Hauptsache, es gibt eine Übereinstimmung der Typen
  7. alle in mql4 verfügbaren Aufträge werden unterstützt (6 Stück)
  8. die Strategie definiert nur eine Art von Auftrag (Kauf oder Verkauf oder buy_stop oder...)
  9. für nicht ausstehende Aufträge gibt es 4 Knoten am oberen Rand des Graphen: Markteintrittsbedingung, Austrittsbedingung, tp und sl.
  10. Blöcke (Funktionen/Knoten des Graphen) können Eingangsparameter von Indikatoren, Konstanten oder anderen Knoten annehmen, es ist erlaubt, dass viele andere Knoten Daten als Eingangsparameter vom Ergebnis eines Knotens annehmen können, es gibt keine Einschränkungen, außer der Tatsache, dass es unmöglich ist, Zyklen im Graphen zuzulassen.
  11. Dann wird der Graph in einen sequentiellen Code übersetzt, und dieser Code wird an den Expert Advisor zur Ausführung gesendet, es muss nichts in MQL kompiliert werden.
Hier ist ein Beispielcode:

#define
 symbol          GBPUSD;
period          60;
repeat_signal_skip      True;
stop_level              60;
trade           op_buy;
max_shift               13;
stack           4;
const           9;
cache           1;
#data
{True},{-1.26761795},{4.67108999},
{2.08088665},{-0.33782435},{22},
{1.63150050},{-11},{-0.22006371};
#program
 push    [0];
push    [1];
push    [2];
call    F_plus_d;
push    [3];
push    [4];
call    F_plus_d;
push    [5];
get     .Ichimoku_2;
call    F_plus_d;
push    [6];
call    F_minus_d;
save    [0];
push    [7];
get     .Open;
call    F_plus_d;
call    F_less;
load    [0];
push    [8];
#end

Es ist noch nicht alles getan, nicht alle notwendigen Informationen sind im Code enthalten, der Code wird unter dem Gesichtspunkt der Typkontrolle korrekt ausgeführt, bedeutungslose Ausdrücke werden noch nicht berücksichtigt.

Im Code werden nur einfache Typen verwendet.

 

Ich gehe davon aus, dass Strategien über das HTTP-Protokoll übertragen werden können, MQL hat eine Möglichkeit, Strategien auf diese Weise zu empfangen.

Ich möchte alles voll automatisiert, Suche nach Strategien, machen Portfolios von Strategien, die Übertragung an den Expert Advisor, etc.

Ein Teil des Systems in MQL ist bereits zu 90 % fertig und arbeitet mit einer Vielzahl von Strategien (Positionskontrolle, Risiken, Fehlerbehandlung usw.).

Es gibt noch eine Menge Arbeit zu tun.

 
Yuriy Asaulenko:
Wenn Sie nach einer Strategie suchen, ist das nicht einfacher. Über den Rest weiß ich nichts, ich habe nicht darüber nachgedacht. Allerdings ist jede Modellierung in speziellen Umgebungen einfacher, nicht in MT. MT ist ein Endprodukt, es wurde nicht für die Forschung geschaffen und ist dafür nicht besonders geeignet.
Ich stimme zu, ich habe die Idee zunächst selbst in Matlab modelliert. Trotzdem ist der MT-Tester eine Blackbox.
 
Aliaksandr Hryshyn:
Hier ist ein weiteres Beispiel für einen bedeutungslosen Ausdruck: =Hoch>(Öffnen-Schließen), auch er wird nicht durchgehen.

Erklären Sie, warum er bedeutungslos ist. In Wirklichkeit würde ich ihn so schreiben

=High>MathAbs(Open-Close)

ю

 

Aliaksandr Hryshyn:

dann wird das Diagramm in einen seriellen Code übersetzt, und dieser Code wird an den Expert Advisor zur Ausführung gesendet, nichts muss in MQL kompiliert werden.


Wie, bitte erklären?
 

Es wird immer true zurückgegeben)).

(Öffnen-Schließen) wird immer kleiner sein als (Hoch)

 
Alexey Volchanskiy:

Erklären Sie bitte, wie?
Was ist es, gesendet oder aufgeführt?
 
Aliaksandr Hryshyn:

Es wird immer true zurückgegeben)).

(Öffnen-Schließen) wird immer kleiner sein als (Hoch)

Bremsen ))))))))))