FMZ क्वांट डेटाबेस बनाने के लिए SQLite का उपयोग करें [TOC]
डेटा मात्रात्मक व्यापार का स्रोत है। बड़ी मात्रा में डेटा का कुशलतापूर्वक प्रबंधन करना बहुत महत्वपूर्ण है। डेटाबेस सबसे अच्छे समाधानों में से एक है। आजकल डेटाबेस का अनुप्रयोग विभिन्न दिन के व्यापार, उच्च आवृत्ति व्यापार और अन्य रणनीतियों का मानक मात्रात्मक विन्यास बन गया है। इस लेख में हम एफएमजेड क्वांट के अंतर्निहित डेटाबेस का अध्ययन करेंगे (FMZ.COM), जिसमें डेटा तालिकाओं को बनाने, डेटा को सहेजने, डेटा को संशोधित करने, डेटा को हटाने और संदर्भ डेटा के साथ-साथ व्यवहार में इसका उपयोग करने का तरीका शामिल है।
जो लोग एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म से परिचित हैं, उन्हें पता होना चाहिए कि इससे पहले, यदि आप पुनः उपयोग के लिए स्थानीय में डेटा सहेजना चाहते हैं, तो आप केवल _G() फ़ंक्शन का उपयोग कर सकते हैं। हर बार जब आप रणनीति को रोकते हैं, तो _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 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"));
}
एक डेटाबेस में आमतौर पर एक या अधिक तालिकाएं होती हैं, प्रत्येक तालिका में एक नाम पहचान होती है, यह ध्यान दिया जाना चाहिए कि सिस्टम आरक्षित तालिकाएं हैंः kvdb, cfg, लॉग, लाभ, चार्ट। यानी, तालिकाओं को बनाते समय आपको सिस्टम आरक्षित नामों से बचना चाहिए। चलो ऊपर कोड चलाते हैं, जो निम्न निर्यात करता हैः
SQLite के मूल वाक्यविन्यास को जानने के बाद, लोहे को गर्म करते समय हम मारते हैं; टिक डेटा एकत्र करने और उपयोग करने का एक उदाहरण बनाने के लिए FMZ Quant मात्रात्मक अंतर्निहित डेटाबेस का उपयोग करें।
चरण 1: डॉकर अद्यतन करेंसबसे पहले, सुनिश्चित करें कि आप एक डॉकर के नवीनतम संस्करण का उपयोग कर रहे हैं. यदि आपने पहले एक डॉकर डाउनलोड किया है और उपयोग किया है, तो आपको पहले इसे हटाने की आवश्यकता है, और इसे डाउनलोड करें और पृष्ठ पर फिर से तैनात करें (https://www.fmz.com/m/add-node).
चरण 2: रणनीति बनाएं
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);
}
चरण 3: रणनीति लागू करेंउदाहरण के लिए विंडोज को लें. रणनीति चलाने के बाद, डॉकर निर्देशिका के शब्दकोश
उपरोक्त कोड पहले
चरण 4: स्थिति पट्टी बनाएँअंत में, हम डेटा को अधिक सहज रूप से प्रदर्शित करने के लिए FMZ क्वांट डेटाबेस में डेटा प्राप्त करके रणनीति के लिए एक स्थिति पट्टी बनाने के लिए कोड के कुछ टुकड़े जोड़ते हैं। नया कोड निम्नानुसार हैः
// create a 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;'));
// 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) + '`');
}
लिंक पर क्लिक करें:https://www.fmz.com/strategy/265906, और आप पूर्ण स्रोत कोड की प्रतिलिपि बना सकते हैं।
यदि संचालित डेटा डिस्क पर स्थायी रूप से सहेजा नहीं जाना चाहता है, तो आप जोड़ सकते हैं:
एसक्यूएल कथन से पहले प्रतीक को इन-मेमोरी डेटाबेस में संचालित करने के लिए, और बॉट को पुनरारंभ करने के बाद डेटा रीसेट किया जाएगा।
DBExec(":select 1,2,3");
डेटाबेस न केवल बड़े पैमाने पर डेटा ले जा सकता है, बल्कि कई मात्रात्मक व्यापार उत्साही के सपनों को भी ले जा सकता है। डेटाबेस का उपयोग, किसी भी तरह से, लेख में उल्लिखित उदाहरणों तक सीमित नहीं है। अधिक उपयोग विधियों के लिए, आप SQLite ट्यूटोरियल और लेखों की श्रृंखला का संदर्भ ले सकते हैं जो बाद में FMZ Quant पर पोस्ट किए जाएंगे।