31 আগস্ট, 2026 · প্রেডিকশন মার্কেট

প্রেডিকশন মার্কেট ব্যাকটেস্ট করলে কী ভাঙে: আট দিনের দিনলিপি

প্রেডিকশন মার্কেট ব্যাকটেস্ট করলে কী ভাঙে: আট দিনের দিনলিপি

প্রেডিকশন মার্কেটকে ব্যাকটেস্ট করার জন্য পৃথিবীর সবচেয়ে সহজ জিনিস বলে মনে হয়। দাম [0, 1]-এর মধ্যে। পেআউট এক ডলার, নয়তো কিছুই না। লিভারেজ নেই, ফান্ডিং নেই, বেসিস নেই, 00:00 UTC-তে পারপেচুয়াল-সোয়াপের অদ্ভুত আচরণ নেই। আমাদের এমন একটি ব্যাকটেস্টার ছিল, যা আগে থেকেই ফি, ফান্ডিং ও ইমপ্যাক্টসহ ক্রিপ্টো পার্প সামলাত; পরিকল্পনা ছিল দুই দিন ধরে সেটি মানিয়ে নিয়ে তারপর স্ট্র্যাটেজি তৈরি শুরু করা।

লেগেছিল আট দিন। নিচে লগটা দিলাম, মোটামুটি সময়ক্রমে—সেই দিনটাও আছে, যেদিন ইকুইটি কার্ভ অবিশ্বাস্য লাগছিল, আর সত্যিই অবিশ্বাস্য ছিল।

দিন 1: যে অ্যাডাপ্টারটা সহজ হওয়ার কথা ছিল

শুরুতে একটির সঙ্গে আরেকটির সরাসরি মানচিত্র মেলানো সহজ ও পরিষ্কার মনে হয়েছিল। একটি মার্কেট মানে একটি ইনস্ট্রুমেন্ট। YES-এর দামই দাম। YES কেনা মানে লং, NO কেনা মানে শর্ট। নিষ্পত্তির সময় জোর করে 1.00 বা 0.00 দামে পজিশন বন্ধ। ঘণ্টাভিত্তিক দামের সিরিজ একই ইভেন্ট লুপে ঢোকাও, কাজ শেষ।

বাস্তব ডেটার সংস্পর্শে এসে সেই মানচিত্র টিকেছিল প্রায় নব্বই মিনিট। প্রথমে ভেঙেছিল রিটার্নস সিরিজ। আমাদের পুরো রিস্ক লেয়ার—পজিশনের আকার নির্ধারণ, ভোলাটিলিটি টার্গেটিং, Sharpe রিপোর্টিং—ধরে নিয়েছিল যে এটি চলমান ইনস্ট্রুমেন্টের লগ রিটার্ন। 0.04 থেকে 0.00-তে যাওয়া মার্কেটের লগ রিটার্ন অনির্ধারিত, কিন্তু মোট ক্ষতি নির্দিষ্ট। আর নিষ্পত্তির তিন দিন আগে 0.04 দামে থাকা মার্কেট আর চার মিনিট আগে 0.04 দামে থাকা মার্কেট সম্পূর্ণ আলাদা বস্তু, যদিও দুই সারিতেই লেখা 0.04।

শেষ পর্যন্ত আমরা পুরো সিরিজটাকে ঘড়ির সময়ের বদলে নিষ্পত্তি পর্যন্ত বাকি সময় ধরে নতুনভাবে সাজালাম, আর PnL-কে মার্ক-টু-মার্কেটের বদলে চূড়ান্ত ফল হিসেবে ধরলাম। সিদ্ধান্তটা ঠিক ছিল, কিন্তু এর ফলে পরের ধাপের রিপোর্টিং কোডের প্রতিটি অংশ অকার্যকর হয়ে গেল।

দিন 2: ফি-র সূত্রটাই স্ট্র্যাটেজি

Kalshi-তে ট্রেডিং ফি বেসিস-পয়েন্টের কাটতি নয়। এটি দামের বর্গের সঙ্গে বাড়ে: মোটামুটি 0.07 × contracts × P × (1−P), অর্ডার-স্তরে নিকটতম সেন্টে ঊর্ধ্বমুখী করে ধরা হয়। এর মানে, কয়েন-টসের মতো মার্কেট যখন সবচেয়ে আকর্ষণীয়, ঠিক তখনই ফি সবচেয়ে বেশি; আর দুই প্রান্তে গেলে প্রায় বিনা খরচে।

