কৌশলের কোডের একটি লাইনও না বদলালেও অপশনস ব্যাকটেস্টের ফল বদলে যেতে পারে। কোনো ভেন্ডর ভুল কোট সংশোধন করতে পারে, দেরিতে আসা ট্রেড যোগ করতে পারে, কন্ট্রাক্টের মেটাডেটা সংশোধন করতে পারে, অথবা ক্রসড মার্কেট ফিল্টার করার নিয়ম বদলাতে পারে। একই তারিখে আবার রান চালালে ভিন্ন ফিল, ভিন্ন পজিশন, এমনকি ভিন্ন Sharpe-ও পেতে পারেন। এর মানে এই নয় যে কৌশলে বাগ আছে। কৌশলটি যে তথ্যপ্রমাণের ভিত্তিতে পরীক্ষা করা হয়েছে, সেটিই বদলে গেছে।
অপশনস ব্যাকটেস্ট পুনরুৎপাদনযোগ্য করতে মার্কেট ডেটাকে সংস্করণযুক্ত ইনপুট হিসেবে বিবেচনা করুন। কোন স্ন্যাপশট ব্যবহার করেছেন তা লিখে রাখুন, প্রতিটি সিদ্ধান্তে প্রভাব ফেলা কাঁচা পর্যবেক্ষণ সংরক্ষণ করুন, আর নতুন সমষ্টিগত ফলকে বিশ্বাস করার আগে কন্ট্রাক্ট ও টাইমস্ট্যাম্প ধরে পরিবর্তিত ফল তুলনা করুন।
কোড একই থাকা সত্ত্বেও আমার অপশনস ব্যাকটেস্টের ফল বদলাল কেন?
সংশোধনের কারণে অপশনসের রেকর্ডে অস্বাভাবিকভাবে বেশি প্রভাব পড়ে, কারণ কোনো কন্ট্রাক্টে ট্রেড করা সম্ভব বলে মনে হওয়া একসঙ্গে বদলাতে থাকা কয়েকটি ফিল্ডের ওপর নির্ভর করে: bid, ask, পরিমাণ, অন্তর্নিহিত সম্পদের দাম, মেয়াদ শেষ হওয়ার তারিখ, strike এবং কন্ট্রাক্টের multiplier বা deliverable। কোট সংশোধন হলে আপাতদৃষ্টিতে লাভজনক সুযোগটি ক্রসড মার্কেটে পরিণত হতে পারে। মেটাডেটা ঠিক করলে পজিশনের multiplier-এর অর্থ বদলে যেতে পারে।
ধরা যাক, একটি কৌশল ask $2.00-এর নিচে থাকলে call কেনে। প্রথমবার ডেটা লোড করার সময় 10:14-এর কোটে ask $1.95, bid $1.90 এবং পরিমাণ 5। পরে দেরিতে আসা এক্সচেঞ্জ বার্তা মেলানোর পর ভেন্ডর ask সংশোধন করে $2.05 করে। একটি পর্যবেক্ষণেই সিগন্যাল বদলে যায়। ওই দিন কন্ট্রাক্টটিই যদি কৌশলের একমাত্র ট্রেড হয়ে থাকে, তাহলে ডেটার সামান্য সংশোধনও সেদিনের রিটার্নে বড় প্রভাব ফেলতে পারে।
কোট ফিল্টারিংও গুরুত্বপূর্ণ। ভেন্ডররা পুরোনো কোট বাদ দিতে পারে, ক্রসড মার্কেট সরিয়ে দিতে পারে, অথবা টাইমস্ট্যাম্প স্বাভাবিক করার নিয়ম বদলাতে পারে। এসব নীতি যুক্তিসংগত হতে পারে, কিন্তু এগুলোও ডেটাসেটের পরিচয়ের অংশ। “SPY অপশনস, জানুয়ারি থেকে মার্চ” বললে পুনরুৎপাদনযোগ্য ইতিহাস নির্দিষ্ট হয় না।
অপশনস ডেটার ভিন্টেজ কী?
ডেটা ভিন্টেজ হলো কোনো নির্দিষ্ট গবেষণা রানের সময় পাওয়া ঐতিহাসিক পর্যবেক্ষণের হুবহু সংস্করণ। ভেন্ডর ও ডেটাসেটের নাম, ডেটা নেওয়ার সময়, তারিখের পরিসর, স্কিমার সংস্করণ এবং পরিষ্কার বা ফিল্টার করার নিয়ম লিখে রাখুন। ভেন্ডর স্ন্যাপশট ID বা সংশোধনের টাইমস্ট্যাম্প দিলে সেগুলোও সংরক্ষণ করুন।
প্রতিটি সিমুলেটেড সিদ্ধান্তের জন্য যথেষ্ট তথ্যসূত্র রাখুন, যাতে জানা যায়: কোন কন্ট্রাক্ট বিবেচনা করা হয়েছিল, কোন কোটটি বেছে নেওয়া হয়েছিল, কোটটি কখন প্রকাশিত বা গ্রহণ করা হয়েছিল এবং কোন নিয়মে সেটি যোগ্য বলে বিবেচিত হয়েছিল। কাঁচা রেকর্ড ও সেখান থেকে তৈরি রেকর্ড—দুটিই গুরুত্বপূর্ণ। উৎসের টাইমস্ট্যাম্প ছাড়া পরিষ্কার করা NBBO-তে কোটটি পুরোনো ছিল কি না, বা সিমুলেটেড সিদ্ধান্তের পরে এসেছিল কি না, তা আড়াল হয়ে যেতে পারে।
| যে রেকর্ড সংরক্ষণ করবেন | কেন এটি গুরুত্বপূর্ণ | উদাহরণ |
|---|---|---|
| উৎস স্ন্যাপশট | রানে ব্যবহৃত ইতিহাস শনাক্ত করে | ভেন্ডরের সংশোধন ID এবং ডেটা নেওয়ার টাইমস্ট্যাম্প |
| কোটের উৎসতথ্য | নির্বাচিত বাজারের ব্যাখ্যা দেয় | এক্সচেঞ্জ, ঘটনার সময়, গ্রহণের সময়, bid/ask এবং পরিমাণ |
| কন্ট্রাক্টের শর্তাবলি | অপশনটি কী বোঝায় তা নির্ধারণ করে | Strike, মেয়াদ শেষ হওয়ার তারিখ, multiplier এবং deliverable |
| ডেটা পরিষ্কারের নীতি | কোন পর্যবেক্ষণ বাদ পড়েছে তা দেখায় | পুরোনো কোটের সীমা এবং ক্রসড কোট সামলানোর নিয়ম |
ভেন্ডরের সংশোধনে আমার ফল বদলেছে কি না কীভাবে যাচাই করব?
দুই স্ন্যাপশটেই একই কৌশল ও কনফিগারেশন চালান। প্রথমে তারিখ ধরে যোগ্য পর্যবেক্ষণ ও কন্ট্রাক্টের সংখ্যা তুলনা করুন। এরপর সিদ্ধান্ত ও ফিল তুলনা করুন: কোন সিগন্যাল দেখা দিয়েছে বা হারিয়ে গেছে, কোন কোট বদলেছে, এবং নতুন রেকর্ডে মডেল করা এক্সিকিউশন মূল্য বদলেছে কি না।
শুধু মোট রিটার্ন দেখেই থামবেন না। ট্রেডের সংখ্যা, এন্ট্রি ও এক্সিটের দাম, বাতিল হওয়া সিগন্যাল এবং কেবল একটি ভিন্টেজে থাকা ট্রেড থেকে আসা P&L-এর অনুপাত—এসবের পরিবর্তনও মাপুন। পৃথক ট্রেড বদলে গেলেও কোনো রানের Sharpe কাছাকাছি থাকতে পারে; শিরোনামের পরিসংখ্যান দেখে বোঝা যাবে না যে এর পেছনের ইতিহাস সরে গেছে।
কার্যকর অডিটের জন্য কৌশল, ফি এবং এক্সিকিউশনের অনুমান অপরিবর্তিত রাখুন। একসঙ্গে একাধিক বিষয় বদলালে, পার্থক্যটি ভেন্ডরের সংশোধন থেকে এসেছে নাকি আপনার নিজের পরীক্ষার কারণে, তা বুঝতে পারবেন না।
আমার কি সব সময় অপশনসের সবচেয়ে নতুন ইতিহাস ব্যবহার করা উচিত?
ভেন্ডরের বর্তমান সময়ের সেরা পুনর্গঠন নিয়ে কাজ করাই লক্ষ্য হলে সবচেয়ে নতুন ইতিহাস ব্যবহার করুন। আগের ফল পুনরুৎপাদন করতে বা তখন আপনার গবেষণা সিস্টেমে কী তথ্য ছিল তা বুঝতে পুরোনো স্ন্যাপশট রেখে দিন। এই দুই স্ন্যাপশট ভিন্ন প্রশ্নের উত্তর দেয়।
নির্দিষ্ট সময়ের তথ্যভিত্তিক গবেষণায়, সংশোধিত রেকর্ড এখন আরও নির্ভুল হতে পারে, তবু তখন কৌশলটির কাছে সেটি অপ্রাপ্য ছিল। সম্ভব হলে প্রকাশ ও গ্রহণের সময় সংরক্ষণ করুন; তা সম্ভব না হলে সীমাবদ্ধতাটি স্পষ্টভাবে লিখুন। বর্তমান সময়ের পুনর্গঠন স্বয়ংক্রিয়ভাবে অতীতের তথ্যসেট হয়ে যায় না।
অপশনস ব্যাকটেস্ট বদলালে প্রথম প্রশ্ন হওয়া উচিত, “কোন পর্যবেক্ষণগুলো বদলেছে?” “কোন রানটি সঠিক?”—এই প্রশ্নের উত্তর খুঁজুন তার পরে।
প্রতিটি ব্যাকটেস্টের সঙ্গে কী সংরক্ষণ করা উচিত?
ফলাফলের পাশে সংক্ষিপ্ত একটি ম্যানিফেস্ট রাখুন: ডেটা সরবরাহকারী ও স্ন্যাপশট, ডেটা নেওয়ার সময়, স্কিমা ও পরিষ্কারের সংস্করণ, কন্ট্রাক্ট মেটাডেটার উৎস, কৌশলের commit, এক্সিকিউশনের অনুমান এবং রান কনফিগারেশন। প্রতিটি ট্রেডের সঙ্গে তার পক্ষে থাকা কোটের রেকর্ডের লিংক রাখুন।
এই ছোট্ট রেকর্ড রহস্যময় পুনরায় রানকে এমন একটি তুলনায় পরিণত করে, যা খুঁটিয়ে দেখা যায়। অপশনসের ইতিহাসে সংশোধন চলতেই থাকবে। আপনার গবেষণা প্রক্রিয়ায় প্রতিটি সংশোধন দৃশ্যমান হওয়া উচিত, যাতে উন্নত আর্কাইভ নিঃশব্দে পরীক্ষাটি নতুন করে না লিখে প্রমাণকে আরও ভালো করে।
← সব পোস্ট


