• Non ci sono risultati.

Manuale Utente Parte 1

FILES: Agent.py , Book.py, Model.py, Start.py

1.1 File: Agent.py

In questo file è stato programmato il comportamento di un agente zero intelligence. L’agente esprime la propria volontà di acquisto o di vendita in base all’esito del valore generato dalla funzione “random.random()”, la quale restituisce un valore casuale compreso tra 0 e 1. Se la variabile in questione è un valore superiore a 0.5, l’agente casuale vende; nel caso in cui il valore della variabile casuale sia inferiore a 0.5, l’agente casuale acquista.

Il limite, di cui si è parlato, è stato scelto volontariamente pari al valore medio dell’intervallo di numeri casuali che possono essere generati, al fine di avere, almeno da un punto di vista teorico, un equilibrio tra compratori e venditori.

Il prezzo presentato dagli agenti è pari all’ultimo prezzo di contrattazione del titolo, registrato nella “priceList”, moltiplicato per un coefficiente. Tale coefficiente è una variabile casuale uniformemente distribuita in un intervallo compreso tra 0,5 e 1,5.

I prezzi e le identità degli agenti protagonisti delle offerte sono inviati al Book, il quale ha il compito di gestire le transazioni.

I moduli “setExecutedBuyOrder” e “setExecutedSellOrder” ricevono informazioni dal

Book nel caso di esito positivo della transazione. Per ogni transazione conclusa, il Book

invia ai rispettivi agenti la comunicazione del risultato raggiunto. Dal momento che si sta trattando il caso di agenti zero intelligence, l’informazione trasmessa è semplicemente l’identità degli agenti che hanno acquistato e venduto, a cui è legata inoltre la quantità unitaria commerciata.

In caso di acquisto, la quantità sarà positiva pari a uno; in caso di vendita invece, la quantità sarà negativa pari a uno. Così facendo, aumentando il numero di cicli, si saprà in ogni istante il bilancio di operazioni fatto da ciascun agente.

Nel mio modello, intenzionalmente, non ho ancora approfondito la questione delle quantità offerte in acquisto e offerte in vendita, al fine di evitare problemi legati agli ordini parzialmente eseguiti.

1.2 File: Book.py

In Figura 2 è presentato il codice di programmazione del Book di transazione.

Come si può notare, la prima istruzione importa il file “agent”salvato nella medesima cartella di lavoro.

Nell’ ”__init__“ sono presenti due voci che saranno esclusivamente utilizzate per la stampa dei prezzi, così da poter visualizzare meglio il corretto funzionamento del programma.

Il metodo “SetBuyDecision” riceve le offerte di acquisto (Bid) espresse dagli agenti e, nel caso in cui ci sia immediata controparte, conclude la transazione nello stesso momento in cui riceve l’offerta. In caso contrario, ovvero qualoranon ci siano proposte

di vendita o le proposte di vendita presenti in lista non soddisfino l’offerta di acquisto corrente, quest’ultima sarà inserita nella lista delle offerte di acquisto, che a loro volta saranno ordinate in modo decrescente attraverso il comando “.reverse”.

L’ordinamento degli ordini è una parte fondamentale del Book perché, seguendo il regolamento del Book reale di transazione, l’offerta di acquisto che ha priorità sulle altre offerte presenti in lista è quella con valore maggiore.

La variabile “firstInformationInList” rappresenta il valore inferiore tra le proposte di vendita registrate nella “sellList”. Tale valore è il prezzo con cui si conclude la transazione nel caso in cui l’offerta di acquisto corrente fosse di pari misura o superiore. Questo principio segue il regolamento di transazione, per cui se un’offerta di vendita è già presente sul mercato e non è ancora stata eseguita, l’offerta di acquisto che sarà presentata in futuro, secondo una logica di mercato, sarà al massimo pari e non superiore. Nel nostro caso, le offerte di acquisto che giungeranno al Book potranno essere anche superiori al minor prezzo di vendita presente in “sellList” perché gli agenti zero intelligence presentano offerte casuali. Tramite questa programmazione, cioè che “firstInformationInList” sarà il prezzo di transazione ufficiale del titolo, il principio di logica di mercato non sarà violato.

All’interno della condizione “else” sono elencati i comandi che permettono la conclusione della transazione spiegati precedentemente; inoltre, è presente il codice che invia le informazioni al file “agent.py” necessarie per visualizzare identità e bilancio titoli per ciascun agente.

Nello stampare la “buyList”, ho dovuto inserire un comando che mi permettesse di visualizzare solamente due cifre decimali dopo la virgola. Poichè i valori float si trovano all’interno di una lista, la procedura risulta differente da quella vista in precedenza per la stampa delle offerte pervenute dai singoli agenti e dal “Trading price”.

In Figura 3 è possibile osservare la seconda parte del codice di programmazione del Book.

Il modulo “setSellDecision” è la versione speculare,per offerte di vendita, del modulo “setBuyDecision”.

Le novità di questa seconda parte sono:

• il modulo che cancella le liste, una volta ultimata la giornata di negoziazione

• il modulo che si occupa della stampa dei prezzi di conclusione delle transazioni, che troviamo nella “priceList”.

1.3 File: Model.py

Il codice di programmazione del file model, visibile in Figura 4, è stato studiato per la gestione dei file necessari per la simulazione, richiamati attraverso “import”.

Seguendo il protocollo di programmazione Slapp, la classe ModelSwarm contiene i moduli per la creazione degli oggetti e per la gestione delle azioni.

Il modulo “builObjects” crea “self.aBook” e “anAgent”. La serie di oggetti “anAgent” sono inseriti all’interno di una lista “AgentList”. Così facendo, si segue uno dei fondamenti della programmazione ad oggetti quale la creazione degli agenti separata dal codice di azione di questi ultimi. Il numero di agenti creati ed inseriti in lista sarà scelto dall’utente tramite l’inserimento di un input presente nel codice di programmazione del file “start.py”.

Nel modulo “buildRandomActions” sono gestite le azioni e i tempi.

I tempi sono rappresentati dal numero di cicli i quali saranno decisi dall’utente tramite inserimento di input dal file “start.py”.

1.4 File: Start.py

File necessario per l’avvio della simulazione. Una volta avviata la simulazione, all’utente sarà richiesto l’inserimento di due input che rispettivamente rappresentano:

• il tempo: attraverso il numero di cicli

• grandezza del mercato per numero di partecipanti: attraverso il numero di agenti