Dokumentation

Anwendungen

Zuletzt aktualisiert am 28. 11. 2021 von clonex / Ivan Hudec

Handelsanalyse - Avg Edge Ratio nach Stunde

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

computeData ist ein Array, in dem wir mit AufträgeListe. OrdersList  ist eine Klasse, die die Liste der Abschlüsse einer Strategie speichert und Methoden zur Bearbeitung der Liste der Abschlüsse bereitstellt. Sie können eine Schleife über die gesamte OrdersList  und erhalten Daten für sehr Bestellung  Methode anwenden erhalten.(int index).
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

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