FMZ কোয়ান্ট ডাটাবেস তৈরি করতে SQLite ব্যবহার করুন [TOC]
ডেটা পরিমাণগত ট্রেডিং এর উৎস। এটি কার্যকরভাবে একটি বড় পরিমাণে তথ্য পরিচালনা করতে খুব গুরুত্বপূর্ণ। ডাটাবেস সেরা সমাধানগুলির মধ্যে একটি। আজকাল, ডাটাবেসের প্রয়োগ বিভিন্ন দিনের ট্রেডিং, উচ্চ ফ্রিকোয়েন্সি ট্রেডিং এবং অন্যান্য কৌশলগুলির মানক পরিমাণগত কনফিগারেশনে পরিণত হয়েছে। এই নিবন্ধে আমরা এফএমজেড কোয়ান্টের অন্তর্নির্মিত ডাটাবেসটি অধ্যয়ন করব (FMZ.COM), যার মধ্যে রয়েছেঃ কীভাবে ডেটা টেবিল তৈরি করা যায়, ডেটা সংরক্ষণ করা যায়, ডেটা পরিবর্তন করা যায়, ডেটা মুছে ফেলা যায় এবং রেফারেন্স ডেটা ব্যবহার করা যায়।
যারা এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের সাথে পরিচিত তাদের জানা উচিত যে এর আগে, আপনি যদি পুনরায় ব্যবহারের জন্য স্থানীয়তে ডেটা সংরক্ষণ করতে চান তবে আপনি কেবল _ জি (()) ফাংশনটি ব্যবহার করতে পারেন। আপনি যখনই কৌশলটি বন্ধ করবেন, _ জি (()) ফাংশনটি স্বয়ংক্রিয়ভাবে প্রয়োজনীয় তথ্য সংরক্ষণ করবে। তবে আপনি যদি আরও বেশি জটিল ফর্ম্যাটযুক্ত ডেটা সংরক্ষণ করতে চান তবে _ জি (()) ফাংশনটি অবশ্যই উপযুক্ত নয়, তাই অনেক লোক সমস্যার সমাধানের জন্য তাদের নিজস্ব ডাটাবেস তৈরি করার কথা ভাবছে।
যখন এটি স্ব-নির্মিত ডাটাবেসের কথা আসে, সবাই ওরাকল, মাইএসকিউএল, কেডিবি, ওয়ানটিক, নোএসকিউএল... এই সমস্তগুলি কার্যকারিতা এবং কর্মক্ষমতা উভয় ক্ষেত্রেই দুর্দান্ত এন্টারপ্রাইজ-স্তরের অ্যাপ্লিকেশন মনে করতে পারে। তবে কিছু সমস্যাও রয়েছেঃ শুরু করা কঠিন, এবং কনফিগারেশন এবং রক্ষণাবেক্ষণ কঠিন। পরিমাণগত ব্যবসায়ের খুচরা বিনিয়োগকারীদের জন্য, এটি চাকার উপর একটি মাছি ভাঙ্গার মতো। এমনকি আপনি যদি ইতিমধ্যে এই অ্যাপ্লিকেশনগুলির সাথে শুরু করেন তবে তাদের মধ্যে কেবল কয়েকটি ফাংশন ব্যবহার করা হবে।
এরপরে, আসুন আমরা এফএমজেড কোয়ান্টের অন্তর্নির্মিত হালকা ওজনের ডাটাবেসটি জানি। ডিবিএক্সইসি একটি রিলেশনাল ডেটা ম্যানেজমেন্ট সিস্টেম ইন্টারফেস যা এফএমজেড কোয়ান্টের অন্তর্নির্মিত। এটি এসকিউএলাইটের উপর ভিত্তি করে তৈরি করা হয়েছে এবং সি তে লেখা হয়েছে। এটি কেবলমাত্র ছোট আকারের নয়, কম সংস্থান দখলে রয়েছে, তবে এটির একটি খুব দ্রুত প্রসেসিং গতিও রয়েছে। এটি আর্থিক পরিমাণগত বিশ্লেষণের উত্সাহীদের জন্য স্থানীয়ভাবে ডেটা ম্যানেজমেন্ট বাস্তবায়নের জন্য খুব উপযুক্ত, কারণ এটি বিভিন্ন
এছাড়া, এসকিউএলাইট ভাষা শেখার খরচ খুবই কম, এবং ডাটাবেসে বেশিরভাগ কাজ এসকিউএলাইট স্ট্র্যাটেক্স দ্বারা সম্পন্ন হয়। বেশিরভাগ চাহিদা মৌলিক সিনট্যাক্সের সাথে পরিচিত হয়ে পূরণ করা যেতে পারে। নিম্নলিখিতটি এসকিউএলাইটের মৌলিক সিনট্যাক্স।
এসকিউএলাইটের সিনট্যাক্স কেস-সেনসিটিভ নয়, তবে কিছু কমান্ড কেস-সেনসিটিভ, যেমন গ্লোব এবং গ্লোব, যার বিভিন্ন অর্থ রয়েছে। এসকিউএলাইট স্ট্রাকচারগুলি যে কোনও কীওয়ার্ড দিয়ে শুরু হতে পারে, যেমন 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, লগ, মুনাফা, চার্ট। অর্থাৎ, টেবিল তৈরি করার সময় আপনাকে সিস্টেম সংরক্ষিত নামগুলি এড়ানো উচিত। আসুন উপরের কোডটি চালান, যা নিম্নলিখিতগুলি রফতানি করেঃ
এসকিউএলাইটের মৌলিক বাক্য গঠন জানার পরে, লোহা গরম থাকাকালীন স্ট্রাইক করা যাক; টিক ডেটা সংগ্রহ এবং ব্যবহারের একটি উদাহরণ তৈরি করতে এফএমজেড ক্যুইন্টাম্যান্ট পরিমাণগত অন্তর্নির্মিত ডাটাবেস ব্যবহার করুন।
ধাপ ১ঃ ডকার আপডেট করুনপ্রথমত, নিশ্চিত করুন যে আপনি একটি ডকারের সর্বশেষ সংস্করণ ব্যবহার করছেন। যদি আপনি আগে একটি ডকার ডাউনলোড এবং ব্যবহার করেছেন, আপনাকে প্রথমে এটি মুছে ফেলতে হবে, এবং এটি ডাউনলোড এবং পৃষ্ঠায় আবার স্থাপন করতে হবে (https://www.fmz.com/m/add-node).
পদক্ষেপ ২ঃ কৌশল তৈরি করুন
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);
}
ধাপ ৩ঃ কৌশল কার্যকর করুনউদাহরণস্বরূপ উইন্ডোজ নিন। কৌশলটি চালানোর পরে, ডকার ডিরেক্টরির অভিধান
উপরের কোডটি প্রথমে
ধাপ ৪ঃ স্ট্যাটাস বার তৈরি করুনঅবশেষে, আমরা তথ্য আরো স্বজ্ঞাতভাবে প্রদর্শন করার জন্য FMZ Quant ডাটাবেস থেকে তথ্য সংগ্রহ করে কৌশল জন্য একটি অবস্থা বার তৈরি করার জন্য কোড কিছু টুকরা যোগ করুন। নতুন কোড নিম্নরূপঃ
// 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");
ডাটাবেসটি কেবলমাত্র বিশাল পরিমাণে ডেটা বহন করতে পারে না, তবে অনেক পরিমাণগত ট্রেডিং উত্সাহীদের স্বপ্নও বহন করতে পারে। ডাটাবেসের ব্যবহার কোনওভাবেই নিবন্ধে উল্লিখিত উদাহরণগুলিতে সীমাবদ্ধ নয়। আরও ব্যবহারের পদ্ধতির জন্য, আপনি এসকিউএলাইট টিউটোরিয়াল এবং সিরিজটি উল্লেখ করতে পারেন নিবন্ধগুলি যা পরে এফএমজেড কোয়ান্টে পোস্ট করা হবে।