Documentation

Applications

Dernière mise à jour le 10. 11. 2020 par Mark Fric

Utilisation de bibliothèques JAR personnalisées

Remarque - il s'agit d'une nouvelle fonctionnalité expérimentale disponible à partir de SQ X Build 130.

Il est désormais possible d'utiliser vos propres bibliothèques Java JAR personnalisées dans les snippets.

Tout ce que vous avez à faire est de copier vos JARs dans /utilisateur/libs dans votre installation de StrategyQuant et après le redémarrage de SQ, vous devriez pouvoir les appeler dans les snippets.

 

Un exemple pourrait être un indicateur RSI appelé à partir de la bibliothèque TA4J (https://github.com/ta4j/ta4j). Vous pouvez télécharger le JAR de base de cette bibliothèque ici.

Ensuite, placez-la à /utilisateur/libs dossier - si /libs n'existe pas encore dans le /utilisateur puis le créer.

Vous pouvez alors l'utiliser dans un extrait. Ouvrez CodeEditor et créez un nouvel exemple d'extrait pour l'indicateur RSI calculé par la bibliothèque TA4J :

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) {
            retour ;
        }
        
        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() ;
    }
}

 

Il s'agit d'un extrait d'indicateur SQ standard, mais il ne contient pas de code pour calculer l'indicateur. Au lieu de cela, il appelle TA4J RSIIndicateur pour le calculer.

 

Veuillez noter qu'il est facile d'étendre StrategyQuant avec des indicateurs provenant de bibliothèques existantes, mais cela ne représente que la moitié du travail nécessaire.

Vous pouvez créer un nouvel indicateur dans SQ de cette façon, mais cet indicateur sera toujours calculé uniquement dans StrategyQuant. Afin d'utiliser votre stratégie avec cet indicateur personnalisé dans MetaTrader, Tradestation, MultiCharts ou une autre plateforme, vous devez :

  • ajouter une définition de la manière dont ce nouvel extrait sera traduit dans le code source de la plate-forme
  • ajoutez l'implémentation de cet indicateur à votre plateforme cible

Pour en savoir plus, consultez notre article Ajout d'indicateurs et de signaux.

 

 

Cet article a-t-il été utile ? L'article était utile L'article n'était pas utile

S'abonner
Notification pour
1 Commentaire
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Emmanuel
16. 1. 2023 5:40 am

excellent ! merci