Documentazione

Applicazioni

Ultimo aggiornamento il 27. 5. 2020 da Mark Fric

Aggiunta di indicatori e segnali

Nuovi blocchi di indicatori e segnali possono essere aggiunti a StrategyQuant utilizzando un'apposita funzione. Editor di codice.

Editor di codice SQ

 

Ogni indicatore e segnale di StrategyQuant è implementato come snippet Java, con il codice sorgente completo visibile.

In generale:

  • ogni indicatore deve implementare un OnBarUpdate() è il metodo in cui si trova l'algoritmo dell'indicatore.
  • ogni segnale deve implementare un metodo OnBlockEvaluate() che restituisca true o false

Questi metodi vengono richiamati a ogni barra e l'indicatore o il segnale deve calcolare solo i suoi ultimi valori e memorizzarli nei suoi buffer di uscita.

I blocchi di indicatori e segnali hanno dei parametri, come il periodo o il grafico. Gli Snippet SQ utilizzano l'annotazione @ per questi parametri, che vengono definiti come variabili standard della classe Java.

 

Esempi di annotazione a blocchi

Le annotazioni definiscono il nome e il tipo del blocco, nonché quali variabili sono parametri indicatori e quali sono buffer per i valori calcolati.

Momento

@BuildingBlock(name="(MO) Momentum", display="Momentum(#Period#)[#Shift#]", returnType = ReturnTypes.Number)
@Indicator(oscillator=true, middleValue=100, min=96, max=104, step=0.1)
public class Momentum extends IndicatorBlock {

    @Parametro(defaultChartIndex=0)
    public DataSeries Input;
    
    @Parametro(defaultValue="14")
    public int Periodo;

    @Output(name = "Momentum", color = Colors.Red)
    public DataSeries Value;

 

Il Momentum è inferiore al Livello (blocco del segnale)

@BuildingBlock(name="Il Momentum è inferiore al Livello", display="Momentum(#Period#) < #Level#", returnType = ReturnTypes.Boolean)
public class MomLower extends ConditionBlock {
    
    @Parametro
    public DataSeries Input;
    
    @Parametro(defaultValue="14", minValue=2, maxValue=10000, step=1)
    public int Periodo;

    @Parametro(defaultValue="0", minValue=0, maxValue=200, step=0.01, builderMinValue=96, builderMaxValue=104, builderStep=0.1)
    public double Livello;

    @Parametro
    public int Shift;

 

 

Esempi di metodo OnBarUpdate() degli indicatori

Di seguito potete vedere un esempio di alcuni indicatori; nella maggior parte dei casi i codici sono molto semplici grazie all'architettura SQ - non è necessario calcolare tutti i valori di tutte le barre, ma solo il valore dell'ultima barra.

Momento

protected void OnBarUpdate() throws TradingException {
    if(CurrentBar == 0) {
        Value.set(0, 0);
    } else {
        Value.set(0, Input.get(0) * 100.0 / Input.get(Math.min(Period, CurrentBar));
    }

 

ATR

protected void OnBarUpdate() throws TradingException {
    double curHigh = Chart.High.get(0);
    double curLow = Chart.Low.get(0);
    double trueRange = curHigh - curLow;
    
    se (CurrentBar == 0){
        Value.set(0, trueRange);
    }
    altrimenti {
        double prevClose = Chart.Close.get(1);
        trueRange = Math.max(Math.abs(curLow - prevClose), Math.max(trueRange, Math.abs(curHigh - prevClose));
        
        Value.set(0, ((Math.min(CurrentBar + 1, Period) - 1 ) * Value.get(1) + trueRange) / Math.min(CurrentBar + 1, Period));
    }
}

 

CCI

protected void OnBarUpdate() throws TradingException {
    averageCalculator.onBarUpdate(Input.get(0), CurrentBar);
    
    se (CurrentBar == 0) {
        Value.set(0, 0);
    }
    altrimenti {
        double media = 0;
        double sma = averageCalculator.getValue();
        
        for (int idx = Math.min(CurrentBar, Period - 1); idx >= 0; idx--) {
            media += Math.abs(Input.get(idx) - sma);
        }
        
        se(media < 0,0000000001) {
            Value.set(0, 0);
        } else {
            double cci = (Input.get(0) - sma) / (mean == 0 ? 1 : (0,015 * (media / Math.min(Period, CurrentBar + 1))));
            Value.set(0, cci);
        }
    }
}

Si può notare che CCI utilizza la classe di aiuto AverageCalculator, che è disponibile con il codice sorgente completo nel frammento SQ/Calculators/AverageCalculator.java

 

Esempio del metodo dei segnali OnBlockEvaluate()

Il CCI è superiore al livello

Il codice per i segnali è molto più semplice di quello per gli indicatori. Di solito consiste nell'ottenere il valore (o i valori) di un indicatore e confrontarlo con qualcos'altro.

public boolean OnBlockEvaluate() throws TradingException {
    Indicatore CCI = Strategy.Indicators.CCI(Input, Period);
    double value1 = indicator.Value.getRounded(Shift, 4);
    
    return (value1 > Level);
}

 

 

Esempi passo-passo

Per saperne di più, consultate i seguenti esempi passo-passo:

 

Questo articolo è stato utile? L'articolo è stato utile L'articolo non è stato utile

Abbonarsi
Notificami
0 Commenti
Il più vecchio
Più recente I più votati
Feedback in linea
Visualizza tutti i commenti