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

লেখক:ভাল, তৈরিঃ 2020-06-16 10:30:19, আপডেটঃ 2023-11-01 20:26:21

img

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

কে-লাইন ব্যাকটেস্টে ভিত্তিক সমস্যা

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

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

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

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

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

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

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

FMZ বাস্তব স্তরের ব্যাকটেস্ট প্রদান করে, যা বাস্তব ঐতিহাসিক তথ্য পেতে পারে।20 layer depth price, রিয়েল-টাইম দ্বিতীয় স্তরেরTicks, Each Individual Transactionএই বৈশিষ্ট্যগুলির উপর ভিত্তি করে, এফএমজেড একটি রিয়েল-টাইম লেনদেন প্লেব্যাক ফাংশন তৈরি করেছে।

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

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

img

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

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

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

[['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'],

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

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

অর্ডার প্রবাহ অনুযায়ী, এটা এই ভাবে মিলিত করা যেতে পারেঃ উদাহরণস্বরূপ একটি ক্রয় অর্ডার নিতে, মূল্য হয়price, অর্ডার পরিমাণ হলamount, তারপর কিনতে এবং এই সময়ে 1 বিক্রি হয়bidএবংaskযদিpriceএর চেয়ে কমaskএবং উচ্চতরbid, তাহলে এটিকেmakerপ্রথম, এবং অগ্রাধিকার একটি চুক্তি করতে মিলে যেতে পারে, তারপর একটি লেনদেনের মূল্য কম বা সমান সঙ্গে সব চুক্তিpriceঅর্ডার অস্তিত্ব সময় এই আদেশের সাথে মেলে হবে (যদিpriceএর চেয়ে কম বা সমানbid), লেনদেনের কোন অগ্রাধিকার দেওয়া হয় না। লেনদেনের মূল্যের চেয়ে কম অর্ডারpriceএই আদেশের সাথে মিলে যায়)

দামের সমন্বয় হলprice, এবং ভলিউম হল লেনদেনের ভলিউমEach Individual Transaction, যতক্ষণ না অর্ডার সম্পূর্ণরূপে সম্পন্ন হয় বা অর্ডার বাতিল করা হয়।ask, এটিকে একটিtaker. এর পর, অর্ডার বিদ্যমান সময়কালে, লেনদেনের মূল্য কম বা সমানpriceএই অর্ডারের সাথে মিলে যায় এবং মিলে যাওয়া মূল্য হল লেনদেনের মূল্যEach Individual Transaction. এর মধ্যে পার্থক্যmakerএবংtakerমূলত কারণ এক্সচেঞ্জ অপেক্ষমান আদেশ উত্সাহিত এবং লেনদেনের ফি জন্য ছাড় আছে। উচ্চ ফ্রিকোয়েন্সি কৌশল জন্য, এই পার্থক্য বিবেচনা করা আবশ্যক।

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

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

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

সমমানের কোড

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

 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] # executed price
        trade_amount = tick[3] # executed volume
        time_stamp = tick[1] # executed 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, 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

কিছু বিবরণ উল্লেখ করা দরকার:

  • যখন নতুন লেনদেন হয়, আমাদের প্রথমে অর্ডারটি মেলে দিতে হবে, এবং তারপরে সর্বশেষ মূল্য অনুযায়ী অর্ডারটি স্থাপন করতে হবে।

  • প্রতিটি অর্ডারের দুটি বৈশিষ্ট্য রয়েছে: makermaker, prioritymatching priority, উদাহরণস্বরূপ একটি ক্রয় অর্ডার নিলে, যখন ক্রয় মূল্য Sell 1 এর চেয়ে কম হয়, তখন এটি চিহ্নিত করা হয়maker, এবং যখন ক্রয় মূল্য Buy 1 এর চেয়ে বড় হয়, তখন এটি চিহ্নিত করা হয়Priority matching, priorityদাম ক্রয়ের দামের সমান কিনা তা নির্ধারণ করে, এবং নির্মাতা লেনদেনের ফি নির্ধারণ করে।

  • দ্যmakerএবংpriorityঅর্ডার আপডেট করা হয়. যদি একটি বড় ক্রয় স্থাপন করা হয় এবং বাজার ক্ষমতা অতিক্রম করে. যখন একটি মূল্য ক্রয় মূল্যের চেয়ে বড়, অবশিষ্ট ভলিউম হবেmaker.

  • কৌশলintervalএটি বাজারের বিলম্বের প্রতিনিধিত্ব করতে পারে।

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

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

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

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, 100,000, এবং ব্যাকটেস্টের মোট সময় ছিল 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}

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

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}

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

সংক্ষেপে

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


সম্পর্কিত

আরো