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