Documentazione
Applicazioni
Ultimo aggiornamento il 10. 11. 2020 da Mark Fric
Utilizzo di librerie JAR personalizzate
Nota: si tratta di una funzionalità nuova e sperimentale, disponibile a partire da SQ X Build 130.
È ora possibile utilizzare le proprie librerie Java JAR personalizzate negli snippet.
Tutto ciò che occorre fare è copiare i JAR in /utente/libs nella cartella StrategyQuant e dopo il riavvio di SQ dovrebbe essere possibile richiamarli negli snippet.
Un esempio potrebbe essere un indicatore RSI di esempio chiamato dalla libreria TA4J (https://github.com/ta4j/ta4j). È possibile scaricare il core JAR di questa libreria qui.
Quindi posizionarlo a /utente/libs cartella - se /libs non esiste ancora in /utente e crearla.
Quindi è possibile utilizzarlo in uno snippet. Aprite CodeEditor e create un nuovo snippet di esempio per l'indicatore RSI calcolato dalla libreria TA4J:
pacchetto SQ.Blocks.Indicators.RSIta4j; importare java.sql.Timestamp; importare java.time.Duration; importare java.time.Instant; importare java.time.ZoneOffset; importare java.time.ZonedDateTime; importare org.ta4j.core.BarSeries; importare org.ta4j.core.BaseBarSeries; importare org.ta4j.core.indicators.RSIIndicator; import org.ta4j.core.indicators.helpers.ClosePriceIndicator; importare com.strategyquant.datalib.DataSeries; importare com.strategyquant.datalib.TradingException; importare com.strategyquant.tradinglib.BuildingBlock; importare com.strategyquant.tradinglib.ChartData; importare com.strategyquant.tradinglib.Colors; importare com.strategyquant.tradinglib.Indicator; importare com.strategyquant.tradinglib.Output; importare com.strategyquant.tradinglib.Parameter; importare com.strategyquant.tradinglib.ParameterSet; import com.strategyquant.tradinglib.ReturnTypes; importare 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 { @Parametro(category="Default", name="Input", defaultValue="0") public ChartData Input; @Parametro(defaultValue="14", minValue=2, maxValue=10000, step=1) public int Periodo; @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(); } }
Si tratta di uno snippet di indicatore SQ piuttosto standard, ma non contiene un codice per calcolare l'indicatore. Invece chiama TA4J RSIIndicatore per calcolarlo.
Si noti che è semplice estendere StrategyQuant con indicatori provenienti da librerie già esistenti, ma è solo la metà del lavoro richiesto.
In questo modo è possibile creare un nuovo indicatore in SQ, ma questo indicatore sarà comunque calcolato solo in StrategyQuant. Per poter utilizzare la strategia con questo indicatore personalizzato in MetaTrader, Tradestation, MultiCharts o altre piattaforme, è necessario:
- aggiungere la definizione di come questo nuovo snippet sarà tradotto nel codice sorgente della piattaforma
- aggiungere l'implementazione di questo indicatore anche alla piattaforma di destinazione
Per saperne di più, consultate il nostro articolo Aggiunta di indicatori e segnali.
Questo articolo è stato utile? L'articolo è stato utile L'articolo non è stato utile
Eccellente! Grazie