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

Ein Datenmodell für den Handel mit Aktien, Fonds und Kryptowährungen

Der Handel mit Kryptowährungen, der Kauf von Aktien und dergleichen ist heutzutage äußerst beliebt – es wird als einfacher Gewinn angesehen. Die Preise steigen derzeit, aber wir können nicht wissen, wann sich das ändern wird. Andererseits wissen wir, dass es irgendwann passieren wird. Aber wir sind nicht hier, um finanzielle Vorhersagen zu machen. Stattdessen sprechen wir über ein Datenmodell, das verwendet werden kann, um den Handel mit Kryptowährungen und Finanzinstrumenten wie Aktien oder Fondsanteilen zu unterstützen.

Was Sie über den Handel mit Währungen und Aktien wissen müssen

Technologische Verbesserungen in den letzten Jahrzehnten hatten einen erheblichen Einfluss auf den Handel. Es gibt jetzt viele Online-Handelsplattformen, die Sie verwenden können. Der Großteil des heutigen Handels wird virtuell abgewickelt – Sie können Papieraktien in Museen sehen, aber Sie werden die Aktien, die Sie kaufen, wahrscheinlich nicht in Papierform sehen. Und Sie müssen nicht Ihre Koffer packen und zur Wall Street oder einer anderen Börse gehen, um einen Handel zu tätigen. Bequem von Ihrem eigenen Computer oder Mobilgerät aus können Sie Finanzderivate (wie Anleihen, Aktien oder Rohstoffe) kaufen oder verkaufen.

Die meisten Trades (Verkäufe von Finanzderivaten) folgen denselben Regeln. Es gibt Verkäufer und Käufer. Wenn sie sich auf einen Preis einigen, findet der Handel statt. Nach dem Handel wird der Preis dieses Finanzderivats neu berechnet und der Prozess wird mit neuen Händlern fortgesetzt. Aktien und andere Derivate funktionieren auf die gleiche Weise.

Was ist Kryptowährung? Sie haben wahrscheinlich schon von Bitcoin und anderen Kryptowährungen gehört. Aber was sind sie? Kryptowährungen sind wie virtuelle Währungen, aber sie sind nicht an reale Währungen (wie Euro oder Dollar) gebunden. Stattdessen können Benutzer Kryptowährungen wie Token untereinander handeln. Sie können dann einen Verkauf aushandeln, der ihre Token in echtes Geld verwandelt. Diese Verkäufe funktionieren genauso wie die oben beschriebenen Aktien- und Anteilsgeschäfte.

Dieses Thema ist komplex und wir könnten viele Details in unserem Modell haben (z. B. Aufzeichnungen von Dokumenten und Transaktionen). Ich werde es einfach halten; Ich werde keinen automatischen Handel oder Formeln implementieren, um nach einem Handelsereignis neue Preise zu generieren.

Werfen wir also einen Blick auf dieses einfache Handelsmodell.

Das Datenmodell




Das Datenmodell besteht aus drei Themenbereichen:

  1. Currencies
  2. Items
  3. Traders

Wir stellen jeden Themenbereich in der angegebenen Reihenfolge vor.

Währungen

Die Currencies Themengebiet ist einfach. Es enthält vier Tabellen, in denen alle von uns verwendeten Währungen und deren Wechselkurse gespeichert sind. Währungen sind aus folgenden Gründen wichtig:

  • Wir verwenden eine Währung, die als Basiswährung bezeichnet wird , zum Handeln. Eine Online-Aktienhandelsplattform wird wahrscheinlich den US-Dollar (USD) als Basiswährung verwenden, unabhängig von den tatsächlichen Regionen der Händler. Alle Transaktionen werden in die Basiswährung umgerechnet.
  • Wir können auch Nicht-Basiswährungen oder lokale Währungen verwenden für alle Länder, in denen unsere Handelsplattform verfügbar ist. Dies würde es uns ermöglichen, Preise in der lokalen Währung anzuzeigen, aber dennoch Trades in der Basiswährung durchzuführen.

