avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

ایک موجد مقداری ڈیٹا بیس بنانے کے لیے SQLite کا استعمال

میں تخلیق کیا: 2021-03-26 17:09:32, تازہ کاری: 2024-12-05 21:56:39
comments   5
hits   2295

[TOC]

ایک موجد مقداری ڈیٹا بیس بنانے کے لیے SQLite کا استعمال

خلاصہ

ڈیٹا مقداری تجارت کا ذریعہ ہے ڈیٹا کی بڑی مقدار کو کس طرح منظم کرنا ایک اہم ترین حل ہے آج کل، ڈیٹا بیس کا اطلاق مختلف انٹرا ڈے ٹریڈنگ کے لیے ایک مقداری معیاری ترتیب بن گیا ہے۔ اور دیگر حکمت عملی. اس آرٹیکل میں، ہم Inventor Quantitative (FMZ.COM) کے بلٹ ان ڈیٹا بیس کا مطالعہ کریں گے، بشمول: ڈیٹا ٹیبلز کیسے بنائیں، ڈیٹا کو اسٹور کریں، ڈیٹا میں ترمیم کریں، ڈیٹا کو ڈیلیٹ کریں، حوالہ ڈیٹا، اور اسے اصل جنگ میں کیسے لاگو کیا جائے۔

ڈیٹا بیس کا انتخاب کیسے کریں۔

جو لوگ موجد مقداری پلیٹ فارم سے واقف ہیں انہیں معلوم ہونا چاہیے کہ اس سے پہلے، اگر آپ مقامی طور پر ڈیٹا کو دوبارہ استعمال کرنے کے لیے محفوظ کرنا چاہتے ہیں، تو آپ جب بھی حکمت عملی کو روکتے ہیں، صرف _G() فنکشن استعمال کر سکتے ہیں۔_G() فنکشن خود بخود مطلوبہ معلومات کو محفوظ کر لے گا۔ لیکن اگر آپ زیادہ پیچیدہ فارمیٹ شدہ ڈیٹا کو محفوظ کرنا چاہتے ہیں،_G() فنکشن واضح طور پر زیادہ قابل اطلاق نہیں ہے، اس لیے بہت سے لوگوں نے اس مسئلے کو حل کرنے کے لیے اپنا ڈیٹا بیس بنانے کا سوچا۔

جب خود ساختہ ڈیٹا بیس کی بات آتی ہے، تو شاید ہر کوئی Oracle, MySQL, KDB, OneTick, NoSQL کے بارے میں سوچتا ہے… یہ تمام بہترین انٹرپرائز لیول ایپلی کیشنز ہیں، بہت طاقتور فنکشنز اور کارکردگی کے ساتھ۔ تاہم، اسے کئی مسائل کا سامنا ہے: یہ شروع کرنا مشکل ہے، کنفیگریشن بوجھل ہے اور ریٹیل مقداری تاجروں کے لیے یہ کچھ ایسا ہی ہے جیسے وہ ایک مکھی کو مارنے کے لیے استعمال کرتے ہیں، وہ کریں گے۔ صرف افعال کا ایک چھوٹا سا حصہ استعمال کریں۔

موجد مقداری بلٹ ان ڈیٹا بیس

اس کے بعد، آئیے InventorQuant میں بنائے گئے ہلکے وزن والے ڈیٹا بیس پر ایک نظر ڈالیں جو InventorQuant میں بنایا گیا ہے اور یہ SQLite کی بنیاد پر تیار کیا گیا ہے۔ یہ نہ صرف سائز میں چھوٹا اور وسائل کی کھپت میں کم ہے۔ ، لیکن پروسیسنگ کی رفتار بھی تیز ہے اور یہ مالیاتی مقداری تجزیہ کے شوقین افراد کے لیے مقامی طور پر ڈیٹا مینجمنٹ کو نافذ کرنے کے لیے بہت موزوں ہے، کیونکہ مختلف “آبجیکٹ” (جیسے تبادلے، ڈیٹا کے ذرائع، قیمتیں) کو مختلف جدولوں میں تقسیم کیا جا سکتا ہے اور تعلقات کی وضاحت کی جا سکتی ہے۔ میزوں کے درمیان. اس کے علاوہ، صارفین کو الگ سے انسٹال اور کنفیگر کرنے کی ضرورت نہیں ہے، وہ اسے براہ راست DBExec() فنکشن پر کال کر کے استعمال کر سکتے ہیں!

اس کے علاوہ، SQLite زبان کی سیکھنے کی لاگت بہت کم ہے، اور ڈیٹا بیس پر کیے جانے والے زیادہ تر کام SQLite بیانات کے ذریعے کیے جاتے ہیں۔ بنیادی نحو سے واقف ہونا زیادہ تر ضروریات کو پورا کر سکتا ہے SQLite کا بنیادی نحو درج ذیل ہے۔

بنیادی نحو

ایس کیو ایلائٹ سنٹیکس کیس حساس نہیں ہے، لیکن کچھ کمانڈز کیس حساس ہیں، جیسے GLOB اور گلوب، جن کے مختلف معنی ہیں۔ 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 کا استعمال

حکمت عملی کی مثالیں۔

