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