Documentazione
Applicazioni
Ultimo aggiornamento il 18. 5. 2020 da Mark Fric
ForceIndex Blocchi di segnale
Contenuto della pagina
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