Die restlichen zwei Tabellen beziehen sich auf Währungen und Länder.

Die wichtigste Tabelle in diesem Themenbereich ist die currency Tisch. Hier speichern wir alle Währungen, die wir jemals für den Handel verwendet haben, einschließlich Kryptowährungen. Ob eine Währung in dieser Tabelle enthalten ist, hängt davon ab, ob diese Währung zur Bezahlung der gehandelten Artikel verwendet wird. Für jede Währung speichern wir:

  • code – Ein Code, der verwendet wird, um diese Währung EINZIGARTIG zu bezeichnen. Bei nationalen Währungen ist dies der ISO 4217-Code (z. B. USD für US-Dollar) oder ein anderer offizieller Code. Wir könnten auch ISO 4217 für Kryptowährungen verwenden; XBT ist der ISO-Code von Bitcoin. Allerdings verwendet Bitcoin informell auch den Code BTC.
  • name – Der EINZIGARTIGE Name dieser Währung (z. B. US-Dollar).
  • is_active – Wenn die Währung derzeit in unserem System aktiv ist.
  • is_base – Wenn diese Währung die Basiswährung unseres Systems ist. Normalerweise haben wir jeweils nur eine Basiswährung. Es ist möglich, dass wir mehr als einen haben, z. B. Euro für EU-Staaten und US-Dollar für andere Gebiete verwenden. In diesem Fall können wir mit diesem Attribut jedem Land eine Basiswährung zuweisen.

Die nächste Tabelle speichert aktuelle und historische Kurse zwischen Währungspaaren. Im currency_rate Tabelle speichern wir die currency_id wir wollen mit einer base_currency_id vergleichen sowie der rate wann dieses Paar gespeichert wurde (ts ). Da wir die Kurse zu verschiedenen Zeitpunkten speichern, speichert diese Tabelle sowohl historische als auch aktuelle Daten.

Eine Liste aller relevanten Länder ist im country Wörterbuch. Neben dem Primärschlüssel (id ), enthält es ein Attribut, das einen EINZIGARTIGEN Länder-name enthält .

Die letzte Tabelle in diesem Themenbereich ist currency_used Tisch. In den meisten Fällen verwendet ein Land immer dieselbe Währung. Dennoch kann es zu Änderungen kommen, beispielsweise als viele EU-Länder ihre nationalen Währungen durch den Euro ersetzten. Um einen solchen Fall abzudecken, speichern wir eine Historie aller Währungen, die wir verwendet haben. Für jeden Datensatz in dieser Tabelle speichern wir Verweise auf das country Tabelle (country_id ), die currency Tabelle (currency_id ) und wann diese Währung verwendet wurde (date_from und date_to ). Wenn date_to NULL ist, wird diese Währung derzeit verwendet. Natürlich sollte pro Land nur eine Währung verwendet werden. Wir werden diese Prüfung nicht im Modell implementieren; Stattdessen führen wir eine Überprüfung durch, wenn ein Datensatz in dieser Tabelle hinzugefügt oder aktualisiert wird.

Artikel

Tabellen in den Items Sachgebiete definieren alle zum Handel verfügbaren Artikel und deren aktuellen Status. Es zeichnet auch alle Änderungen auf, die an diesen Elementen im Laufe der Zeit vorgenommen wurden.

Das item Tabelle listet alle Gegenstände auf, die Händler kaufen oder verkaufen können (oder die sie gekauft oder verkauft haben). Dies können Aktien, Fonds oder Kryptowährungen sein. Jeder Handel mit diesen Finanzinstrumenten verwendet fast genau denselben Prozess, sodass wir für alle dieselbe Struktur verwenden können. Für jeden Artikel speichern wir:

  • code – Ein EINZIGARTIGER Textcode für diesen Artikel, ähnlich dem, den wir für Aktien verwenden (z. B. verwendet NASDAQ den Code „AAPL“ für Apple Inc).
  • name – Der vollständige Name des Unternehmens (für Aktien), des Fonds oder der Kryptowährung.
  • is_active – Ob dieser Gegenstand handelbar ist oder nicht.
  • currency_id – Verweist auf die currency als Basiswährung für diesen Artikel verwendet.
  • details – Alle weiteren Angaben (zB Anzahl der ausgegebenen Aktien) in Textform.

