এসকিউএলআইটি ব্যবহার করে ইনভেন্টর কোয়ান্টামাইজড ডাটাবেস তৈরি করুন

লেখক: , তৈরিঃ 2021-03-26 17:09:32, আপডেটঃ 2023-09-24 19:36:26

[TOC]

img

সারাংশ

ডেটা হ'ল পরিমাণগত লেনদেনের উত্স, কীভাবে প্রচুর পরিমাণে ডেটা দক্ষতার সাথে পরিচালনা করা যায় তা অত্যন্ত গুরুত্বপূর্ণ, ডাটাবেসগুলি অন্যতম সেরা সমাধান, এবং বর্তমানে ডেটাবেসের প্রয়োগগুলি বিভিন্ন ধরণের দিনের মধ্যে লেনদেন, উচ্চ-ফ্রিকোয়েন্সি লেনদেন এবং অন্যান্য কৌশলগুলির জন্য পরিমাণগত মানক কনফিগারেশন।FMZ.COM) এর অন্তর্নির্মিত ডাটাবেস রয়েছে, যার মধ্যে রয়েছেঃ কীভাবে ডেটা সারণী তৈরি করা যায়, কীভাবে ডেটা সঞ্চয় করা যায়, কীভাবে ডেটা পরিবর্তন করা যায়, কীভাবে ডেটা মুছে ফেলা যায়, কীভাবে ডেটা উল্লেখ করা যায় এবং কীভাবে এটি বাস্তব যুদ্ধে প্রয়োগ করা যায়।

কিভাবে ডাটাবেস নির্বাচন করবেন

যারা কোয়ালিফাইং প্ল্যাটফর্মের সাথে পরিচিত তাদের জানা উচিত যে, পূর্বে স্থানীয়ভাবে পুনরাবৃত্তি করার জন্য ডেটা সংরক্ষণ করার জন্য কেবলমাত্র _G() ফাংশন ব্যবহার করা যেতে পারে, যখনই নীতিটি বন্ধ করা হয়, _G() ফাংশনটি স্বয়ংক্রিয়ভাবে প্রয়োজনীয় তথ্য সংরক্ষণ করে। তবে যদি আপনি আরও বেশি জটিল ফর্ম্যাটযুক্ত ডেটা সংরক্ষণ করতে চান তবে _G() ফাংশনটি স্পষ্টতই খুব বেশি কার্যকর নয়, তাই অনেক লোক এই সমস্যাটি সমাধানের জন্য নিজের ডেটাবেস তৈরি করার কথা ভেবেছিল।

নিজের ডেটাবেস তৈরির কথা বলতে গেলে, আশা করি আপনি মনে করতে পারেন যে ওরাকল, মাইএসকিউএল, কেডিবি, ওয়ানটিক, নোএসকিউএল... এগুলি খুব ভাল এন্টারপ্রাইজ-স্তরের অ্যাপ্লিকেশন, উভয় বৈশিষ্ট্য এবং কর্মক্ষমতা উভয়ই খুব শক্তিশালী। তবে কয়েকটি সমস্যাও রয়েছেঃ হ্যান্ডলিং কঠিন, কনফিগারেশন জটিল এবং রক্ষণাবেক্ষণের সমস্যা, যা পরিমাণযুক্ত লেনদেনের জন্য কিছুটা বন্দুকধারীর অনুভূতি দেয়, এমনকি হ্যান্ডেলাররা খুব অল্প কিছু ব্যবহার করে।

উদ্ভাবক ভৌগলিক ডাটাবেস পরিমাণ

এখন আসুন জেনে নিই ইনভেন্টরদের কোয়ালিফাইড বিল্ট-ইন লাইটওয়েট ডাটাবেস সম্পর্কে, DBExec হল ইনভেন্টরদের কোয়ালিফাইড বিল্ট-ইন রিলেশনাল ডেটা ম্যানেজমেন্ট সিস্টেম ইন্টারফেস, SQLite-ভিত্তিক, যা নিজে নিজে C-তে লেখা আছে, এটি ছোট আকারের, কম সম্পদ গ্রহণকারী এবং দ্রুত প্রক্রিয়াজাতকরণের পাশাপাশি আর্থিক কোয়ালিফাইড অ্যানালিটিক্স প্রেমীদের জন্য স্থানীয়ভাবে ডেটা ম্যানেজমেন্ট বাস্তবায়নের জন্য উপযুক্ত, কারণ এটি বিভিন্ন টেমপ্লেটে বিভিন্ন টেমপ্লেট (যেমন এক্সচেঞ্জ, ডেটা সোর্স, মূল্য) ভাগ করতে পারে এবং টেবিলগুলির মধ্যে সম্পর্ক সংজ্ঞায়িত করতে পারে; উপরন্তু, ব্যবহারকারীকে পৃথকভাবে ইনস্টল এবং কনফিগার করার প্রয়োজন নেই, কেবলমাত্র DBExec () ফাংশনটি কল করুন!

এছাড়া, এসকিউএলআইটি ভাষা শেখার খরচ খুবই কম, এবং ডাটাবেসের বেশিরভাগ কাজ এসকিউএলআইটি স্ট্রিং দ্বারা সম্পন্ন হয়।

মৌলিক ব্যাকরণ

