डेटा मात्रात्मक व्यापार का स्रोत है, बड़ी मात्रा में डेटा का कुशलता से प्रबंधन कैसे करें यह एक बहुत ही महत्वपूर्ण कड़ी है, डेटाबेस सबसे अच्छे समाधानों में से एक है, आजकल डेटाबेस का अनुप्रयोग सभी प्रकार के दैनिक व्यापार, उच्च आवृत्ति व्यापार और अन्य रणनीतियों के लिए मात्रात्मक मानक है। इस लेख में हम एफएमजेड क्वांट के अंतर्निहित डेटाबेस का अध्ययन करेंगे (https://www.fmz.com), जिसमें डेटा तालिकाओं को बनाने, डेटा स्टोर करने, डेटा को संशोधित करने, डेटा को हटाने, संदर्भ डेटा और इसे व्यवहार में लागू करने का तरीका शामिल है।
जो लोग एफएमजेड क्वांट प्लेटफॉर्म से परिचित हैं, उन्हें पता होना चाहिए कि स्थानीय पुनः उपयोग के लिए डेटा सहेजने से पहले, आप केवल _G() फ़ंक्शन का उपयोग कर सकते हैं, जो रणनीति को रोकने के हर बार स्वचालित रूप से आवश्यक जानकारी को सहेजता है। लेकिन यदि आप अधिक और अधिक जटिल स्वरूपित डेटा सहेजना चाहते हैं, तो _G() फ़ंक्शन स्पष्ट रूप से बहुत लागू नहीं है, इसलिए, कई लोगों ने इस समस्या को हल करने के लिए अपना स्वयं का डेटाबेस बनाने का मन बनाया।
जब स्व-निर्मित डेटाबेस की बात आती है, तो आपको ओरेकल, MySQL, KDB, OneTick, NoSQL के बारे में सोचना चाहिए... ये कार्य और प्रदर्शन दोनों में बहुत उत्कृष्ट उद्यम-स्तरीय अनुप्रयोग हैं। हालांकि, कई समस्याएं भी हैंः शुरू करना मुश्किल है, और कॉन्फ़िगरेशन बोझिल है और रखरखाव मुश्किल है। खुदरा मात्रात्मक व्यापारियों के लिए, यह तोप के साथ मक्खियों को गोली मारने जैसा है। भले ही वे शुरू करें, वे केवल कार्यों के एक छोटे से हिस्से का उपयोग करते हैं।
इसके बाद, आइए FMZ Quant द्वारा निर्मित लाइट डेटाबेस पर एक नज़र डालें। DBExec FMZ Quant का एक अंतर्निहित रिलेशनल डेटा प्रबंधन प्रणाली इंटरफ़ेस है। यह SQLite के आधार पर विकसित किया गया है और C में लिखा गया है। यह न केवल आकार में छोटा है, संसाधन की खपत में कम है, बल्कि प्रसंस्करण में भी तेज़ है। यह वित्तीय मात्रात्मक विश्लेषण के उत्साही लोगों के लिए स्थानीय रूप से डेटा प्रबंधन को लागू करने के लिए बहुत उपयुक्त है, क्योंकि विभिन्न
इसके अतिरिक्त, यह SQLite भाषा सीखना बहुत आसान है, और डेटाबेस पर किया जाने वाला अधिकांश काम SQLite कथन द्वारा पूरा किया जाता है। यदि आप बुनियादी व्याकरण से परिचित हैं, तो आप अधिकांश आवश्यकताओं को पूरा कर सकते हैं। निम्नलिखित SQLite का बुनियादी व्याकरण है।
SQLite का व्याकरण केस-असंवेदनशील है, हालांकि कुछ कमांड हैं जो केस-संवेदनशील हैं, जैसे कि GLOB और glob, जो अलग-अलग अर्थों का प्रतिनिधित्व करते हैं। SQLite कथन किसी भी कीवर्ड से शुरू हो सकते हैं, जैसे कि SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, आदि, जिसका अर्थ हैः डेटा निकालें, डेटा डालें, डेटा अपडेट करें, डेटा हटाएं, डेटाबेस को संशोधित करें, और डेटा तालिका हटाएं। सभी कथन अंग्रेजी अर्धविराम से समाप्त होते हैं। निम्नलिखित एक सरल डेटाबेस निर्माण, जोड़ें, हटाएं, बदलें और जांच संचालन हैः
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"));
}
एक डेटाबेस में आमतौर पर एक या अधिक तालिकाएं होती हैं, प्रत्येक तालिका को एक नाम से पहचाना जाता है, ध्यान दें कि सिस्टम आरक्षित तालिकाएं हैंः kvdb, cfg, लॉग, लाभ, चार्ट। यानी तालिकाओं को बनाते समय, आपको सिस्टम आरक्षित नामों से बचना चाहिए। आइए ऊपर कोड चलाएं और निम्नलिखित आउटपुट करेंः
SQLite के बुनियादी व्याकरण को सीखने के बाद, हम FMZ क्वांट के अंतर्निहित डेटाबेस का उपयोग करके टिक डेटा एकत्र करने और उपयोग करने का एक उदाहरण बनाने के लिए लोहे को गर्म करते हुए मारते हैं।
सबसे पहले, सुनिश्चित करें कि आप डॉकर के नवीनतम संस्करण का उपयोग कर रहे हैं. यदि आपने पहले डॉकर डाउनलोड किया है और इसका उपयोग किया है, तो आपको पहले इसे हटाने की आवश्यकता है, और फिर इसे फिर से डाउनलोड करें और इसे फिर से तैनात करेंhttps://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);
}
उदाहरण के लिए विंडोज को लें, रणनीति चलाने के बाद, डॉकर निर्देशिका की
उपरोक्त कोड पहले
अंत में, हम कुछ कोड जोड़ते हैं ताकि डेटा को अधिक दृश्य रूप से प्रदर्शित करने के लिए एफएमजेड क्वांट डेटाबेस में डेटा प्राप्त करके रणनीति के लिए एक स्थिति पट्टी बनाई जा सके, जोड़ने वाला कोड निम्नानुसार दिखाता हैः
// Create status bar
let table = {
type: 'table',
title: 'Binance Tick data',
cols: allDate.columns,
rows: allDate.values
}
LogStatus('`' + JSON.stringify(table) + '`');
उपरोक्त कोड डेटाबेस में डेटा के माध्यम से
/*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) + '`');
}
इस लिंक पर क्लिक करेंhttps://www.fmz.com/strategy/388963पूरी रणनीति कोड की प्रतिलिपि बनाने के लिए।
यदि आप डेटा को डिस्क पर स्थायी रूप से सहेजना नहीं चाहते हैं, तो आप मेमोरी डेटाबेस में संचालित करने के लिए SQL कथन से पहले
DBExec(":select 1,2,3");
डेटाबेस न केवल बड़े पैमाने पर डेटा ले जा सकता है, बल्कि कई मात्रात्मक व्यापार उत्साही लोगों का सपना भी ले जा सकता है। डेटाबेस का उपयोग इस लेख में उदाहरणों तक सीमित नहीं है। अधिक उपयोग विधियों के लिए, कृपया SQLite ट्यूटोरियल और एफएमजेड क्वांट के अनुवर्ती लेखों का संदर्भ लें।