Der price Tabelle verfolgt alle Preisänderungen im Laufe der Zeit. Sobald eine Änderung aufgetreten ist, speichern wir die Uhrzeit (ts ) und buy und sell Preis für den Artikel (item_id ) beteiligt. Wir speichern auch einen Verweis auf die currency Tabelle, die uns die Währung angibt, die verwendet wurde, um den Wert dieses Artikels zu diesem Zeitpunkt festzulegen. Beachten Sie, dass sich die bevorzugte Währung für jeden Artikel ändern kann.

Die letzte Tabelle in diesem Themenbereich ist der report Tisch. Die Idee ist, regelmäßige (d. h. tägliche) Berichte für jeden Artikel zu speichern. Dieser Bericht basiert auf dem Handel während dieses Zeitraums und enthält finanzielle Details an einem Ort. Dies sind redundante Daten, aber sie können sich als sehr nützlich erweisen, wenn historische Preise abgefragt werden (was häufig vorkommt, da Händler äußerst an Trends interessiert sind). Für jeden Datensatz in dieser Tabelle speichern wir:

  • trading_date – Das Datum dieses Berichts. Wenn wir Berichte öfter als einmal am Tag erstellen müssen, müssen wir Änderungen am Modell vornehmen – z. Hinzufügen von Zeitstempeln, die angeben, wann eine Handelsperiode begann und endete.
  • item_id und currency_id – Verweist auf das zugehörige item und die currency verwendet.
  • first_price , last_price , min_price , max_price und avg_price – Der erste, letzte, maximale, minimale und durchschnittliche Preis für diesen Artikel in diesem Zeitraum.
  • total_amount – Der Gesamtbetrag, der für diesen Artikel während des Berichtszeitraums gezahlt wurde.
  • quantity – Die Anzahl (Menge) der in diesem Berichtszeitraum gehandelten Artikel. Bitte beachten Sie, dass aus total_amount ein Durchschnittspreis berechnet werden kann und quantity , aber ich ziehe es vor, „total_amount“ getrennt zu halten. Dies vereinfacht die Situation, wenn wir einen Bericht für einen längeren Zeitraum erstellen, z. B. wöchentlich. In diesem Fall könnten wir den gesamten total_amount hinzufügen Attribute und teilen Sie diese durch die Summe aller quantity Attribute, um einen wöchentlichen Durchschnittspreis zu erhalten.

Alle Attribute in dieser Tabelle (außer dem Primärschlüssel und den Fremdschlüsseln) können NULL sein. Dies wird der Fall sein, wenn wir einen Datensatz für eine neue Handelsperiode einfügen – es gibt bisher keine Trades. Zu Beginn jedes Datums können wir davon ausgehen, dass wir für jeden Artikel einen Datensatz einfügen und diese Werte im Laufe des Tages aktualisieren. Der letzte aktualisierte Wert ist auch der Abschlussbericht für diesen Tag.

Händler

Die Traders Der Themenbereich ist der letzte, den wir besprechen werden, aber er ist der wichtigste Bereich im Modell. Seine vier Tabellen (ohne country und item Tabellen, die wir bereits behandelt haben) speichern Informationen über Händler, ihre Bestände und ihre Aktionen. Beachten Sie, dass die currency Die hier verwendete Tabelle ist nur eine Kopie. Es wird verwendet, um das Modell zu vereinfachen und zu vermeiden, dass sich Beziehungen überschneiden.

