• Non ci sono risultati.

del rischio

6.4 Core Engine MOVA & MOAA

6.4.1 MOVA & MOAA Engine

L’algoritmo riceve in input il buffer contenente gli ultimi dieci valori di prezzo “tick” provenienti dalla piattaforma. Alla presenza di un nuovo valore di prezzo, l’algoritmo calcola le ultime X variazioni di velocità dello strumento (in PIPs) nei corrispondenti istanti di tempo.

Considerati i valori di prezzo P, istante per istante, si avrà: 𝑣(𝑡) = 𝑃(𝑡) − 𝑃(𝑡 − 1)

Mentre l’accelerazione, espressa come differenza tra le velocità al tempo t ed al tempo t-1, ha la forma 𝑎(𝑡) = 𝑃(𝑡) − 2𝑃(𝑡 − 1) + 𝑃(𝑡 − 2)

Tali valori vengono utilizzati per costruire la retta dei minimi quadrati che meglio approssima tali dati. L’apertura di una nuova posizione è legata alla verifica di diversi fattori:

a) Lo strumento non deve aver compiuto, nella giornata odierna, una variazione di prezzo in PIP pari alla media calcolata su 100 giorni più 3 volte la sua deviazione standard;

𝐶𝑢𝑟𝑟𝑒𝑛𝑡𝑃𝐼𝑃𝑀𝑒𝑎𝑛𝐷𝑎𝑦 ≤ ∑|𝑀𝑎𝑥𝑑𝑎𝑖𝑙𝑦[𝑖] − 𝑀𝑖𝑛𝑑𝑎𝑖𝑙𝑦[𝑖]| + 3 100

𝑖=1

𝜎

b) Il modulo dell’ultima variazione di prezzo, in PIPs, deve essere maggiore di una quantità mi- nima, soglia sotto la quale è inibito l’ingresso; in formule:

|∑ 𝑃𝐼𝑃| > 𝑃𝐼𝑃_𝐿𝑖𝑚𝑖𝑡

c) Inoltre, in AND/OR con la b), deve essere verificato che, l’ultima variazione in PIPs, misurata considerando l’oscillazione del prezzo con segno, deve essere maggiore di una frazione della cumulata dei PIPs compiuti dallo strumento; in formule

|∑ 𝑃𝐼𝑃| > 1

𝛼 ∑|𝑃𝐼𝑃|

d) Devono esserci a mercato meno di cinque operazioni aperte della strategia;

e) Devono essere trascorsi dall’apertura dell’ultima posizione almeno T secondi per poter entrare nuovamente a mercato, al fine di limitare il numero di operazioni da aprire sullo stesso movi- mento;

f) La retta dei minimi quadrati, appena costruita deve trovarsi all’interno dell’area di interesse indicata in Figura 1 (area positiva se la variazione di velocità è positiva, area negativa se la variazione di velocità è negativa).

85

Figura 53 - Aree di interesse per la valutazione dell'apertura di una nuova posizione

Nel dettaglio, la Figura 53 mostra due aree che risultano essere quelle per cui l’algoritmo ritiene oppor- tuno l’ingresso a mercato, sempre che siano verificati i vincoli ulteriori sopra indicati. Nello specifico, se vi è un aumento della velocità (o accelerazione nel caso di MOAA), si deve verificare, per l’ultimo punto della retta dei minimi quadrati, che:

