Database
 sql >> Database >  >> RDS >> Database

Un modello di dati per il trading di azioni, fondi e criptovalute

Il trading di criptovalute, l'acquisto di azioni e simili è estremamente popolare in questi giorni:è percepito come un facile profitto. I prezzi sono attualmente in aumento, ma non possiamo sapere quando cambierà. D'altra parte, sappiamo che a un certo punto lo farà. Ma non siamo qui per fare previsioni finanziarie. Parleremo invece di un modello di dati che può essere utilizzato per supportare il commercio di criptovalute e strumenti finanziari come azioni o azioni di fondi.

Cosa devi sapere sul trading di valute e azioni

I miglioramenti tecnologici degli ultimi decenni hanno avuto un impatto significativo sul trading. Ora ci sono molte piattaforme di trading online che puoi utilizzare. La maggior parte del trading di oggi avviene virtualmente:puoi vedere le azioni di carta nei musei, ma è improbabile che le azioni che acquisti in formato cartaceo. E non è necessario fare le valigie e andare a Wall Street o in qualsiasi altra borsa valori per fare uno scambio. Dal comfort del tuo computer o dispositivo mobile, puoi acquistare o vendere derivati ​​finanziari (come obbligazioni, azioni o materie prime).

La maggior parte delle operazioni (vendita di derivati ​​finanziari) segue le stesse regole. Ci sono venditori e acquirenti. Se sono d'accordo su un prezzo, lo scambio avviene. Dopo lo scambio, il prezzo di quel derivato finanziario verrà ricalcolato e il processo continuerà con i nuovi trader. Azioni e altri derivati ​​funzionano allo stesso modo.

Cos'è la criptovaluta? Probabilmente hai sentito parlare di Bitcoin e di altre criptovalute. Ma cosa sono? Le criptovalute sono come valute virtuali, ma non sono legate alle valute del mondo reale (come euro o dollari). Invece, gli utenti possono scambiare criptovalute tra di loro come token. Possono quindi negoziare una vendita che trasforma i loro gettoni in denaro reale. Queste vendite funzionano esattamente come le operazioni su azioni e azioni descritte sopra.

Questo argomento è complesso e potremmo avere molti dettagli nel nostro modello (ad es. registrazioni di documenti e transazioni). Lo terrò semplice; Non implementerò alcun tipo di trading automatico o formule per generare nuovi prezzi dopo un evento commerciale.

Quindi, diamo un'occhiata a questo semplice modello di trading.

Il modello dei dati




Il modello di dati si compone di tre aree tematiche:

  1. Currencies
  2. Items
  3. Traders

Presenteremo ogni area tematica nell'ordine in cui è elencata.

Valute

Le Currencies l'argomento è semplice. Contiene quattro tabelle che memorizzano ogni valuta che utilizziamo e i relativi tassi di cambio. Le valute sono importanti perché:

  • Utilizzeremo una valuta, chiamata valuta di base , per il commercio. Una piattaforma di trading di azioni online probabilmente utilizzerà il dollaro USA (USD) come valuta di base, indipendentemente dalle regioni effettive dei trader. Tutte le transazioni verranno convertite nella valuta di base.
  • Possiamo anche avere valuta non di base o locale per tutti i paesi in cui è disponibile la nostra piattaforma di trading. Ciò ci consentirebbe di visualizzare i prezzi nella valuta locale ma continuare a eseguire operazioni nella valuta di base.

Le restanti due tabelle riguardano valute e paesi.

La tabella più importante in questa area tematica è la currency tavolo. Qui è dove conserveremo tutte le valute che abbiamo mai utilizzato per il trading, comprese le criptovalute. L'inclusione di una valuta in questa tabella dipende dal fatto che tale valuta verrà utilizzata per pagare gli articoli scambiati. Per ogni valuta, memorizzeremo:

  • code – Un codice utilizzato per denotare UNICAMENTE quella valuta. Per le valute nazionali, questo sarà il codice ISO 4217 (ad es. USD per dollaro statunitense) o un altro codice ufficiale. Potremmo anche usare ISO 4217 per le criptovalute; XBT è il codice ISO di Bitcoin. Tuttavia, Bitcoin utilizza anche il codice BTC in modo informale.
  • name – Il nome UNICO di quella valuta (ad es. Dollaro degli Stati Uniti).
  • is_active – Se la valuta è attualmente attiva nel nostro sistema.
  • is_base – Se questa valuta è la valuta di base del nostro sistema. Di solito, avremo solo una valuta di base alla volta. È possibile che potremmo averne più di uno, ad esempio utilizzando euro per gli stati dell'UE e dollari USA per altre aree. In tal caso, abbiamo la possibilità di assegnare una valuta di base a ciascun paese con questo attributo.

