Gunakan SQLite untuk Membangun Basis Data Kuantum FMZ [TOC]
Data adalah sumber perdagangan kuantitatif. sangat penting untuk mengelola sejumlah besar data secara efisien. basis data adalah salah satu solusi terbaik. saat ini, aplikasi basis data telah menjadi konfigurasi kuantitatif standar dari berbagai perdagangan harian, perdagangan frekuensi tinggi dan strategi lainnya.FMZ.COM), termasuk: cara membuat tabel data, menyimpan data, memodifikasi data, menghapus data, dan data referensi, serta cara menggunakannya dalam praktek.
Mereka yang akrab dengan FMZ Quant Trading Platform harus tahu bahwa sebelum ini, jika Anda ingin menyimpan data ke lokal untuk digunakan kembali, Anda hanya dapat menggunakan fungsi _G(). Setiap kali Anda menghentikan strategi, fungsi _G() akan secara otomatis menyimpan informasi yang diperlukan. Tetapi jika Anda ingin menyimpan data berformat yang semakin kompleks, fungsi _G() jelas tidak cocok, sehingga banyak orang berpikir untuk membangun basis data mereka sendiri untuk memecahkan masalah ini.
Ketika datang ke basis data yang dibuat sendiri, semua orang dapat memikirkan Oracle, MySQL, KDB, OneTick, NoSQL... Ini semua adalah aplikasi tingkat perusahaan yang sangat baik, baik dalam hal fungsi dan kinerja. Tapi ada juga beberapa masalah: sulit untuk memulai, dan konfigurasi dan pemeliharaan sulit. Bagi investor ritel dalam perdagangan kuantitatif, ini sedikit seperti memecahkan lalat di roda. Bahkan jika Anda sudah memulai dengan aplikasi tersebut, hanya beberapa fungsi dari mereka yang akan digunakan.
Selanjutnya, mari kita kenal dengan database ringan FMZ Quant. DBExec adalah antarmuka sistem manajemen data relasional yang dibangun ke dalam FMZ Quant. Ini dikembangkan berdasarkan SQLite dan ditulis dalam bahasa C. Ini tidak hanya berukuran kecil, tidak menggunakan sumber daya, tetapi juga memiliki kecepatan pemrosesan yang sangat cepat. Ini sangat cocok untuk penggemar analisis kuantitatif keuangan untuk menerapkan manajemen data secara lokal, karena dapat membagi berbagai
Selain itu, biaya belajar bahasa SQLite sangat rendah, dan sebagian besar pekerjaan yang dilakukan pada database dilakukan oleh pernyataan SQLite. Sebagian besar kebutuhan dapat dipenuhi dengan membiasakan diri dengan sintaksis dasar. Berikut ini adalah sintaksis dasar SQLite.
Sintaks SQLite tidak sensitif huruf besar, tetapi beberapa perintah sensitif huruf besar, seperti GLOB dan glob, yang memiliki arti yang berbeda. Pernyataan SQLite dapat dimulai dengan kata kunci apa pun, seperti SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, dll, yang masing-masing berarti: mengekstrak data, memasukkan data, memperbarui data, menghapus data, memodifikasi database, dan menghapus tabel data. Semua perintah diakhiri dengan titik koma. Berikut adalah operasi seperti pembuatan, penambahan, penghapusan, modifikasi, dan kueri database sederhana:
function main() {
// create: if the table of "users" do not exist, create one; "id" is integer and increases automatically; "name" is in form of text and not null
Log(DBExec('CREATE TABLE IF NOT EXISTS "users" (id INTEGER PRIMARY KEY AUTOINCREMENT, name text not NULL);'));
// add:
Log(DBExec("INSERT INTO users(name) values('A')"));
Log(DBExec("INSERT INTO users(name) values('B')"));
// delete:
Log(DBExec("DELETE FROM users WHERE id=1;"));
// modify:
Log(DBExec("UPDATE users SET name='C' WHERE id=2"));
// query:
Log(DBExec('select 2, ?, ?, ?, ?', 'ok', true,9.8,null));
Log(DBExec('select * from kvdb'));
Log(DBExec('select * from cfg'));
Log(DBExec('select * from log'));
Log(DBExec('select * from profit'));
Log(DBExec('select * from chart'));
Log(DBExec("selEct * from users"));
}
Sebuah database biasanya berisi satu atau lebih tabel, setiap tabel memiliki identifikasi nama, perlu dicatat bahwa tabel yang disediakan sistem adalah: kvdb, cfg, log, profit, chart. yaitu, ketika membuat tabel, Anda harus menghindari nama yang disediakan sistem. mari kita jalankan kode di atas, yang mengekspor hal berikut:
Setelah mengetahui sintaksis dasar SQLite, mari kita menyerang sementara besi panas; gunakan database kuantitatif built-in FMZ Quant untuk membuat contoh pengumpulan dan penggunaan data Tick.
Langkah 1: memperbarui dockerPertama, pastikan Anda menggunakan versi terbaru dari docker. Jika Anda telah mengunduh dan menggunakan docker sebelumnya, Anda perlu menghapusnya terlebih dahulu, dan mengunduhnya dan menyebarkannya lagi di halaman (https://www.fmz.com/m/add-node).
Langkah 2: Membuat strategi
function main() {
// set contract
_C(exchange.SetContractType, 'swap');
// create the data table
DBExec('CREATE TABLE IF NOT EXISTS "tick" (id INTEGER PRIMARY KEY AUTOINCREMENT,'.concat(
'High FLOAT not NULL,',
'Low FLOAT not NULL,',
'Sell FLOAT not NULL,',
'Buy FLOAT not NULL,',
'Last FLOAT not NULL,',
'Volume INTEGER not NULL,',
'Time INTEGER not NULL);'
));
// obtain 10 tick data
while (true) {
let tick = exchange.GetTicker();
// add data in the tick table
DBExec(`INSERT INTO tick(High, Low, Sell, Buy, Last, Volume, Time) values(${tick.High}, ${tick.Low}, ${tick.Sell}, ${tick.Buy}, ${tick.Last}, ${tick.Volume}, ${tick.Time})`);
// query all data
let allDate = DBExec('select * from tick');
if (allDate.values.length > 10) {
break;
}
Sleep(1000);
}
// query all data
Log(DBExec('select * from tick'));
// query the first data
Log(DBExec('select * from tick limit 1'));
// query the first two data
Log(DBExec('select * from tick limit 0,2'));
// delete the first data
Log(DBExec('DELETE FROM tick WHERE id=1;'));
// modify the second data
Log(DBExec('UPDATE tick SET High=10000 WHERE id=2'));
// query all data
let allDate = DBExec('select * from tick')
Log(allDate);
}
Langkah 3: Mengoperasikan strategiAmbil Windows sebagai contoh. Setelah menjalankan strategi, folder yang diberi nama dengan ID bot akan dihasilkan di kamus
Kode di atas pertama kali membuat tabel data bernama
Langkah 4: Buat bar statusAkhirnya, kami menambahkan beberapa potongan kode untuk membuat bilah status untuk strategi dengan mendapatkan data di database FMZ Quant untuk menampilkan data lebih intuitif.
// create a status bar
let table = {
type: 'table',
title: 'Binance Tick data',
cols: allDate.columns,
rows: allDate.values
}
LogStatus('`' + JSON.stringify(table) + '`');
Kode di atas membuat tabel
/*backtest
start: 2020-07-19 00:00:00
end: 2020-08-17 23:59:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"LTC_USDT"}]
*/
function main() {
Log(DBExec('DROP TABLE tick;'));
// set contract
_C(exchange.SetContractType, 'swap');
// establish the data table
DBExec('CREATE TABLE IF NOT EXISTS "tick" (id INTEGER PRIMARY KEY AUTOINCREMENT,'.concat(
'High FLOAT not NULL,',
'Low FLOAT not NULL,',
'Sell FLOAT not NULL,',
'Buy FLOAT not NULL,',
'Last FLOAT not NULL,',
'Volume INTEGER not NULL,',
'Time INTEGER not NULL);'
));
// obtain 10 tick data
while (true) {
let tick = exchange.GetTicker();
// add data in the tick table
DBExec(`INSERT INTO tick(High, Low, Sell, Buy, Last, Volume, Time) values(${tick.High}, ${tick.Low}, ${tick.Sell}, ${tick.Buy}, ${tick.Last}, ${tick.Volume}, ${tick.Time})`);
// query all data
let allDate = DBExec('select * from tick');
if (allDate.values.length > 10) {
break;
}
Sleep(1000);
}
// query all data
Log(DBExec('select * from tick'));
// query the first data
Log(DBExec('select * from tick limit 1'));
// query the first two data
Log(DBExec('select * from tick limit 0,2'));
// delet the first data
Log(DBExec('DELETE FROM tick WHERE id=1;'));
// modify the second data
Log(DBExec('UPDATE tick SET High=10000 WHERE id=2'));
// query all data
let allDate = DBExec('select * from tick')
Log(allDate);
// create the status bar
let table = {
type: 'table',
title: 'Binance Tick data',
cols: allDate.columns,
rows: allDate.values
}
LogStatus('`' + JSON.stringify(table) + '`');
}
Klik link:https://www.fmz.com/strategy/265906, dan Anda dapat menyalin kode sumber lengkap.
Jika data yang dioperasikan tidak ingin disimpan secara permanen ke disk, Anda dapat menambahkan:
simbol sebelum pernyataan SQL untuk beroperasi di database in-memory, dan data akan diatur ulang setelah bot di-restart.
DBExec(":select 1,2,3");
Database ini tidak hanya dapat membawa data besar-besaran, tetapi juga membawa impian banyak penggemar perdagangan kuantitatif. Penggunaan database tidak terbatas pada contoh yang disebutkan dalam artikel. Untuk metode penggunaan lebih lanjut, Anda dapat merujuk ke tutorial SQLite dan serangkaian artikel yang akan diposting di FMZ Quant nanti.