Perdagangan cryptocurrency, membeli saham, dan sejenisnya sangat populer akhir-akhir ini – ini dianggap sebagai keuntungan yang mudah. Harga saat ini sedang naik, tetapi kami tidak tahu kapan itu akan berubah. Di sisi lain, kita tahu itu akan terjadi di beberapa titik. Tapi kami di sini bukan untuk membuat prediksi keuangan. Sebagai gantinya, kita akan berbicara tentang model data yang dapat digunakan untuk mendukung perdagangan mata uang kripto dan instrumen keuangan seperti saham atau reksa dana.
Yang Perlu Anda Ketahui Tentang Perdagangan Mata Uang dan Saham
Perbaikan teknologi dalam beberapa dekade terakhir memiliki dampak signifikan pada perdagangan. Saat ini sudah banyak platform trading online yang bisa Anda gunakan. Sebagian besar perdagangan hari ini dilakukan secara virtual – Anda dapat melihat stok kertas di museum, tetapi Anda tidak akan melihat stok yang Anda beli dalam bentuk kertas. Dan Anda tidak perlu mengemasi tas Anda dan pergi ke Wall Street atau bursa saham lainnya untuk melakukan perdagangan. Dari kenyamanan komputer atau perangkat seluler Anda sendiri, Anda dapat membeli atau menjual derivatif keuangan (seperti obligasi, saham, atau komoditas).
Sebagian besar perdagangan (penjualan derivatif keuangan) mengikuti aturan yang sama. Ada penjual dan pembeli. Jika mereka setuju pada harga, perdagangan terjadi. Setelah perdagangan, harga derivatif keuangan tersebut akan dihitung ulang dan prosesnya akan dilanjutkan dengan pedagang baru. Saham dan turunan lainnya bekerja dengan cara yang sama.
Apa itu cryptocurrency? Anda mungkin pernah mendengar tentang Bitcoin dan cryptocurrency lainnya. Tapi apa mereka? Cryptocurrency seperti mata uang virtual, tetapi tidak terikat dengan mata uang dunia nyata (seperti euro atau dolar). Sebagai gantinya, pengguna dapat memperdagangkan cryptocurrency di antara mereka sendiri seperti token. Mereka kemudian dapat menegosiasikan penjualan yang mengubah token mereka menjadi uang nyata. Fungsi penjualan ini persis seperti perdagangan saham dan saham yang dijelaskan di atas.
Subjek ini rumit dan kami dapat memiliki banyak detail dalam model kami (misalnya, catatan dokumen dan transaksi). Saya akan membuatnya tetap sederhana; Saya tidak akan menerapkan jenis perdagangan otomatis atau formula apa pun untuk menghasilkan harga baru setelah peristiwa perdagangan.
Jadi, mari kita lihat model perdagangan sederhana ini.
Model Data
Model data terdiri dari tiga bidang subjek:
Currencies
Items
Traders
Kami akan menampilkan setiap bidang subjek dalam urutan yang tercantum.
Mata Uang
Currencies
bidang studi sederhana. Ini berisi empat tabel yang menyimpan setiap mata uang yang kami gunakan dan nilai tukarnya. Mata uang penting karena:
- Kami akan menggunakan satu mata uang, yang disebut mata uang dasar , untuk perdagangan. Platform perdagangan saham online kemungkinan akan menggunakan dolar AS (USD) sebagai mata uang dasarnya, terlepas dari wilayah sebenarnya pedagang. Semua transaksi akan dikonversi ke mata uang dasar.
- Kami juga dapat memiliki mata uang non-basis atau mata uang lokal untuk semua negara tempat platform perdagangan kami tersedia. Ini akan memungkinkan kami untuk menampilkan harga dalam mata uang lokal tetapi tetap melakukan perdagangan dalam mata uang dasar.
Dua tabel lainnya berhubungan dengan mata uang dan negara.
Tabel terpenting dalam bidang subjek ini adalah currency
meja. Di sinilah kami akan menyimpan semua mata uang yang pernah kami gunakan untuk berdagang, termasuk mata uang kripto. Apakah mata uang termasuk dalam tabel ini tergantung pada apakah mata uang tersebut akan digunakan untuk membayar barang yang diperdagangkan. Untuk setiap mata uang, kami akan menyimpan:
code
– Sebuah kode yang digunakan untuk UNIK menunjukkan mata uang itu. Untuk mata uang nasional, ini akan menjadi kode ISO 4217 (misalnya USD untuk Dolar Amerika Serikat) atau kode resmi lainnya. Kami juga dapat menggunakan ISO 4217 untuk cryptocurrency; XBT adalah kode ISO Bitcoin. Namun, Bitcoin juga menggunakan kode BTC secara informal.name
– Nama UNIK mata uang itu (mis. Dolar Amerika Serikat).is_active
– Jika mata uang saat ini aktif di sistem kami.is_base
– Jika mata uang ini adalah mata uang dasar sistem kami. Biasanya, kami hanya akan memiliki satu mata uang dasar dalam satu waktu. Mungkin saja kita bisa memiliki lebih dari satu, seperti menggunakan euro untuk negara bagian UE dan dolar AS untuk area lain. Dalam hal ini, kami memiliki kemampuan untuk menetapkan mata uang dasar ke setiap negara dengan atribut ini.
Tabel berikutnya menyimpan kurs saat ini dan historis antara pasangan mata uang. Dalam currency_rate
tabel, kami akan menyimpan currency_id
kami ingin membandingkan dengan base_currency_id
serta rate
ketika pasangan ini disimpan (ts
). Karena kami akan menyimpan tarif sebagaimana adanya pada berbagai titik waktu, tabel ini akan menyimpan data historis dan terkini.
Daftar semua negara yang relevan disimpan di country
kamus. Selain kunci utama (id
), ini berisi satu atribut yang memiliki name
negara UNIK .
Tabel terakhir di area subjek ini adalah currency_used
meja. Dalam kebanyakan kasus, suatu negara akan selalu menggunakan mata uang yang sama. Namun, perubahan dapat terjadi, seperti ketika banyak negara UE mengganti mata uang nasional mereka dengan euro. Untuk menutupi kemungkinan seperti itu, kami akan menyimpan riwayat semua mata uang yang telah kami gunakan. Untuk setiap catatan dalam tabel ini, kami akan menyimpan referensi ke country
tabel (country_id
), currency
tabel (currency_id
), dan kapan mata uang ini digunakan (date_from
dan date_to
). Jika date_to
adalah NULL, maka mata uang ini sedang digunakan. Tentu saja, hanya satu mata uang yang boleh digunakan per negara. Kami tidak akan menerapkan pemeriksaan itu dalam model; sebagai gantinya, kami akan melakukan pemeriksaan saat catatan ditambahkan atau diperbarui dalam tabel ini.
Item
Tabel di Items
area subjek menentukan semua item yang tersedia untuk diperdagangkan dan statusnya saat ini. Ini juga mencatat semua perubahan yang terjadi pada item ini dari waktu ke waktu.
item
tabel mencantumkan semua item yang dapat dibeli atau dijual oleh pedagang (atau yang telah mereka beli atau jual). Ini bisa berupa saham, dana, atau cryptocurrency. Setiap perdagangan yang melibatkan instrumen keuangan ini menggunakan proses yang hampir sama persis, sehingga kita dapat menggunakan struktur yang sama untuk semuanya. Untuk setiap item, kami akan menyimpan:
code
– Kode teks UNIK untuk item tersebut, mirip dengan yang kami gunakan untuk berbagi (mis. NASDAQ menggunakan kode “AAPL” untuk Apple Inc).name
– Nama lengkap perusahaan (untuk saham), dana, atau cryptocurrency.is_active
– Apakah item ini tersedia untuk diperdagangkan atau tidak.currency_id
– Mengacu padacurrency
digunakan sebagai mata uang dasar untuk item ini.details
– Semua detail tambahan (seperti jumlah saham yang diterbitkan) dalam format tekstual.
price
tabel melacak semua perubahan harga sepanjang waktu. Setelah perubahan terjadi, kami akan menyimpan waktu (ts
), dan buy
dan sell
harga barang (item_id
) terlibat. Kami juga akan menyimpan referensi ke currency
tabel, yang memberi tahu kita mata uang yang digunakan untuk menetapkan nilai item tersebut pada saat itu. Perhatikan bahwa mata uang pilihan untuk item apa pun dapat berubah.
Tabel terakhir di bidang subjek ini adalah report
meja. Idenya adalah untuk menyimpan laporan reguler (yaitu harian) untuk setiap item. Laporan ini akan didasarkan pada perdagangan selama periode tersebut, dan akan menyimpan rincian keuangan di satu tempat. Ini adalah data yang berlebihan, tetapi terbukti sangat berguna saat menanyakan harga historis (yang sering terjadi, karena pedagang sangat tertarik dengan tren). Untuk setiap record dalam tabel ini, kita akan menyimpan:
trading_date
– Tanggal laporan ini. Jika kami perlu mengkompilasi laporan lebih dari sekali sehari, kami harus membuat perubahan pada model – mis. menambahkan stempel waktu yang menunjukkan kapan periode perdagangan dimulai dan berakhir.item_id
dancurrency_id
– Merujukitem
dancurrency
digunakan.first_price
,last_price
,min_price
,max_price
danavg_price
– Harga pertama, terakhir, maksimum, minimum, dan rata-rata untuk item ini selama periode ini.total_amount
– Jumlah total yang dibayarkan untuk item tersebut selama periode pelaporan.quantity
– Jumlah (kuantitas) barang yang diperdagangkan selama periode pelaporan ini. Harap diperhatikan bahwa harga rata-rata dapat dihitung daritotal_amount
danquantity
, tapi saya lebih suka memisahkan "total_amount". Ini menyederhanakan situasi saat kami membuat laporan untuk jangka waktu yang lebih lama, seperti mingguan. Dalam hal ini, kita dapat menambahkan semuatotal_amount
atribut dan membaginya dengan jumlah semuaquantity
atribut untuk mendapatkan harga rata-rata mingguan.
Semua atribut dalam tabel ini (selain kunci utama dan kunci asing) dapat berupa NULL. Ini akan menjadi kasus ketika kami memasukkan rekor untuk periode perdagangan baru – sejauh ini tidak ada perdagangan. Di awal setiap tanggal, kita bisa berharap kita akan memasukkan satu catatan untuk setiap item dan memperbarui nilai-nilai ini seiring berjalannya hari. Nilai akhir yang diperbarui juga akan menjadi laporan akhir untuk hari itu.
Pedagang
Traders
area subjek adalah yang terakhir yang akan kita bahas, tetapi ini adalah area terpenting dalam model. Empat tabelnya (meninggalkan country
dan item
tabel yang telah kami bahas) menyimpan informasi tentang pedagang, inventaris mereka, dan tindakan mereka. Perhatikan bahwa currency
tabel yang digunakan di sini hanyalah salinan. Ini digunakan untuk menyederhanakan model dan menghindari hubungan yang tumpang tindih.
Tabel pusat adalah trader
meja. Untuk setiap pedagang, kami akan menyimpan:
first_name
danlast_name
– Nama depan dan belakang pedagang.user_name
danpassword
– Nama pengguna dan kata sandi (hash) yang dipilih oleh pedagang.user_name
atribut hanya dapat menyimpan nilai UNIK.email
– Alamat email pedagang. Ini akan digunakan untuk menyelesaikan proses pendaftaran dan untuk semua kontak selanjutnya dengan pedagang. Itu juga hanya dapat menampung nilai UNIK.confirmation_code
– Kode yang dikirimkan kepada pengguna untuk menyelesaikan proses pendaftaran.time_registered
dantime_confirmed
– Stempel waktu saat pedagang mendaftar dan saat mereka menyelesaikan proses pendaftaran.country_id
–country
tempat tinggal pedagang.preferred_currency_id
–currency
yang diinginkan pedagang untuk menampilkan harga.
Daftar semua item yang dimiliki trader saat ini disimpan di current_inventory
meja. Untuk setiap trader_id
UNIK – item_id
pasangan, kami akan menyimpan quantity
yang dimiliki pedagang saat ini.
Dua tabel yang tersisa berhubungan langsung dengan penawaran dan perdagangan. Kami akan berasumsi bahwa setiap pedagang dapat mengajukan penawaran untuk membeli atau menjual barang dengan harga tertentu. Saat tawaran yang cocok muncul, peristiwa perdagangan akan terjadi. (Kami tidak akan membahas detail yang spesifik untuk bursa saham, di mana broker berfungsi sebagai mediator.)
Kami akan menyimpan catatan semua penawaran di offer
meja. Setiap pedagang dapat mengajukan penawaran untuk membeli atau menjual barang. Untuk mewujudkannya, kita perlu menyimpan detail berikut:
trader_id
danitem_id
– Referensitrader
siapa yang menempatkan penawaran itu danitem
mereka ingin membeli atau menjual.quantity
– Jumlah yang ingin mereka beli atau jual.buy
dansell
– Jika penawaran ini untuk jual beli. Hanya satu atribut yang dapat disetel pada satu waktu.price
– Harga beli atau jual yang diinginkan. Ini tidak wajib karena pedagang mungkin ingin membeli atau menjual berapa pun harganya.ts
– Stempel waktu saat catatan ini dimasukkan.is_active
– Apakah penawaran ini masih aktif. Ini bisa menjadi tidak aktif a) jika pedagang menyetelnya menjadi tidak aktif, atau b) jika perdagangan telah terjadi.
Tabel terakhir dalam model kami berisi data yang terkait dengan peristiwa perdagangan. Perdagangan terjadi antara dua pengguna setelah mereka berdua mengajukan penawaran. Harga yang digunakan bisa harga pertama yang ditawarkan atau harga saat ini, tergantung apa yang ingin kita terapkan di aplikasi kita. Untuk setiap trade
acara, kami akan menyimpan:
item_id
– Mengacu padaitem
diperdagangkan.seller_id
danbuyer_id
– Keduanya merujuk padatrader
tabel dan menunjukkan pengguna yang terlibat dalam perdagangan.quantity
– Berapa banyak barang yang diperdagangkan dalam transaksi ini.unit_price
– Harga satuan yang digunakan untuk item ini dalam perdagangan ini.description
– Semua detail tambahan, dalam format tekstual.offer_id
– IDoffer
yang memulai perdagangan ini. Catatan:Penawaran pertama memulai perdagangan, jadi itulah ID yang akan kami simpan di sini.ts
– Stempel waktu saat perdagangan ini terjadi.
Bagaimana Menurut Anda?
Kami baru saja mempertimbangkan model data untuk memfasilitasi perdagangan online cryptocurrency, saham, dan derivatif keuangan lainnya. Ini hanya tulang telanjang model; ada banyak detail lain yang bisa kami tambahkan. Saya sedang memikirkan dokumen yang terkait dengan pedagang dan cara untuk menyimpan informasi pembayaran. Apa yang akan Anda tambahkan? Atau mungkin menghapus? Tolong beritahu kami di komentar.