Documentación

Aplicaciones

Última actualización el 10. 11. 2020 por Mark Fric

Uso de bibliotecas JAR personalizadas

Nota: se trata de una funcionalidad nueva y experimental disponible a partir de la compilación 130 de SQ X.

Ahora es posible utilizar sus propias bibliotecas JAR Java personalizadas en los fragmentos.

Todo lo que tienes que hacer es copiar tus JARs en /usuario/libs en su instalación de StrategyQuant y después de reiniciar SQ debería ser capaz de llamarlos en snippets.

 

Un ejemplo podría ser un indicador RSI de muestra llamado desde la biblioteca TA4J (https://github.com/ta4j/ta4j). Puede descargar el JAR del núcleo de esta biblioteca aquí.

A continuación, colóquelo en /usuario/libs carpeta - si /libs aún no existe en /usuario y, a continuación, créela.

Entonces usted es capaz de utilizarlo en un fragmento. Abra CodeEditor y cree un nuevo fragmento de ejemplo para el indicador RSI calculado por la biblioteca TA4J:

paquete 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) Índice de fuerza relativa", display="RSIta4j(#Period#)[#Shift#]", returnType = ReturnTypes.Number)
@Indicator(oscilador=true, middleValue=50, min=0, max=100, step=0.5)
public class RSIta4j extends IndicatorBlock {
    @Parameter(category="Por defecto", name="Entrada", defaultValue="0")
    public ChartData Input;
    
    @Parameter(defaultValue="14", minValue=2, maxValue=10000, step=1)
    public int Periodo;

    @Output(name = "RSIta4j", color = Colors.Red)
    public DataSeries Valor;
    
    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(serie);
        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();
    }
}

 

Esto es bastante estándar SQ indicador fragmento, pero no contiene un código para calcular el indicador. En su lugar se llama a TA4J RSIIndicador para calcularlo.

 

Tenga en cuenta - es sencillo ampliar StrategyQuant con indicadores de bibliotecas ya existentes, pero es sólo la mitad del trabajo requerido.

Puede crear un nuevo indicador en SQ de esta manera, pero este indicador seguirá siendo calculado sólo en StrategyQuant. Con el fin de utilizar su estrategia con este indicador personalizado en MetaTrader, Tradestation, MultiCharts u otra plataforma que necesita:

  • añadir la definición de cómo se traducirá este nuevo fragmento al código fuente de la plataforma
  • añada la implementación de este indicador también a su plataforma de destino

Más información en nuestro artículo Añadir indicadores y señales.

 

 

¿Le ha resultado útil este artículo? El artículo era útil El artículo no era útil

Suscríbase a
Notificar a
1 Comentario
Más antiguo
Más reciente Más votados
Feedbacks de Inline
Ver todos los comentarios
Emmanuel
16. 1. 2023 5:40 am

excelente, gracias