La tabella successiva memorizza i tassi attuali e storici tra le coppie di valute. Nel currency_rate tabella, memorizzeremo il currency_id vogliamo confrontare con un base_currency_id così come la rate quando questa coppia è stata archiviata (ts ). Poiché memorizzeremo le tariffe come erano in vari momenti, questa tabella memorizzerà sia i dati storici che quelli attuali.

Un elenco di tutti i paesi rilevanti è memorizzato nel country dizionario. Oltre alla chiave primaria (id ), contiene un attributo che contiene un name di un paese UNICO .

L'ultima tabella in questa area tematica è currency_used tavolo. Nella maggior parte dei casi, un paese utilizzerà sempre la stessa valuta. Tuttavia, possono verificarsi cambiamenti, come quando molti paesi dell'UE hanno sostituito le loro valute nazionali con l'euro. Per coprire tale eventualità, memorizzeremo una cronologia di tutte le valute che abbiamo utilizzato. Per ogni record in questa tabella, memorizzeremo i riferimenti al country tabella (country_id ), il currency tabella (currency_id ) e quando è stata utilizzata questa valuta (date_from e date_to ). Se date_to è NULL, allora questa valuta è attualmente in uso. Ovviamente, dovrebbe essere in uso una sola valuta per paese. Non implementeremo quel controllo nel modello; invece, eseguiremo un controllo quando un record viene aggiunto o aggiornato in questa tabella.

Articoli

Tabelle negli Items l'area tematica definisce tutti gli articoli disponibili per il commercio e il loro stato attuale. Registra anche tutte le modifiche avvenute a questi elementi nel tempo.

L'item la tabella elenca tutti gli articoli che i commercianti possono acquistare o vendere (o che hanno acquistato o venduto). Potrebbero essere azioni, fondi o criptovalute. Qualsiasi operazione che coinvolge questi strumenti finanziari utilizza quasi esattamente lo stesso processo, quindi possiamo utilizzare la stessa struttura per tutti loro. Per ogni articolo, conserveremo:

  • code – Un codice di testo UNICO per quell'elemento, simile a quello che utilizziamo per le condivisioni (ad es. NASDAQ utilizza il codice "AAPL" per Apple Inc).
  • name – Il nome completo della società (per azioni), fondo o criptovaluta.
  • is_active – Se questo articolo è disponibile per il commercio o meno.
  • currency_id – Fa riferimento alla currency utilizzata come valuta di base per questo articolo.
  • details – Tutti i dettagli aggiuntivi (come il numero di azioni emesse) in formato testuale.

Il price la tabella tiene traccia di tutte le variazioni di prezzo nel tempo. Una volta che si è verificata una modifica, memorizzeremo l'ora (ts ), e il buy e sell prezzo dell'articolo (item_id ) coinvolti. Conserveremo anche un riferimento alla currency tabella, che ci dice la valuta utilizzata per impostare il valore di quell'elemento in quel momento. Nota che la valuta preferita per qualsiasi articolo potrebbe cambiare.

Il tavolo finale in questa area tematica è il report tavolo. L'idea è di archiviare rapporti regolari (cioè giornalieri) per ogni articolo. Questo rapporto si baserà sul trading durante quel periodo e manterrà i dettagli finanziari in un unico posto. Si tratta di dati ridondanti, ma possono rivelarsi molto utili quando si interrogano i prezzi storici (cosa che accade spesso, poiché i trader sono estremamente interessati alle tendenze). Per ogni record in questa tabella, memorizzeremo:

  • trading_date – La data di questo rapporto. Se dobbiamo compilare report più spesso di una volta al giorno, dovremo apportare modifiche al modello, ad es. aggiungendo timestamp che indicano quando un periodo di scambio è iniziato e terminato.
  • item_id e currency_id – Fa riferimento al relativo item e la currency usato.
  • first_price , last_price , min_price , max_price e avg_price – Il primo, l'ultimo, il prezzo massimo, minimo e medio di questo articolo durante questo periodo.
  • total_amount – L'importo totale pagato per quell'elemento durante il periodo di riferimento.
  • quantity – Il numero (quantità) di articoli scambiati durante questo periodo di riferimento. Tieni presente che un prezzo medio potrebbe essere calcolato da total_amount e quantity , ma preferisco mantenere "total_amount" separato. Ciò semplifica la situazione quando creiamo un rapporto per un periodo di tempo più lungo, ad esempio settimanale. In tal caso, potremmo aggiungere tutto il total_amount attributi e dividerli per la somma di tutte le quantity attributi per ottenere un prezzo medio settimanale.