{ 𝑥 + 𝑦 > 𝛼𝑦 > 𝑥

Inoltre

𝑆𝐿𝑂𝑃𝐸 > 1

Ovvero la retta dei minimi quadrati dovrà essere all’interno dell’area verde.

Nel caso invece in cui la variazione di velocità (o accelerazione nel caso di MOAA) sia negativa, si deve verificare, per l’ultimo punto della retta dei minimi quadrati, che:

{ 𝑦 − 𝑥 < − 𝛽𝑦 < −𝑥

Inoltre

𝑆𝐿𝑂𝑃𝐸 < − 1

Ovvero la retta dei minimi quadrati dovrà essere all’interno dell’area rossa.

La motivazione per cui si è scelto di considerare solo i movimenti per i quali l’ultimo punto della retta dei minimi quadrati deve trovarsi all’interno delle aree su indicate deriva dalla relazione che intercorre tra variazione di prezzo per ogni aggiornamento ricevuto e tempo che intercorre tra una variazione e l’altra. Infatti minore sarà il tempo che intercorre tra due singole variazioni di prezzo e tanto saranno intense (in termini di PIPs) tali variazioni, maggiore sarà l’inclinazione della retta approssimante il mo- vimento. Inoltre più la variazione è intensa, maggiore sarà la distanza tra i punti rappresentati dalla retta interpolatrice, portando così l’ultimo punto all’interno dell’area di interesse del grafico. Tale rappresen- tazione, supportata dai vincoli indicati nei punti precedenti, mostrano una variazione significativa di

x

y

y = x x + y = α y - x = - β -y = x x

y

y = x x + y = α y - x = - β -y = x

86

volatilità, e possono indicare l’inizio di un possibile movimento sfruttabile in termini di profitto. La direzione di ingresso a mercato, ovvero la scelta di entrare Buy o Sell, deriva dal valore assunto dalla pendenza della retta approssimante la curva di velocità e/o accelerazione. Specificando meglio il con- cetto, è la pendenza a guidare la direzione e, nel caso di utilizzo di entrambi gli algoritmi MOVA a MOAA, se entrambi attivi si preferisce l’indicazione fornita dalla pendenza dell’algoritmo basato sulle accelerazioni.

Di seguito si discuteranno i VI costituenti le due strategie MOVA e MOAA. 6.4.1.1 MOVA

L’algoritmo MOVA è stato integrato all’interno di Volatility sotto forma di progetto compilato (LLB). Esso si occupa di effettuare l’analisi di tutti i vincoli descritti precedentemente, e in caso di esito positivo crea il file per l’apertura di un nuovo ordine.

Di seguito si dettaglia l’elenco degli input / output di cui è possibile vedere lo schema in Figura 54:  PathDLL: percorso assoluto alla DLL di interfaccia;

 Input Array TS: Buffer contenente gli ultimi 10 Timestamp;

 Input Array Tick: Buffer contenente gli ultimi 10 livelli di prezzo tick;  Digit: numero di cifre significative dello strumento finanziario in esame;  #tick: indica il numero di punti su cui costruire la retta dei minimi quadrati;  x+y>?: limite superiore che verifica la condizione del punto f);

 y-x<?: limite inferiore che verifica la condizione del punto f);

 PIP Control OR/AND: controllo per la selezione della modalità di verifica delle condizioni b) e c);

 MaxPos: indica il numero massimo di posizioni che è possibile aprire;  Percent: valore del parametro α;

 SecondToWait: tempo di attesa tra l’apertura di due operazioni;

 PIP Limit: soglia in PIPs misurata a partire dalla verifica dell’evento, al di sotto della quale l’apertura non è permessa.

 OpenByNews: booleano per l’inibizione temporanea delle aperture in concomitanza dell’av- vento di una news finanziaria.

Restituisce in output:

 MOVA output array TS: il buffer dei Timestamp in cui è stato inserito il nuovo elemento;  MOVA output array Tick: il buffer dei valori di prezzo in cui è stato inserito il nuovo elemento;  Update: Booleano che indica l’avvenuto aggiornamento dei buffer;

 OpenPosMOVA: Booleano TRUE/FALSE che indica se tutte le condizioni sono state verificate ed è quindi possibile entrare a mercato;

 Vel_Event: indica il valore corrente di Velocità dello strumento finanziario. Congiuntamente all’apertura di una nuova posizione, tale valore di velocità viene memorizzato nel relativo clu- ster del nuovo ordine.

87

Figura 54 - Input / Output del VI MOVA

Il VI è stato sviluppato tenendo in considerazione che il calcolo della retta dei minimi quadrati costruita sui punti derivanti dal calcolo della velocità, e di conseguenza la verifica dei successivi vincoli prope- deutici all’ingresso, deve avvenire solamente quando si riceve un nuovo aggiornamento del livello di prezzo da broker. A tal fine viene dapprima verificato se il prezzo memorizzato nella variabile in me- moria condivisa della DLL (tramite il VI readfromDLL) è differente dall’ultimo memorizzato nel buffer, facendo riferimento al suo Timestamp. In caso di esito positivo, il nuovo valore viene inserito in cima

