ドキュメント
アプリケーション
最終更新日: 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 配列の実装
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;
}
}
この記事は参考になりましたか? この記事は役に立った この記事は役に立たなかった

