Dokumentation

Zuletzt aktualisiert am 25. 6. 2015 von Mark Fric

Neue Monte-Carlo-Spalte hinzufügen

Ein Beispiel für das Hinzufügen eines neuen Wertes in der Monte-Carlo-Methode.

Worum geht es bei der Aufgabe?

Wenn Sie eine Monte-Carlo-Simulation durchführen, erhalten Sie standardmäßig Simulationsergebnisse für bestimmte Konfidenzniveaus.
Die MC-Simulation berechnet Ergebnisse wie Nettogewinn, %-Nettogewinn, Rendite / DD usw. für ein bestimmtes Konfidenzniveau.

Der Benutzer im Forum bat um die Berechnung eines neuen benutzerdefinierten Wertes - Anzahl der aufeinanderfolgenden Verlustgeschäfte.

Wie viele andere Dinge werden auch die Werte (Spalten) im Monte-Carlo-Bericht mit Hilfe von Snippets berechnet, so dass es möglich ist, sie zu erweitern und eigene hinzuzufügen.

In diesem Artikel zeigen wir, wie man einen neuen MC-Wert hinzufügt, der die Anzahl der aufeinanderfolgenden Verlustgeschäfte für alle Monte Carlo-Konfidenzniveaus berechnet.

Schritt 1 - Neues Monte-Carlo-Wert-Snippet erstellen

Wie alle anderen Snippets können auch Monte-Carlo-Snippets in QuantEditor bearbeitet werden, also beginnen wir damit:

Jetzt erstellen wir ein neues Snippet, das unsere aufeinanderfolgenden Verlustaufträge berechnet:

So entsteht ein Snippet-Skelett, das wir erweitern können, um das zu tun, was wir wollen. Wir gehen die Funktionen im Snippet eine nach der anderen durch.

Im Konstruktor müssen wir den Spaltennamen und die Reihenfolge festlegen. Wenn die besten Werte die höchsten sind, sollten wir sie auf MAXIMIZE setzen.
In unserem Fall sind die besten Werte die niedrigsten (so wenig aufeinanderfolgende Verlustgeschäfte wie möglich), also setzen wir die Reihenfolge auf MINIMIZE.

Dies ist wichtig, damit das Programm weiß, wie die Ergebnisse zu sortieren sind, wenn es die Ergebnisse für jedes Konfidenzniveau berechnet.

public ConsecutiveLosingOrders() {
   super("ConsecutiveLosingOrders", FitnessFunction.MINIMIZE);

 


setColumnName(L.t("Consecutive Losing Orders"));
setColumnWidth(100);
setTooltip(L.t("Consecutive Losing Orders"));
}
Methode Berechnen() ist das Herzstück unseres Snippets. Es enthält den Code, der die eigentliche Berechnung der maximalen aufeinanderfolgenden Verlustaufträge durchführt.
Der Algorithmus zur Berechnung dieses Wertes ist recht einfach: Er geht einfach durch die Reihe von Aufträgen und merkt sich die größte Serie von Verlustaufträgen.

protected double compute(MonteCarloStatValues statValues, double initialCapital, double[] orders, double avgTradesPerMonth) throws Exception {
   int maxConsecLosingOrders = 0;
   int consecLosingOrders = 0;

for(int i=0; i<order.length; i++) {
if(aufträge[i] > 0) {
// es ist ein Gewinnauftrag, den Zähler zurücksetzen
consecLosingOrders = 0;
} sonst {
// er verliert die Ordnung
consecLosingOrders++;

if(consecLosingOrders > maxConsecLosingOrders) {
maxConsecLosingOrders = consecLosingOrders;
}
}
}

return maxConsecLosingOrders;
}

Und die letzte Funktion dient der Formatierung des berechneten Wertes

public String formatValue(double value) {
   return String.valueOf((int) value);
}

Das ist alles, wir können die Kompilieren und unser neues Snippet sollte ohne Fehler kompiliert werden.

Schritt 2 - Hinzufügen unseres neuen Wertes zur Ansicht

Wenn wir uns die Monte-Carlo-Tabelle in Quant Analyzer ansehen, werden wir feststellen, dass unsere neue Spalte dort immer noch nicht sichtbar ist. Das liegt daran, dass die sichtbaren Spalten in Ansichten verwaltet werden.

Wir müssen anklicken Ansicht konfigurieren in der oberen rechten Ecke der Tabelle, um der Ansicht eine neue Spalte hinzuzufügen:

Hier müssen wir die Spalte Consecutive Losing Orders zur Liste der angezeigten Spalten auf der rechten Seite hinzufügen.

Sobald dies geschehen ist, können wir sehen, dass unsere Monte-Carlo-Ergebnistabelle nun auch eine Spalte mit aufeinanderfolgenden Verlustaufträgen mit berechneten Werten enthält:

Dies ist alles, was erforderlich war, um den Monte-Carlo-Ergebnissen einen neuen Wert zu verleihen.

Wie Sie sehen, war es einfach, die einzige wirkliche Herausforderung ist die korrekte Implementierung der Berechnen() Funktion so, dass sie das berechnet, was Sie wollen.

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