al buffer dei prezzi, utilizzando il VI ShiftArrayElement, comportando così la cancellazione dell’ele- mento più vecchio (v. Figura 55).

Si genera quindi il vettore contenente i valori di velocità necessari ed i corrispondenti delta temporali tra un livello di prezzo e l’altro, calcolati come differenza dei Timestamp.

I due vettori appena creati vengono quindi posti in input al VI che computa la retta dei minimi quadrati e la pendenza della stessa.

Il vettore dei punti viene dato quindi in pasto al VI che verifica le disequazioni indicate nel paragrafo 4.1, restituendone un valore true/false (v Figura 56).

88

Figura 56 - Computazione dei punti per costruzione della retta dei minimi quadrati e verifica dei vincoli. MOVA utilizza degli altri VI specializzati ad eseguire operazioni specifiche:

 CheckPosArea: Questo VI si occupa di verificare che la retta dei minimi quadrati ed il suo ul- timo punto si trovino all’intero dell’area evidenziata in verde della Figura 1. Riceve in input la slope, gli array contenenti le X e le Y della retta e il parametro α indicato nel paragrafo 6.4.1. Restituisce TRUE se le condizioni sono verificate, FALSE altrimenti;

 CheckNegArea: Questo vi riprende i concetti del precedente, verificando però le disequazioni relative all’area negativa della Figura 2;

 WriteDataToFile: Questo VI, ad ogni aggiornamento ottenuto dalla piattaforma, riceve in input i valori X e Y della retta dei minimi quadrati costruita sugli ultimi valori di prezzo e la pendenza ad essa riferita, e scrive tali valori su di un file di log;

Verificato che la retta si trovi all’interno di una delle due aree di interesse, l’algoritmo memorizza in quale area si trova la retta dei minimi quadrati e si predispone a verificare le ulteriori condizioni prece- dentemente specificate (v. Figura 57 e Figura 58).

89

Figura 57 - Memorizzazione della direzione

90

Come si evince dalla Figura 58, vengono richiamati due ulteriori VI:

 Accumulator: Tale VI riceve in input il percorso alla DLL di interfaccia tra la piattaforma e LabVIEW, dalla quale legge il valore corrente di PIPs compiuti dallo strumento nella giornata odierna e la Deviazione Standard relativa. In base a tale valore e rispetto alla media giornaliera su 100 giorni, imposta lo Stop Loss Statico per l’ordine da aprire. I valori possibili di S/L statico sono i seguenti:

o 20 PIPs, se CurrentPIPDay < MeanDay(100) + 1

σ

*MeanDay; o 15 PIPs, se CurrentPIPDay < MeanDay(100) + 2

σ

*MeanDay; o 10 PIPs, se CurrentPIPDay < MeanDay(100) + 3

σ

*MeanDay.

Nel caso in cui nessuna delle tre disequazioni appena indicate è verificata, è evidente che lo strumento ha già compiuto tutto il movimento giornaliero, superando inoltre il valore medio su 100 giorni. Tale condizione inibisce l’apertura di nuove posizioni e pone in output (oltre ad un valore di S/L Statico negativo), un booleano indicante l’individuazione di un nuovo massimo nel periodo. In Figura 59 si mostra lo schema di input / output mentre, in Figura 60 parte del block diagram dell’implementazione.

Figura 59 - Input / output del VI Accumulator

Figura 60 - Parte del Block diagram del vi Accumuator

 PIPCounter: Questo VI si occupa di verificare, per l’apertura di una nuova posizione, le condi- zioni indicate nei punti b), c), d), ed e) indicate nel paragrafo 6.4.1. Se tali condizioni, rispetto ai parametri impostati dall’utente, sono tutte verificate, permette l’apertura di una nuova posi- zione. La Figura 61 mostra gli input del suddetto VI:

91

Figura 61 - Input / output per il VI PIPCounter. Richiama:

 TimeElapsed: questo VI riceve in input il Timestamp relativo all’ultima apertura di una posi- zione e il numero di secondi da attendere prima di permettere l’apertura di una nuova posizione. Effettua il confronto tra il Timestamp in input, cui somma i secondi di delay tra una operazione e l’altra, e l’orario corrente. Ritorna un valore booleano TRUE/FALSE risultato della verifica di tale condizione.

