ドキュメント

アプリケーション

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

カスタムJARライブラリの使用

注意:これはSQ X Build 130から利用可能な、新しく実験的な機能です。.

スニペット内で独自のカスタムJava JARライブラリを使用できるようになりました。.

JARを配置するだけです /user/libs StrategyQuantのインストールフォルダ内のフォルダに配置し、SQを再起動すれば、スニペットからそれらを呼び出せるようになるはずです。.

 

例えば、TA4Jライブラリから呼び出されるサンプルRSIインジケーター(https://github.com/ta4j/ta4jこのライブラリのコアJARをダウンロードできます ここ.

それからそれを置きます /user/libs フォルダ – もし /libs サブフォルダはまだ存在しません: ユーザー フォルダを作成します。.

それでは、スニペットで使用できるようになります。CodeEditorを開き、TA4Jライブラリによって計算されたRSIインジケーター用の新しいサンプルスニペットを作成してください:

package SQ.Blocks.Indicators.RSIta4j;

import java.sql.Timestamp;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;

import org.ta4j.core.BarSeries;
import org.ta4j.core.BaseBarSeries;
import org.ta4j.core.indicators.RSIIndicator;
import org.ta4j.core.indicators.helpers.ClosePriceIndicator;

import com.strategyquant.datalib.DataSeries;
import com.strategyquant.datalib.TradingException;
import com.strategyquant.tradinglib.BuildingBlock;
import com.strategyquant.tradinglib.ChartData;
import com.strategyquant.tradinglib.Colors;
import com.strategyquant.tradinglib.Indicator;
import com.strategyquant.tradinglib.Output;
import com.strategyquant.tradinglib.Parameter;
import com.strategyquant.tradinglib.ParameterSet;
import com.strategyquant.tradinglib.ReturnTypes;

import SQ.Internal.IndicatorBlock;

@BuildingBlock(name="(RSI ta4j) Relative Strength Index", display="RSIta4j(#Period#)[#Shift#]", returnType = ReturnTypes.Number)
@Indicator(oscillator=true, middleValue=50, min=0, max=100, step=0.5)
public class RSIta4j extends IndicatorBlock {
    @Parameter(category="Default", name="Input", defaultValue="0")
    public ChartData Input;
    
    @Parameter(defaultValue="14", minValue=2, maxValue=10000, step=1)
    public int Period;

    @Output(name = "RSIta4j", color = Colors.Red)
    public DataSeries Value;
    
    private RSIIndicator rsi;
    private ZonedDateTime zdt;
    
    private BarSeries series = new BaseBarSeries("series");
    private long lastTime = 0;
    
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------

    @Override
    protected void OnInit() throws TradingException {
        ClosePriceIndicator closePrice = new ClosePriceIndicator(series);
        rsi = new RSIIndicator(closePrice, Period);
    }
    
    //------------------------------------------------------------------------
    
    @Override
    protected void OnBarUpdate() throws TradingException {
        zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(Input.Time()), ZoneOffset.UTC);
                
        if(Input.Time()==lastTime) {
            return;
        }
        
        series.addBar(zdt, Input.Open.get(0), Input.High.get(0), Input.Low.get(0), Input.Close.get(0), Input.Volume.get(0));
        
        Value.set(0, rsi.getValue(series.getEndIndex()).doubleValue());
        
        lastTime = Input.Time();
    }
}

 

これはかなり一般的なSQインジケーターのスニペットですが、インジケーターを計算するコードが含まれていません。代わりに呼び出しています TA4J RSIIndicator それを計算するクラス.

 

ご注意ください。StrategyQuantを既存のライブラリにあるインジケーターで拡張するのは簡単ですが、それは必要な作業の半分に過ぎません。.

この方法でSQに新しいインジケーターを作成することはできますが、このインジケーターは依然としてStrategyQuantでのみ計算されます。MetaTrader、Tradestation、MultiCharts、またはその他のプラットフォームで、このカスタムインジケーターを含む戦略を使用するには、以下の手順を行う必要があります:

  • この新しいスニペットがプラットフォームのソースコードにどのように翻訳されるかの定義を追加する
  • このインジケーターの実装もターゲットプラットフォームに追加してください

詳細については、弊社の記事をご覧ください。 インジケーターとシグナルの追加.

 

 

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

1 コメント
最古の
最新 最も投票された
エマニュエル
2023年1月16日 午前5:40

素晴らしい!ありがとうございます