Documentazione

Ultimo aggiornamento il 19. 6. 2015 da Mark Fric

Creare una nuova funzione What-If

QuantAnalyzer 4 può essere esteso per utilizzare valori statistici personalizzati, metodi What If, Equity o Monte Carlo, e molte altre parti del programma possono essere estese da snippet...

Tutti i metodi del programma sono completamente dinamici, ogni metodo (compresi quelli predefiniti) è una classe Java indipendente. frammento - implementare 1 o 2 semplici funzioni che manipolano gli ordini.
Per realizzare la vostra idea potete ispirarvi a come vengono realizzati i metodi esistenti.

Per estendere QuantAnalyzer è necessario utilizzare il modulo incorporato QuantEditor. È un editor di codice che consente di creare e modificare le classi che verranno poi utilizzate in QuantAnalyzer.
Il principio è molto simile a quello del lavoro con gli indicatori personalizzati nella piattaforma di trading, ma la codifica è molto più semplice.

Esempio: creazione di una nuova funzione What-If

I casi What If consentono di testare gli scenari "what-if": ad esempio, cosa succederebbe se si effettuassero operazioni solo dal lunedì al giovedì? O se si effettuasse solo 1 operazione al giorno?

Con QuantEditor è possibile creare casi personalizzati come questi. Nel nostro esempio creeremo un semplice caso che prende in considerazione ogni seconda operazione.
Non è uno scenario molto utile, ma dimostra quanto sia semplice aggiungere nuove funzionalità agli scenari What-If.

Inizieremo aprendo QuantEditor dalla barra degli strumenti.

QuantEditor si aprirà in una nuova finestra. Poiché vogliamo creare un nuovo caso What-If, facciamo clic su nuovo nella barra degli strumenti di QE. Sceglieremo l'opzione What If e chiameremo il nostro file TakeEverySecondTrade.

Dopo aver fatto clic su OK, l'editor creerà una nuova classe utilizzando un modello funzionante per la classe What If, che contiene già il codice generico per la classe What-If.

La classe ha solo due metodi: il costruttore TakeEverySecondTrade() e funzione filtro() che filtra l'elenco degli ordini secondo i nostri criteri.

Vediamo prima il costruttore.
Si chiama come il nome del nostro file e viene richiamato all'inizio, quando la classe viene caricata.

In genere è opportuno impostare il nome della classe, che verrà visualizzato nelle opzioni What-If dell'EA Analyzer con questo nome. Nel nostro caso utilizzeremo "Take Every Second Trade".
Se la nostra classe richiede alcuni parametri, possiamo definirli qui, usando chiamate come addIntParameter(), addFloatParameter, addComboBoxParameter().
La descrizione di tutte queste funzioni è disponibile nella sezione Aiuto di QuantEditor.

Nel nostro caso non abbiamo bisogno di alcun parametro, quindi il nostro costruttore avrà questo aspetto:

public TakeEverySecondTrade() {
   setName("Prendi ogni secondo trade");
   setFormatedName("Prendi ogni secondo trade");
}

Ora dobbiamo definire il nostro filtro() funzione. Questa è la funzione in cui si deve specificare ciò che si vuole dalla classe.
Questa funzione viene richiamata quando si seleziona questo caso What-If. Riceve l'elenco di tutti gli ordini ordinati in base all'ora di apertura. È possibile manipolare l'elenco degli ordini o un ordine in particolare, oppure rimuovere un ordine dall'elenco, se lo si desidera.

Il codice di base (mostrato di seguito) non fa nulla, si limita a scorrere l'elenco degli ordini senza alcuna azione.

public void filter(SQOrderList originalOrders) throws Exception {
   int parameter = getIntParameterValue("_PARAMETER_");

for(Iterator i = originalOrders.listIterator(); i.hasNext();) {
SQOrder order = i.next();

// todo - l'azione personalizzata
// gli ordini possono essere saltati o manipolati qui
}
}

Nel nostro caso, vogliamo rimuovere ogni secondo ordine nell'elenco, in modo da lasciare solo la metà degli ordini nell'elenco e possiamo farlo con il codice seguente:

public void filter(SQOrderList originalOrders) {
   booleano isSecondOrder = false;

for(Iterator i = originalOrders.listIterator(); i.hasNext();) {
SQOrder order = i.next();

// se la variabile isSecondOrder = true, rimuove l'ordine dai risultati.
if(isSecondOrder) i.remove();

// impostare la variabile isSecondOrder sul valore opposto, da true a false, da false a true
isSecondOrder = !isSecondOrder;
}
}

Spiegazione del codice:
- creiamo prima la variabile isSecondOrder e la impostiamo a false
- Poi, man mano che scorriamo gli ordini, verifichiamo se questa variabile è vera e, in caso affermativo, eliminiamo l'ordine.
- dopo ogni controllo impostiamo la variabile al valore opposto (da falso a vero, da vero a falso) e passiamo all'ordine successivo

Questo codice rimuoverà effettivamente ogni secondo ordine dall'elenco degli ordini.

Questo è quanto. Abbiamo finito.

Ora possiamo fare clic su Compilazione e la nostra nuova classe dovrebbe essere compilata senza errori.

Ora tornate a EA Analyzer, andate su Cosa succede se e si dovrebbe vedere la nuova funzionalità appena implementata:

Applicatelo a una strategia e vedrete che avrà solo la metà degli scambi.

In questo esempio abbiamo mostrato come EA Analyzer 3 permetta di aggiungere nuovi elementi personalizzati. Cosa succede se funzione. È possibile creare nuovi Monte Carlo o Controllo azionario funzionalità in modo molto simile.

Se creerete una funzione interessante, sarete invitati a condividerla sul nostro sito forum con altri.

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

Abbonarsi
Notificami
0 Commenti
Feedback in linea
Visualizza tutti i commenti