A supporto dell’applicativo vi è una variabile globale utilizzata per memorizzare informazioni di uso comune all’interno dell’applicativo.

 MOVA_Global: Ha al suo interno i seguenti controlli: o Price: memorizza il valore del prezzo corrente; o Slope: memorizza il valore attuale della Slope;

o OldSlope: memorizza il valore calcolato all’iterazione precedente della slope; o SymbolName: memorizza il nome dello strumento finanziario in esame: o #Pos: memorizza il numero di posizioni aperte fino all’iterazione attuale; o LastOpen: Memorizza il Timestamp relativo all’ultima operazione aperta; o S/L_Statico: Valore corrente di S/L statico da assegnare ad un ordine successivo; o FirstCount: Booleano per indicare che è la prima iterazione in cui si contano i PIPs o ABS_Sum_PIP: Memorizza il valore assoluto della sommatoria dei PIP calcolata fino a

quell’istante;

o SumABS_PIP: Memorizza la sommatoria del valore assoluto dei PIP calcolata fino a quell’istante.

Gli ultimi due contatori (ABS_Sum_PIP e SumABS_PIP), vengono azzerati e inizializzati al nuovo va- lore quando la pendenza (confrontata rispetto all’iterazione precedente) risulta opposta, il che indica il passaggio della retta dei minimi quadrati da un’area di interesse all’altra della Figura 53 (esempio di finta di corpo in casi di variazione di volatilità significative).

6.4.1.2 MOAA

Come detto, la struttura del VI che verifica le condizioni di apertura sull’accelerazione rispecchia esat- tamente quella del VI MOVA, per questo motivo si riportano solo gli input e gli output del VI (v. Figura 62). In questo senso, eredita la struttura implementativa concettuale, le variabili globali, input e output. MOAA è stato integrato all’interno di Volatility sotto forma di progetto compilato (LLB).

92

 PathDLL: percorso assoluto alla DLL di interfaccia;  Input Array TS: Buffer contenente gli ultimi 10 Timestamp;

 Input Array Tick: Buffer contenente gli ultimi 10 livelli di prezzo tick;  Digit: numero di cifre significative dello strumento finanziario in esame;  #tick: indica il numero di punti su cui costruire la retta dei minimi quadrati;  x+y>?: limite superiore che verifica la condizione del punto f);

 y-x<?: limite inferiore che verifica la condizione del punto f);

 PIP Control OR/AND: controllo per la selezione della verifica delle condizioni b) e c);  MaxPos: indica il numero massimo di posizioni che è possibile avere a mercato contempora-

neamente;

 Percent: valore del parametro α;

 SecondToWait: tempo di attesa tra l’apertura di due operazioni;

 PIP Limit: soglia in PIPs misurata a partire dalla verifica dell’evento, al di sotto della quale l’apertura non è permessa;

 OpenByNews: booleano per l’inibizione temporanea delle aperture in concomitanza dell’av- vento di una news finanziaria.

Restituisce in output:

 MOAA output array TS: il buffer dei Timestamp in cui è stato inserito il nuovo elemento;  MOAA output array Tick: il buffer dei valori di prezzo in cui è stato inserito il nuovo elemento;  Update: Booleano che indica l’avvenuto aggiornamento dei buffer di prezzo e Timestamp;  OpenPosMOAA: Booleano TRUE/FALSE che indica se tutte le condizioni sono state verificate

ed è quindi possibile entrare a mercato.

 Acc_Event: indica il valore corrente di Accelerazione dello strumento finanziario. Congiunta- mente all’apertura di una nuova posizione, tale valore di velocità viene memorizzato nel relativo cluster del nuovo ordine.

93

6.5 Variabili Globali e Strutture dati principali

Prima di intraprendere la descrizione delle varie aree, si preferisce definire le strutture dati utilizzate e i flag di controllo, (sia contenuti all’interno di variabili globali che localmente all’interno del vi princi- pale), necessarie al funzionamento del software. L’utilizzo di una variabile globale permette di rendere controlli, indicatori e strutture dati accessibili, in lettura e scrittura, da qualunque VI richiami la variabile stessa, evitando di dover porre in input al VI un innumerevole numero di oggetti.