23 আগস্ট, 2026 · গবেষণা

আপনার ব্যাকটেস্টে সময়ের সমস্যা আছে, প্রতিটি টাইমস্ট্যাম্প ঠিক হলেও

আপনার ব্যাকটেস্টে সময়ের সমস্যা আছে, প্রতিটি টাইমস্ট্যাম্প ঠিক হলেও

ব্যাকটেস্টের সবচেয়ে বিপজ্জনক সময়জনিত বাগ নিখুঁত টাইমস্ট্যাম্প নিরীক্ষার পরও থেকে যেতে পারে। দুটি ইভেন্টের টাইমস্ট্যাম্পই 10:00:00.000 হতে পারে, অথচ সেগুলো এমন ক্রমে ঘটেছে যা আপনার সিমুলেটর অনুমান করে নিয়েছে।

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

ইভেন্টের ক্রমে কী বদলায়?

ভাবুন, একটি স্ট্র্যাটেজি সেরা ask $100.00-এর নিচে নামলে কিনবে। একই মিলিসেকেন্ডে ফিডে $99.99-এ ask আপডেট এবং $99.99-এ একটি ট্রেড নথিভুক্ত হলো। আপনার ব্যাকটেস্ট যদি আগে ট্রেড, পরে কোট প্রসেস করে, তাহলে স্ট্র্যাটেজি নতুন ask দেখে অর্ডার পাঠায়। আগে কোট প্রসেস করলেও সমস্যা নেই, যদি ইভেন্টটি সত্যিই তখন পাওয়া গিয়ে থাকে। কিন্তু অর্ডার পৌঁছানোর আগেই যদি ওই ট্রেড প্রদর্শিত লিকুইডিটি ব্যবহার করে ফেলে, তাহলে $99.99-এ ফিল পাওয়ার দাবি কাল্পনিক।

শুধু টাইমস্ট্যাম্প ধরে সারি সাজালে একই সময়ের ইভেন্টগুলোর জন্য সিমুলেটরকে নিজেই ক্রম বেছে নিতে হয়। ফাইলের ক্রম, সিম্বলের ক্রম, এমনকি ডেটাবেসের query plan-ও অনিচ্ছাকৃত এক্সিকিউশন নিয়ম হয়ে উঠতে পারে। মূল ডেটা না বদলালেও ইকুইটি কার্ভ বদলে যেতে পারে।

এটি কতটা খামখেয়ালি হতে পারে তা বোঝার একটি সহজ উপায় আছে: একই সময়ের ইভেন্টগুলো আগমনের ক্রমের বদলে সিম্বল নাম ধরে সাজান। তখন বহু অ্যাসেটের স্ট্র্যাটেজির আচরণ শুধু এ কারণে বদলে যেতে পারে যে একটি টিকার তালিকায় অন্যটির আগে এসেছে।

ব্যাকটেস্টে কোন কোন ঘড়ির সময় রাখা উচিত?

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

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

রিসিভ টাইম ছাড়া ঐতিহাসিক ডেটা ব্যবহার করলে আপনার অনুমান স্পষ্ট করে বলুন। একটি ব্যাকটেস্ট এক্সচেঞ্জের ইভেন্টগুলো ক্রমানুসারে প্রসেস করে, সিদ্ধান্ত থেকে অর্ডার পৌঁছানো পর্যন্ত নির্দিষ্ট 5 ms বিলম্ব ধরতে পারে। এটি একটি মডেল, পুনরুদ্ধার করা ইতিহাস নয়। একই টাইমস্ট্যাম্পের এক্সচেঞ্জ ইভেন্টগুলোর জন্য সিকোয়েন্স নম্বর না থাকলে, সেগুলোর ক্রম নির্ধারণের নিয়মটিও একটি অনুমান।

একই সময়ের ইভেন্টগুলো কীভাবে মডেল করব?

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

এরপর সিমুলেটরের প্রসেসিং নিয়ম স্পষ্টভাবে নির্ধারণ করুন। প্রতিটি ইভেন্টের জন্য স্থির করুন, সেটি স্ট্র্যাটেজির তথ্য আপডেট করতে পারে কি না, উপলভ্য লিকুইডিটি বদলাতে পারে কি না, অর্ডার ট্রিগার করতে পারে কি না, কিংবা অর্ডারের স্বীকৃতি দিতে পারে কি না। এগুলো আলাদা কাজ; সবকিছুকে “সারি প্রসেস করো” হিসেবে এক করে ফেললেই অসম্ভব ফিল ঢুকে পড়ে।

  1. স্ট্র্যাটেজির সিদ্ধান্ত নেওয়ার সময়ের মধ্যে পৌঁছেছে—এমন মার্কেট তথ্যই শুধু প্রয়োগ করুন।
  2. অর্ডার তৈরি করুন, তারপর মডেল অনুযায়ী ভেন্যুতে পৌঁছানোর সময় পর্যন্ত এগিয়ে নিন।
  3. পৌঁছানোর পর উপযুক্ত লিকুইডিটির বিপরীতে এক্সিকিউশন অনুমোদন করুন, সেই অর্ডার টাইপের ফিল-সংক্রান্ত অনুমান মেনে।
  4. প্রতিটি সিমুলেটেড ফিলের জন্য ব্যবহৃত ইনপুট, ইভেন্টের ক্রম এবং বিলম্ব নথিভুক্ত করুন।

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

অ্যারাইভাল-টাইম ডেটা ছাড়া কি ব্যাকটেস্টকে বিশ্বাস করা যায়?

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

সমালোচকদের কথা ঠিক যে ইভেন্টের সময় অত্যন্ত নিখুঁতভাবে ধরতে গেলে মিথ্যা নির্ভুলতার ধারণা তৈরি হতে পারে। ঐতিহাসিক ফিড অসম্পূর্ণ, ঘড়ির সময় সরে যায়, আর ভেন্যুর টাইমস্ট্যাম্পে নেটওয়ার্কের প্রতিটি ধাপ দেখা যায় না। ন্যানোসেকেন্ড ফিল্ড থাকা সিমুলেটরও মোটাদাগের ফিল-অনুমান ব্যবহার করতে পারে।

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

ইভেন্ট-নির্ভর ব্যাকটেস্টিংএক্সিকিউশন মডেলিংমার্কেট ডেটাস্ট্র্যাটেজি গবেষণা
শেয়ার করুনXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← সব পোস্ট