ドキュメント

アプリケーション

最終更新日:2020年5月18日(マーク・フリック)

チャート – 1時間あたりの承認された戦略

エンジンチャートは、エンジン内に表示される小さなチャートです。たとえば ヒープメモリチャート または 1時間あたりの平均ストラテジー数 チャート.

SQ Xのほとんどの物事と同様に、これらのチャートは以下を使用して実装されています スニペット, 、つまり拡張可能であるということです。そこに独自のチャートを追加することができます。.

 

 

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

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

 

 

ステップ 2 – 新しいエンジンチャートのスニペットを作成する

まだエンジンチャート用のウィザードはありませんが、既存のスニペットを簡単にクローンして、1時間あたりの承認された戦略を表示するように変更できます。.

右側のナビゲーターツリーで、「Snippets -> SQ -> Engine charts」に移動し、「AverageStrategiesPerHour.java」を右クリックして、「複製(Clone)」を選択します。.

新しいファイルの名前をAcceptedStrategiesPerHourにします。.

これにより、1時間あたりの平均戦略を表示する既存のスニペットのコピーが作成されます。あとは、平均の代わりに1時間あたりの承認された戦略を表示するように変更するだけです。.

 

 

ステップ 3 – スニペットを修正する

修正すべき箇所は実際にはあまりありません。スニペットやチャート名のような分かりやすい部分を変更し、修正が必要な唯一のメソッドは、チャートの次の値を設定する addNextValue() メソッドだけです。.

そこから修正します

series.addValue(System.currentTimeMillis(), projectRunInfo.strategiesPerHour);

series.addValue(System.currentTimeMillis(), projectRunInfo.acceptedStrategiesPerHour);

 

このコード片に関しては、SQがすでにこの統計量を計算しているため、新しいチャートを作成してそれを使用するだけでよく、私たちは幸運でした。.

 

 

ステップ4 – SQの再コンパイルと再起動

すべてのエンジンパネルで新しいチャートが利用可能になることがわかります:

 

これがスニペットの全コードです:

package SQ.EngineCharts;

import org.json.JSONObject;

import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;

public class AcceptedStrategiesPerHour extends EngineChart {
  private TimeSeriesLineChart chart = null;
  private TimeSeries series = null;

  private ProjectRunInfo projectRunInfo = new ProjectRunInfo();
  private ProjectRunInfo oldProjectRunInfo = new ProjectRunInfo();

  private int checksSinceLastChange = 0;
  
  public AcceptedStrategiesPerHour() {
    super(L.t("Accepted strategies per hour"), TYPE_PROJECT_BASED);
    
    this.chart = new TimeSeriesLineChart();
    this.chart.yAxisTitle = L.t("Strategies");
    this.chart.xAxisTitle = L.t("Time");
    this.chart.maxTicksLimit = 4;
    this.chart.yAxisRangeMin = 0;
    
    this.series = new TimeSeries(L.t("Accepted str. per hour"), 20);
    this.series.color = ChartsConst.COLOR_GREEN;
    ((TimeSeriesLineChart)this.chart).addSeries(series);
    
    	oldProjectRunInfo.totalJobsDone = -1;
    	checksSinceLastChange  = 0;
  }
 
  @Override
  public JSONObject print() {	
    JSONObject data = new JSONObject();
    
    project.loadTrackingInfo(projectRunInfo, false);
    
    checksSinceLastChange++;
    
    if((oldProjectRunInfo.totalJobsDone == -1 || projectRunInfo.totalJobsDone != oldProjectRunInfo.totalJobsDone) || checksSinceLastChange > 10) {

      // refresh only if something changed
      oldProjectRunInfo.totalJobsDone = projectRunInfo.totalJobsDone;
      checksSinceLastChange = 0;
          
      data.put("type", DATA_TYPE_CHART);
      data.put("chart", this.chart.toJSON());
    
      return data;
    } else {
      return null;
    }
  }
  
  @Override
  public void addNextValue() {
        try {
        	series.addValue(System.currentTimeMillis(), projectRunInfo.acceptedStrategiesPerHour);
        } catch(Exception e) {
        	Log.error("Exc.", e);
        }
    }
}

 

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

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