দামপ্রতি কন্ট্রাক্টে ফিপ্রয়োজনীয় এজ (সম্ভাবনার পয়েন্ট)স্টেকের শতাংশ হিসেবে ফি
5¢0.33¢0.336.7%
10¢0.63¢0.636.3%
25¢1.31¢1.315.3%
50¢1.75¢1.753.5%
75¢1.31¢1.311.8%
90¢0.63¢0.630.7%
95¢0.33¢0.330.35%

তৃতীয় কলামটাই আসল বিষয়: 50¢ দামে কিনে নিষ্পত্তি পর্যন্ত ধরে রাখলে, ব্রেক-ইভেনে যেতে আপনার সম্ভাবনার অনুমানকে মার্কেটের চেয়ে 1.75 পয়েন্ট বেশি হতে হবে। আপেক্ষিকভাবে 1.75 শতাংশ নয়—পুরো 1.75 পয়েন্ট। নিষ্পত্তির আগে বেরিয়ে গেলে এই খরচ দুবার দিতে হয়, তার সঙ্গে স্প্রেডও।

3.5%50¢ দামে একমুখী ফি, স্টেকের অংশ হিসেবে
1.75ppএখানে ব্রেক-ইভেনে যেতে প্রয়োজনীয় সম্ভাবনার এজ
1প্রতি ইনস্ট্রুমেন্টে সর্বমোট নিষ্পত্তি

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

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

দিন 3: বুকটা সিঁড়ির মতো, আর ছোট

আমাদের ইমপ্যাক্ট মডেল ছিল BTC পার্প অর্ডার বুকের ডেটায় ক্যালিব্রেট করা একটি স্কয়ার-রুট ফাংশন। এই মার্কেটের জন্য সেটি ভুল আকৃতির। $1-এর ইনস্ট্রুমেন্টে 1¢ টিক মানে পুরো বুকজুড়ে মাত্র 99টি সম্ভাব্য দাম-স্তর; মাঝারি তারল্যের একটি মার্কেটে ওপরের স্তরে কয়েকশো কন্ট্রাক্ট পড়ে থাকতে পারে, তার পরেই ফাঁক।

ইকোনমিক ডেটা-সংক্রান্ত একটি মার্কেটে নমুনা নেওয়ার সময়কার দৃশ্যটা দেখুন—YES দিক, নিষ্পত্তির প্রায় 30 ঘণ্টা আগে:

স্তরপরিমাণ (কন্ট্রাক্ট)কেনার ক্রমবর্ধমান খরচ
42¢310মোট 310 @ গড় 42.0¢
43¢85মোট 395 @ গড় 42.2¢
45¢140মোট 535 @ গড় 42.9¢
49¢600মোট 1,135 @ গড় 46.1¢

1,000-কন্ট্রাক্টের একটি অর্ডার—পাঁচশো ডলারের ঝুঁকি, ক্রিপ্টোতে যা নেহাতই সামান্য—কার্যকর দাম চার সেন্ট বাড়িয়ে দেয়। চার সেন্ট ফি-র দ্বিগুণেরও বেশি। এখানে মানানসই কোনো মসৃণ ফাংশন নেই; বুকের প্রতিটি স্তর ধরে এগোতে হবে, নইলে হিসাব বানিয়ে বলা হচ্ছে। এই অ্যাসেট ক্লাসের জন্য আমরা sqrt মডেল বাদ দিয়ে সরাসরি বুক ধরে এগোনোর কোড লিখেছি—এটি ধীর, কিন্তু সঠিক।

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

দিন 4: যেদিন ইকুইটি কার্ভটা ছিল দারুণ সুন্দর

1,400টি মার্কেটে Sharpe 4.1। মসৃণ। এটা দেখলে যে কোনো গবেষকের পেট কেঁপে ওঠা উচিত—আমারও উঠেছিল, তবে শেষ পর্যন্ত, স্ক্রিনশট নেওয়ার প্রায় চল্লিশ মিনিট পরে।

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

চলমান ইনস্ট্রুমেন্টে nearest-neighbour ফিল ঠিক আছে। কিন্তু যার শেষ পর্যবেক্ষণটাই প্রকৃত ফল, এমন ইনস্ট্রুমেন্টে এটি লুক-অ্যাহেড মেশিন। এখন আমরা নিশ্চিত করি যে প্রতিটি ফিল শুধু সামনের দিকেই হয়, আর সেটেলমেন্ট সারিতে ট্যাগ দিয়ে সেটিকে যেকোনো ফিচার গণনা থেকে বাদ রাখি। ওই assert মাত্র নয় লাইনের, আর এই সপ্তাহে লেখা কোডের মধ্যে সেটিই সবচেয়ে মূল্যবান।

