FMZ کوانٹ ڈیٹا بیس کی تعمیر کے لئے SQLite کا استعمال کریں

مصنف:نینا باداس, تخلیق: 2022-04-24 11:32:35, تازہ کاری: 2022-04-24 16:21:38

FMZ کوانٹ ڈیٹا بیس کی تعمیر کے لئے SQLite کا استعمال کریں [TOC]

خلاصہ

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

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

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

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

FMZ کوانٹ بلٹ ان ڈیٹا بیس

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

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

بنیادی نحو

ایس کیو ایلائٹ کا نحو بڑے اور چھوٹے حروف کے لئے حساس نہیں ہے ، لیکن کچھ کمانڈز بڑے اور چھوٹے حروف کے لئے حساس ہیں ، جیسے کہ گلوب اور گلوب ، جن کے مختلف معنی ہیں۔ ایس کیو ایلائٹ کے بیانات کسی بھی مطلوبہ الفاظ جیسے 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 ، لاگ ، منافع ، چارٹ۔ یعنی ، جب ٹیبلز بناتے ہو تو آپ کو سسٹم کے محفوظ کردہ ناموں سے گریز کرنا چاہئے۔ آئیے اوپر کوڈ چلائیں ، جو مندرجہ ذیل برآمد کرتا ہے:img

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

ایس کیو ایلائٹ کے بنیادی نحو کو جاننے کے بعد ، آئیے جب تک لوہا گرم ہے اس وقت تک حملہ کریں۔ ٹک ڈیٹا کو جمع کرنے اور استعمال کرنے کا ایک مثال بنانے کے لئے ایف ایم زیڈ کوانٹ کی کوانٹیٹیٹیو بلٹ ان ڈیٹا بیس کا استعمال کریں۔

مرحلہ 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: آپریشنل حکمت عملیمثال کے طور پر ونڈوز کو لے لو۔ حکمت عملی کو چلانے کے بعد ، ڈوکر ڈائرکٹری کی لغت \ لاگس \ اسٹوریج میں بوٹ آئی ڈی کے ساتھ ایک فولڈر تیار کیا جائے گا۔ فولڈر کھولیں ، اور ایک فائل ہوگی جس میں .db3 بطور تعارف ہے۔ یہ فائل ایف ایم زیڈ کوانٹ بلٹ ان ڈیٹا بیس کی فائل ہے۔ جیسا کہ مندرجہ ذیل شبیہہ میں دکھایا گیا ہے:img

مندرجہ بالا کوڈ پہلے tick نامی ڈیٹا ٹیبل بناتا ہے ، پھر ٹیبل میں ٹِک ڈیٹا فیلڈ شامل کرتا ہے ، پھر لوپ میں پلیٹ فارم سے ٹِک ڈیٹا حاصل کرتا ہے ، اور اس ڈیٹا کو tick ڈیٹا ٹیبل میں داخل کرتا ہے ، اور اسی وقت اگر یہ فیصلہ کیا جاتا ہے کہ ڈیٹا ٹیبل میں ڈیٹا کی مقدار 10 سے زیادہ ہے تو ، یہ لوپ سے باہر نکل جائے گا۔ آخر میں ، ڈیٹا ٹیبل میں ڈیٹا کو استفسار ، حذف اور ترمیم کرنے کے لئے پانچ SQLite کمانڈز استعمال کریں۔ اور اسے لاگ میں پرنٹ کریں ، جیسا کہ مندرجہ ذیل تصویر میں دکھایا گیا ہے:img

مرحلہ 4: اسٹیٹس بار بنائیںآخر میں ، ہم کچھ کوڈ کو شامل کرتے ہیں تاکہ ڈیٹا کو زیادہ بدیہی طور پر ظاہر کرنے کے لئے ایف ایم زیڈ کوانٹ ڈیٹا بیس میں ڈیٹا حاصل کرکے حکمت عملی کے لئے ایک اسٹیٹس بار بنایا جاسکے۔ نیا کوڈ مندرجہ ذیل ہے:

    // create a status bar 
    let table = {
        type: 'table',
        title: 'Binance Tick data',
        cols: allDate.columns,
        rows: allDate.values
    }
    LogStatus('`' + JSON.stringify(table) + '`');

مندرجہ بالا کوڈ ڈیٹا بیس میں موجود اعداد و شمار سے بائننس ٹِک ڈیٹا ٹیبل بناتا ہے۔ ڈیٹا بیس میں کالم فیلڈ اسٹیٹس بار میں افقی قطار کی نمائندگی کرتا ہے ، اور اقدار فیلڈ اسٹیٹس بار میں عمودی قطار کی نمائندگی کرتا ہے۔ جیسا کہ ذیل میں دکھایا گیا ہے:img

مکمل حکمت عملی کا ماخذ کوڈ

/*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، اور آپ کو مکمل سورس کوڈ کاپی کر سکتے ہیں.

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

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

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

نتیجہ

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


مزید