Tutti gli attributi in questa tabella (diversi dalla chiave primaria e dalle chiavi esterne) possono essere NULL. Questo sarà il caso quando inseriamo un record per un nuovo periodo di scambio:finora non ci sono scambi. All'inizio di ogni data, possiamo aspettarci di inserire un record per ogni articolo e di aggiornare questi valori con l'avanzare della giornata. Il valore aggiornato finale sarà anche il rapporto finale per quel giorno.

Commercianti

I Traders l'area tematica è l'ultima di cui parleremo, ma è l'area più importante del modello. Le sue quattro tabelle (tralasciando il country e item tabelle che abbiamo già trattato) memorizzano informazioni sui trader, i loro inventari e le loro azioni. Tieni presente che la currency la tabella usata qui è solo una copia. Viene utilizzato per semplificare il modello ed evitare la sovrapposizione delle relazioni.

Il tavolo centrale è il trader tavolo. Per ogni trader, memorizzeremo:

  • name e last_name – Il nome e il cognome del commerciante.
  • user_name e password – Il nome utente e la password (hash) scelti dal trader. Il user_name l'attributo può memorizzare solo valori UNIQUE.
  • email – L'indirizzo email del commerciante. Questo sarà utilizzato per completare il processo di registrazione e per tutti i successivi contatti con il commerciante. Può anche contenere solo valori UNIQUE.
  • confirmation_code – Il codice inviato all'utente per completare il processo di registrazione.
  • time_registered e time_confirmed – Timestamp di quando il commerciante si è registrato e quando ha completato il processo di registrazione.
  • country_id – Il country dove vive il commerciante.
  • preferred_currency_id – La currency in cui il commerciante desidera visualizzare i prezzi.

L'elenco di tutti gli articoli attualmente posseduti da un trader è archiviato nel current_inventory tavolo. Per ogni trader_id UNICO – item_id coppia, memorizzeremo la quantity il commerciante attualmente possiede.

Le restanti due tabelle sono direttamente correlate a offerte e scambi. Daremo per scontato che ogni trader possa fare un'offerta per acquistare o vendere oggetti a un certo prezzo. Quando viene visualizzata un'offerta corrispondente, si verificherà l'evento commerciale. (Non entreremo nei dettagli specifici delle borse valori, dove un broker funge da mediatore.)

Conserveremo un registro di tutte le offerte nell'offer tavolo. Qualsiasi commerciante può fare un'offerta per acquistare o vendere oggetti. Per fare in modo che ciò accada, dobbiamo memorizzare i seguenti dettagli:

  • trader_id e item_id – Fa riferimento al trader chi ha effettuato l'offerta e l'item vogliono comprare o vendere.
  • quantity – La quantità che vogliono acquistare o vendere.
  • buy e sell – Se questa offerta è per l'acquisto o la vendita. È possibile impostare un solo attributo alla volta.
  • price – Il prezzo di acquisto o di vendita desiderato. Non è obbligatorio perché un trader potrebbe voler acquistare o vendere indipendentemente dal prezzo.
  • ts – Il timestamp in cui è stato inserito questo record.
  • is_active – Se questa offerta è ancora attiva. Potrebbe diventare inattivo a) se il trader lo imposta su inattivo, oppure b) se l'operazione è avvenuta.

La tabella finale nel nostro modello contiene i dati relativi all'evento di trading. Il trading avviene tra due utenti dopo che entrambi hanno effettuato un'offerta. Il prezzo utilizzato potrebbe essere il primo prezzo offerto o il prezzo corrente, a seconda di ciò che vogliamo implementare nella nostra applicazione. Per ogni trade evento, memorizzeremo:

  • item_id – Si riferisce all'item scambiato.
  • seller_id e buyer_id – Entrambi fanno riferimento al trader tabella e denota gli utenti coinvolti nel commercio.
  • quantity – Quanto di quell'oggetto è stato scambiato in questa transazione.
  • unit_price – Il prezzo unitario utilizzato per questo articolo in questo scambio.
  • description – Tutti i dettagli aggiuntivi, in formato testuale.
  • offer_id – L'ID dell'offer che ha avviato questo commercio. Nota:la prima offerta avvia uno scambio, quindi è l'ID che memorizzeremo qui.
  • ts – Il timestamp in cui è avvenuta questa operazione.

Cosa ne pensi?

Abbiamo appena considerato un modello di dati per facilitare il trading online di criptovalute, azioni e altri derivati ​​finanziari. Queste sono solo le ossa nude del modello; ci sono un sacco di altri dettagli che potremmo aggiungere. Sto pensando a documenti relativi ai trader e a un modo per archiviare le informazioni di pagamento. Cosa aggiungeresti? O forse rimuovere? Per favore, diccelo nei commenti.