اب جب کہ ہم SQLite کے بنیادی نحو کو جانتے ہیں، ہم InventorQuant کے بلٹ ان ڈیٹا بیس کو استعمال کر سکتے ہیں تاکہ ٹک ڈیٹا کو جمع کرنے اور استعمال کرنے کی مثال بنائیں۔

مرحلہ 1: اپنے میزبان کو اپ ڈیٹ کریں۔ سب سے پہلے، یقینی بنائیں کہ آپ میزبان کا تازہ ترین ورژن استعمال کر رہے ہیں، اگر آپ نے پہلے میزبان کو ڈاؤن لوڈ اور استعمال کیا ہے، تو آپ کو پہلے اسے حذف کرنا ہوگا اور پھر اسے دوبارہ ڈاؤن لوڈ کرکے https://www.fmz.com/ پر تعینات کرنا ہوگا۔ m/add-node صفحہ۔

مرحلہ 2: حکمت عملی بنائیں

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);
}

مرحلہ 3: حکمت عملی چلائیں۔ ونڈوز کو ایک مثال کے طور پر لے کر، پالیسی کو چلانے کے بعد، ہوسٹ ڈائرکٹری کی “\logs\storage” ڈائرکٹری میں ایک فولڈر تیار کیا جائے گا اور اس میں “.db3” لاحقہ فائل ہوگی۔ اس میں، یہ فائل موجد کے کوانٹیفائیڈ بلٹ ان ڈیٹا بیس کی فائل ہے۔ جیسا کہ مندرجہ ذیل تصویر میں دکھایا گیا ہے: ایک موجد مقداری ڈیٹا بیس بنانے کے لیے SQLite کا استعمال مندرجہ بالا کوڈ سب سے پہلے “ٹک” کے نام سے ایک ڈیٹا ٹیبل بناتا ہے، پھر ٹیبل میں ٹک ڈیٹا فیلڈ شامل کرتا ہے، پھر ایک لوپ میں ایکسچینج سے ٹک ڈیٹا حاصل کرتا ہے اور اس ڈیٹا کو “ٹک” ڈیٹا ٹیبل میں داخل کرتا ہے۔ ڈیٹا ٹیبل میں 10 سے زیادہ، لوپ باہر کود جائے گا۔ آخر میں، پانچ SQLite کمانڈز ڈیٹا ٹیبل میں ڈیٹا کو استفسار کرنے، حذف کرنے اور اس میں ترمیم کرنے کے لیے استعمال کیے جاتے ہیں۔ اور اسے لاگ میں پرنٹ کریں، جیسا کہ درج ذیل تصویر میں دکھایا گیا ہے۔ ایک موجد مقداری ڈیٹا بیس بنانے کے لیے SQLite کا استعمال مرحلہ 4: اسٹیٹس بار بنائیں آخر میں، ہم انوینٹر کوانٹیٹیو ڈیٹا بیس سے ڈیٹا حاصل کر کے حکمت عملی کے لیے اسٹیٹس بار بنانے کے لیے کچھ کوڈ شامل کرتے ہیں تاکہ ڈیٹا کو مزید بدیہی طور پر ظاہر کیا جا سکے۔

    // 创建状态栏
    let table = {
        type: 'table',
        title: '币安Tick数据',
        cols: allDate.columns,
        rows: allDate.values
    }
    LogStatus('`' + JSON.stringify(table) + '`');

مندرجہ بالا کوڈ ڈیٹا بیس میں ڈیٹا کا استعمال کرتے ہوئے ایک “Binance Tick Data” ٹیبل بناتا ہے۔ ڈیٹا بیس میں “کالم” فیلڈ اسٹیٹس بار میں “قطاروں” کی نمائندگی کرتا ہے، اور “ویلیوز” فیلڈ اسٹیٹس بار میں “کالم” کی نمائندگی کرتا ہے۔ جیسا کہ مندرجہ ذیل تصویر میں دکھایا گیا ہے: ایک موجد مقداری ڈیٹا بیس بنانے کے لیے SQLite کا استعمال

مکمل حکمت عملی کوڈ

/*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 پر کلک کریں۔

ان میموری ڈیٹا بیس

اگر آپ ڈیٹا کو مستقل طور پر ڈسک میں محفوظ نہیں کرنا چاہتے تو آپ شامل کر سکتے ہیں۔:میموری ڈیٹا بیس میں علامتیں چلائی جا سکتی ہیں، اور روبوٹ کے دوبارہ شروع ہونے کے بعد ڈیٹا کو دوبارہ ترتیب دیا جاتا ہے۔

DBExec(":select 1,2,3");

خلاصہ کریں۔

ڈیٹا بیس نہ صرف بڑے پیمانے پر ڈیٹا لے جا سکتا ہے، بلکہ بہت سے مقداری تجارت کے شوقین افراد کے خوابوں کو بھی پورا کر سکتا ہے۔ ڈیٹا بیس کا استعمال صرف اس مضمون میں دی گئی مثالوں تک محدود نہیں ہے، مزید استعمال کے طریقوں کے لیے، براہ کرم ایس کیو ایل ٹیوٹوریل اور انوینٹر کوانٹیٹیو کے ذریعہ جاری کردہ مضامین کی سیریز دیکھیں۔