Dokumentation
Anwendungen
Zuletzt aktualisiert am 28. 11. 2021 von clonex / Ivan Hudec
Handelsanalyse - Avg Edge Ratio nach Stunde
Inhalt der Seite
Trade Analysis Charts ist ein Teil der StrategQuant X-Ergebnisse, der es uns ermöglicht, einige Eigenschaften einer Strategie visuell zu analysieren. In der folgenden Anleitung zeigen wir Ihnen, wie Sie ein analytisches Snippet erstellen, das uns die durchschnittliche Edge Ratio einer Strategie in Abhängigkeit von der Eröffnungsstunde des Trades visuell anzeigt.
Sie können das fertige Snippet herunterladen hier.
Schritt 1 - Code-Editor öffnen
Klicken Sie auf das Symbol Code-Editor, um zum Editor zu wechseln.
Schritt 2 - Neue Handelsspalte erstellen
Öffnen Sie den CodeEditor, klicken Sie auf "Create new" und wählen Sie die Option "Trade analysis chart" - Benennen Sie es AvgEdgeRatioByHour. Dadurch wird ein neues Snippet erstellt AvgEdgeRatioByHour.java im Ordner Benutzer/Snippets/SQ/TradeAnalysis Im Konstruktor legen wir den Namen fest, der angezeigt werden soll.
public class AvgEdgeRatioByHour extends TradeAnalysisChart { public AvgEdgeRatioByHour() { this.name = L.tsq("Avg.Edge Ratio By Hour"); }
Schritt 3 - Ändern der Auslosungsmethode
Bei dieser Methode geben wir die Art des Diagramms an, das wir erstellen wollen. Wir können zwischen folgenden Optionen wählen
- BarChart
- ScatterChart
- PreisChart
Anschließend erstellen Sie ein Array, in das Sie die Daten aus dem Array "computeData" einfügen. Verwenden Sie die for-Schleife, um die im computeData-Array berechneten Werte zum Diagramm hinzuzufügen.
@Override public AbstractChart draw(OrdersList orders, byte plType, byte tradePeriod) { // Erstellen einer neuen Instanz von Chart BarChart chart = new BarChart(); chart.invertIfNegative(true); if(Aufträge==null) { Chart zurückgeben; } // Erstellen eines Arrays, in dem wir die in der Methode computeData berechneten Daten speichern double[] hours = computeData(orders, plType, tradePeriod); // Chart mit Array-Werten füllen for(int hour=0; hour<hours.length; hour++) { chart.addValue(L.tsq("Avg.Edge Ratio By Hour"), hour, hours[hour]/hoursCount[hour]); } return chart; }
Schritt 4 - Implementierung des computeData-Arrays
private double[] computeData(OrdersList orders, byte plType, byte tradePeriod) { double[] hours = new double[24]; for(int hour=0; hour<hours.length; hour++) { hours[hour]=0; } int hour; // hier arbeiten wir mit der Auftragsliste for(int i = 0; i < orders.size(); i++) { Order order = orders.get(i); hour = SQTime.getHour(order.getTimeByPeriodType(tradePeriod)); //0-23 double mae = order.PipsMAE; //bestellt MAE in Pips double mfe = order.PipsMFE; // Ermittelt die MAE der Order in Pips double atrOnOpen = order.ATROnOpen; //Erhalte Order ATR in Pips double normMAE = mae/atrOnOpen; // liefert normalisierte MAE double normMFE = mfe/atrOnOpen; // liefert normierte MFE double eRTrade = SQUtils.safeDivide(normMFE,normMAE); // SQUtils.safeDivide geht der Null-Null-Divide-Ausnahme voraus hours[hour]+= eRTrade; hoursCount[hour]+=1; }
Schritt 5 - Verwendung Avg. Edge Ratio nach Stunde in Strategie Quant X
Nach dem Kompilieren des Snippets und dem Neustart von Code Editor und StrategyQUant X können wir mit dem neu erstellten Snippet arbeiten.
Kommentierter Code
Paket SQ.TradeAnalysis; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; public class AvgEdgeRatioByHour extends TradeAnalysisChart { // Klassenkonstruktor, in dem wir den Snippet-Namen definieren public AvgEdgeRatioByHour() { this.name = L.tsq("Avg.Edge Ratio By Hour"); } @Override public AbstractChart draw(OrdersList orders, byte plType, byte tradePeriod) { // Erstellen einer neuen Instanz von Chart BarChart chart = new BarChart(); chart.invertIfNegative(true); if(Aufträge==null) { Chart zurückgeben; } // Array erstellen, in dem wir die in der Methode computeData berechneten Daten speichern double[] hours = computeData(orders, plType, tradePeriod); // Chart mit Array-Werten füllen for(int hour=0; hour<hours.length; hour++) { // hours[hour]/hoursCount[hour] berechnet die durchschnittliche Edge Ratio pro Stunde chart.addValue(L.tsq("Avg.Edge Ratio By Hour"), hour, hours[hour]/hoursCount[hour]); } return chart; } // Array zum Zählen der Trades erstellen int [] hoursCount = new int[24]; private double[] computeData(OrdersList orders, byte plType, byte tradePeriod) { //Anlegen eines Arrays, in dem wir das berechnete Ergebnis speichern double[] hours = new double[24]; // Werte auf den Standardwert 0 setzen for(int hour=0; hour<hours.length; hour++) { hours[hour]=0; } int hour; // hier arbeiten wir mit OrdersList orders for(int i = 0; i < orders.size(); i++) { Order order = orders.get(i); hour = SQTime.getHour(order.getTimeByPeriodType(tradePeriod)); //0-23 double mae = order.PipsMAE; //bestelltes MAE in Pips ermitteln double mfe = order.PipsMFE; // Ermittelt die MAE der Order in Pips double atrOnOpen = order.ATROnOpen; //Erhalte Order ATR in Pips double normMAE = mae/atrOnOpen; // liefert normalisierte MAE double normMFE = mfe/atrOnOpen; // liefert normierte MFE double eRTrade = SQUtils.safeDivide(normMFE,normMAE); // SQUtils.safeDivide geht der Null-Null-Divide-Ausnahme voraus // Kantenverhältnis für jede Stunde speichern hours[hour]+= eRTrade; // Zählen der Anzahl der Trades für jede Stunde hoursCount[hour]+=1; } return hours; } }
War dieser Artikel hilfreich? Der Artikel war nützlich Der Artikel war nicht nützlich