Capitolo 5
Sum e SumWeb

 

Il modello Sum, acronimo di Surprising (Un)realistic Market, è un modello ad agenti adattivi, che simula un mercato di borsa inizialmente molto particolare, infatti, la prima versione di Sum è costituita da un mercato artificiale popolato esclusivamente da agenti semplici, definiti "random", i quali non operano in base a credenze o aspettative, ma a caso.
Il progetto, al quale hanno contribuito alcuni tesisti aggiungendo elementi, è tuttora in fase di sviluppo. L'autore, Pietro Terna (homepage, pubblicazioni), ha intenzione di aumentarne progressivamente il grado di realismo, eliminando parte delle semplificazioni introdotte, estendendo meccanismi e strutture del mercato e ricreando gran parte della varietà dei comportamenti attuati dagli operatori "reali".
Dalla sua realizzazione ad oggi, infatti, Sum ha subito diverse modifiche. In questo capitolo sarà descritta inizialmente la struttura di base del modello, per poi analizzare le più recenti modifiche, tra cui, principalmente, vi è l'estensione denominata SumWeb (grazie alla quale è possibile fare esperimenti non solo con agenti artificiali, ma anche agenti umani).
He's Tony DeRuvo, thinkin' about Sum (or Thinkin' in Java ???)

5.1 Struttura di base di Sum

Sum, acronimo di Surprising (Un)realistic Market è un progetto di simulazione di un mercato di borsa. Lo scopo di Sum (e della sua estensione SumWeb) è simulare la nascita di un mercato trattato tic per tic, senza meccanismo artificiosi qual è il banditore, presente in molti modelli di simulazione (Terna, 2000).
In questo mercato simulato si vuole osservare il comportamento, ricostruendo la struttura di un mercato reale, degli agenti artificiali che vi operano e quali sono i risultati, da un punto di vista aggregato, dei loro comportamenti.
In Sum è stata evitata ogni semplificazione relativa alla formazione dei prezzi, come ad esempio l'utilizzo del banditore, ma è stata ricreata la struttura del book telematico operante nei mercati reali; in questo modo il prezzo dei titoli presenti in Sum è generato, istante dopo istante, dal comportamento degli operatori che vi operano, i quali prendono le loro "decisioni", in merito all'operatività sul mercato, sulla base di regole che li caratterizzano, ma assolutamente senza condizionamenti da parte del programma stesso. Gli operatori, chiamati agenti, inviano i loro ordini al mercato e, come nella realtà, questi vengono inseriti nel book, dal lato denaro o dal lato lettera a seconda che siano rispettivamente ordini di acquisto o di vendita; il book manda in esecuzione immediatamente gli ordini che trovano una controparte mentre mette in lista, in ordine decrescente gli ordini di acquisto ed in ordine crescente gli ordini di vendita rimanendo così coerente con le modalità utilizzate nei mercati reali.
I risultati più interessanti emersi dal funzionamento di questo modello sono relativi al formarsi di bolle speculative e di relativi crash; analizzando i dati si può asserire che tale fenomeno sia generato dalla struttura del book stesso e non tanto dalla tipologia di operatori che agiscono sul mercato o da eventi esterni (l'influenza di eventi esterni riguarda una modifica recente apportata a Sum); anche se a tale proposito si è notato che le bolle ed i crash si formano più frequentemente e di maggior entità, quando vi sono particolari tipologie di operatori (in particolare i cosiddette "imitatori di mercato"). Ma ciò che appare particolarmente interessante è che a discapito delle tipologie di operatori le bolle ed i crash del mercato si generano comunque (sono state inserite, come si vedrà, numerose tipologie di agenti, e più modifiche sono state fatte, ma i risultati sono sempre i medesimi)
Le varie tipologie di agenti che operano in Sum, sono state inserite per far sì che nel mercato fossero rappresentate alcune tipologie di operatori che nella realtà agiscono sui mercati di borsa, contribuendo a caratterizzarli e determinandone il comportamento particolare, per il quale non è ancor stata individuata una spiegazione matematica che lo giustifichi e che lo spieghi. Proprio questa mancata comprensione della realtà giustifica l'utilizzo di simulazioni per cercare di comprendere la realtà studiata.
Attualmente, a differenza delle prime versioni del modello in cui vi era un solo titolo, sono presenti più titoli di borsa (scelti a piacere dall'utente) ed un future scambiato sulla base di un indice di mercato (l'indice dei titoli di Sum); la scelta del titolo su cui operare è attualmente impostata in modo casuale, ipotesi questa coerente con la realtà, per la maggior parte degli operatori. A tale regola fanno eccezione alcuni operatori che per il loro modo di operare necessitano di concentrarsi sempre su un titolo oppure sempre su tutti; verrà indicato in questa breve trattazione quali di questi agenti fanno eccezione alla regola generale su definita.
Nei paragrafi successivi saranno descritte le principali tipologie di agenti presenti in Sum e le modifiche introdotte recentemente, fino ad arrivare all'estensione denominata SumWeb.
Prima di descrivere dettagliatamente la struttura del modello di simulazione si osservi la figura che rappresenta lo schema ERA, descritto nel capitolo 3, applicato a Sum.
In questo caso lo schema generatore di regole - gestore di regole - agente, è rispettato solo due volte. Solo in due casi le regole sono costruite e adattate all'ambiente, e in entrambi i casi ciò avviene perché vi è un collegamento con le reti neurali artificiali, che imparano dall'ambiente e formulano di conseguenza le loro strategie.
Negli altri casi vi sono invece strategie molto semplici che sono pre-fissate: sono previsti semplici comportamenti da parte degli agenti, come, ad esempio, i random agents per cui si prevede che la loro scelta si discosti sempre in un range predeterminato dall'ultimo prezzo eseguito.
I RuleMaster in questi casi non solo gestiscono, ma contengono anche le regole per gli agenti. Altre due eccezioni sono l'agente arbitraggista e gli Avatar.

Il secondo schema offre una seconda visione di Sum, complementare alla precedente.
Osservando la figura si nota che al centro di tutta la costruzioni vi è il book. Al book si collegano gli oggetti che coordinano e gestiscono l'intero modello (ModelSwarm, ObserverSwarm), i gestori di regole (Rulemaster), gli agenti (Agent), quindi i BPCT e le reti neurali (ANN).
Al di fuori di questo schema vi sono ancora tre elementi che forniscono supporto e dati agli agenti. Questi sono l'IndexCalculator che calcola l'indice di mercato dopo aver interrogato i book, l'EventGenerator che genera gli eventi, e l'interfaccia per gli agenti BPCT.
Ogni linea dritta del disegno rappresenta un legame fra le categorie di soggetti con il book. Ogni agente chiama singolarmente il book, ma per leggibilità dello schema è stata disegnata una sola linea simbolica. Le linee curve invece rappresentano relazioni fra specifici componenti della simulazione ad esempio tra l'arbitraggista e l'IndexCalculator che calcola l'indice, o fra l'agente sensibile agli eventi e l'EventGenerator.


5.2 Gli agenti

Sum dispone di diverse tipologie di agenti, ciascuna dotata di caratteristiche e comportamenti propri. Ogni categoria di agente fa capo ad un oggetto contenente l'insieme di regole che determinano la scelta delle proprie azioni. Questi oggetti prendono il nome di ruleMaster. I ruleMaster contengono l'insieme di regole comportamentali che caratterizzano i singoli agenti durante la simulazione. Così come avviene per altri oggetti appartenenti al modello, anche i ruleMaster associano diverse tipologie di azioni e comportamenti a ciascuna fase della simulazione (apertura, continua e chiusura). Sia gli agenti che i ruleMaster utilizzano due classi di base che prendono rispettivamente il nome di BasicSumAgent e BasicSumRuleMaster. Queste due classi contengono gli elementi comuni a tutti gli agenti e a tutti i ruleMaster. Al loro interno si trovano, oltre ad alcune variabili, anche i metodi che descrivono le azioni da svolgere durante le tre fasi della giornata.
In ognuno dei seguenti sottoparagrafi saranno analizzati le principali tipologie di agenti:

5.2.1 RandomAgent

Il RandomAgent è l'agente più semplice ed è quello i cui comportamenti, possono rappresentare l'operato di più tipologie di individui nella realtà borsistica. Le scelte che tale agente attua sono casuali, cioè sceglie casualmente (con probabilità pari a 0,5) se acquistare o vendere; per ciò che riguarda il prezzo a cui l'agente Random inserisce l'ordine, questo viene scelto applicando uno switch (il cui importo è generato in modo casuale), all'ultimo prezzo trattato su quel titolo; quindi le conoscenze che il randomAgent possiede, si limitano all'ultimo prezzo eseguito. Il valore dello switch che l'operatore casuale applica all'ultimo prezzo eseguito, che egli considera come base di partenza per inserire l'ordine, può essere modificato, correggendo i limiti massimo e minimo del range in cui tale switch viene generato casualmente. Il RandomAgent è sicuramente da considerare uno tra gli agenti (tipologie di agenti) più rappresentative della compagine reale di operatori perchè, nella realtà (soprattutto in questi ultimi anni) ci sono molti investitori che operano senza possedere le competenze adatte, senza avere nessuna nozione di base di carattere economico, senza un preciso motivo legato al titolo in questione od alle condizioni macroeconomiche. Il risultato di tali operatori è ben rappresentato dalle operazioni svolte dal RandomAgent in Sum.

5.2.2 ForecastingAgent

Questo agente è costituito da una rete neurale artificiale e produce ogni giorno una previsione sul possibile prezzo assunto dal titolo nei giorni successivi. Il ForecastingAgent in realtà non è un vero e proprio agente, ma rappresenta le previsioni di una società di rating.

5.2.3 ANNforecastingAppAgent

Il vero agente in grado di poter usufruire delle previsioni effettuate dal ForecastingAgent è l'ANNForecastingAgent. Questo agente opera sul mercato seguendo le previsioni fornite dal ForecastingAgent. Il suo funzionamento è del tutto analogo a quello degli agenti imitatori.

5.2.4 Agenti imitatori

Nel modello vi sono due diverse categorie di agenti imitatori:
-MarketImitatingAgent che decide di acquistare (vendere) se il prezzo medio è salito (sceso);
-LocallyImitatingAgent che decide di acquistare (vendere) se gli ultimi giocatori hanno acquistato (venduto).
Entrambi, come gli agenti casuali, inseriscono una proposta di prezzo ottenuta moltiplicando l'ultimo prezzo eseguito per un coefficiente casuale.

5.2.5 StopLossAgent

E' un agente che opera secondo due diverse modalità: senza memoria, o con memoria del passato.
Nel caso in cui operi senza memoria del passato, se l'ultimo prezzo eseguito è aumentato (diminuito), rispetto al prezzo medio di un dato intervallo di tempo, di un tasso maggiore del maxLossRate, l'agente compra (vende) al prezzo corrente. Nel caso in cui operi con memoria del passato, se l'ultimo prezzo eseguito è aumentato (diminuito), rispetto al prezzo medio di un dato intervallo di tempo, ad un tasso maggiore od uguale al parametro maxLossRate, l'agente compra (vende) se ha una posizione short (long). In entrambi i casi, se il prezzo corrente non supera lo stop loss, l'agente si comporterà come un agente casuale.
Tale agente non crea effetti che alimentano le anomalie di borsa in quanto opera fondamentalmente come un RandomAgent, con l'aggiunta però di una caratteristica in più e cioè quella di trattare anche i titoli sulla base di uno stop loss; tuttavia in casi in cui il prezzo corrente superi lo stop loss, l'effetto è quello di alimentare la direzionalità del mercato. Si potrebbe criticare tale impostazione asserendo che un operatore che fa usa dello stop loss, non lo manterrebbe fisso per tutto il periodo di mantenimento del titolo, ma lo modificherebbe a seconda dell'andamento delle quotazioni e di altri eventi che ora non è importante ricordare. Tale critica è corretta, se però si pensa che qui si vuole vedere cosa si verifica in un mercato se alcuni agenti utilizzano lo stop loss e non cosa capita alla ricchezza personale dell'agente stop loss, si comprende che tale critica non ha senso di esistere (almeno per ora) in SUM; quando, se mai accadrà, saranno inserite le ricchezze personali dei vari operatori allora avrà senso modificare in parte la struttura di tale agente, rendendolo conforme a quello reale.

5.2.6 Agenti cognitivi

In Sum vi sono due tipi di agenti cognitivi:
-BPCTAgentA: sono costruiti sulla base di un complesso meccanismo di determinazione delle loro azioni, che si avvale della metodologia dei cross target. Gli agenti, sulla base della struttura della rete neurale sviluppano coerenza interna tra due azioni, quella di acquisto e quella di vendita e sviluppano congetture sugli effetti liquidità e quantità azioni. Sono fissati anche degli obiettivi esterni di tre tipi differenti: accrescere la liquidità, accrescere la quantità di azioni detenute, accrescere entrambi.
-BPCTAgentB: sono anch'essi strutturati facendo utilizzo di reti neurali che presentano la tecnica dei cross target; sono un'evoluzione degli agenti cognitivi di tipo A, visti al punto sopra. A differenza degli agenti di tipo A, sviluppano congetture oltre che sugli effetti liquidità e quantità di azioni, anche sugli effetti ricchezza dall'agente valutata al prezzo di chiusura e ricchezza dell'agente valutata sulla base del prezzo previsto dall'agente neurale. L'output dal lato delle azioni è sempre uno e determina la decisione di acquisto o di vendita.

L'obiettivo sia dell'agente di tipo A che di tipo B è quello di sviluppare una coerenza interna tra l'azione di vendita e l'azione di acquisto. Tale tipologia di agente (cognitivo), attraverso la metodologia dei cross target, sviluppa con l'apprendimento la capacità di prendere in modo coerente delle decisioni, cioè è in grado di prendere delle decisioni sulle azioni da compiere, per ottenere determinati risultati.

5.2.7 Altri agenti

Con alcune modifiche/integrazioni apportate a Sum sono stati creati nuovi agenti. Le loro caratteristiche saranno spiegate nei prossimi paragrafi insieme alle modifiche che li hanno reso necessari. Tali agenti sono:
-l'EventAgent (che opera in conseguenza di eventi accaduti nel mondo simulato)
-l'ArbitrageurAgent (che sfrutta le opportunità di arbitraggio)
-l'AvatarAgent (che raccoglie gli ordini inviati dagli umani e li invia al sistema)
-il WasteTimeAgent (che serve per la gestione del tempo negli esperimenti con gli umani)


5.3 Gli eventi

Una delle ultime modifiche a Sum ha riguardato l'introduzione nel modello di un generatore di eventi (EventGenerator) e di una nuova categoria di agenti (gli EventAgent). Gli eventi in questione, che avvengono nel mondo simulato, sono fatti e notizie che possono condizionare il mercato di borsa in quanto alcuni agenti reagiranno (cioè acquisteranno o venderanno titoli) in seguito a tali annunci.
L'introduzione degli eventi in Sum è stata necessaria per rendere maggiormente realistico il mercato e per studiare la reazione degli operatori a notizie di eventi legati, in qualche modo, al mondo della borsa. E' noto che l'annuncio di eventi condiziona notevolmente i mercati reali, tuttavia lo studio di tali problematiche utilizzando Sum può fornire interessanti risposte ai seguenti quesiti: quali sono gli effetti che gli eventi e le notizie generano sul sistema borsistico globale? Gli effetti che ne derivano si ripercuotono su tutto il mercato oppure solo su una parte di esso? L'entità degli effetti dipende solo dalle loro caratteristiche endogene o anche da altri elementi esogeni come la razionalità dei soggetti operanti e le informazioni disponibili sul mercato? Esiste un modo per gestire i rischi derivanti dagli eventuali effetti negativi generati dagli eventi?
Per una trattazione approfondita dell'argomento si rimanda a Canavesio (2003); si descrivono qui, invece, le caratteristiche fondamentali di questa importante integrazione del modello di borsa Sum:
Gli agenti sensibili agli eventi determinano il proprio comportamento in base ad alcune regole introdotte nell'eventRuleMaster e le loro azioni riflettono l'andamento degli eventi. Nonostante il comportamento rispecchi una struttura prevalentemente matematica, il modello riproduce abbastanza bene il reale comportamento dei soggetti appartenenti a questa categoria operanti sui mercati.
Il funzionamento degli agenti può essere descritto, brevemente, nel modo seguente: gli agenti interrogano il generatore di eventi per sapere lo stato attuale. Se il generatore di eventi fornisce in risposta un evento di qualsiasi entità diverso da quello nullo, gli agenti operano e procedono alla determinazione del prezzo. Dovranno prendere una decisione sull'azione da intraprendere (acquisto o vendita) e a quale prezzo. Il loro comportamento dipenderà esclusivamente dall'entità dell'evento esistente in quel particolare istante. Si possono distinguere tre casi:

- Evento nullo: Se l'evento è pari a zero, l'agente opera esattamente come un agente random e la sua scelta di acquisto o vendita, con relativo prezzo, è determinata con le stesse modalità degli agenti casuali.

- Evento positivo: Se l'evento è positivo, l'agente opera in acquisto ed il prezzo che è fissato risulta proporzionale all'entità numerica dell'evento. Su questo punto è necessario fornire ulteriori spiegazioni. Così come avviene per le altre tipologie di agenti, anche in questo caso, il prezzo di riferimento per la valutazione del nuovo prezzo, è l'ultimo inserito nel book. Il nuovo prezzo inserito dall'agente sarà calcolato tramite una maggiorazione casuale proporzionale all'entità dell'evento ed alla sensibilità degli agenti applicata sull'ultimo prezzo inserito. Il prezzo immesso da ogni singolo agente, benché casuale, sarà direttamente proporzionale all'entità dell'evento ed alla sensibilità degli agenti. Maggiore sarà la positività dell'evento e maggiore sarà la disponibilità ad aumentare il prezzo.

- Evento negativo: Se l'evento è negativo, l'agente agisce esattamente in modo speculare. Il prezzo adottato come riferimento è sempre l'ultimo inserito nel book, ma il comportamento dell'agente non implica più un acquisto bensì una vendita. Il calcolo del prezzo avviene in maniera del tutto analoga alla precedente, con l'eccezione che il prezzo inserito dall'agente sarà calcolato diminuendo, e non aumentando, proporzionalmente all'evento, l'ultimo prezzo inserito. L'analogia con il contesto reale si fonda sullo stesso ragionamento e perviene alle stesse conclusioni: maggiore sarà la negatività degli eventi e maggiore sarà l'incentivo ad abbassare il prezzo.


5.4 Il "multiBook", l'indice ed il future

Una delle modifiche che si è rivelata necessaria, per arrivare all'attuale versione di Sum, è stata l'introduzione della possibilità di trattare sul mercato più titoli. Questo, precedentemente, non era possibile, in quanto era presente un unico titolo sul mercato e tutti gli agenti indirizzavano le loro azioni su di esso.
L'introduzione di più titoli, oltre che elemento necessario al fine di creare un indice, è stato anche un elemento che ha reso i fenomeni delle bolle speculative e dei crash meno frequenti e meno consistenti; ciò non è comunque servito ad eliminarne la presenza. Il fatto che le bolle ed i crash diminuissero per frequenza e per consistenza era stato previsto, in quanto essendoci più possibilità di scelta di investimento, l'attenzione degli agenti, si sarebbe orientata su tutti i titoli e ciò avrebbe contribuito a determinare una minore pressione della domanda e dell'offerta di titoli.
La struttura del book presente nella precedente versione di Sum non è stata modificata, ma è stata semplicemente duplicata, dando la possibilità di generare più titoli nello stesso mercato, che sono tutti trattati in book aventi le stesse caratteristiche. Quelle tipologie di agenti che richiedono di seguire un Book specifico e di mantenere memoria di tale utilizzo, fanno capo alla classe oneBook, mentre quegli agenti che non necessitano di avere memoria del book su cui operano utilizzeranno la classe aBook.
Per quanto riguarda gli agenti presenti in Sum che non richiedono di seguire un book specifico, essi scelgono casualmente su quale book operare.
Conseguentemente alla creazione del cosiddetto "multiBook", cioè della possibilità di operare su più titoli, è stato creato un indice di mercato ed un future sulla base di quest'ultimo.
E' stato così creato un metodo che calcolasse la variabile indice sui titoli presenti in Sum, denominata IndexValue, la quale opera il calcolo di un valor medio. Il calcolo è semplificato rispetto a quelli che vengono fatti per i futures reali: tale variabile considera i prezzi dei titoli in un dato istante, ne fa la somma e questa la divide per il numero di titoli.
Il future in Sum è, tecnicamente, un titolo identico a tutti gli altri. Si vedrà nel prossimo paragrafo l'agente arbitraggista, il quale, sfruttando le opportunità di arbitraggio tra future e titoli sottostanti, mantiene la parità tra indice e future.
Si è fatta una distinzione in Sum tra i titoli veri e propri ed il future: tutte e due le tipologie di contratti sono trattati sfruttando la stessa classe, il book, ma è stato necessario porre una distinzione per differenziare il book del future dagli altri book, per evitare che il calcolatore dell'indice comprendesse nel calcolo anche il future. Questo problema è stato risolto molto semplicemente assegnando l'ultimo book per le contrattazioni sul future dunque, calcolato l'indice, è possibile costruire il future che abbia come sottostante l'indice stesso e che possa essere trattato liberamente in Sum.
Per ottenere questo si fa uso della classe book; calcolato il numero di book, l'ultimo rappresenta quello del future ed il suo valore e dato dall'incontro della domanda e dell'offerta ed il suo valore teorico è calcolato a parte, secondo una metodologia che sarà ora descritta.


5.5 L'agente arbitraggista

Tutti gli agenti operanti in Sum possono acquistare/vendere il future; ciò comporta che le quotazioni di questo siano libere di oscillare sulla base della domanda e dell'offerta. Infatti questo si verifica in Sum, perché nessun agente ha cognizione di cosa sia un future e quindi opera su esso come se fosse un semplice titolo. I prezzi inseriti dagli agenti nel book del future, sono quindi incoerenti rispetto alla relazione che lega future e suo sottostante.
Soltanto un agente, l'arbitrageurAgent, ha cognizione di ciò e proprio grazie a tale cognizione riesce, operando su entrambi i mercati, a far sì che siano allineati.
L'arbitrageurAgent cerca di operare individuando momentanee discrepanze di allineamento tra quotazione del future e valore teorico di questo; attuando poi opportune operazioni di segno opposto su mercati differenti, in questo caso mercato a pronti e mercato a termine, lucra profitti privi di rischio.
Quando lo "scheduler" interpella l'arbitrageurAgent perché è il suo turno di operare, questo importa la variabile indexValue e la confronta con il prezzo a cui è stato concluso l'ultimo contratto sul book del future. Se non c'è nessuno scostamento, non opera e passa il turno, se invece individua uno scostamento prende in considerazione la possibilità di arbitraggio, vincolata al verificarsi di altre condizioni ottimali. Supposto che vi sia lo scostamento, l'arbitrageurAgent deve prima decidere quale tipologia di operazione di arbitraggio effettuare; allora valuterà che se il future è sottovalutato rispetto all'indexValue dovrà porsi come acquirente di future e venditore di titoli, mentre qualora il future fosse sopravvalutato rispetto al suo valore teorico egli dovrà porsi come acquirente di titoli e venditore di future. Successivamente all'individuazione della tipologia di arbitraggio egli dovrà verificare che altre condizioni sussistano, ed in particolare, dovrà verificare di poter rientrare dei costi dell'operazione e quindi che vi sia adeguata controparte. Tali due valutazioni sono svolte in un solo momento, in quanto l'arbitrageurAgent avendo individuato quale tipologia di arbitraggio eseguire, va a controllare che le sue controparti esistano nel book. Se la controparte esiste l'operazione è inserita e mandata "simultaneamente" in esecuzione, così l'operazione di arbitraggio è conclusa; qualora vi siano più arbitrageurAgent, tale ciclo di calcolo sarà ripetuto per ognuno di essi.
Il controllo del fatto che l'operazione di arbitraggio garantisca un guadagno per l'arbitraggista, garantendogli quindi la copertura dei costi, è fatto secondo due modalità: in una l'arbitraggista controlla che il disallineamento tra future e valore teorico di questo (quindi la variazione tra i due valori) sia strettamente maggiore ad un valore percentuale, nell'altra valuta che il disallineamento sia strettamente maggiore di un valore fisso. L'indicazione sia del valore percentuale, sia del valore fisso possono essere modificate dall'utente stesso, il quale può innanzitutto scegliere la tipologia di costi da assegnare alle operazioni e poi ne può scegliere l'entità, modificando a proprio piacimento il valore da assegnare, in modo da ipotizzare varie condizioni di mercato possibili.
L'arbitrageurAgent ha la possibilità di operare ogni volta dopo l'operazione di un qualsiasi altro agente, compreso l'avatarAgent, questo perché potenzialmente ogni operazione di un agente può in teoria portare fuori allineamento il future con il suo valore teorico; tale impostazione deriva dal fatto che nella realtà l'arbitraggista opera in qualsiasi momento le condizioni lo permettano, infatti non vi è giustificazione concettuale che spinga un arbitraggista a non operare quando se ne presentano le opportunità. Per meglio comprendere la struttura delle chiamate ad operare degli arbitraggisti si veda lo schema sotto, che indica in sequenza temporale come le chiamate dello "scheduler" avvengano:

-Un agente qualsiasi (tranne l'arbitraggista).
-Un arbitraggista.
-Un avatar.
-Un arbitraggista.


5.6 SumWeb

L'ampliamento di Sum che permette di svolgere esperimenti con agenti umani è denominato SumWeb, sigla che sta per SUM Web Economic Behaviour, ed è frutto del lavoro di Alessandro N. Cappellini .
SumWeb comprende, al suo interno, l'intero modello Sum con tutte le modifiche e integrazioni recentemente apportate, ma dispone di una struttura predisposta per essere visualizzata in un browser e permettere agli agenti umani di interagire con il modello.
L'interfaccia per gli operatori umani è stata realizzata utilizzando il linguaggio Php. Sono state create due nuove classi di agenti: gli avatarAgents e i wasteTimeAgents.

5.6.1 L'interfaccia di SumWeb

Creare l'interfaccia del modello era importante per aumentarne il grado di realismo. Per realizzarla è stato fondamentale avere in considerazione il livello di usabilità da parte degli agenti umani. E' stata realizzata utilizzando il linguaggio Php, che è server side, cioè non richiede installazione, da parte dell'utente, di particolari programmi o integrazioni al sistema operativo (come, per esempio, se fosse scritta utilizzando Java o C++).
Utilizzando l'internet è possibile comunicare in tempo reale con gli agenti umani che necessitano di frequenti aggiornamenti del contenuto delle pagine web. Era però necessario scegliere una buona combinazione di strumenti informatici per ottenere buoni risultati: la scelta non ha riguardato solo il linguaggio con cui creare le pagine web. Per l'aggiornamento dei grafici è stato ritenuto migliore ricorrere al caricamento di immagini statiche diverse, in formato GIF, piuttosto che ricorrere a animazioni o altre tecnologie.
La scelta PHP-HTML-GIF si è dimostrata solida, sia in termini di byte trasferiti, sia in termini di velocità di elaborazione sul server. E' noto che la velocità con cui sono visualizzate le pagine dei siti web è importante. Grazie alla combinazione scelta i risultati ottenuti si sono rivelati molto soddisfacenti.
L'unica imposizione fatta agli utenti è quella di avere un monitor con risoluzione minima 1024x768 (che è tuttavia la più diffusa ora), per poter usufruire al meglio dell'interfaccia.
Cliccare qui per andare subito agli screenshots delle pagine che compongono l'interfaccia di SumWeb: l'homepage, la pagina di gioco, le pagine contenenti i datafeed dei titoli, le pagine con i grafici candlestick e anche una pagina per il questionario, una per la classifica, e una per comunicare le decisione della SumWebConsob .
In molte pagine è presente il logo di SumWeb, il quale dà un identità al sito. E' stato inserito in tutte le pagine pubbliche e, dove possibile, anche nelle pagine di gioco.
La homepage si presenta come una splashpage dove insieme al logo dell'interfaccia vi sono due semplici link per chi si incuriosisce all'esperimento (alle FAQ e a un modulo per chiedere informazioni). Da questa pagina l'utente/agente umano deve autenticarsi, inserendo login e password, per accedere alla pagina di gioco che sarà personalizzata per ogni partecipante.
Nella pagina di gioco, oltre al logo, si trovano:
-Il giorno simulato, la fase della giornata (Opening Auction, Continuous Trading, Closing Auction, ossia: asta di apertura, negoziazione continua e asta di chiusura)
-La propria posizione: ricchezza (valore e grafico), liquidità e titoli posseduti
-Annunci di eventi, positivi o negativi, accaduti nel mondo simulato e eventuali conferme di contratti conclusi
-Prezzi dei titoli, i valori dei prezzi di controllo, e valore dell'indice di borsa
-Form per inviare proposte
-Links alle altre pagine (questionario, classifica, SumWebConsob)

E' importante descrivere come è strutturato esattamente il contenuto dei messaggi: nella parte in basso a destra della pagina di gioco compaiono, più o meno frequentemente messaggi di vari colori. Relativamente agli eventi vi sono quattro possibili annunci:
-very positive event (in azzurro)
-positive event (in verde chiaro)
-negative event (in verde scuro)
-very negative event (in rosso)
La gravità dell'evento è espressa dal colore del messaggio e dalla classificazione in questi quattro livelli. Nel messaggio sono indicate anche la data e l'ora, riferite al tempo reale, in cui l'evento si è verificato.
Altri messaggi appaiono a conferma di eventuali contratti conclusi come, per esempio:
Order Executed on Wed May 21 21:02:26 2003 at price -1.4050 on Book 3
Il messaggio, scritto in nero, indica il giorno, l'ora, il titolo e il prezzo a cui il contratto è stato concluso. Il prezzo è indicato negativo (cioè con il segno meno davanti) nel caso in cui si è conclusa una vendita, positivo in caso di acquisto.
Le pagine sono state costruite per un uso intuitivo che non richiedesse particolari sforzi anche agli utilizzatori meno esperti. Nelle prossime pagine è riportato uno screenshot per ogni pagina dell'interfaccia di SumWeb.
Alcuni dubbi hanno riguardato l'utilizzo dei frame. In SumWeb tutte le componenti sono in frame diversi e ognuna gode di un diverso tempo di aggiornamento. L'utente però usa attivamente solo due di questi frame: quello dei link e quello contenente il form per l'invio degli ordini. La pagina di gioco costruita utilizzando i frame non ha creato nessuna difficoltà agli utenti di SumWeb.
Le pagine web, di cui sono disponibili gli screenshot, sono:
homepage; pagina di gioco; datafeed titoli 1, 2 e 3; datafeed future e indice; candlestick titolo 1.
L'indirizzo dell'homepage è http://eco83.econ.unito.it/sumweb

Per una spiegazione del grafico candlestick contenuto nella pagina web di cui si è visto lo screenshot si rimanda all'appendice di questo capitolo, dedicata agli elementi di analisi tecnica presenti in SumWeb.

 

5.6.2 Gli avatarAgents

Gli avatarAgents, come si è già accennato in precedenza, sono gli agenti che permettono agli umani di "entrare" nel modello, e quindi di fare gli esperimenti utilizzando gli agenti umani.
Il termine "Avatar" (o "Avatara"), dal sanscrito, letteralmente significa discende da molto lontano ed indica una incarnazione divina in un essere umano di un Essere altamente evoluto che non ha più la necessità di rinascere in un corpo mortale.
In ambito informatico, la parola è diventata di uso comune per indicare la possibilità data ad un oggetto di rappresentare una sorta di alter ego di un altro.
In SumWeb è una classe di agenti, che è impersonata da umani, il che significa che un umano può interagire con il modello Sum, attraverso tali agenti. Le operazioni sono decise liberamente dall'umano, ma affinché queste possano essere inserite nel modello, è necessario che l'umano abbia "personificazione" in Sum in un agente avatar, che viene gestito dal modello come un qualsiasi altro agente e le cui caratteristiche operative non hanno precisa definizione nel codice informatico, perché sono relative a ciò che l'umano in questione desidera fare.

5.6.3 I wasteTimeAgents

La simulazione con agenti artificiali avviene sfruttando le massime potenzialità del processore del computer, dunque, in tempo reale, si conclude il più presto possibile. Quando però devono intervenire anche gli agenti umani è necessario che il tempo simulato sia gestito in modo diverso: è necessario che la simulazione avanzi "lentamente". Inoltre è importante anche che gli sperimentatori possano decidere quanto deve durare, in tempo reale, una giornata simulata.
Impostare questi valori in SumWeb, di fondamentale importanza per gli umani, non è facile perché Swarm non permette di gestire il tempo assegnando semplicemente un valore ad una variabile.
Per ovviare a questo inconveniente si è deciso di ricorrere ad un "trucco informatico": agenti artificiali che non operano, ma semplicemente aspettano. Sono stati chiamati waste time agents, in italiano agenti perditempo.
Per impostare la durata di una giornata è quindi necessario scegliere il numero di tali agenti ed impostarne il ritardo, ad esempio: 100 agenti per un ritardo di 3 secondi faranno sì che la giornata simulata duri 300 secondi più il tempo necessario al computer per elaborare la giornata di borsa (generalmente pochi secondi).
A tutto ciò occorre sommare il tempo necessario per lo svolgimento delle aste, l'ultima integrazione apportata al modello: poiché il meccanismo d'asta è costituito semplicemente da un unico istante in cui gli agenti possono inviare proposte al sistema, è sufficiente impostare la durata di questo istante (la variabile è chiamata delayInAuction).


5.7 Il Model e l'Observer

ModelSwarm e ObserverSwarm sono due file fondamentali per ogni modello di simulazione creato utilizzando Swarm. L'Observer è l'osservatore del modello e consente la creazione di vari strumenti il cui scopo è osservare, registrare e analizzare i dati prodotti dal comportamento degli oggetti.
Il ModelSwarm descrive il modello vero e proprio e ha una sua probe, come anche l'Observer, per gestire le variabili. Nel Model vi sono le direttive per creare tutti gli agenti, e gli strumenti per coordinarne l'attività.
Il file ModelSwarm.m è composto da circa 1500 righe di codice, ma sarà qui descritto soltanto il contenuto delle prime 100:

obj-> bookNumber = 3;
obj-> continuosMarket = 1;
obj-> humanPenalty = 1;
obj-> arbitrageurAgentNumber = 1;
obj-> arbitrageurOperatingInterval = 0.1;
obj-> arbitrageurOperatingIntervalFixed = 1;
obj-> arbitrageurGain = 1;
obj-> eventAgentNumber = 10;
obj-> randomAgentNumber = 200;
obj-> marketImitatingAgentNumber = 0;
obj-> locallyImitatingAgentNumber = 0;
obj-> stopLossAgentNumber = 0;
obj-> avatarAgentNumber = 100;
obj-> wasteTimeAgentNumber = 100;
obj-> aNNForecastAppAgentNumber = 0;
obj-> bPCTAgentAEO_EP_0_Number = 0;
obj-> bPCTAgentAEO_EP_1_Number = 0;
obj-> bPCTAgentAEO_EP_2_Number = 0;
obj-> bPCTAgentAEO_EP_3_Number = 0;
obj-> bPCTAgentBEO_EP_0_Number = 0;
obj-> bPCTAgentBEO_EP_1_Number = 0;
obj-> bPCTAgentBEO_EP_2_Number = 0;
obj-> bPCTAgentBEO_EP_3_Number = 0;

obj->bPCTAgentANumber = obj->bPCTAgentAEO_EP_0_Number + obj->bPCTAgentAEO_EP_1_Number
+ obj->bPCTAgentAEO_EP_2_Number + obj->bPCTAgentAEO_EP_3_Number;
obj->bPCTAgentBNumber = obj->bPCTAgentBEO_EP_0_Number + obj->bPCTAgentBEO_EP_1_Number
+ obj->bPCTAgentBEO_EP_2_Number + obj->bPCTAgentBEO_EP_3_Number;

obj-> agentNumber = obj-> randomAgentNumber + obj-> marketImitatingAgentNumber +
obj-> locallyImitatingAgentNumber + obj->stopLossAgentNumber +
obj-> aNNForecastAppAgentNumber + obj->bPCTAgentANumber +
obj -> bPCTAgentBNumber + obj -> avatarAgentNumber +
obj-> eventAgentNumber + obj-> wasteTimeAgentNumber +
obj-> arbitrageurAgentNumber ;

obj-> dayNumber = 0;
obj-> asymmetricBuySellProb = 0.9;
obj-> minCorrectingCoeff = 0.9;
obj-> maxCorrectingCoeff = 1.1;
obj-> asymmetricRange = 0.0;
obj-> agentProbToActBeforeOpening = 0.25;
obj-> floorP = 0.3;
obj-> agentProbToActBelowFloorP = 0.5;
obj-> eventType = 1;
obj-> eventChangeProbability = 0.003;
obj-> eventSensibility = 0.20;
obj-> eventAgentChoiceToActBeforeOpening = 1;
obj-> maxOrderQuantity = 1;

// agentForge step 6
// used by imitating agents
obj-> meanPriceHistoryLength = 200;
obj-> priceVolumesHistoryLength = 200;
obj-> quantityVolumesHistoryLength = 200;
obj-> localHistoryLength = 20;
// used by stop loss agent
obj-> maxLossRate = 0.10;
obj-> stopLossInterval = 2;
obj-> checkingIfShortOrLong = 1;
// used by forecasting agent
obj-> dataWindowLength = 30;
obj-> nAheadForecasting = 10;
// used by forecasting agent
obj-> forecastingTrainingSetLength = 100;
obj->
epochNumberInEachForecastingTrainingCycle = 100;
obj-> learningProcessEveryNDays = 10;
obj-> cleanForecastingANNEveryMgtemNDays = 50;
// used by agents applying ANN forecast
obj-> aNNInactivityRange = 0.02;
obj-> aNNForecastAppAgentActDailyProb = 0.1;
// used by agent of BPCT type
obj->epochNumberInEachBPCTTrainingCycle = 100;
obj->agentAEO_EPDelta = 0.1;
obj->agentBEO_EPDelta = 10;

obj-> printing = 0;

obj-> delay = 1;
obj-> delayInAuction = 30;


- BookNumber: permette di inserire il numero di book, e quindi di titoli, che si desidera inserire nelle contrattazioni del mercato.

- ContinuousMarket: impostando questa variabile uguale a 1 si ottiene che a ogni riavvio del modello questo usi come dati di partenza gli ultimi salvati nel run precedente.

- HumanPenalty:permette di attivare le modalità di assegnazione dei punti per gli agenti avatar. Assegnando il valore 1 si attiva la modalità per l'esperimento -in aula-(penalità calcolate sulla base della giornata simulata), assegnando il valore 2 si attiva la modalità per l'esperimento -on line-( penalità calcolate sulla base della giornata reale), assegnando 0 la funzione è disattivata.

- ArbitrageurAgentNumber: permette di inserire il numero di agenti arbitraggisti.

- ArbitrageurOperatingInterval: permette di decidere l'ammontare, in termini percentuali, del livello dei costi delle operazioni da arbitraggio; oltre questo scostamento minimo tra valore del future e valore teorico del future, l'arbitraggista riterrà proficuo svolgere le sue operazioni.

- ArbitrageurOperatingIntervalFixed: permette di attivare, inserendo il valore 1, la modalità a costi fissi per le operazioni sul future, eseguite dagli operatori arbitraggisti; inserendo il valore 0 la modalità dei costi è quella variabile e segue i parametri sopra esposti.

- ArbitrageurGain: è un parametro switch che, se attivato (inserendo il valore 1), permette di far sì che l'arbitraggista operi considerando di guadagnare sempre da ogni operazione. Disattivando tale funzione l'arbitraggista opererà qualsiasi volta individui uno scostamento del future dal suo valore teorico, indipendentemente dal fatto che ottenga un profitto.

- RandomAgentNumber: permette di scegliere il numero di agenti random da far operare nella simulazione.

- AvatarAgentNumber: permette di inserire il numero di agenti avatar, corrispondenti ad agenti umani, che si vuole far operare in Sum.

- MarketImitatingAgentNumber: permette di scegliere il numero di agenti imitatori di mercato da far operare in Sum.

- LocallyImitatingAgentNumber: permette di scegliere il numero di agenti imitatori locali di mercato da far operare in Sum.

- StopLossAgentNumber: permette di scegliere il numero di agenti che utilizzano lo stop loss da far operare in Sum.

- ANNForecastAppAgentNumber: permette di scegliere il numero di agenti che operano sulla base delle previsioni fornite dal aNNForecastAgent, da far operare in Sum.

- BPCTAgentAEO_EP_0_Number: permette di inserire il numero di BPCTAgentA che non utilizzano obiettivi esterni (EO).

- BPCTAgentAEO_EP_1_Number: permette di inserire il numero di BPCTAgentA che hanno come obiettivo esterno l'accrescimento della liquidità.

- BPCTAgentAEO_EP_2_Number: permette di inserire il numero di BPCTAgentA che hanno come obiettivo esterno l'accrescimento del numero di azioni in portafoglio.

- BPCTAgentAEO_EP_3_Number: permette di inserire il numero di BPCTAgentA che hanno come obiettivo esterno sia l'accrescimento della liquidità, sia l'accrescimento del numero di azioni in portafoglio.

- BPCTAgentBEO_EP_0_Number: permette di inserire il numero di BPCTAgentB che non utilizzano obiettivi esterni (EO).

- BPCTAgentBEO_EP_1_Number: permette di inserire il numero di BPCTAgentB che hanno come obiettivo esterno quello di accrescere la ricchezza valutata al prezzo di chiusura.

- BPCTAgentBEO_EP_2_Number: permette di inserire il numero di BPCTAgentB che hanno come obiettivo esterno quello di accrescere la ricchezza valutata al prezzo previsto.

- BPCTAgentBEO_EP_3_Number: permette di inserire il numero di BPCTAgentB che hanno come obiettivo esterno sia l'accrescimento della ricchezza valutata sia al prezzo di chiusura e sia al prezzo previsto.

- AgentNumber: numero totale degli agenti operanti nel mercato.

- AsymmetricBuySellProb: con tale valore si indica la probabilità di operare, per gli agenti che utilizzano strategie imitative, in accordo con le strategie stesse.

- MinCorrectingCoeff: indica il valore minimo del coefficiente correttivo utilizzato per determinare il prezzo da inserire negli ordini di compravendita.

- MaxCorrectingCoeff: indica il valore massimo del coefficiente correttivo utilizzato per determinare il prezzo da inserire negli ordini di compravendita.

- AsymmetricRange: correzione aggiuntiva a quella descritta sopra che permette di far sì che l'agente adotti un comportamento asimmetrico.

- AgentProbToActBeforeOpening: permette di determinare la probabilità dell'agente di agire prima dell'apertura.

- FloorP: il valore floor del prezzo.

- AgentProbToActBelowFloorP: indica il valore della probabilità di agire quando il prezzo raggiunge il valore floor.

- MaxOrderQuantity: indica il valore massimo del quantitativo che ogni agente può inserire negli ordini di compravendita (Gli agenti in SUM, possono contrattare una sola azione alla volta; quando si varia il parametro -maxOrderQuantity-, si indica che un agente possa trattare un quantitativo di azioni superiore ad 1, ma tecnicamente, avviene che lo stesso agente opererà per n volte consecutive invece che immettere un quantitativo pari ad n azioni in un unico ordine.).

- MeanPriceHistoryLenght: indica la lunghezza del vettore che contiene la serie storica di prezzi medi dei titoli, utilizzata dagli agenti imitativi del mercato.

- PriceVolumeHistoryLenght: indica la lunghezza del vettore che contiene la serie storica dei volumi relativi a determinati prezzi, utilizzata dagli agenti imitativi del mercato.

- QuantityVolumesHistorylenght: indica la lunghezza del vettore che contiene la serie storica dei volumi dei titoli, utilizzata dagli agenti imitativi di mercato.

- LocalHistoryLenght: lunghezza del vettore che registra le azioni degli altri agenti, tale valore è utilizzato dagli agenti che imitano localmente.

- MaxLostRate: valore massimo di perdita che l'agente stop loss è disposto a sopportare come tasso di perdita; oltre tale valore attiverà la strategia dello stop loss.

- StopLossInterval: indica la lunghezza dell'arco di tempo preso in considerazione dall'agente stop loss.

- CheckingIfShortOrLong: è un parametro switch, se attivato (inserendo il valore 1) fa sì che l'agente stop loss operi avendo memoria del passato; se disattivato (inserendo il valore 0) fa sì che l'agente stop loss operi senza memoria delle sue posizione passate.

- DataWindowLenght: il numero di dati utilizzati come input dalle rete neurale artificiale; i dati sono espressi come indici calcolati rapportando il prezzo medio del giorno t con il prezzo medio del giorno (t - nAheadForecasting).

- NAheadForecast: numero di giorni i cui valori vengono previsti dalla rete neurale; l'output generato dalla rete è sotto forma di rapporto tra il prezzo al tempo nAheadForecast e l'ultimo prezzo medio disponibile.

- ForecastTrainingSetLenght: numero di dati (input ed output attesi) utilizzati per fare apprendimento sulla rete neurale artificiale; tale set di valori viene aggiornato con il passare del tempo.

- EpochNumberInEachForecastTrainingCycle: indica il numero di epoche che vengono utilizzate nella fase di apprendimento della rete neurale artificiale; per ogni epoca si considera un set di valori pari al valore del parametro sopra indicato.

- LearningProcessEveryNDays: indica il numero di giorni che intercorrono tra una fase di apprendimento e l'altra, quindi tale valore indica ogni quanto la fase di apprendimento, definita sulla base delle variabili indicate sopra, deve essere ripetuta.

- CleanForecastANNEveryMgtemNDays: indica ogni quanti giorni la fase di apprendimento debba ricominciare da capo, assegnando nuovi pesi alle matrici delle funzioni utilizzate dalla rete neurale; in tale modo si ha la possibilità di tener conto nella fase di apprendimento dei cambiamenti della struttura dei prezzi.

- ANNInactivityRange: indica il range di variazione del prezzo all'interno del quale l'agente non opera; se la previsione è compresa tra [1 - aNNInactivityRange] e [1 + aNNInactivityRange], l'agente non opera.

- ANNForecastAppAgentActDailyProb: indica la probabilità di agire sul mercato.

- EpochNumberInEachBPCTTrainingCycle: indica il numero di epoche di apprendimento della rete neurale artificiale; l'apprendimento è applicato ogni giorno sugli ultimi 10 giorni, insieme che viene aggiornato di giorno in giorno.

- AgentAEO_EPDelta: indica il valore del parametro che viene utilizzato per misurare l'effetto degli obiettivi esterni della rete neurale artificiale degli agenti BPCT di tipo A.

- AgentBEO_EPDelta: indica il valore del parametro che viene utilizzato per misurare l'effetto degli obiettivi esterni della rete neurale artificiale degli agenti BPCT di tipo B.

- Printing: inserendo vari valori è possibile attivare la stampa su monitor di una vasta serie di informazioni relative ad alcuni elementi della simulazione di borsa. Se il valore inserito è 0 la stampa non è attivata.

- Delay: indica il ritardo in termini di secondi che si può attivare per le operazioni sul mercato degli randomAgent; tale ritardo serve per permettere agli avatarAgent di avere il tempo di inserire gli ordini senza che la simulazione sia troppo veloce.

- DelayInAuction: indica il ritardo in termini di secondi per le fasi di asta. E' uguale per l'asta di apertura e per l'asta di chiusura.

 

Il file ObserverSwarm.m è composto da oltre 700 righe di codice. Si riportano qui, e si spiegano, le prime 40:

obj->displayFrequency = 411;

obj->stopAtDayNumber = 8; // to stop the program (if != 0)
obj->displayPreviousDayMean = 0;
obj->showPriceGraph = 0;
obj->savePriceData = 1;
obj->showBookGraph = 0;
obj->saveBookData = 1;
obj->showVolumesGraph = 0;
obj->saveVolumesData = 1;
obj->showAgentWealthGraph = 0;
obj->saveAgentWealthData = 1;
obj->showForecastingAgentGraph = 0;
obj->saveForecastingData = 1;
obj->showEventsGraph = 0;
obj->saveEventsData = 1;

//agentForge step 11b
obj->numberOfTheBPCTAgentA_ToBeObservedDirectly = 1;
obj->saveBPCTAgentAData = 1;
obj->numberOfTheBPCTAgentB_ToBeObservedDirectly = 1;
obj->saveBPCTAgentBData = 1;


- DisplayFrequency: indica la frequenza con la quale vengono aggiornate le finestre che riportano le varie tipologie di grafici possibili; tale frequenza può essere inserita in valore pari ad uno oppure in valore pari ad un multiplo del numero degli agenti. Seguendo quest'ultima possibilità, si ha il risultato di ottenere sul grafico il valore relativo all'ultimo prezzo di ogni giorno della simulazione, per tale motivo è consigliabile tale scelta.

- StopAtEpochNumber: indica il numero di giorni che la simulazione produrrà, al raggiungimento del quale si fermerà.

Le variabili che seguono hanno la valenza di interruttori: inserendo il valore 1 si attiva la funzione, mentre inserendo il valore 0 si disattiva la funzione. Tali variabili switch, sono:

- DisplayPreviousDayMean: permette di visualizzare il grafico del prezzo medio relativo all'andamento di ogni titolo.

- SavePriceData: permette di salvare i dati relativi alla simulazione in un apposito file.

- ShowBookGraph: permette di visualizzare l'andamento del volume di contrattazione su ogni titolo.

- SaveBookData: permette di salvare i dati relativi al bookGraph, in un apposito file.

- ShowVolumesGraph: permette di visualizzare l'andamento dei volumi di contrattazione.

- SaveVolumesData: permette di salvare i dati relativi al volumesGraph, in un apposito file.

- ShowAgentWealthgraph: permette di visualizzare il grafico della ricchezza degli agenti.

- SaveAgentWealthGraph: permette di visualizzare il grafico della ricchezza degli agenti.

- ShowForecastAgentGraph: permette di visualizzare il grafico con le previsioni dell'agente che fa uso delle previsioni ottenute mediante le reti neurali artificiali.

- SaveForecastData: permette di salvare i dati relativi alle previsioni dell'agente che fa uso delle previsioni ottenute mediante le reti neurali artificiali.

- NumberOfTheBPCTAgentA_ToBeObserverDirectly: permette di decidere il numero di BPCTAgentA di cui si vuole visualizzare il grafico con, liquidità, quantità di azioni e ricchezza.

- SaveTheBPCTAgentAData: permette di salvare i dati relativi al grafico dei BPCTAgentA, in un apposito file.

- NumberOfTheBPCTAgentA_ToBeObserverDirectly: permette di decidere il numero di BPCTAgentA di cui si vuole visualizzare il grafico con, liquidità, quantità di azioni e ricchezza.

- SaveTheBPCTAgentBData: permette di salvare i dati relativi al grafico dei BPCTAgentB, in un apposito file.




Appendice

L'analisi tecnica in SumWeb


I titoli scambiati nel mercato simulato che caratterizza SumWeb non corrispondono a quote di partecipazione al capitale di imprese. SumWeb è un modello di simulazione che ha per scopo lo studio dei meccanismi e delle dinamiche del mercato. Dunque all'interno del modello è simulato un mercato borsistico, ma non ciò che nella realtà ha dato luogo alla nascita dei mercati di borsa: le imprese. Non essendoci gli emittenti, ma essendoci solamente i titoli, ogni tentativo di analisi degli andamenti dei prezzi può essere solamente generato dallo studio degli andamenti passati.
Dopo aver costruito l'interfaccia per l'utilizzo, da parte degli agenti umani, del modello di borsa, si è deciso di offrire ai partecipanti alcuni cenni di analisi dei titoli oggetto di contrattazione. Il metodo di analisi più opportuno in questo caso, non potendo utilizzare i modelli dell'analisi fondamentale, è il metodo di analisi denominato analisi tecnica. E' stato scelto per la notevole diffusione di cui gode e per la possibilità di creare automaticamente i grafici che l'investitore medio è abituato a vedere nei siti internet per trading on line. E' stato scelto soprattutto per creare un ambiente "consueto" rispetto alle aspettative dei partecipanti, anche se non si attribuisce valore intrinseco alla tecnica in questione, se non nel riassumere i comportamenti degli operatori, in particolare di quelli che seguono tale analisi.
L'analisi tecnica, come si è detto, consiste nello studio della storia dei titoli, in particolare dei prezzi e dei volumi passati. Attraverso un certo numero di indicatori, il metodo dell'analisi tecnica si prefigge di individuare un sistema che possa permettere l'ottimizzazione dei guadagni e, nel caso si fosse effettuato un errato ingresso sul mercato, una limitazione delle perdite. Tutte le informazioni riferite ad un singolo titolo sono incorporate nei prezzi e nei volumi degli scambi e nelle relative serie storiche, che rilevano come questi ultimi siano variati in un determinato intervallo temporale. L'analisi tecnica, mediante l'ausilio di strumenti matematico-statistici e grafici, cerca di individuare dei cicli ricorsivi e tendenze di mercato. Alla base di tutto vi è l'esistenza di pressioni speculative nel mercato, che sono osservate nell'evoluzione dei prezzi e dei volumi di un determinato titolo. Si ipotizza che il prezzo espresso dal mercato sconti tutte le informazioni conosciute e anche le aspettative sul singolo titolo. Inoltre si tiene in considerazione il fatto che il comportamento del mercato è influenzato dai partecipanti allo stesso, caratterizzati dalle medesime propensioni psicologiche, prospettando quindi degli andamenti ciclici e tendenziali.
E' stato deciso di fornire agli agenti umani di SumWeb tre grafici: un candlestick con media mobile, il grafico dei volumi e l'RSI.
Il "CandlestickCharting", o "Japanese Candlestick", è una modalità di rappresentazione grafica nata in Giappone verso la prima metà del diciottesimo secolo, da Sokyu Homma, e solo da poco si è diffusa anche nei mercati occidentali.
Il Candlestick era usato per l'analisi dell'andamento del mercato del riso, prima a pronti poi a termine (future), nel mercato di Osaka (Dojima Rice Exchange). Il Japanese Candlestick è una rappresentazione grafica che è usata specialmente per analisi grafiche finalizzate a realizzare trading di breve periodo.
Per poter costruire la candlestick di un'azione sono necessari quattro valori: prezzo di apertura, massimo, minimo e prezzo di chiusura. La candlestick presenta un corpo centrale (real body) e due tratti di linea verticali: uno posto sopra il real body e chiamato upper shadow e un secondo posto al di sotto e chiamato lower shadow. Le quotazioni di apertura e di chiusura della sessione delimitano l'ampiezza del corpo della candlestick. Il colore bianco indica che il titolo ha chiuso in rialzo (il prezzo di chiusura è maggiore del prezzo di apertura), il colore nero indica invece che il titolo ha chiuso in ribasso (il prezzo di chiusura è inferiore al prezzo di apertura). Infine le estremità delle candlestick (dette ombre) rappresentano il prezzo massimo e minimo che l'azione ha raggiunto. Il rettangolo che forma il corpo, dunque, rappresenta la differenza di prezzo tra l'apertura e la chiusura. Nell'osservare il grafico con le candlestick l'impatto visivo principale è dato dal colore. Semplificando, candlestick nera indicherà mercato al ribasso (prezzo di chiusura inferiore all'apertura), candlestick bianca indicherà mercato al rialzo (prezzo di chiusura superiore all'apertura).
L'indice RSI (Relative Strength Index, Indice di Forza Relativa), elaborato da Wilder nel 1978, è estremamente popolare, soprattutto tra i traders sul mercato dei futures.
L'RSI, che può assumere valori compresi fra 0 e 100, indica la forza del titolo: rispetto ai valori normali (da 30 a 70) si creano fasi di ipercomprato (da 70 a 100) ed ipervenduto (da 0 a 30). Con questo indicatore si cerca di anticipare leggermente la tendenza futura. L'indicatore RSI confermerà la tendenza in atto se concorde con il trend in esame mentre diventerà un segnale di inversione se contrario rispetto al trend. In sintesi indica il rapporto tra le medie delle chiusure al rialzo e delle chiusure al ribasso.
E' calcolato con la seguente formula:

RSI = 100-100/(1+RS)

dove RS è dato dal rapporto tra MI e MD, rispettivamente la media degli incrementi su n giorni (MI) e la media dei decrementi su n giorni (MD).
Assume valore uguale a zero quando la media degli incrementi, nel periodo considerato, è eguale a zero; assume valore uguale a 100 quando la media dei decrementi è uguale a zero. Quindi il suo valore può variare soltanto all'interno dell'intervallo 0-100: per tale motivo si dice che l'RSI è un oscillatore.
La scelta del numero dei giorni può variare: spesso sono utilizzati 14 giorni, che era il periodo scelto da Wilder. Al crescere del numero dei giorni diminuisce la reattività dell'oscillatore (diminuiscono anche, ovviamente, i falsi segnali). Come per tutti gli indicatori, la scelta del dominio dipende dal tipo di operatività che si intende porre in essere: tanto più l'operatività è "veloce" e di breve periodo, tanto più breve sarà il dominio utilizzato.
L'utilizzo dell'RSI è uguale a quello degli altri indicatori di momentum. Fornisce un segnale di vendita quando è nella zona di ipercomprato (sopra 70) e ne fuoriesce mentre i prezzi stanno ancora salendo (divergenza ribassista) Fornisce invece un segnale di acquisto quando è nella zona di ipervenduto (sotto 30) e ne fuoriesce mentre i prezzi stanno ancora scendendo (divergenza rialzista).
Ovviamente, l'RSI può essere utilizzato anche per il trading infra-giornaliero: in tal caso, il dominio non sarà calcolato sui giorni ma sulle ore. Se configurato su un breve orizzonte temporale non è esente da falsi segnali, le variazioni giornaliere sono eliminate aumentando l'intervallo di tempo, le indicazioni migliori si ottengono quando raggiunge i valori estremi di oscillazione (ipervenduto fra 0 e 30 / ipercomprato fra 70 e 100). Un segnale di acquisto si può ottenere con la perforazione di tali valori in salita, stesso ragionamento per il titolo in ipercomprato, segnale che generalmente anticipa la discesa).
La media mobile costituisce un'operazione di media in grado di assorbire rapidamente variazioni repentine e violente del valore delle azioni.
Il superamento della media mobile da parte dell'attuale livello dei prezzi è generalmente indicato come un segnale di acquisto, o viceversa un segnale di vendita. Spesso per questi segnali sono usate medie mobili con un periodo più lungo (21 o 40 giorni).
La media mobile costituisce un'operazione di media in grado di assorbire rapidamente variazioni repentine e violente del valore delle azioni. Se ci si trova nella situazione, in cui il valore di chiusura dell'azione ha superato il valore medio su 40 giorni, è il momento buono per comprare. In caso contrario ci si trova nel momento migliore per vendere. Se non ci troviamo in nessuna di queste due situazioni, è meglio tenere l'azione e aspettare.
Nel caso di SumWeb è stato deciso di utilizzare una media mobile a 5 giorni, che richiama la durata della settimana di borsa.

Il volume indica il numero dei contratti conclusi durante il periodo in esame, in un mercato nel suo complesso o per una singola azione. Nel caso di SumWeb: il periodo in esame è ogni singola giornata di borsa simulata e si considerano i volumi di ogni singolo titolo, non del mercato. L'entità di azioni trattate può essere calcolata sia in termini di valore sia di numero delle stesse. Nello studio del movimento di un singolo titolo, di solito,si fa riferimento solo alla quantità, mentre, per costruire un indice generale del mercato, si utilizza il valore degli scambi. In SumWeb si calcolano i volumi solamente in termini di numero di contrattazioni.
L'analisi dei volumi è lo studio della dimensione degli scambi, relativi ad un determinato strumento, in relazione con il movimento e la tendenza dei prezzi. I volumi possono essere considerati la pressione e la forza dei movimenti dei prezzi ed indicano la forza relativa fra i venditori ed i compratori. Se il prezzo effettua un movimento di rialzo con elevati volumi di scambio significa, infatti, che con ogni probabilità la forza degli acquirenti è stata molto più elevata di quella dei venditori e viceversa. I volumi, nella teoria classica dell'analisi tecnica (teoria di Dow), assumono un valore secondario rispetto ai prezzi, tuttavia svolgono un ruolo fondamentale di conferma.
Analizzare l'andamento grafico dei prezzi in relazione all'andamento dei volumi aiuta a capire la rilevanza dei movimenti di quel mercato. Secondo la teoria classica i volumi devono confermare il trend e quindi, per esempio, se il trend è al rialzo gli scambi devono crescere nei movimenti di salita e crescere meno nei movimenti correttivi o laterali. Il principio è specularmente valido nel caso di trend al ribasso, anche se la spinta dei volumi è un elemento critico più per i trend rialzisti che non per i movimenti discendenti del mercato. Una crescita nei volumi di scambio all'interno di una fase laterale successiva ad un rialzo può far temere l'esaurimento del trend rialzista in atto. Viceversa se all'interno di un trend discendente i ribassi si arrestano lasciando spazio ad un movimento laterale con volumi di scambio crescenti, è possibile che ci si trovi di fronte ad una fase di accumulazione che potrebbe preludere a nuovi movimenti di rialzo.
I volumi non sono considerati in valore assoluto; se ne considera l'andamento tendenziale, quando si parla di volumi crescenti non ci si riferisce ad un particolare livello di volumi ma ad una crescita rispetto all'andamento passato o meglio ancora rispetto al valore medio di lungo, medio o breve periodo, a seconda dell'orizzonte di analisi.

I grafici relativi ai metodi di analisi sopra descritti si generano automaticamente utilizzando SumWeb. Il file che elabora i dati necessari è candlestick.php. E' prodotta un'unica immagine, in formato GIF, che contiene il grafico candlestick con media mobile a 5 giorni, il grafico dell'RSI e il grafico dei volumi. L'immagine è contenuta in una pagina web e quando la simulazione sta girando nel computer si aggiorna, cioè se ne genera una nuova aggiornata, ogni 30 secondi (di default).
Per un'esempio della pagina contenente l'immagine GIF cliccare qui.


Capitolo 4
Indice
Capitolo 6