Data adalah sumber perdagangan kuantitatif, bagaimana mengelola sejumlah besar data secara efisien adalah tautan yang sangat penting, basis data adalah salah satu solusi terbaik, saat ini aplikasi basis data adalah standar kuantitatif untuk semua jenis perdagangan harian, perdagangan frekuensi tinggi dan strategi lainnya.https://www.fmz.com), termasuk: bagaimana membuat tabel data, menyimpan data, memodifikasi data, menghapus data, data referensi dan bagaimana menerapkannya dalam praktek.
Mereka yang terbiasa dengan platform FMZ Quant harus tahu bahwa sebelum menyimpan data untuk penggunaan kembali lokal, Anda hanya dapat menggunakan fungsi _G(), yang menyimpan informasi yang dibutuhkan secara otomatis setiap kali Anda menghentikan strategi.
Ketika datang ke basis data yang dibuat sendiri, Anda harus memikirkan Oracle, MySQL, KDB, OneTick, NoSQL... Ini adalah aplikasi tingkat perusahaan yang sangat baik baik dalam fungsi dan kinerja. Namun, ada juga beberapa masalah: sulit untuk memulai, dan konfigurasi rumit dan pemeliharaan sulit. Untuk pedagang kuantitatif ritel, ini seperti menembak lalat dengan meriam. Bahkan jika mereka memulai, mereka hanya menggunakan sebagian kecil fungsi.
Selanjutnya, mari kita lihat database ringan yang dibangun oleh FMZ Quant. DBExec adalah antarmuka sistem manajemen data relasional built-in dari FMZ Quant. Ini dikembangkan berdasarkan SQLite dan ditulis dalam bahasa C. Ini tidak hanya kecil ukurannya, konsumsi sumber daya yang sedikit, tetapi juga cepat dalam pemrosesan. Ini sangat cocok untuk penggemar analisis kuantitatif keuangan untuk menerapkan manajemen data secara lokal, karena berbagai
Selain itu, sangat mudah untuk belajar bahasa SQLite, dan sebagian besar pekerjaan yang dilakukan pada database diselesaikan oleh pernyataan SQLite.
Grammar SQLite tidak sensitif huruf besar, meskipun ada beberapa perintah yang sensitif huruf besar, seperti GLOB dan glob, yang mewakili makna yang berbeda. Pernyataan SQLite dapat dimulai dengan kata kunci apa pun, seperti SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, dll, yang berarti: ekstrak data, masukkan data, perbarui data, hapus data, modifikasi database, dan hapus tabel data. Semua pernyataan diakhiri dengan semikolon bahasa Inggris. Berikut ini adalah operasi pembuatan database sederhana, menambahkan, menghapus, mengubah, dan memeriksa:
function main() {
// Create: If the "users" table does not exist, create one, "id" is an integer and is incremented automatically, "name" is in text form and is not empty
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('Zhang San')"));
Log(DBExec("INSERT INTO users(name) values('Li Si')"));
// Delete:
Log(DBExec("DELETE FROM users WHERE id=1;"));
// Modify:
Log(DBExec("UPDATE users SET name='Wang Wu' WHERE id=2"));
// Search:
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 diidentifikasi dengan nama, perhatikan 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 dan output sebagai berikut:
Setelah mempelajari tata bahasa dasar SQLite, kita menyerang sementara besi panas untuk membuat contoh mengumpulkan dan menggunakan data Tick dengan menggunakan built-in database FMZ Quant.
Pertama, pastikan Anda menggunakan versi terbaru dari docker. Jika Anda telah men-download dan menggunakan docker sebelumnya, Anda perlu menghapusnya terlebih dahulu, dan kemudian mendownload ulang dan menyebarkannya kembali padahttps://www.fmz.com/m/add-node page.
function main() {
// Subscribe contracts
_C(exchange.SetContractType, 'swap');
// Create 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);'
));
// Get 10 pieces of tick data
while (true) {
let tick = exchange.GetTicker();
// Add data to 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})`);
// Search all data
let allDate = DBExec('select * from tick');
if (allDate.values.length > 10) {
break;
}
Sleep(1000);
}
// Search all data
Log(DBExec('select * from tick'));
// Search the first data
Log(DBExec('select * from tick limit 1'));
// Search first two pieces of 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'));
// Search all data
let allDate = DBExec('select * from tick')
Log(allDate);
}
Ambil Windows sebagai contoh, setelah menjalankan strategi, folder yang diberi nama setelah nomor robot akan dibuat di direktori
Kode di atas membuat tabel data bernama
Akhirnya kita menambahkan beberapa kode untuk membuat bar status untuk strategi dengan mendapatkan data di database FMZ Quant untuk menampilkan data lebih visual, menambahkan kode menunjukkan sebagai berikut:
// Create 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;'));
// Subscribe contracts
_C(exchange.SetContractType, 'swap');
// Create 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 pieces of tick data
while (true) {
let tick = exchange.GetTicker();
// Add data to 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})`);
// Search all data
let allDate = DBExec('select * from tick');
if (allDate.values.length > 10) {
break;
}
Sleep(1000);
}
// Search all data
Log(DBExec('select * from tick'));
// Search the first data
Log(DBExec('select * from tick limit 1'));
// Search first two pieces of 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'));
// Search all data
let allDate = DBExec('select * from tick')
Log(allDate);
// Create status bar
let table = {
type: 'table',
title: 'Binance Tick data',
cols: allDate.columns,
rows: allDate.values
}
LogStatus('`' + JSON.stringify(table) + '`');
}
Klik link ini.https://www.fmz.com/strategy/388963untuk menyalin kode strategi penuh.
Jika Anda tidak ingin menyimpan data ke disk secara permanen, Anda dapat menambahkan simbol
DBExec(":select 1,2,3");
Database tidak hanya dapat membawa data besar-besaran, tetapi juga membawa mimpi banyak penggemar perdagangan kuantitatif. Penggunaan database tidak terbatas pada contoh-contoh dalam artikel ini. Untuk metode penggunaan lebih lanjut, silakan lihat tutorial SQLite dan artikel lanjutan FMZ Quant.