[TOC]
اعداد و شمار کو کوٹیٹائزڈ ٹرانزیکشن کا ذریعہ ہے ، اور بڑے پیمانے پر اعداد و شمار کو موثر انداز میں کیسے منظم کیا جائے اس کا ایک بہت ہی اہم عنصر ہے۔ ڈیٹا بیس بہترین حل میں سے ایک ہے ، اور آج کل ڈیٹا بیس کی درخواست ہر طرح کی دن کی تجارت ، ہائی فریکوئنسی ٹریڈنگ اور اس طرح کی حکمت عملیوں کی کوٹیٹائزڈ معیاری ترتیب ہے۔ اس مضمون میں ہم ایجاد کاروں کو کوٹیٹائزڈ ٹرانزیکشن پر ایک نظر ڈالتے ہیں۔FMZ.COM) کے ساتھ بنایا گیا ڈیٹا بیس ، جس میں شامل ہیں: ڈیٹا بیس بنانے ، ڈیٹا کو اسٹور کرنے ، ڈیٹا کو تبدیل کرنے ، ڈیٹا کو حذف کرنے ، حوالہ دینے والے ڈیٹا اور اسے عملی جنگ میں استعمال کرنے کا طریقہ۔
کوانٹائزیشن پلیٹ فارم سے واقف انوینٹرز کو معلوم ہونا چاہئے کہ اس سے پہلے ڈیٹا کو مقامی طور پر دوبارہ استعمال کرنے کے لئے محفوظ کرنے کے لئے صرف _G() فنکشن کا استعمال کیا جاسکتا تھا ، جب بھی پالیسی کو روک دیا جاتا ہے تو ، _G() فنکشن خود بخود مطلوبہ معلومات کو محفوظ کرتا ہے۔ لیکن اگر آپ زیادہ سے زیادہ پیچیدہ فارمیٹڈ ڈیٹا کو محفوظ کرنا چاہتے ہیں تو ، _G() فنکشن واضح طور پر زیادہ موزوں نہیں ہے ، لہذا بہت سے لوگوں نے اس مسئلے کو حل کرنے کے لئے اپنے ڈیٹا بیس کی تعمیر کا خیال کیا۔
ڈیٹا بیس کی تعمیر کے بارے میں ، آپ کو امید ہے کہ آپ اوریکل ، ایس کیو ایل ، کے ڈی بی ، ون ٹِک ، نو ایس کیو ایل... کے بارے میں سوچیں گے۔ یہ بہت عمدہ انٹرپرائز سطح کی ایپلی کیشنز ہیں ، جو خصوصیات اور کارکردگی دونوں میں بہت طاقتور ہیں۔ لیکن اس کے ساتھ ساتھ کچھ مسائل بھی ہیں: ہینڈلنگ مشکل ، ترتیب دینے اور برقرار رکھنے میں دشواری ، جو مقدار کی تجارت کرنے والے خوردہ فروشوں کے لئے تھوڑا سا توپ خانے کی طرح محسوس ہوتا ہے ، یہاں تک کہ اگر وہ صرف ایک چھوٹی سی خصوصیت استعمال کرتے ہیں۔
اب آئیے ہم انوینٹرز کی طرف سے کوانٹیٹیٹڈ بلٹ ان ہلکے ڈیٹا بیس کے بارے میں بات کرتے ہیں۔ ڈی بی ایکسیک ایک رشتہ دار ڈیٹا مینجمنٹ سسٹم انٹرفیس ہے جو انوینٹرز کی طرف سے کوانٹیٹیٹیٹڈ بلٹ ان ہے ، جو ایس کیو ایلائٹ پر مبنی ہے ، جو خود سی میں لکھا گیا ہے ، نہ صرف چھوٹا ہے ، وسائل کو کم استعمال کرتا ہے ، بلکہ تیز رفتار پروسیسنگ بھی ہے ، جو مالیاتی کوانٹیٹیٹیٹڈ تجزیہ کے شوقین افراد کے لئے ڈیٹا مینجمنٹ کو مقامی طور پر لاگو کرنے کے لئے بہت موزوں ہے ، کیونکہ مختلف شیٹ اشیاء شیٹ (جیسے تبادلے ، ڈیٹا سورس ، قیمت) کو مختلف جدولوں میں تقسیم کیا جاسکتا ہے ، اور جدولوں کے مابین تعلقات کی وضاحت کی جاسکتی ہے۔ مزید برآں ، صارف کو الگ الگ انسٹال کرنے اور تشکیل دینے کی ضرورت نہیں ہے ، صرف ڈی بی ایکسیک (DBExec) فنکشن کو کال کریں!
مزید برآں ، SQLite زبان سیکھنے کی لاگت بہت کم ہے ، اور ڈیٹا بیس پر زیادہ تر کام SQLite بیانات کے ذریعہ کیا جاتا ہے۔ بنیادی نحو سے واقفیت زیادہ تر ضروریات کو پورا کرتی ہے۔ ذیل میں SQLite کی بنیادی نحو ہے۔
ایس کیو ایلائٹ کی نحو بڑے اور چھوٹے سائز کے درمیان کوئی فرق نہیں ہے، لیکن کچھ احکامات بڑے اور چھوٹے سائز کے بارے میں حساس ہیں، جیسے کہ گلوب اور گلوب مختلف معنی رکھتے ہیں۔ ایس کیو ایلائٹ کے بیانات کسی بھی کلیدی لفظ سے شروع ہوسکتے ہیں، جیسے کہ SELECT، INSERT، UPDATE، DELETE، ALTER، DROP وغیرہ۔ ان کا مطلب ہے: ڈیٹا نکالنا، ڈیٹا داخل کرنا، ڈیٹا کو اپ ڈیٹ کرنا، ڈیٹا کو حذف کرنا، ڈیٹا بیس میں ترمیم کرنا، ڈیٹا بیس کو حذف کرنا۔ تمام جملے انگریزی میں ایک نقطۂٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔٔ
function main() {
// 创建:如果“users”表不存在就创建一个,“id”是整数且自动增加,“name”是文本形式且不为空
Log(DBExec('CREATE TABLE IF NOT EXISTS "users" (id INTEGER PRIMARY KEY AUTOINCREMENT, name text not NULL);'));
// 增加:
Log(DBExec("INSERT INTO users(name) values('张三')"));
Log(DBExec("INSERT INTO users(name) values('李四')"));
// 删除:
Log(DBExec("DELETE FROM users WHERE id=1;"));
// 修改
Log(DBExec("UPDATE users SET name='王五' WHERE id=2"));
// 查询
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، log، profit، chart۔ یعنی ٹیبل بنانے کے وقت سسٹم کے محفوظ ناموں سے گریز کرنا چاہئے۔ آئیے اوپر کا کوڈ چلائیں اور مندرجہ ذیل کو آؤٹ پٹ کریں:
SQLite کے بنیادی نحو کو سمجھنے کے بعد، ہم نے انوینٹرز کے بلٹ ان ڈیٹا بیس کو مقدار میں استعمال کرنے کے لئے گرم لوہے کا استعمال کرتے ہوئے، ٹک ڈیٹا جمع کرنے اور استعمال کرنے کے لئے ایک مثال بنائی۔
پہلا مرحلہ: منتظمین کو اپ ڈیٹ کریںسب سے پہلے اس بات کو یقینی بنائیں کہ آپ تازہ ترین ورژن کا میزبان استعمال کر رہے ہیں۔ اگر آپ نے پہلے کسی میزبان کو ڈاؤن لوڈ کیا ہے تو آپ کو پہلے اسے ہٹانا پڑے گا، اور آپ کو اس کے بعد دوبارہ ڈاؤن لوڈ کرنے کی ضرورت ہوگی۔https://www.fmz.com/m/add-nodeصفحہ دوبارہ ڈاؤن لوڈ اور تعینات کیا گیا ہے۔
دوسرا مرحلہ: حکمت عملی تیار کریں
function main() {
// 订阅合约
_C(exchange.SetContractType, 'swap');
// 创建数据表
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);'
));
// 获取10个tick数据
while (true) {
let tick = exchange.GetTicker();
// 在tick表中增加数据
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})`);
// 查询所有数据
let allDate = DBExec('select * from tick');
if (allDate.values.length > 10) {
break;
}
Sleep(1000);
}
// 查询所有数据
Log(DBExec('select * from tick'));
// 查询第一个数据
Log(DBExec('select * from tick limit 1'));
// 查询前两个数据
Log(DBExec('select * from tick limit 0,2'));
// 删除第一个数据
Log(DBExec('DELETE FROM tick WHERE id=1;'));
// 修改第二个数据
Log(DBExec('UPDATE tick SET High=10000 WHERE id=2'));
// 查询所有数据
let allDate = DBExec('select * from tick')
Log(allDate);
}
تیسرا مرحلہ: حکمت عملی کا نفاذونڈوز کی مثال کے طور پر ، اس پالیسی کو چلانے کے بعد ، میزبان ڈائرکٹری میں ، ایک فولڈر پیدا ہوتا ہے جس کا نام روبوٹ نمبر کے ساتھ ہے ، جس میں ایک فائل ہوتی ہے جس میں.db3 فولڈر کے ساتھ ایک پس منظر ہوتا ہے ، جو کہ انوینٹرز کے ذریعہ بلٹ ان ڈیٹا بیس کو مقدار میں تبدیل کرنے کا ایک فائل ہے۔مندرجہ بالا کوڈ سب سے پہلے ایک ڈیٹا بیس بناتا ہے جس کا نام ٹاک ٹاک ہے ، پھر اس میں ٹک ڈیٹا فیلڈ شامل کرتا ہے ، پھر اس کے بعد اس کے بعد اس کے بعد ٹک ڈیٹا حاصل کرتا ہے ، اور اس ڈیٹا کو ٹک ٹاک ڈیٹا بیس میں داخل کرتا ہے ، اور اس کے بعد اس ڈیٹا بیس میں 10 سے زیادہ اعداد و شمار کا فیصلہ کرتا ہے۔ آخر میں ، 5 SQLite کمانڈز کے ساتھ ڈیٹا بیس میں ڈیٹا کو تلاش کریں ، حذف کریں ، ترمیم کریں اور اس کے بعد لاگ ان میں پرنٹ کریں ، جیسا کہ ذیل میں دکھایا گیا ہے: چوتھا مرحلہ: اسٹیٹس ٹیب بنائیںآخر میں ہم نے کچھ کوڈ شامل کیا ہے جو کہ انوینٹرز کے ڈیٹا بیس میں موجود اعداد و شمار کو مقدار میں حاصل کرنے کے لئے استعمال کیا جاتا ہے تاکہ اس پالیسی کو ایک اسٹیٹ بار بنایا جاسکے اور اس کو زیادہ بدیہی انداز میں دکھایا جاسکے۔
// 创建状态栏
let table = {
type: 'table',
title: '币安Tick数据',
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;'));
// 订阅合约
_C(exchange.SetContractType, 'swap');
// 创建数据表
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);'
));
// 获取10个tick数据
while (true) {
let tick = exchange.GetTicker();
// 在tick表中增加数据
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})`);
// 查询所有数据
let allDate = DBExec('select * from tick');
if (allDate.values.length > 10) {
break;
}
Sleep(1000);
}
// 查询所有数据
Log(DBExec('select * from tick'));
// 查询第一个数据
Log(DBExec('select * from tick limit 1'));
// 查询前两个数据
Log(DBExec('select * from tick limit 0,2'));
// 删除第一个数据
Log(DBExec('DELETE FROM tick WHERE id=1;'));
// 修改第二个数据
Log(DBExec('UPDATE tick SET High=10000 WHERE id=2'));
// 查询所有数据
let allDate = DBExec('select * from tick')
Log(allDate);
// 创建状态栏
let table = {
type: 'table',
title: '币安Tick数据',
cols: allDate.columns,
rows: allDate.values
}
LogStatus('`' + JSON.stringify(table) + '`');
}
اس لنک پر کلک کریںhttps://www.fmz.com/strategy/388963اس کے علاوہ، آپ کو اس کی مکمل پالیسی کوڈ کو بھی نقل کر سکتے ہیں.
اگر آپریشن کے اعداد و شمار کو مستقل طور پر ڈسک پر محفوظ نہیں کرنا چاہتے ہیں تو، SQL بیان سے پہلے شامل کیا جا سکتا ہے:
علامات کو میموری ڈیٹا بیس میں استعمال کیا جاسکتا ہے اور روبوٹ کو دوبارہ شروع کرنے کے بعد ڈیٹا کو دوبارہ ترتیب دیا جاسکتا ہے۔
DBExec(":select 1,2,3");
ڈیٹا بیس نہ صرف بڑے پیمانے پر ڈیٹا لے سکتی ہے ، بلکہ بہت سارے کوانٹیفیکیشن ٹریڈنگ کے شوقین افراد کے خوابوں کو بھی لے سکتی ہے۔ ڈیٹا بیس کے استعمال کے لئے یہ صرف اس مضمون کی مثالوں تک ہی محدود نہیں ہے ، مزید استعمال کے طریقوں کے لئے ایس کیو ایل ٹوٹوریل کا حوالہ دیا جاسکتا ہے ، اور ایجاد کنندہ کوانٹیفیکیشن کے بعد آنے والے مضامین کی ایک سیریز۔
دیانوان99یہ بہت اچھا ہے۔ صرف ایک خرابی یہ ہے کہ ڈیٹا کو مقامی طور پر ، فکسڈ ڈسک کے درمیان ریکارڈ نہیں کیا جاسکتا ہے۔
ولیامفوڈیٹا بیس دوبارہ جانچ پڑتال کی حمایت نہیں کرتا ہے؟
خدا کا شکر ہےبہت عمدہ
سپورٹ، آپ مقامی ڈیٹا بیس کو آزما سکتے ہیں
شکریہ