ドキュメント

アプリケーション

最終更新日: 2021年11月28日 (作成者: clonex / Ivan Hudec)

トレード分析 – 時間帯別平均エッジ比率

トレード分析チャートはStrategyQuant Xの結果の一部であり、戦略のいくつかの特性を視覚的に分析することができます。次のチュートリアルでは、トレードのエントリー時間を横軸にして、戦略の平均エッジ比率を視覚的に示す分析スニペットの作成方法を紹介します。.

完成したスニペットをダウンロードできます ここ.

 

 

ステップ1 – コードエディターを開く

コードエディターアイコンをクリックしてエディターに切り替えてください。.

 

 

ステップ 2 – 新しい「Trade」列を作成する

CodeEditorを開き、「新規作成」をクリックして「トレード分析チャート」オプションを選択し、名前を付けます 時間別平均エッジ比率. これにより、新しいスニペットが作成されます AvgEdgeRatioByHour.java フォルダ内 ユーザー/スニペット/SQ/トレード分析 コンストラクタで表示する名前を定義します。.

 

public class AvgEdgeRatioByHour extends TradeAnalysisChart {

    public AvgEdgeRatioByHour() {
        this.name = L.tsq("時間帯別平均エッジ比率");
    }

 

 

ステップ3 – drawメソッドの修正

このメソッドでは、作成したいグラフのタイプを指定します。以下のオプションから選択できます。

  • 棒グラフ
  • 散布図
  • 価格チャート

次に、computeData配列のデータを挿入する配列を作成します。forループを使用して、computeData配列で計算された値をチャートに追加します。.

@Override
    public AbstractChart draw(OrdersList orders, byte plType, byte tradePeriod) {
        // creating new instance of chart
        BarChart chart = new BarChart();
        
        chart.invertIfNegative(true);
        
        if(orders==null) {
            return chart;
        }
        // creating array here we store data computed in computeData method
        double[] hours = computeData(orders, plType, tradePeriod);
        
        // fill chart with array values
        for(int hour=0; hour<hours.length; hour++) {
            
            chart.addValue(L.tsq("Avg.Edge Ratio By Hour"), hour, hours[hour]/hoursCount[hour]);
        }

        return chart;
    }

 

ステップ 4 – computeData 配列の実装

computeDataは操作対象の配列です 注文リスト. 注文リスト  戦略のトレードのリストを格納し、そのトレードのリストを操作するメソッドを提供するクラスです。全体をループ処理することができます 注文リスト  そして非常にデータを取得する 注文  メソッドを使用して 取得(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;
        // here we work with orderslist 
        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; //get order MAE in pips
            double mfe = order.PipsMFE; // get order MAE in pips
            double atrOnOpen = order.ATROnOpen; // get order ATR in pips

            double normMAE = mae/atrOnOpen; // get normalized MAE
            double normMFE = mfe/atrOnOpen; // get normalized MFE

            double eRTrade = SQUtils.safeDivide(normMFE,normMAE); // SQUtils.safeDivide preceds null zero divide exception


            hours[hour]+= eRTrade;
            hoursCount[hour]+=1;
        }

 

ステップ 5 – 使用方法 Strategy Quant Xにおける時間ごとの平均エッジ比率

スニペットをコンパイルし、Code EditorとStrategyQuant Xを再起動すると、新しく作成したスニペットを使用できるようになります。.

コメント付きコード

package SQ.TradeAnalysis;
import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;

public class AvgEdgeRatioByHour extends TradeAnalysisChart {
    // Class constructor where we define snippet name
    public AvgEdgeRatioByHour() {
        this.name = L.tsq("Avg.Edge Ratio By Hour");
    }
    
    @Override
    public AbstractChart draw(OrdersList orders, byte plType, byte tradePeriod) {
        // creating new instance of chart
        BarChart chart = new BarChart();
        
        chart.invertIfNegative(true);
        
        if(orders==null) {
            return chart;
        }
        // create array where we store data computed in computeData method
        double[] hours = computeData(orders, plType, tradePeriod);
        
        // fill chart with array values
        for(int hour=0; hour<hours.length; hour++) {
            // hours[hour]/hoursCount[hour] we compute average Edge Ratio per hour
            chart.addValue(L.tsq("Avg.Edge Ratio By Hour"), hour, hours[hour]/hoursCount[hour]);
        }

        return chart;
    }
    // create array for counting trades 
    int [] hoursCount = new int[24];
     
    private double[] computeData(OrdersList orders, byte plType, byte tradePeriod) {
        //create array where we store  computed resultu
        double[] hours = new double[24];
        // set values do default state 0 
        for(int hour=0; hour<hours.length; hour++) { 
            hours[hour]=0; 
        }
        
        int hour;
        // here we work with 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; //get order MAE in pips
            double mfe = order.PipsMFE; // get order MAE in pips
            double atrOnOpen = order.ATROnOpen; // get order ATR in pips

            double normMAE = mae/atrOnOpen; // get normalized MAE
            double normMFE = mfe/atrOnOpen; // get normalized MFE

            double eRTrade = SQUtils.safeDivide(normMFE,normMAE); // SQUtils.safeDivide preceds null zero divide exception

            // store edge ratio for every hour
            hours[hour]+= eRTrade;
            // count number of trades for every hour
            hoursCount[hour]+=1;
        }

        return hours;
    }
}

 

この記事は参考になりましたか? この記事は役に立った この記事は役に立たなかった

0 コメント
最古の
最新 最も投票された