Dokumentation

Zuletzt aktualisiert am 19. 6. 2015 von Mark Fric

Erstellen Sie eine neue WENN-Funktion

QuantAnalyzer 4 kann erweitert werden, um Ihre eigenen statistischen Werte, Was-wäre-wenn-, Equity- oder Monte-Carlo-Methoden zu verwenden, viele andere Teile des Programms können auch durch Snippets erweitert werden.

Alle diese Methoden im Programm sind vollständig dynamisch, jede Methode (einschließlich der Standardmethoden) ist eine unabhängige Java-Klasse - Schnipsel - Implementierung von 1 oder 2 einfachen Funktionen, die die Aufträge manipulieren.
Sie können sich bei der Umsetzung Ihrer eigenen Idee davon inspirieren lassen, wie die bestehenden Methoden gemacht sind.

Um QuantAnalyzer zu erweitern, müssen Sie die eingebaute QuantEditor. Es ist ein Code-Editor, mit dem Sie Klassen erstellen und bearbeiten können, die dann in QuantAnalyzer verwendet werden.
Das Prinzip ist der Arbeit mit benutzerdefinierten Indikatoren in Ihrer Handelsplattform sehr ähnlich, aber die Codierung ist viel einfacher.

Beispiel - Erstellen einer neuen What-If-Funktion

Was-wäre-wenn-Fälle ermöglichen es Ihnen, Was-wäre-wenn-Szenarien zu testen - was wäre zum Beispiel, wenn Sie nur von Montag bis Donnerstag traden würden? Oder nur 1 Handel pro Tag tätigen?

Mit QuantEditor können Sie Ihre eigenen Fälle wie diese erstellen. In unserem Beispiel werden wir einen einfachen Fall erstellen, der jeden zweiten Handel erfasst.
Es ist kein sehr nützliches Szenario, aber es zeigt, wie einfach es ist, neue Funktionen zu WENN-Szenarien hinzuzufügen.

Wir beginnen mit dem Öffnen von QuantEditor über die Symbolleiste.

QuantEditor wird in einem neuen Fenster geöffnet. Da wir einen neuen What-If-Fall erstellen wollen, klicken wir in der QE-Symbolleiste auf Neu. Dort wählen wir die Option What If und nennen unsere Datei TakeEverySecondTrade.

Nachdem Sie auf OK geklickt haben, erstellt der Editor eine neue Klasse unter Verwendung einer Arbeitsvorlage für die WENN-Klasse, die bereits den generischen Code für die WENN-Klasse enthält.

Die Klasse hat nur zwei Methoden - Konstruktor TakeEverySecondTrade() und Funktion filter() die die Liste der Aufträge nach unseren Kriterien filtert.

Schauen wir uns zunächst den Konstruktor an.
Sie ist genauso benannt wie der Name unserer Datei und wird zu Beginn aufgerufen, wenn die Klasse geladen wird.

Im Allgemeinen sollten wir den Klassennamen festlegen - wir werden ihn in den WENN-Optionen im EA Analyzer unter diesem Namen sehen. In unserem Fall werden wir "Take Every Second Trade" verwenden.
Wenn unsere Klasse einige Parameter benötigt, können wir sie hier definieren, indem wir Aufrufe wie addIntParameter(), addFloatParameter, addComboBoxParameter().
Eine Beschreibung all dieser Funktionen finden Sie im Hilfebereich von QuantEditor.

In unserem Fall benötigen wir keine Parameter, so dass unser Konstruktor wie folgt aussehen wird:

public TakeEverySecondTrade() {
   setName("Nimm jeden zweiten Handel");
   setFormatedName("Nimm jeden zweiten Handel");
}

Jetzt müssen wir unsere filter() Funktion. Dies ist die Funktion, in der wir angeben sollten, was wir von der Klasse wollen.
Diese Funktion wird aufgerufen, wenn Sie diesen What-If-Fall auswählen. Sie erhält eine Liste aller Aufträge, sortiert nach Öffnungszeit. Sie können die Liste der Aufträge oder einen bestimmten Auftrag bearbeiten oder einen Auftrag aus der Liste entfernen, wenn Sie dies wünschen.

Der grundlegende Code (siehe unten) tut nichts, er geht nur die Liste der Aufträge durch, ohne etwas zu tun.

public void filter(SQOrderList originalOrders) throws Exception {
   int parameter = getIntParameterValue("_PARAMETER_");

for(Iterator i = originalOrders.listIterator(); i.hasNext();) {
SQOrder order = i.next();

// todo - Ihre eigene Aktion
// Aufträge können hier übersprungen oder manipuliert werden
}
}

In unserem Fall wollen wir jeden zweiten Auftrag aus der Liste entfernen, so dass nur noch die Hälfte der Aufträge in der Liste verbleibt, und das können wir mit dem folgenden Code erreichen:

public void filter(SQOrderList originalOrders) {
   boolean isSecondOrder = false;

for(Iterator i = originalOrders.listIterator(); i.hasNext();) {
SQOrder order = i.next();

// wenn die Variable isSecondOrder = true ist, wird die Reihenfolge aus den Ergebnissen entfernt
if(isSecondOrder) i.remove();

// isSecondOrder-Variable auf entgegengesetzten Wert setzen, von true auf false, von false auf true
isSecondOrder = !isSecondOrder;
}
}

Erklärung des Codes:
- wir erstellen zunächst die Variable isSecondOrder und setzen sie auf false
- Wenn wir dann die Aufträge durchgehen, prüfen wir, ob diese Variable wahr ist, und wenn ja, entfernen wir den Auftrag
- nach jeder Prüfung setzen wir die Variable auf den entgegengesetzten Wert (von falsch auf wahr, von wahr auf falsch) und gehen zum nächsten Auftrag über

Mit diesem Code wird jede zweite Bestellung aus der Liste der Bestellungen entfernt.

Das war's. Wir sind fertig.

Jetzt können wir auf Kompilieren Schaltfläche und unsere neue Klasse sollte ohne Fehler kompiliert werden.

Wechseln Sie nun zurück zum EA Analyzer, gehen Sie zu Was wäre wenn Szenarien und Sie sollten die neue Funktionalität sehen, die wir dort gerade implementiert haben:

Wenden Sie es auf eine Strategie an, und Sie werden sehen, dass sie nur die Hälfte der Geschäfte abschließt.

In diesem Beispiel zeigen wir, wie EA Analyzer 3 es ermöglicht, neue benutzerdefinierte Was-wäre-wenn Funktion. Sie können eine neue Monte Carlo oder Eigenkapitalkontrolle Funktionalität in sehr ähnlicher Weise.

Wenn Sie eine interessante Funktion erstellen, können Sie diese gerne auf unserer Forum mit anderen.

War dieser Artikel hilfreich? Der Artikel war nützlich Der Artikel war nicht nützlich

Abonnieren
Benachrichtigen Sie mich bei
0 Kommentare
Inline-Rückmeldungen
Alle Kommentare anzeigen