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

Abbonarsi
Notificami
1 Commento
Il più vecchio
Più recente I più votati
Feedback in linea
Visualizza tutti i commenti
Emmanuel
16. 1. 2023 5:40

Eccellente! Grazie