del rischio
6.1 Modalità Calendar
Tale versione dell’applicativo, in presenza di una news da calendario relativa allo strumento finanziario in esame, prevede che vengano impostati dei parametri di apertura della posizione meno restrittivi, in maniera tale da accertarsi di riuscire ad entrare a mercato non appena la variazione di volatilità diventa significativa, e non soltanto quando questa è ormai nel pieno della sua evoluzione o addirittura quasi terminata, a causa di parametri troppo vincolanti, utilizzati per la normale attività della strategia. A tal scopo è stato integrato l’applicativo CalendarAlert. Tale software, di cui sono disponibili i dettagli nel Paragrafo 4.2, non appena verificate le condizioni di “attesa” della news, ovvero non appena ci si trova nell’imminenza della stessa, inibisce l’apertura alla versione classica di Volatility, mantenendone attive solo le condizioni di uscita, e imposta i vincoli di ingresso in modo tale da permettere un ingresso tempestivo a mercato nella direzione corretta dettata dalla news. Difatti, con i parametri “News” impo- stati, l’applicativo permette una eventuale apertura di nuove posizioni solo in corrispondenza temporale della news.
Trascorso il lasso temporale previsto (configurabile da interfaccia grafica) in cui vanno utilizzati i sud- detti parametri, l’applicativo automaticamente ricarica la configurazione standard e riprende la sua nor- male attività.
81
Lo schema di Figura 51 definisce l’operatività nell’intervallo temporale precedente e successivo ad una eventuale News. Nello specifico è possibile specificare quindi un range di ±T minuti dalla news, nel quale si attiva l’impostazione dei parametri come su descritto
Figura 51 - Timing di ottimizzazione degli algoritmi in versione Calendar / No-Calendar
6.2 Suddivisione in Aree Funzionali
Il software è stato realizzato cercando di suddividere al meglio il codice in aree funzionali, al fine di renderne la lettura e l’interpretazione da parte di terzi il più semplice e veloce possibile, oltre che meglio manutenibile.
Di seguito si illustra uno schema concettuale di come tale suddivisione è stata realizzata (v. Figura 52). Esaminiamo quindi le varie aree indicate in figura:
Ciclo While esterno
Area 1 Area 2 Area 3 Area 4 Area 5 Area 6 Area 7 News Verifier News -5min +5min Apre S; Chiude S; Disattivo C; Non Apre S; Chiude S; Attivo ma Inibito C; Apre C; Chiude C; Disattivo S; Disattivo C; Apre S; Chiude S; S = Strategia Simple; C=Strategia Calendar
82 Area 1: Porzione di codice per l’inizializzazione dell’interfaccia grafica, strutture dati necessarie al fun-
zionamento del software, delle variabili globali e lettura di eventuali ordini rimasti aperti dall’esecuzione precedente.
Questa area si trova al di fuori del ciclo while di esecuzione indicato in figura, proprio perché riguarda delle operazioni di inizializzazione del software da eseguire una sola volta;
Area 2: Tale area si occupa di effettuare il buffering della struttura dati contenente i valori di prezzo ed
i relativi Timestamp necessari per la prima iterazione del ciclo while;
Dopo aver superato queste due sezioni di codice, l’applicativo si evolve con un ciclo while che si occupa, oltre a mantenere attiva l’interfaccia grafica e quindi gestirne l’interazione con l’utente, ad ogni nuovo aggiornamento del livello di prezzo proveniente dalla piattaforma, di valutare secondo i criteri degli algoritmi di apertura e chiusura delle posizioni se richiedere appunto l’apertura di una nuova posizione (con il relativo dimensionamento) o la chiusura di una o più posizioni aperte. Inoltre, in presenza della news, vengono sostituiti i parametri di apertura classici con quelli ottimizzati per aperture rapide.
Area 3: Algoritmi di money management e verifica dei criteri di apertura della posizione; da tale area si
dirama il nodo News Verifier, modulo di verifica della presenza di una imminente news di carattere macro economico tramite l’applicativo CalendarAlert ed in tal caso impostazione dei vincoli di ingresso a mercato relativi in presenza di notizie macro economiche.
Area 4: Lettura delle informazioni provenienti dalla piattaforma relativamente all’eventuale nuovo or-
dine aperto e la memorizzazione dello stesso nel cluster degli ordini;
Area 5: Strategie di EXIST (EXIt STrategy) per la chiusura delle posizioni;
Area 6: Backup degli ordini aperti su file per eventuale recupero alla successiva esecuzione;
Dopo l’Area 6, se non avviene l’interruzione dell’esecuzione da parte dell’utente, il ciclo while itera nuovamente le operazioni brevemente descritte nelle Aree 3, 4, 5, 6. Nel caso invece di una interruzione dell’esecuzione, viene dapprima eseguito il backup dei file di Log sui quali gli algoritmi di apertura della posizione hanno registrato i dati sui quali sono state valutate le condizioni di apertura di nuove posizioni.
Area 7: Memorizzazione dei file di Log degli algoritmi.
6.3 VI di uso comune o di supporto
Alcuni vi svolgono funzionalità generiche, non specifiche per un singolo obiettivo. Al fine di evitare ripetizioni, si descrivono in questa sezione tali vi, così da poterli menzionare senza descrizioni ripetute nelle pagine successive.
readfromDLL: Tale VI si interfaccia alla DLL realizzata per la comunicazione tra applicativo e Piattaforma MT4. Riceve in input il percorso assoluto alla DLL, ed il suo scopo è quello di leggere e restituire i valori correnti di prezzo e relativo istante temporale scritti nella se- zione shared di memoria della DLL dall’Expert Advisor in piattaforma.
ConvertStringToTimeStamp: questo VI riceve in input un Timestamp sotto forma di stringa di testo nel formato YYYY.MM.DD HH:MM:SS e lo converte in un oggetto Timestamp di LabView.
DateRecToTimeStamp: riceve in input un oggetto di tipo Time Rec (ovvero un cluster di dati temporali), e restituisce in output un oggetto strutturato Timestamp di LabVIEW, incluse le frazioni di secondo
83
ConvertStringToTimeStamp_msec: questo VI riceve in input un Timestamp sotto forma di stringa di testo nel formato YYYY.MM.DD HH:MM:SS:UUU e lo converte in un oggetto Timestamp di LabView, riportando quindi in output anche i decimi di secondo.
DateRecToTimeStamp_msec: riceve in input un oggetto di tipo Time Rec (ovvero un cluster di dati temporali), e restituisce in output un oggetto strutturato Timestamp di LabVIEW, incluse le frazioni di secondo.
ShiftArrayElement: questo VI riceve in input un array di double ed un nuovo valore. Esegue un inserimento in posizione N-esima rispetto alla dimensione dell’array, eliminando quindi l’elemento in posizione zero (il più vecchio in termini temporali).
ConvertPriceToInt: Riceve in input un valore di prezzo ed il numero di cifre significative dello strumento, fornisce in output il valore in PIPs dello strumento. Esistono due versioni di questo VI in quanto uno è utilizzato per il calcolo della velocità ed un altro per l’accelera- zione.
GetMeanVelAcc: questo VI riceve in input il buffer contenente gli ultimi 10 valori di prezzo, il numero di cifre significative dello strumento finanziario in esame e il numero di elementi su cui calcolare la media. Restituisce il valor medio di velocità ed accelerazione in PIP e decimi di PIP dello strumento calcolato appunto sul numero di elementi indicato in input. RemoveDuplicateFromArray: questo VI riceve in input un array di valori numerici, resti-
tuendo l’array dai quali sono stati rimossi i valori duplicati
GetNextDay: questo vi riceve in input un oggetto di tipo Timestamp, destruttura il cluster ad esso relativo e incrementa il campo “DayOfMonth”. Ritorna il Timestamp di origine aggior- nato all’1 a.m. del giorno successivo. Utilizzato per ottenere il Timestamp del prossimo ag- giornamento del file delle news.
GetUsefulTS: questo vi riceve in input un oggetto di tipo Timestamp (nello specifico quello proveniente dal VI GetNextDay), e verifica se il giorno cui il Timestamp si riferisce è un festivo (ovvero sabato o domenica). In questi casi il vi porta il Timestamp al primo lunedì utile.
GetParameterFromFile: Questo vi si occupa di leggere i file (con estensione .def) contenenti le configurazioni dei parametri di apertura da utilizzare in modalità Simple o in modalità
News. Ogni record corrisponde ad uno strumento finanziario, ed i campi sono separati da
virgola. Il separatore dei decimali è il “punto”.