وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ایس کیو ایلائٹ کے ساتھ ایف ایم زیڈ کا مقداری ڈیٹا بیس بنانا

مصنف:FMZ~Lydia, تخلیق: 2022-11-09 11:40:34, تازہ کاری: 2023-09-20 10:55:14

img

خلاصہ

اعداد و شمار مقداری تجارت کا ذریعہ ہیں ، بڑی مقدار میں اعداد و شمار کو موثر انداز میں کیسے منظم کیا جائے یہ ایک بہت اہم لنک ہے ، ڈیٹا بیس بہترین حل میں سے ایک ہے ، آج کل ڈیٹا بیس کا اطلاق ہر طرح کی روزانہ کی تجارت ، اعلی تعدد کی تجارت اور دیگر حکمت عملیوں کے لئے مقداری معیار ہے۔ اس مضمون میں ہم ایف ایم زیڈ کوانٹ کے بلٹ ان ڈیٹا بیس کا مطالعہ کریں گے (https://www.fmz.com) ، بشمول: ڈیٹا ٹیبلز بنانے ، ڈیٹا اسٹور کرنے ، ڈیٹا کو تبدیل کرنے ، ڈیٹا کو حذف کرنے ، حوالہ جات کے اعداد و شمار اور عملی طور پر ان کا اطلاق کرنے کا طریقہ۔

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

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

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

ایف ایم زیڈ کوانٹ کا بلٹ ان ڈیٹا بیس

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

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

بنیادی گرامر

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

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

img

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

SQLite کی بنیادی گرامر سیکھنے کے بعد، ہم FMZ Quant کے بلٹ ان ڈیٹا بیس کا استعمال کرتے ہوئے ٹک ڈیٹا جمع کرنے اور استعمال کرنے کا ایک مثال بنانے کے لئے لوہے گرم ہے جبکہ حملہ.

مرحلہ 1: ڈوکر کو اپ ڈیٹ کریں

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

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

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

مرحلہ 3: حکمت عملی پر عمل کریں

مثال کے طور پر ونڈوز کو لیں ، حکمت عملی چلانے کے بعد ، روبوٹ نمبر کے نام سے ایک فولڈر ڈوکر ڈائرکٹری کی ڈائرکٹری \ لاگس \ اسٹوریج میں بنایا جائے گا۔ فولڈر کھولیں ، اور ایک فائل موجود ہے جس میں . db3 ، جو ایف ایم زیڈ کوانٹ بلٹ ان ڈیٹا بیس کی فائل ہے۔ جیسا کہ مندرجہ ذیل شکل میں دکھایا گیا ہے:

img

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

img

مرحلہ 4: اسٹیٹس بار بنائیں

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

    // Create 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;'));
    // 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");

خلاصہ

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


متعلقہ

مزید