Documentazione

Applicazioni

Ultimo aggiornamento il 18. 5. 2020 da Mark Fric

ForceIndex Blocchi di segnale

Il nostro nuovo ForzaIndice L'indicatore è stato implementato ma, come già detto, è disponibile solo nella sezione Segnali degli indicatori casuali. Ciò significa che sarà combinato in modo casuale con tutti i confronti e i valori numerici casuali.

In StrategyQuant X è preferibile utilizzare i segnali: si tratta di condizioni predefinite che utilizzano, ad esempio, un indicatore:

L'indicatore è in aumento
L'indicatore è in calo

L'indicatore supera il livello
L'indicatore passa sotto il livello

L'utilizzo di segnali predefiniti come questo presenta molti vantaggi, tra cui quello di ridurre i livelli di libertà e di specificare le condizioni che hanno un senso reale nel trading. SQ utilizzerà quindi queste condizioni predefinite invece di cercare di generare l'intera condizione in modo casuale.

Di seguito mostreremo come sia possibile creare segnali personalizzati che utilizzano un indicatore già implementato, nel nostro caso ForceIndex. Per questo esempio implementeremo due semplici segnali:

ForceIndex è maggiore di zero - dovrebbe suggerire un trend rialzista
ForceIndex è inferiore a zero - dovrebbe suggerire una tendenza al ribasso

 

Passo 1 - Creare un nuovo segnale nell'Editor di codice

Come l'indicatore, il segnale è uno snippet che deve essere programmato in SQ. Aprite CodeEditor, cliccate su Crea nuovo e create un nuovo snippet con il nome di ForzaIndiceSopraZero. Scegliere Segnale come tipo di snippet e ForzaIndice come indicatore su cui si basa il segnale.

Questo creerà un nuovo snippet ForceIndexAboveZero.java e inserirlo nella cartella SQ -> Blocchi -> Indicatori -> FoceIndex.

Esaminando il codice si può notare che è molto più semplice di quello dell'indicatore stesso. Ha anche dei parametri, che dovrebbero corrispondere ai parametri dell'indicatore, e un solo metodo OnBlockEvaluate() che dovrebbe restituire true o false a seconda che il segnale sia valido o falso.

Si noti che il modello di segnali standard potrebbe non corrispondere al vostro indicatore, come in questo caso. Se provate a compilarlo, riceverete errori di compilazione, perché la chiamata dell'indicatore Strategy.Indicators.ForceIndex(Input, Period) nel metodo OnBlockEvaluate() non utilizza tutti i parametri richiesti.

Nei prossimi passi modificheremo il modello defaukt in modo che funzioni con ForceIndex

 

 

Implementare parametri ForceIndex corretti

Se si osserva l'indicatore ForceIndex, si noterà che ha dei parametri: Chart, Period, MAMethod, AppliedPrice.

Dobbiamo copiare gli stessi parametri anche nel nostro nuovo segnale:

public class ForceIndexAboveZero extends ConditionBlock {

    @Parametro
    public ChartData Chart;

    @Parametro(defaultValue="10", isPeriod = true, minValue=2, maxValue=1000, step=1)
    public int Periodo;

    @Parametro(name="Metodo", defaultValue="0")
    @Editor(type=Editors.Selection, values="Simple=0,Exponential=1,Smoothed=2,Linear weighted=3")
    public int MAMethod;

    @Parametro(defaultValue="0")
    @Editor(type=Editors.Selection, values="Close=0,Open=1,High=2,Low=3,Median=4,Typical=5,Weighted=6")
    public int AppliedPrice;

 

o, in alternativa, si potrebbero omettere alcuni dei parametri e utilizzare invece il loro valore fisso. La creazione di un parametro significa che sarà modificabile in Wizard e che SQ potrà generare valori casuali per questo parametro.

C'è un altro parametro da aggiungere:

    @Parametro
    public int Shift;

A differenza dello snippet di indicatori, il parametro Shift nei segnali non viene utilizzato di default e deve essere aggiunto esplicitamente.

 

Implementare il metodo OnBlockEvaluate

Di seguito è riportata un'implementazione del metodo OnBlockEvaluate() per il nostro segnale. Come si può vedere, è abbastanza semplice: basta ottenere l'indicatore chiamando Strategy.Indicator.ForceIndex(...) con i parametri appropriati, quindi basta ottenere il suo valore al turno specificato e confrontarlo con zero.

    @Override
    public boolean OnBlockEvaluate() throws TradingException {

        Indicatore ForceIndex = Strategy.Indicators.ForceIndex(Chart, Period, MAMethod, AppliedPrice);
        double value = indicator.Value.getRounded(Shift);

        return (value > 0);
    }

Questo è tutto, il nostro nuovo segnale è ora terminato, possiamo fare clic su Compile e la compilazione dovrebbe avvenire con successo.

 

Implementare ForceIndexBelowZero

Allo stesso modo dovremmo implementare anche ForceIndexBelowZero. L'unica differenza rispetto al segnale precedente è che il confronto in OnBlockEvaluate() sarà opposto:

ritorno (valore < 0);

Ora compilate anche il secondo segnale e riavviate SQ. Quando si guarda ai blocchi di costruzione, si dovrebbe vedere una nuova sezione per ForceIndex nei segnali, con i nostri due nuovi segnali:

 

 

 

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

Abbonarsi
Notificami
0 Commenti
Feedback in linea
Visualizza tutti i commenti