দিন 5–6: 1,412টি মার্কেট, মোটামুটি 180টি বাজি

প্রেডিকশন মার্কেটে স্যাম্পল সাইজ দেখতে নিরীহ, কিন্তু ফাঁদ। আপনি 1,412টি মার্কেটের নিষ্পত্তি দেখলেন, মনে হলো আপনার হাতে 1,412টি পর্যবেক্ষণ আছে, তারপর সেই অনুযায়ী t-stat হিসাব করলেন। কিন্তু একই রবিবারের চৌদ্দটি NFL ম্যাচে আবহাওয়া, চোট-সংক্রান্ত রিপোর্ট প্রকাশ আর বাজিয়েদের সাধারণ প্রবাহ—সবই অভিন্ন। রাজ্যভিত্তিক একান্নটি নির্বাচনী মার্কেটের পেছনে রয়েছে একটি জাতীয় দোলাচল। “X কি 31 মার্চের মধ্যে ঘটবে” আর “X কি 30 জুনের মধ্যে ঘটবে”—মেয়াদ আলাদা, কিন্তু বাজিটা একই, নিষ্পত্তিও একসঙ্গে হয়।

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

দিন 7: নিষ্পত্তিও একটি সম্ভাব্যতা-বণ্টন

যেসব বিষয় আমরা একেবারেই মডেল করিনি, আর পরে কঠিনভাবে শিখেছি:

আমরা সিমুলেটরে হোল্ডিং-কস্ট টার্ম ও নিষ্পত্তির তারিখে সামান্য র‍্যান্ডম পরিবর্তন যোগ করেছি। কোনোটিই নিখুঁত নয়। তবে নিষ্পত্তি যে ঘোষিত তারিখেই নিশ্চিতভাবে হবে—এই অলিখিত অনুমানের চেয়ে দুটোই ভালো।

দিন 8: আমরা কী বাদ দিতাম, আর প্রথমে কী করতাম

  1. রিটার্ন-ভিত্তিক কাঠামো পুরোপুরি বাদ দিন। চূড়ান্ত পেআউট-সহ একটি ইনস্ট্রুমেন্টে ভোলাটিলিটি-টার্গেটিং রিস্ক লেয়ার মানিয়ে নেওয়ার চেষ্টা করবেন না। সম্ভাব্যতা ও স্টেকের ভাষায় কাজ করে এমন বাজি-নির্ধারণ লেয়ার লিখুন। পুরোনো লেয়ারটিকে মানাতে গিয়ে আমাদের দুই দিন নষ্ট হয়েছিল।
  2. স্ট্র্যাটেজির আগে ফি-র ফাংশন তৈরি করুন। যেসব ভেন্যুতে ট্রেড করার পরিকল্পনা, প্রতিটির জন্য ব্রেক-ইভেন এজ কার্ভ দেখান এবং ডেস্কের সামনে টাঙিয়ে রাখুন। ব্যাকটেস্ট চালাতে সময় খরচ হওয়ার আগেই এতে প্রায় অর্ধেক আইডিয়া বাদ পড়ে।
  3. প্রথম দিন থেকেই বুক ধরে হিসাব করুন। চলমান মার্কেট থেকে আনা যেকোনো প্যারামেট্রিক ইমপ্যাক্ট মডেল এমনভাবে ভুল হবে, যাতে আপনার ফল ভালো দেখায়।
  4. গণনার আগে ক্লাস্টার করুন। কার্যকর স্যাম্পল সাইজের জন্য কোন ক্লাস্টারিং কী ব্যবহার করবেন, তা ইউনিভার্স ঠিক করার সময়ই স্থির করুন—পছন্দের Sharpe পাওয়ার পরে নয়।
  5. ফিলের দিক নিয়ে assert দিন। প্রতিটি join-এর জন্য একটি করে লাইন। কোনো সিরিজের শেষে যদি প্রকৃত ফল থাকে, তাহলে ব্যাকওয়ার্ড ফিলকে রিভিউতে চোখে পড়বে কি না তার ওপর নির্ভর না করে শুরু থেকেই বাগ হিসেবে ধরুন।

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

প্রেডিকশন মার্কেটব্যাকটেস্টিংফিমার্কেট মাইক্রোস্ট্রাকচারডেটা ইঞ্জিনিয়ারিং
শেয়ার করুনXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← সব পোস্ট