Die zentrale Tabelle ist der trader Tisch. Für jeden Händler speichern wir:

  • first_name und last_name – Vor- und Nachname des Händlers.
  • user_name und password – Der vom Händler gewählte Benutzername und das Passwort (Hash). Der user_name -Attribut kann nur EINZIGARTIGE Werte speichern.
  • email – Die E-Mail-Adresse des Händlers. Diese wird verwendet, um den Registrierungsprozess abzuschließen und für alle nachfolgenden Kontakte mit dem Händler. Es kann auch nur EINZIGARTIGE Werte enthalten.
  • confirmation_code – Der Code, der an den Benutzer gesendet wird, um den Registrierungsprozess abzuschließen.
  • time_registered und time_confirmed – Zeitstempel, wann sich der Händler registriert und wann er den Registrierungsprozess abgeschlossen hat.
  • country_id – Das country wo der Händler wohnt.
  • preferred_currency_id – Die currency in denen der Händler Preise angezeigt haben möchte.

Die Liste aller Gegenstände, die ein Händler derzeit besitzt, wird im current_inventory Tisch. Für jede EINZIGARTIGE trader_iditem_id Paar speichern wir die quantity der Händler derzeit besitzt.

Die verbleibenden zwei Tabellen beziehen sich direkt auf Angebote und Trades. Wir gehen davon aus, dass jeder Händler ein Angebot zum Kauf oder Verkauf von Artikeln zu einem bestimmten Preis abgeben kann. Wenn ein passendes Angebot erscheint, findet das Handelsereignis statt. (Auf börsenspezifische Details, bei denen ein Broker als Vermittler fungiert, gehen wir nicht ein.)

Wir erfassen alle Angebote im offer Tisch. Jeder Händler kann ein Angebot zum Kauf oder Verkauf von Artikeln abgeben. Dazu müssen wir folgende Angaben speichern:

  • trader_id und item_id – Verweist auf den trader wer dieses Angebot und den item sie kaufen oder verkaufen möchten.
  • quantity – Die Menge, die sie kaufen oder verkaufen möchten.
  • buy und sell – Wenn es sich bei diesem Angebot um einen Kauf oder Verkauf handelt. Es kann immer nur ein Attribut gesetzt werden.
  • rate – Der gewünschte Kauf- oder Verkaufspreis. Dies ist nicht erforderlich, da ein Händler unabhängig vom Preis kaufen oder verkaufen möchte.
  • ts – Der Zeitstempel, als dieser Datensatz eingefügt wurde.
  • is_active – Ob dieses Angebot noch aktiv ist. Es könnte inaktiv werden, a) wenn der Händler es auf inaktiv setzt oder b) wenn der Handel stattgefunden hat.

Die letzte Tabelle in unserem Modell enthält Daten im Zusammenhang mit dem Handelsereignis. Der Handel findet zwischen zwei Benutzern statt, nachdem beide ein Angebot abgegeben haben. Der verwendete Preis kann der erste angebotene Preis oder der aktuelle Preis sein, je nachdem, was wir in unserer Anwendung implementieren möchten. Für jeden trade Veranstaltung speichern wir:

  • item_id – Bezieht sich auf den item gehandelt.
  • seller_id und buyer_id – Beide referenzieren den trader Tabelle und bezeichnen die am Handel beteiligten Benutzer.
  • quantity – Wie viel von diesem Artikel in dieser Transaktion gehandelt wurde.
  • unit_price – Der Stückpreis, der für diesen Artikel in diesem Handel verwendet wird.
  • description – Alle weiteren Details im Textformat.
  • offer_id – Die ID des offer die diesen Handel initiiert haben. Hinweis:Das erste Angebot initiiert einen Handel, also speichern wir diese ID hier.
  • ts – Der Zeitstempel, als dieser Handel stattfand.

Was denken Sie?

Wir haben gerade ein Datenmodell in Betracht gezogen, um den Online-Handel mit Kryptowährungen, Aktien und anderen Finanzderivaten zu erleichtern. Dies sind nur die nackten Knochen des Modells; Es gibt eine Reihe weiterer Details, die wir hinzufügen könnten. Ich denke an Dokumente im Zusammenhang mit Händlern und eine Möglichkeit, Zahlungsinformationen zu speichern. Was würden Sie hinzufügen? Oder vielleicht entfernen? Bitte teilen Sie uns dies in den Kommentaren mit.