এসকিউএলাইটের সিনট্যাক্স বড় আকারের মধ্যে পার্থক্য করে না, তবে কিছু কমান্ড বড় আকারের জন্য সংবেদনশীল, যেমন গ্লোব এবং গ্লোব বিভিন্ন অর্থের প্রতিনিধিত্ব করে। এসকিউএলাইটের বিবৃতিগুলি যে কোনও কীওয়ার্ড দিয়ে শুরু হতে পারে, যেমন 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;; অর্থাৎ, টেবিল তৈরি করার সময় সিস্টেম সংরক্ষিত নামগুলি এড়ানো উচিত। আসুন উপরে কোডটি চালান এবং নিম্নলিখিতগুলি আউটপুট করুনঃimg

কৌশলগত উদাহরণ

এসকিউএলাইটের মৌলিক সিনট্যাক্স জেনে আমরা গরম লোহা ব্যবহার করে ইনভেন্টরের বিল্ট-ইন ডেটাবেসকে পরিমাণযুক্ত করার জন্য টিক ডেটা সংগ্রহ এবং ব্যবহারের একটি উদাহরণ তৈরি করেছি।

প্রথম ধাপঃ হোস্ট আপডেট করুনপ্রথমে নিশ্চিত করুন যে আপনি সর্বশেষ সংস্করণ হোস্ট ব্যবহার করছেন, যদি আপনি আগে হোস্ট ব্যবহার করে ডাউনলোড করেন তবে আপনাকে প্রথমে এটি মুছে ফেলতে হবে এবং এটির সাথে আপনার অ্যাকাউন্টটি সংযুক্ত করতে হবে।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);
}

তৃতীয় ধাপঃ কৌশল প্রয়োগ করুনউইন্ডোজের উদাহরণস্বরূপ, নীতিটি চালানোর পরে, হোস্টের ডিরেক্টরির প্যানেল \ logs \ storage প্যানেলের মধ্যে একটি বট নামক একটি ফোল্ডার তৈরি করা হয়, যা প্যানেলটি খুলতে হবে, যার মধ্যে একটি ফাইল রয়েছে যা প্যানেল.db3 প্যানেল হিসাবে উপসর্গযুক্ত, যা ইনভেন্টরদের বিল্ট-ইন ডাটাবেসের ফাইলগুলিকে পরিমাণযুক্ত করে। নীচের চিত্রটি দেখায়ঃimgউপরের কোডটি প্রথমে একটি ডেটা টেবিল তৈরি করে যার নাম টিক টিক টিক, তারপর টেবিলটিতে টিক ডেটা ক্ষেত্র যুক্ত করে, তারপর লুপে এক্সচেঞ্জ থেকে টিক ডেটা পান এবং এই ডেটা টিক টিক ডেটা টেবিলে সন্নিবেশ করান, যখন ডেটা টেবিলে 10 টিরও বেশি থাকে তখন লুপটি ছাড়ুন। অবশেষে, 5 টি এসকিউএলআইটি কমান্ডের সাথে ডেটা টেবিলে অনুসন্ধান, মুছে ফেলা বা পরিবর্তন করুন। এবং লগগুলিতে মুদ্রণ করুন, নিম্নলিখিত চিত্রটি দেখায়ঃimg চতুর্থ ধাপঃ স্ট্যাটাস বার তৈরি করুনএবং শেষ পর্যন্ত আমরা কিছু কোড যোগ করেছি যা ইনভেন্টরদের ডাটাবেস থেকে তথ্য সংগ্রহ করে এবং এটিকে একটি স্ট্যাটাস বার তৈরি করে, যা তথ্যকে আরও স্বজ্ঞাতভাবে প্রদর্শন করে। নতুন কোডটি হলঃ

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

উপরের কোডটি ডাটাবেসের ডেটা দিয়ে একটি টিক টিক ডেটা ট্যাবলেট তৈরি করে; যেখানে ডাটাবেসের টিক columns টিক ফিল্ডগুলি স্ট্যাটাস ট্যাবের টিক সারি এবং টিক ভ্যালুস টিক ফিল্ডগুলি স্ট্যাটাস ট্যাবের টিক সারিকে প্রতিনিধিত্ব করে; যেমন নিচের চিত্রটি দেখানো হয়েছেঃ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;'));
    // 订阅合约
    _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");

সংক্ষিপ্তসার

একটি ডাটাবেস কেবলমাত্র বিশাল পরিমাণে ডেটা বহন করতে পারে না, তবে এটি প্রচুর পরিমাণে ট্রেডিং প্রেমীদের স্বপ্নের জন্যও বহন করতে পারে। ডাটাবেসের ব্যবহারের জন্য উদাহরণগুলি এই নিবন্ধে সীমাবদ্ধ নয়, আরও ব্যবহারের জন্য এসকিউএলাইট টিউটোরিয়াল এবং আবিষ্কারকের দ্বারা পরিমাণযুক্ত পরবর্তী সিরিজের নিবন্ধগুলি দেখুন।


সম্পর্কিত

আরো

দিয়ানওয়ান৯৯দুর্দান্ত. একমাত্র অসুবিধা হল যে ডেটা স্থানীয়ভাবে, বাস্তব ডিস্কের মধ্যে রেকর্ড করা যায় না।

উইলিয়ামফুডাটাবেস পুনরায় পরীক্ষা সমর্থন করে না? কোড pastExec পুনরায় পরীক্ষা রিটার্নঃReferenceError: DBExec is not defined

ঈশ্বরকে ধন্যবাদ।দারুণ।

সমর্থন, আপনি স্থানীয় ডাটাবেস চেষ্টা করতে পারেন

ধন্যবাদ।