রিসোর্স লোড হচ্ছে... লোডিং...

লেনদেনের ভিত্তিতে উচ্চ ফ্রিকোয়েন্সি ব্যাকটেস্টিং সিস্টেম এবং কে-লাইন ব্যাকটেস্টিংয়ের ত্রুটি

লেখক:এফএমজেড-লিডিয়া, সৃষ্টিঃ ২০২২-১১-৩০ ১২ঃ৩৮ঃ৫০, আপডেটঃ ২০২৩-০৯-১১ ২০ঃ০১ঃ০১

img

লেনদেনের ভিত্তিতে উচ্চ ফ্রিকোয়েন্সি ব্যাকটেস্টিং সিস্টেম এবং কে-লাইন ব্যাকটেস্টিংয়ের ত্রুটি

আমি নিবন্ধে একটি ব্যাকটেস্টিং ইঞ্জিন প্রকাশ করেছি বিয়ানান্স ফিউচারগুলির মাল্টি-কার্উয়েন্সি হেজিং কৌশল নিয়ে গবেষণা (https://www.fmz.com/digest-topic/5584) এবং প্রথম প্রতিবেদনটি এক ঘন্টার কে-লাইন ব্যাকটেস্টিংয়ের উপর ভিত্তি করে, যা কৌশলটির কার্যকারিতা যাচাই করে। তবে, আসলে, পাবলিক কৌশলটির ঘুমের সময় 1 সেকেন্ড, যা বেশ উচ্চ ফ্রিকোয়েন্সি কৌশল। এক ঘন্টা কে-লাইন ব্যাকটেস্টিং ব্যবহার করে স্পষ্টতই সঠিক ফলাফল পাওয়া অসম্ভব। পরে মিনিট-লাইন ব্যাকটেস্টের ফলাফল যুক্ত করা হয়েছিল (https://www.fmz.com/digest-topic/5621) ফলস্বরূপ, ব্যাকটেস্টিং এর রিটার্ন অনেক উন্নত হয়েছে, কিন্তু দ্বিতীয় স্তরের ক্ষেত্রে কোন প্যারামিটারগুলি ব্যবহার করা উচিত তা এখনও নির্ধারণ করা অসম্ভব, এবং পুরো কৌশলটি বোঝা খুব পরিষ্কার নয়। মূল কারণটি কে-লাইন ভিত্তিক ব্যাকটেস্টিংয়ের গুরুত্বপূর্ণ ত্রুটি।

কে-লাইন ব্যাকটেস্টিং এর উপর ভিত্তি করে সমস্যা

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

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

কল্পনা করুন যে দুই ধরণের মধ্যস্থতা ব্যাকটেস্ট করার জন্য মিনিট-লাইন ব্যবহার করা হয়। তাদের মধ্যে পার্থক্য সাধারণত 10 ইউয়ান। এখন দেখা যায় যে 10:01-এ, চুক্তি A এর বন্ধের মূল্য 100 ইউয়ান, চুক্তি B এর বন্ধের মূল্য 112 ইউয়ান এবং পার্থক্য 12 ইউয়ান। সুতরাং কৌশলটি হেজিং শুরু করে। একটি নির্দিষ্ট সময়ে, পার্থক্য ফিরে আসে, এবং কৌশলটি 2 ইউয়ান রিটার্ন মুনাফা অর্জন করে।

যাইহোক, প্রকৃত পরিস্থিতি 10:00:45 এ ঘটতে পারে, চুক্তি A 100 ইউয়ান একটি লেনদেন উত্পন্ন, এবং তারপর কোন লেনদেন ছিল না। চুক্তি B 10:00:58 এ 112 ইউয়ান একটি লেনদেন উত্পন্ন। 10:01 এ, উভয় মূল্য বিদ্যমান ছিল না। এই সময়ে উদ্বোধনী মূল্য কি ছিল? এবং হেজিং কত পার্থক্য পেতে পারে? আমরা জানি না। একটি সম্ভাব্য পরিস্থিতি হল যে 10:00:58 এ, চুক্তি A এর এক কেনার প্রবণতা এবং এক বিক্রি 101.9-102.1 হয়, এবং 2 ইউয়ান কোন স্প্রেড নেই, যা আমাদের কৌশল অপ্টিমাইজেশান ব্যাপকভাবে বিভ্রান্ত করবে।

দ্বিতীয়টি হ'ল ম্যাচম্যাকিং। আসল ম্যাচম্যাকিং হ'ল দাম এবং সময় প্রথম। যদি ক্রেতা বিক্রয় এক দাম ছাড়িয়ে যায় তবে সে সাধারণত বিক্রয় এক দামেই লেনদেনটি শেষ করবে, অন্যথায়, সে অর্ডার বইয়ে প্রবেশ করবে এবং অপেক্ষা করবে। এটি স্পষ্ট যে কে-লাইন ডেটাতে এক বিক্রয় বা এক কেনার দাম নেই, যা বিশদ স্তরে ম্যাচিং সিমুলেট করতে অক্ষম।

সর্বশেষটি হ'ল বাজারে কৌশলটির লেনদেনের প্রভাব। যদি এটি একটি ছোট তহবিল ব্যাকটেস্ট হয় তবে প্রভাবটি ছোট হবে। তবে, যদি ট্রেডিং পরিমাণটি একটি বড় অনুপাতের জন্য অ্যাকাউন্ট করে তবে এটি বাজারে প্রভাব ফেলবে। লেনদেনটি অবিলম্বে সম্পন্ন হলে কেবলমাত্র দামের স্লিপ পয়েন্টটি বড় হবে না, তবে যদি আপনার ক্রয় অর্ডার ব্যাকটেস্টে সম্পন্ন হয় তবে এটি আসলে কিনতে চান এমন অন্যান্য মূল ব্যবসায়ীদের লেনদেনকে অগ্রাহ্য করে, যা বাজারে প্রজাপতি প্রভাব ফেলবে। তবে এই প্রভাবটি পরিমাণযুক্ত করা যায় না, এবং এটি কেবল অভিজ্ঞতার দ্বারা বলা যেতে পারে যে উচ্চ ফ্রিকোয়েন্সি ট্রেডিং কেবলমাত্র ছোট তহবিলকে সামঞ্জস্য করতে পারে।

রিয়েল-টাইম গভীরতা এবং টিকের উপর ভিত্তি করে ব্যাকটেস্টিং

FMZ বাস্তব বট স্তরের ব্যাকটেস্টিং প্রদান করে, যা বাস্তব ঐতিহাসিক 20 স্তরের গভীরতা, রিয়েল-টাইম সেকেন্ড টিক, লেনদেন দ্বারা লেনদেন এবং অন্যান্য তথ্য পেতে পারে, এবং এর উপর ভিত্তি করে এটি বাস্তব বট প্লেব্যাক ফাংশন তৈরি করেছে (https://www.fmz.com/m/database) এই ধরণের ব্যাকটেস্ট পরিমাপের প্রচুর পরিমাণে ডেটা এবং একটি ধীর গতি রয়েছে, যা কেবল দুই দিনের জন্য ব্যবহার করা যেতে পারে। তুলনামূলকভাবে উচ্চ ফ্রিকোয়েন্সি বা কঠোর সময় বিচারের প্রয়োজন এমন কৌশলগুলির জন্য, আসল বট ব্যাকটেস্টিং প্রয়োজনীয়। এফএমজেড দ্বারা সংগৃহীত ট্রেডিং জোড়া এবং সময় খুব বেশি দীর্ঘ নয়, তবে historical০ বিলিয়ন টুকরো historicalতিহাসিক ডেটা রয়েছে। বর্তমান মেলেজিং প্রক্রিয়াটি হ'ল যদি কেনার অর্ডারটি বিক্রয় এক অর্ডারের চেয়ে বড় হয় তবে এটি পরিমাণ না দেখে অবিলম্বে সম্পূর্ণ মেলে যাবে এবং যদি কেনার অর্ডারটি বিক্রয় এক অর্ডারের চেয়ে কম হয় তবে এটি মেলেজিং সারিতে প্রবেশ করবে। এই ব্যাকটেস্টিং প্রক্রিয়াটি কে-লাইন ব্যাকটেস্টিংয়ের প্রথম দুটি সমস্যা সমাধান করে তবে এটি এখনও শেষ সমস্যাটি সমাধান করতে পারে না। এবং যেহেতু ডেটা পরিমাণ খুব বড়, ব্যাকটেস্টিং গতি এবং সময় পরিসীমা সীমিত।

img img

লেনদেনের মাধ্যমে অর্ডার প্রবাহের উপর ভিত্তি করে ব্যাকটেস্টিং প্রক্রিয়া

K-Line সম্পর্কে খুব কম তথ্য রয়েছে, এবং গভীরতাও মিথ্যা হতে পারে। তবে, এক ধরণের ডেটা হ'ল বাজারের প্রকৃত লেনদেনের উদ্দেশ্য, যা সর্বাধিক বাস্তব লেনদেনের ইতিহাসকে প্রতিফলিত করে - অর্থাৎ লেনদেনের মাধ্যমে লেনদেন। এই নিবন্ধে, আমি অর্ডার প্রবাহের উপর ভিত্তি করে একটি উচ্চ-ফ্রিকোয়েন্সি ব্যাকটেস্টিং সিস্টেম প্রস্তাব করব, যা বাস্তব বট স্তরে ব্যাকটেস্টিংয়ের ডেটা পরিমাণকে ব্যাপকভাবে হ্রাস করবে এবং কিছু পরিমাণে বাজারে ট্রেডিং ভলিউমের প্রভাবকে সিমুলেট করবে।

আমি গত ৫ দিনের লেনদেনের মাধ্যমে লেনদেন ডাউনলোড করেছি বিন্যান্স এক্সটিজেড চিরস্থায়ী চুক্তি (ডাউনলোড ঠিকানাঃhttps://www.fmz.com/upload/asset/1ff487b007e1a848ead.csv) এর একটি কম জনপ্রিয় বৈচিত্র্য হিসাবে, 213,000 টি ডেটা রয়েছে। আসুন ডেটাটির রচনাটি একবার দেখে নেওয়া যাকঃ

[['XTZ', 1590981301905, 2.905, 0.4, 'False\n'],
 ['XTZ', 1590981303044, 2.903, 3.6, 'True\n'],
 ['XTZ', 1590981303309, 2.903, 3.7, 'True\n'],
 ['XTZ', 1590981303738, 2.903, 238.1, 'True\n'],
 ['XTZ', 1590981303892, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305250, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305643, 2.903, 197.3, 'True\n'],

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

প্রথমত, লেনদেনের দিক অনুসারে, আমরা বাজারে সঠিকভাবে কিনতে এবং বিক্রি করতে পারি। যদি এটি একটি সক্রিয় বিক্রয় অর্ডার হয়, তবে এই মুহুর্তে কিনতে এক দাম লেনদেনের দাম। যদি এটি একটি সক্রিয় ক্রয় অর্ডার হয়, তবে বিক্রয় এক দাম লেনদেনের দাম। যদি কোনও নতুন লেনদেন হয় তবে আমরা নতুন খোলার অবস্থান আপডেট করব। যদি এটি আপডেট না হয় তবে শেষ ফলাফলটি বজায় থাকবে। উপরের ডেটাগুলির শেষ মুহুর্তটি চালু করা সহজ। কিনতে এক দাম 2.903 এবং বিক্রয় এক দাম 2.904।

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

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

কিছু ছোটখাট বিবরণও রয়েছে। যদি একটি অর্ডারের ক্রয় মূল্য ক্রয় এক মূল্যের সমান হয়, তবে এখনও একটি নির্দিষ্ট সম্ভাবনা রয়েছে যে অর্ডারটি ক্রয় এক মূল্যের সাথে মিলবে। অর্ডারের অগ্রাধিকার এবং লেনদেনের সম্ভাবনা বিবেচনা করা দরকার, যা আরও জটিল, এবং এটি এখানে বিবেচনা করা হবে না।

ম্যাচমেকিং কোড

এক্সচেঞ্জ অবজেক্টগুলি মূলত অপরিবর্তিত, শুরুতে প্রবর্তনের উল্লেখ করতে পারে। কেবল নির্মাতা এবং গ্রহণকারীর কমিশনের মধ্যে পার্থক্য যোগ করা হয় এবং ব্যাকটেস্টিংয়ের গতি অনুকূলিত করা হয়। ম্যাচমেকিং কোডটি মূলত নীচে চালু করা হয়েছে।

    symbol = 'XTZ'
    loop_time = 0
    intervel = 1000 #The sleep time of the strategy is 1000ms
    init_price = data[0][2] #Initial price
    e = Exchange([symbol],initial_balance=1000000,maker_fee=maker_fee,taker_fee=taker_fee,log='') #Initialize the exchange
    depth = {'ask':data[0][2], 'bid':data[0][2]} #depth
    order = {'buy':{'price':0,'amount':0,'maker':False,'priority':False,'id':0},
             'sell':{'price':0,'amount':0,'maker':False,'priority':False,'id':0}} #Order
    for tick in data:
        price = int(tick[2]/tick_sizes[symbol])*tick_sizes[symbol] #Transaction price
        trade_amount = tick[3] #Number of transactions
        time_stamp = tick[1] #Transaction timestamp
        if tick[4] == 'False\n':
            depth['ask'] = price
        else:
            depth['bid'] = price
        
        if depth['bid'] < order['buy']['price']:
            order['buy']['priority'] = True
        if depth['ask'] > order['sell']['price']:
            order['sell']['priority'] = True
        if price > order['buy']['price']:
            order['buy']['maker'] = True
        if price < order['sell']['price']:
            order['sell']['maker'] = True
        
        #Order network delay can also be used as one of the matching conditions, which is not considered here
        cond1 = order['buy']['priority'] and order['buy']['price'] >= price and order['buy']['amount'] > 0
        cond2 = not order['buy']['priority'] and order['buy']['price'] > price and order['buy']['amount'] > 0
        cond3 = order['sell']['priority'] and order['sell']['price'] <= price and order['sell']['amount'] > 0
        cond4 = not order['sell']['priority'] and order['sell']['price'] < price and order['sell']['amount'] > 0

        if cond1 or cond2:
            buy_price = order['buy']['price'] if order['buy']['maker'] else price
            e.Buy(symbol, buy_price, min(order['buy']['amount'],trade_amount), order['buy']['id'], order['buy']['maker'])
            order['buy']['amount'] -= min(order['buy']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})
        if cond3 or cond4:
            sell_price = order['sell']['price'] if order['sell']['maker'] else price
            e.Sell(symbol, sell_price, min(order['sell']['amount'],trade_amount), order['sell']['id'], order['sell']['maker'])
            order['sell']['amount'] -= min(order['sell']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})

        if time_stamp - loop_time > intervel:
            order = get_order(e,depth,order) #Trading logic, not given here
            loop_time += int((time_stamp - loop_time)/intervel)*intervel

কিছু বিবরণ উল্লেখ করা উচিতঃ

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

গ্রিড কৌশলগুলির ব্যাকটেস্টিং

অবশেষে, আমরা প্রকৃত ব্যাকটেস্টিং পর্যায়ে পৌঁছেছি। এখানে, আমরা একটি সবচেয়ে ক্লাসিক গ্রিড কৌশল ব্যাকটেস্ট করতে যাচ্ছি এটি প্রত্যাশিত প্রভাব অর্জন করেছে কিনা তা দেখতে। কৌশল নীতিটি হ'ল প্রতিবার দাম 1% বৃদ্ধি পায়, আমরা একটি নির্দিষ্ট মানের শর্ট পজিশন অর্ডার রাখব (অন্যথায়, আমরা দীর্ঘ পজিশন অর্ডার রাখব), এবং আমরা কিনতে অর্ডার এবং বিক্রয় অর্ডার গণনা করব এবং তাদের আগে থেকে অপেক্ষা করব। কোডটি প্রকাশ করা হবে না। সমস্ত কোডগুলি ফাংশনে ইনক্যাপসুলার করুনGrid ('XTZ ', 100,0.31000, maker_fee=-0.00002, taker_fee=0.0003)এই পরামিতিগুলি হল: ট্রেডিং জোড়া, মূল্য বিচ্যুতির সাথে হোল্ডিং ভ্যালু ১%, অর্ডার ঘনত্ব ০.৩%, স্লিপ ইন্টারভাল এমএস, পেনডিং অর্ডার কমিশন এবং টেকার কমিশন।

গত ৫ দিন ধরে এক্সটিজেডের বাজার শক অবস্থায় রয়েছে, যা গ্রিড কৌশল জন্য খুবই উপযুক্ত।

img

আমরা প্রথমে রিটার্নের উপর বিভিন্ন পজিশনের প্রভাব ব্যাকটেস্ট করব। ঐতিহ্যগত ব্যাকটেস্টিং প্রক্রিয়া দ্বারা পরিমাপ করা রিটার্ন অবশ্যই পজিশনের বৃদ্ধির সাথে আনুপাতিকভাবে বৃদ্ধি পাবে।

e1 = Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e1.account['USDT'])
e2 = Grid('XTZ',1000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e2.account['USDT'])
e3 = Grid('XTZ',10000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e3.account['USDT'])
e4 = Grid('XTZ',100000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e4.account['USDT'])

মোট চারটি গ্রুপকে 100, 1000, 10000 এবং 100000 এর অবস্থান মানগুলির সাথে ব্যাকটেস্টিং করা হয়েছিল এবং ব্যাকটেস্টিংয়ের মোট সময় ছিল 1.3 সেকেন্ড। ফলাফলগুলি নিম্নরূপঃ

{'realised_profit': 28.470993031132966, 'margin': 0.7982662957624465, 'unrealised_profit': 0.0104554474048441, 'total': 10000028.481448, 'leverage': 0.0, 'fee': -0.3430967859046398, 'maker_fee': -0.36980249726699727, 'taker_fee': 0.026705711362357405}
{'realised_profit': 275.63148945320177, 'margin': 14.346335829979132, 'unrealised_profit': 4.4382117331794045e-14, 'total': 10000275.631489, 'leverage': 0.0, 'fee': -3.3102045933457784, 'maker_fee': -3.5800688964477048, 'taker_fee': 0.2698643031019274}
{'realised_profit': 2693.8701498889504, 'margin': 67.70120400534114, 'unrealised_profit': 0.5735269329348516, 'total': 10002694.443677, 'leverage': 0.0001, 'fee': -33.984021415250744, 'maker_fee': -34.879233866850974, 'taker_fee': 0.8952124516001403}
{'realised_profit': 22610.231198585603, 'margin': 983.3853688758861, 'unrealised_profit': -20.529965947304365, 'total': 10022589.701233, 'leverage': 0.002, 'fee': -200.87094000385412, 'maker_fee': -261.5849078470078, 'taker_fee': 60.71396784315319}

এটি দেখা যায় যে চূড়ান্ত উপলব্ধ মুনাফা যথাক্রমে পজিশন মানের ২৮.৪%, ২৭.৫%, ২৬.৯% এবং ২২.৬%। এটি বাস্তব পরিস্থিতির সাথেও সামঞ্জস্যপূর্ণ। অবস্থানটির মান যত বেশি হবে, অর্ডারের মান তত বেশি হবে এবং আংশিক লেনদেনের সম্ভাবনা তত বেশি হবে। অর্ডারের পরিমাণের তুলনায় চূড়ান্ত উপলব্ধ রিটার্নগুলি ছোট হবে। নীচের চিত্রটি যথাক্রমে ১০০ এবং ১০০০ এর অবস্থান মানগুলির সাথে আপেক্ষিক রিটার্নগুলির তুলনা দেখায়ঃ

img

আমরা ব্যাকটেস্টের রিটার্নের উপর বিভিন্ন পরামিতিগুলির প্রভাব যেমন অপেক্ষমান অর্ডার ঘনত্ব, ঘুমের সময় এবং কমিশনগুলি ব্যাকটেস্ট করতে পারি। উদাহরণস্বরূপ ঘুমের সময় নিন, এটি 100ms এ পরিবর্তন করুন, 1000ms এর ঘুমের সময়ের সাথে তুলনা করুন এবং রিটার্নগুলি পর্যবেক্ষণ করুন। ব্যাকটেস্টিং ফলাফলগুলি নিম্নরূপঃ

{'realised_profit': 29.079440803790423, 'margin': 0.7982662957624695, 'unrealised_profit': 0.0104554474048441, 'total': 10000029.089896, 'leverage': 0.0, 'fee': -0.3703702128662524, 'maker_fee': -0.37938946377435134, 'taker_fee': 0.009019250908098965}

মুনাফা সামান্য বৃদ্ধি পেয়েছে। এর কারণ হ'ল কৌশলটির জন্য কেবলমাত্র এক গোষ্ঠী অর্ডার মুলতুবি রয়েছে এবং কিছু অর্ডার পরিবর্তনের সময় নেই বলে ওঠানামা করা দাম পেতে পারে না। হ্রাসিত ঘুমের সময় এই সমস্যাটি উন্নত করে। এটি গ্রিড কৌশলতে মল্টি-গ্রুপ অর্ডার মুলতুবি রাখার গুরুত্বকেও দেখায়।

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

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


সম্পর্কিত

আরো