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

