Dokumentation

Zuletzt aktualisiert am 14. 5. 2015 von Mark Fric

Einführung in Scripter

Hinweis! Die Scripter-Funktionalität ist im Moment noch experimentell, und die Klassenhierarchie und ihre Namen könnten sich noch ändern!
Auch die Dokumentation der Scripter- und Programmschnittstelle ist in Arbeit und wird in den nächsten Wochen erweitert werden.

Was ist Scripter

Im Allgemeinen bietet Scripter dem Quant Analyzer-Benutzer eine Möglichkeit, die Programmfunktionen zu nutzen, ohne die Benutzeroberfläche zu verwenden. Es ist so etwas wie die Makrofunktionalität in Excel.

Scripter ist für fortgeschrittene Benutzer gedacht, da Sie dort etwas programmieren müssen. Das Skript ist ein einfacher Java-Code, der verschiedene Funktionen des Programms aufruft.

Möchten Sie eine Monte-Carlo-Simulation durchführen? Sie können sie mit Scripter durchführen, alle Parameter definieren und das Ergebnis in der Datenbank speichern oder die Schlüsselwerte im Ausgabefeld anzeigen lassen.

Warum sollten Sie Scripter verwenden?

Scriper ermöglicht die Automatisierung. Es ermöglicht Ihnen, Dinge zu automatisieren, die Sie normalerweise in der Benutzeroberfläche von Hand erledigen müssten

Nehmen wir zum Beispiel an, dass Sie das wollen:

  • einen Bericht laden
  • Verwenden Sie WENN-Varianten des Systems - mit Berichten, bei denen nur die Montagsgeschäfte entfernt werden, oder bei denen nur die Dienstagsgeschäfte entfernt werden, usw.
  • eine Monte-Carlo-Simulation für jede Variante durchführen und die Ergebnisse mit einem bestimmten Konfidenzniveau ermitteln
  • Wählen Sie die beste MC-Simulation und führen Sie eine Geldmanagement-Simulation mit verschiedenen Methoden durch.

Sie können das alles von Hand machen, indem Sie mit dem Programm hin- und herklicken, aber wenn Sie vorhaben, diesen Vorgang häufig durchzuführen, könnte es sinnvoll sein, ein Skript dafür zu schreiben.

Beispiel

Wir werden ein Beispielskript erstellen, das den Bericht lädt, den Nettogewinn anzeigt, dann eine Monte-Carlo-Simulation durchführt und den MC-Nettogewinn auf dem Konfidenzniveau 90% anzeigt.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.strategyquant.lib.results.SQResultsGroup;
import com.strategyquant.lib.scripter.Program;
import com.strategyquant.lib.snippets.MonteCarloSim.ConfidenceLevelResults;
import com.strategyquant.lib.snippets.MonteCarloSim.MonteCarloSimulationResults; import com.strategyquant.lib.snippets.MonteCarloSim.ConfidenceLevelResults;
import com.strategyquant.lib.snippets.MonteCarloSim.MonteCarloStatValues; import com.strategyquant.lib.snippets.MonteCarloSim.MonteCarloStatValues;
import com.strategyquant.lib.utils.ExtendableStorage;
import com.strategyquant.lib.utils.SQConst; import com.strategyquant.lib.utils.SQConst;
import com.strategyquant.lib.results.SQResult; import com.strategyquant.lib.results.SQResult;
import com.strategyquant.lib.results.SQStats; import com.strategyquant.lib.results.SQStats;
import com.strategyquant.lib.results.StatsConst;

public class MonteCarloSample2 implements Runnable {
public static final Logger Log = LoggerFactory.getLogger("MonteCarloSample");

    @Override
    public void run() {
        try {
            SQResultsGroup strategyResults = (SQResultsGroup) Program.get("Loader").call("loadFile", "./tests/data/loaders/SQ_Portfolio1.stp");

            // Anzeige des ursprünglichen Nettogewinns
            SQResult result = strategyResults.getResult(SQConst.SYMBOL_PORTFOLIO);
            SQStats stats = result.getStats(SQConst.DIRECTION_ALL, SQConst.PL_IN_MONEY, SQConst.KEY_SAMPLE_ALL);
            SQStats statsPct = result.getStats(SQConst.DIRECTION_ALL, SQConst.PL_IN_PCT, SQConst.KEY_SAMPLE_ALL);

            System.out.println("Original NetProfit="+stats.getDouble(StatsConst.NET_PROFIT));
            System.out.println("Original PctNetProfit="+statsPct.getDouble(StatsConst.NET_PROFIT));

            // Monte Carlo ausführen und Nettogewinn auf dem Konfidenzniveau 90% anzeigen
            ExtendableStorage settings = (ExtendableStorage) Program.get("MonteCarlo").call("getSettings", null);
            settings.set("NumberOfSimulations", 10);
            settings.set("Ergebnis", strategyResults);
            settings.set("Methods.SkipTradesRandomly.Use", true);

            MonteCarloSimulationResults simulationResults = (MonteCarloSimulationResults) Program.get("MonteCarlo").call("run", settings);

            System.out.println("# simulations="+simulationResults.simulationsList.size());

            //Konfidenzniveaus berechnen
            settings = (ExtendableStorage) Program.get("MonteCarloConfidenceLevels").call("getSettings", null);
            settings.set("SimulationResults", simulationResults);
            settings.set("Ergebnis", strategyResults);

            ConfidenceLevelResults confidenceLevelResults = (ConfidenceLevelResults) Program.get("MonteCarloConfidenceLevels").call("run", settings);
            MonteCarloStatValues mcResult = confidenceLevelResults.get(90);

            System.out.println("MC 90% NetProfit="+mcResult.netProfit);
            System.out.println("MC 90% PctNetProfit="+mcResult.pctNetProfit);
        } catch(Exception e) {
            e.printStackTrace();
            Log.error("Exception :", e);
        }
    }
}

 



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