Expected value Polymarket arbitrage: how to calculate EV correctly
Practical guide to computing expected value for Polymarket arbitrage trades, including taker fees, partial-fill probability, and settlement risks. Step-by-step EV formulas and a working code example.
Expected value Polymarket arbitrage: how to calculate EV correctly
এই গাইডটি ধাপে ধাপে দেখায় যে কিভাবে Polymarket arbitrage ট্রেডগুলোর জন্য expected value (EV) সঠিকভাবে হিসাব করবেন, যার মধ্যে রয়েছে taker ফি, অংশিক-ফিল সম্ভাবনা, এবং নিষ্পত্তির ঝুঁকি। আপনি যদি Polymarket‑এ intra-market binary বা combinatorial arb চালান, তাহলে এই সূত্রগুলো একটি নামমাত্র মূল্য ফাঁককে ব্যবহারযোগ্য EV অনুমানে রূপান্বিত করে।
প্রধান উপসংহার
- EV = (payout − cost − fees) × fill probability − partial fills এবং settlement timing থেকে হওয়া downside।
- সর্বদা taker ফি এবং প্রত্যাশিত partial-fill হার যোগ করুন; Polymarket‑এ maker ফি শূন্য তাই সেগুলো কেবল তখন প্রাসঙ্গিক যদি আপনি passive liquidity‑তে peg করেন।
- ছোট সাইজের ক্ষেত্রে partial fills-এর জন্য Bernoulli বা binomial মত সহজ প্রোবাবিলিস্টিক মডেল ব্যবহার করুন; একাধিক প্রাইস লেভেলে এক্সিকিউশন বিস্তৃত হলে মডেল স্কেল করুন।
- কোনো arb ট্রেডকে অনিবার্যভাবে "risk-free" বলা কখনই বারণ — resolution, slippage, fees, UMA disputes, এবং smart-contract বা timing ঝুঁকি সবই তালিকাভুক্ত করুন।
1. EV মূলনীতি — prediction-market arbitrage
প্রাথমিক নীতিমালা থেকে শুরু করুন। একটি সম্পূর্ণ, সফল arbitrage যা একটি complete set of outcome tokens ক্রয় করে তার খরচ C (কেনা best-ask দরের summa এবং যে কোনও taker ফি) এবং resolution পরবর্তী সময়ে প্রতিটি complete set থেকে $1.00 রিডিম হয়। নামমাত্র edge হল:
Edge = 1.00 − C
ফি এবং এক্সিকিউশন ঝুঁকি বাদে প্রত্যাশিত মান সহজেই প্রতিটি complete set‑এর জন্য Edge। ব্যবহারিক ট্রেডিংয়ে আপনাকে এটি EV (প্রত্যাশিত মনিটারি লাভ) এ রূপান্তর করতে হবে, ফি, আপনার অর্ডার উদ্ধৃত দামে ফিল হওয়ার সম্ভাবনা, এবং সম্ভাব্য partial fills বিবেচনায় নিয়ে।
EV_basic = Edge × FillProbability − Fees_expected
পরবর্তী অংশগুলোতে আপনি FillProbability এবং Fees_expected আরও সূক্ষ্ম করবেন।
2. Taker fees এবং settlement flow অন্তর্ভুক্ত করা
Polymarket‑এ taker ফি ক্যাটেগরির উপর নির্ভর করে পরিবর্তিত হয় এবং বর্তমানে 0% থেকে 1.8% মধ্যে থাকে; maker ফি শূন্য। Arb‑তে সাধারণত আপনি spread ক্রস করা executed legs‑এ taker ফি পরিশোধ করবেন।
যখন আপনি Nটি outcome কেনেন (multi-outcome বাজারে একটি complete set বা binary‑তে YES ও NO দুইটি), gross খরচ গণনা করুন:
C_gross = Σ bestAsk_i
Taker ফি প্রতি ট্রেডকে basis points বা শতাংশে প্রকাশ করা হয়। fee_rate যদি taker ফি (দশমিক হিসেবে) হয়, তাহলে আপনার ফি আনুমানিক:
Fees = fee_rate × C_gross
যদি কিছু লেগ maker হিসেবে execute করে (টাইট arb‑তে বিরল) তাহলে সেগুলো শূন্য ফি ধার্য করে; এটা মডেল করতে C_gross‑কে maker এবং taker অংশে বিভক্ত করুন।
Net cost C_net = C_gross + Fees
তারপর সম্পূর্ণভাবে ফিল এবং রিডিমযোগ্য হলে নামমাত্র লাভ হচ্ছে:
Profit_full = 1.00 − C_net
কিন্তু Profit_full শুধুমাত্র FillProbability_full সম্ভাবনায় বাস্তবায়িত হবে, তাই EV অবদান হচ্ছে Profit_full × FillProbability_full।
3. অংশিক ফিল এবং অসমমিত এক্সিকিউশন মডেলিং
Partial fills হলো ব্যবহারিক ক্ষতির সবচেয়ে সাধারণ উৎস। দুটি উদাহরণ:
- আপনার অর্ডার YES সম্পূর্ণ কিনলেও NO কেবল অংশিকভাবে কেনা হতে পারে। আপনি একটি অবশিষ্ট YES এক্সপোজারের সাথে আটকে যেতে পারেন যা implied hedge‑এর উপরে মূল্যায়িত।
- ফিল একাধিক প্রাইস লেভেলে ঘটে; বাস্তবায়িত C_gross প্রথম‑লেভেল best asks‑এর যোগফলের চেয়ে বেশি হতে পারে।
ছোট অর্ডারের জন্য একটি সহজ এবং কার্যকরী মডেল হল প্রতিটি লেগ‑এর প্রদর্শিত best ask‑এ Bernoulli fill probability ধার্য করা। বড় সাইজের জন্য আপনি fills‑কে binomial হিসেবে মডেল করতে পারেন বা price levels জুড়ে deterministic volume slices হিসেবে ধরতে পারেন।
হিসাবনিকিতে ব্যবহারের নোটেশন:
- q_i = লেগ i‑এর জন্য নির্ধারিত পরিমাণ (outcome shares এ)
- f_i =_probability যে q_i পোস্ট করা best ask‑এ সম্পূর্ণভাবে fill হবে
- r_i = লেগ i‑এর জন্য প্রত্যাশিত পূর্ণতা অনুপাত (0 ≤ r_i ≤ 1)
যেখানে partial fills সম্ভাব্য:
E[C_gross] = Σ (bestAsk_i × q_i × r_i)
প্রত্যাশিত ফি অনুপাতগতভাবে অনুসরণ করে:
E[Fees] = fee_rate × E[C_gross] (taker‑executed অংশের জন্য)
কিন্তু partial fills একটি অসমমিত অবশিষ্ট অবস্থান তৈরি করে। সাধারণ রক্ষণশীল পদ্ধতি হল ধর্য করা যে যে কোনো অবশিষ্ট single‑outcome পজিশনকে দ্রুত worst mid/ask‑এ আনউইন্ড করতে হবে, এবং সেই আনউইন্ড থেকে হওয়া প্রত্যাশিত ক্ষতিকে EV‑তে অন্তর্ভুক্ত করা।
উদাহরণস্বরূপ, আপনি যদি একটি complete set কিনতে চাইতেন কিন্তু গড়ে কেবল 90% NO লেগ fill হতো, তাহলে আপনি 10% YES বহন করবেন যেগুলো আপনি যে দামে দিয়েছেন (p_yes) তা দিয়ে আছে। সবচেয়ে খারাপ অবস্থা অনুযায়ী অবশিষ্ট ক্ষতি আনুমানিক 0.90 × (p_yes − mid_unwind_price) হবে (tick size এবং ফি‑সমন্বয় করুন)। EV‑এ L_residual যোগ করুন।
4. ধাপে ধাপে বাস্তবায়নযোগ্য EV সূত্র
নির্ধারণ করুন:
- n = সেট‑এর outcome সংখ্যা (binary‑র জন্য n=2)
- ask_i = outcome i‑এর best ask দাম, ডলারে
- q = লক্ষ্য complete‑set পরিমাণ (shares; যেমন, 10 complete sets)
- fee = taker fee হার দশমিক হিসেবে (উদাহরণ: 0.006 মানে 0.6%)
- r_i = লেগ i‑এর প্রত্যাশিত fill অনুপাত (0..1). পূর্ণ‑ফিল সম্ভাবনার জন্য r_i = 1.0 ব্যবহার করুন।
- p_unwind_i = আপনি যে দামটি দিয়ে কোনো অবশিষ্ট পজিশন বন্ধ করবেন বলে আশা করছেন (রক্ষণশীল: current worst ask বা mid)
গণনা করুন:
- E[C_gross] = Σ_i ask_i × q × r_i
- E[Fees] = fee × E[C_gross]
- E[C_net] = E[C_gross] + E[Fees]
- Expected payout যখন complete sets রিডিম হবে = q × 1.00 × P_redeem (P_redeem হল শেষপর্যন্ত রিডিমযোগ্যতা‑এর সম্ভাবনা; UMA বিতর্ক না থাকলে সাধারণত 1.0 — কিন্তু নিচে বিতর্ক ঝুঁকি বিবেচনা করুন)
- Expected residual loss L_residual = Σ_i max(0, q × (1 − r_i) × (paid_price_i − p_unwind_i))
চূড়ান্ত EV অনুমান:
EV = q × P_redeem − E[C_net] − L_residual
আপনি যদি প্রতি complete set‑এর EV পছন্দ করেন, তাহলে EV‑কে q দিয়ে ভাগ করুন।
P_redeem সম্পর্কে নোট: UMA disputes নিষ্পত্তি স্থগিত বা পরিবর্তন করতে পারে। P_redeem ≤ 1.0 ধার্য করুন যাতে বিতর্ক ঝুঁকি প্রতিফলিত হয়; অনেক বাজারে P_redeem ≈ 1.0 ধরা যায় কিন্তু বিলম্ব বা বিতর্কের সম্ভাব্যতা স্পষ্টভাবে বিবেচনায় আনতে হবে।
5. কার্যকরী সংখ্যাতাত্ত্বিক উদাহরণ (binary) — বাস্তবায়নযোগ্য এবং রক্ষণশীল
ধরুন একটি ছোট binary arbitrage যেখানে আপনি 100 complete sets কিনতে চান YES এবং NO তাদের সংশ্লিষ্ট best asks‑এ। সংখ্যাগুলো কেবল প্রদর্শনের জন্য; fee‑কে উল্লিখিত সীমার মধ্যে রাখুন।
- ask_YES = $0.49
- ask_NO = $0.50
- q = 100 sets
- fee = 0.006 (0.6% taker fee)
- r_YES = 1.0, r_NO = 0.95 (NO প্রথম লেভেলে আংশিকভাবে fill হতে পারে)
- p_unwind_NO = $0.52 (আপনি যে দামে অবশিষ্ট NO বিক্রি করবেন বলে আশা করেন)
- P_redeem = 1.0 (চূড়ান্ত রিডিমযোগ্যতা ধরা হল)
গণনা E[C_gross] = (0.49 + 0.50) × 100 × average_r
নিখুঁতভাবে:
E[C_gross] = (0.49 × 100 × 1.0) + (0.50 × 100 × 0.95) = 49.00 + 47.50 = 96.50
E[Fees] = 0.006 × 96.50 = 0.579
E[C_net] = 96.50 + 0.579 = 97.079
Payout = 100 × 1.00 = 100.00
L_residual: আপনি 100 NO আশা করেছিলেন কিন্তু মাত্র 95 পেয়েছেন, তাই আপনার কাছে complete sets ধারণের উদ্দেশ্যে 5 টি NO‑এর ঘাটতি থাকবে — ফলশ্রুতিতে বিপরীত পাশের 5 YES অবশিষ্ট থাকবে। এই উদাহরণে partial fill সেই 5 YES‑এর জন্য প্রযোজ্য যদি আপনি সেগুলো 0.49‑এ কিনে p_unwind_YES (রক্ষণশীল) দামে বিক্রি করতে বাধ্য হন। সমতা বজায় রাখতে, misfilled leg‑এর জন্য রক্ষণশীল residual loss অনুমান:
L_residual = (q × (1 − r_NO)) × (paid_price_NO_unpaired − p_unwind_NO)
যদি unpaired leg বেশি ব্যয়বহুল হয়, সেই ক্ষতি অন্তর্ভুক্ত করুন। সংখ্যাগুলো সংরক্ষিতভাবে plug‑in করে EV অতিরঞ্জিত করবেন না।
Final EV = 100 − 97.079 − L_residual
যদি L_residual ছোট হয় trade‑টি ধনাত্মক EV রেখে দেয়; অন্যথায় L_residual নামমাত্র Edge‑কে অতিক্রম করলে ট্রেডটি ঋণাত্মক হবে। অর্ডার পাঠানোর আগে প্রোগ্রাম্যাটিকভাবে এই গণিত চালান।
6. একটি সংক্ষিপ্ত, ব্যবহারযোগ্য JavaScript স্নিপেট
এই স্নিপেটটি প্রদত্ত ইনপুট থেকে প্রতি complete set‑এর EV গণনা করে। এটি বৈধ JavaScript এবং আপনার রিস্ক ফ্রেমওয়ার্কে সহজে প্রয়োগযোগ্য।
function computeEVPerSet(asks, r, fee, p_unwind, P_redeem = 1.0) {
// asks: array of best asks for each outcome, e.g. [0.49, 0.50]
// r: array of expected fill fractions for each outcome, e.g. [1.0, 0.95]
const n = asks.length;
const q = 1; // per-set basis
const E_C_gross = asks.reduce((s, a, i) => s + a * q * r[i], 0);
const E_Fees = fee * E_C_gross;
const E_C_net = E_C_gross + E_Fees;
// Residual loss: assume unfilled fraction must be closed at p_unwind
const L_residual = asks.reduce((s, a, i) => {
const unfilled = q * (1 - r[i]);
const paid_price = a; // price you paid for filled portion of this outcome
const unwind_price = p_unwind[i];
return s + Math.max(0, unfilled * (paid_price - unwind_price));
}, 0);
const EV = q * P_redeem - E_C_net - L_residual;
return { EV_per_set: EV, E_C_gross, E_Fees, L_residual };
}
// Example
const asks = [0.49, 0.50];
const r = [1.0, 0.95];
const fee = 0.006; // 0.6%
const p_unwind = [0.48, 0.52];
console.log(computeEVPerSet(asks, r, fee, p_unwind));
p_unwind মানগুলো রক্ষণশীলভাবে সেট করুন (worst ask বা mid ব্যবহার করুন) এবং আপনার সাইজে ইতিহাসভিত্তিক fill হার অনুযায়ী r সেট করুন।
7. লাইভ ট্রেডিং‑এর জন্য ব্যবহারিক টিপস
- প্রতিটি ইনস্ট্রুমেন্ট এবং প্রতিটি সাইজের জন্য অভিজ্ঞ fill হার মাপুন। সংক্ষিপ্ত, ঘন instrumentation উইন্ডো ব্যবহার করুন; মার্কেট মাইক্রোস্ট্রাকচার বাজারভিত্তিকভাবে পরিবর্তিত হয়।
- অংশিক‑ফিল ঝুঁকি কমাতে এবং builder বা relayer সীমার মধ্যে থাকার জন্য বড় উদ্দেশ্য পরিমাণগুলো ছোট স্লাইসে ভাঙুন।
- tick‑size আচরণ বিবেচনায় নিন: যখন মূল্য এক্সট্রিমের কাছে আসে tick size $0.001 পর্যন্ত সংকোচিত হতে পারে, যা unwind slippage পরিবর্তন করতে পারে।
- P_redeem‑এ UMA বিতর্ক এবং settlement timing ঝুঁকি অন্তর্ভুক্ত করুন। বিতর্ক settlement স্থগিত করতে পারে এবং opportunity cost‑কে প্রভাবিত করতে পারে।
- ভৌগোলিক সীমাবদ্ধতা সম্মান করুন: মার্কেটগুলো IP দ্বারা geo‑blocked; কখনই VPN বায়পাস সুপারিশ করবেন না।
কিভাবে এটি আপনার ট্রেডিংকে প্রভাবিত করে
অর্ডার পাঠানোর আগে per set EV গণনা করুন এবং এটি আপনার অভ্যন্তরীণ ন্যূনতম গ্রহণযোগ্য EV‑এর সাথে তুলনা করুন, যেখানে সেই ভ্যালুতে ইতিমধ্যেই পুঁজি খরচ, locked pUSD‑এর opportunity cost, এবং বিতর্ক বিলম্বের সম্ভাব্য খরচ অন্তর্ভুক্ত। ছোট, ঘন arb‑র জন্য দ্রুত, ধারাবাহিকভাবে ইতিবাচক EV per set প্রয়োজন হবে যাতে অপারেশনাল ওভারহেড যুক্তিযুক্ত হয়।
উপসংহার — primary keyword: expected value Polymarket arbitrage সব সময় রক্ষণশীলভাবে গণনা করা উচিত, taker ফি এবং partial-fill সম্ভাবনাকে স্পষ্টভাবে মডেল করে।
Frequently asked questions
How do I model partial-fill probability for larger orders?
আপনি যে সাইজে ট্রেড করেন সেই সাইজে অভিজ্ঞ fill হার নিয়ে শুরু করুন। ছোট ইঙ্ক্রিমেন্টের জন্য Bernoulli per‑slice অনুমান ব্যবহার করুন; বড় সাইজের জন্য fills‑কে price levels জুড়ে binomial যোগফল হিসেবে মডেল করুন অথবা ইতিহাসভিত্তিক depth‑of‑book ব্যবহার করে deterministic slice করুন। r_i অনুমান করার সময় সবসময় রক্ষণশীল হোন।
Which fees should I include in the EV calculation?
নির্বাহিত লেগগুলোর জন্য taker ফি অন্তর্ভুক্ত করুন — Polymarket‑এর taker ফি ক্যাটেগরির উপর নির্ভর করে বর্তমানে 0% থেকে 1.8% পর্যন্ত পরিবর্তিত হয়; maker ফি শূন্য। ফি‑কে fee_rate × executed_cost হিসেবে মডেল করুন এবং প্রয়োজনে executed_cost‑কে maker/taker অংশে বিভক্ত করুন।
Do I need to account for UMA disputes in EV?
হ্যাঁ। UMA বিতর্ক নিষ্পত্তি স্থগিত করতে পারে বা সময় বদলে দিতে পারে। বিতর্ক সম্ভাবনা এবং বিলম্বের প্রত্যাশিত সময়/খরচ প্রতিফলিত করার জন্য P_redeem ≤ 1.0 অন্তর্ভুক্ত করুন।
Can I ignore residual unwind loss if I expect to re-balance later?
না। অবশিষ্ট পজিশনগুলো বাজারগত এবং দিকগত ঝুঁকি বহন করে। আপনি যদি পুনঃসমন্বয় করার জন্য লিখিত, পরিসংখ্যানগতভাবে সমর্থিত পরিকল্পনা না রাখেন, তাহলে EV মডেলে একটি রক্ষণশীল unwind দাম (p_unwind) অন্তর্ভুক্ত করুন।
Is the nominal edge the same as EV?
না। নামমাত্র edge = 1.00 − Σ bestAsk_i। EV সেই edge‑কে taker ফি, partial‑fill সম্ভাবনা, residual unwind ক্ষতি, এবং settlement/dispute ঝুঁকি বিবেচনায় নিয়ে সমন্বয় করে। সিদ্ধান্ত‑গ্রহণের জন্য EV ব্যবহার করুন।
রেফারেন্স করা পরিভাষা
সম্পর্কিত গাইডসমূহ
শিক্ষামূলক উদ্দেশ্যে בלבד। আর্থিক, আইনি বা কর-সম্পর্কীয় পরামর্শ নয়। হতে পারে আপনার এলাকা/নির্ধারিত অঞ্চলে Polymarket উপলব্ধ না থাকে।