Skip to content
→ المدونة

قارِن بين Kalshi و Polymarket بأمان

dino.markets

تبدأ مقارنة Kalshi و Polymarket من العقد نفسه. يمكن لقائمتين أن تصفا نفس الحدث بلغة إنجليزية بسيطة بينما تدفعان على نتائج أو نوافذ رصد أو مصادر بيانات أو حدود مختلفة. وضع سعريهما جنبًا إلى جنب قبل التحقق من هذه الشروط يُنتج مقارنة تبدو دقيقة بين ادعاءين مختلفين.

يطابق Dino القوائم ذات الصلة في كائن Market واحد ويحتفظ بفروق التسوية مرفَقة بذلك الكائن. يستخدم هذا الدرس Python SDK لفحص زوج واحد وحساب فارق السعر بعد مراجعة فحوصات العقد فقط.

سحب Market مطابَق وتفاصيله

أنشئ مفتاح API مجاني وثبّت العميل. ثم اطلب فئة أسواق مفتوحة. يستخدم هذا المثال الطقس لأن فروق المحطة والفئات فيه سهلة الملاحظة في الإفصاح:

export DINO_API_KEY=sk_live_...
pip install dino-markets
from dino_markets import Dino

client = Dino()
catalog = client.markets(
    category="weather",
    market_type="weather_high",
    status="open,live",
    limit=20,
)

summary = next(
    (
        market
        for market in catalog["markets"]
        if market["coverage"]["kalshi"]
        and market["coverage"]["polymarket"]
    ),
    None,
)
if summary is None:
    raise SystemExit("No two-venue weather comparison is available right now.")

market = client.market(summary["id"])

توفّر نتيجة القائمة id ثابتًا من Dino إلى جانب الأسعار المتأخرة الحالية. يضيف client.market(id) سياقًا موحَّدًا وهويات المنصات وعمق السوق وإفصاح التسوية لمقارنة كاملة.

تحويل الإفصاح إلى قائمة مراجعة

تُظهر الدالة التالية أربعة فحوصات قبل أي حساب للسعر:

def comparison_checks(market):
    settlement = market.get("settlement") or {}
    risks = settlement.get("risks") or []
    served_blocking = [
        risk
        for risk in risks
        if risk.get("severity") == "high"
    ]
    fully_priced = bool(market["outcomes"]) and all(
        outcome.get("kalshi") is not None
        and outcome.get("polymarket") is not None
        for outcome in market["outcomes"]
    )

    return {
        "entity_match_served": market["match"] == "high_confidence",
        "full_price_coverage": fully_priced,
        "settlement_parity": settlement.get("parity") is True,
        "served_blocking_risks": served_blocking,
    }

checks = comparison_checks(market)
print(checks)

يجيب match عن سؤال الهوية: هل لدى Dino أدلة كافية على أن القوائم تمثّل نفس الحدث أو الادعاء الأساسي ليقدّمها معًا. يجيب اكتمال تغطية السعر عن ما إذا كان يمكن مقارنة كل نتيجة عبر المنصتين. يُظهر تكافؤ التسوية وقائمة المخاطر المقدَّمة ما إذا كانت النتائج المطابَقة تُدفع بشروط متوافقة، رهنًا بإفصاح الإلغاء أدناه.

يمكن أن يكون Market مقارنة صالحة بين المنصتين بينما يحمل تحفّظ تسوية. في هذه الحالة يبقى signal عنده spread، وينبغي أن يظهر التحفّظ بجانب الأسعار. لدى Opportunity المؤكَّدة بوابة أعلى وتأتي من مورد /v2/arbitrage المنفصل.

قراءة العقد على طبقات

استخدم حقول تفاصيل Market كترتيب مراجعة ثابت:

الفحصالحقلما الذي يجب التحقق منه
الهويةmatch، title، سياق الفئةتشير قوائم المنصتين إلى نفس الحدث أو الادعاء.
النتائجoutcomes[].key، outcomes[].nameتغطي الفئات نفس النتائج الواقعية.
التغطيةcoverage، أسعار النتائجلدى المنصتين سعر حقيقي أينما احتاجت المقارنة إليه.
التسويةsettlement.parity، settlement.risks[]، settlement.kalshi_text، settlement.poly_textمصادر التسوية وحدود القطع متوافقة أو مُفصَح عنها. اقرأ نص قواعد كل منصة لصياغة الإلغاء.

يستبعد settlement.risks[] المقدَّم عمدًا أحداث cancel_* الداخلية. اقرأ kalshi_text وpoly_text لشروط الإلغاء الخاصة بكل منصة. يحسب Dino settlement.parity وsignal من مجموعة المخاطر الداخلية الكاملة قبل ترشيح تلك الأحداث من قائمة المخاطر العامة.

توضّح أسواق الطقس سبب أهمية كل طبقة. قد يسمّي عقدا حد أقصى يومي نفس المدينة بينما يُسوَّيان من محطتَي طقس مختلفتين. وقد تكون فئات الحرارة فيهما أيضًا مُزاحة بدرجة واحدة. يحتفظ Dino بالفئات الفعلية لكل منصة ويبلّغ عن التداخلات بدلاً من اختلاق سعر مُدمَج.

تكشف أسواق عتبة العملات المشفَّرة عن مشكلة حدود مختلفة. يمكن أن تُسوّي إحدى المنصتين "عند سعر التنفيذ أو أعلى منه" بينما تستخدم الأخرى "أعلى منه" فقط. عندئذ يشير فارق السعر عند العتبة الدقيقة إلى عقود بمجموعات فوز مختلفة، حتى عندما يذكر كلا العنوانين نفس الأصل والرقم.

حساب فروق الأسعار أخيرًا

بعد مراجعة الإفصاح، احسب الفارق الملاحَظ لكل نتيجة مسعَّرة بالكامل:

for outcome in market["outcomes"]:
    kalshi = outcome.get("kalshi")
    polymarket = outcome.get("polymarket")
    if kalshi is None or polymarket is None:
        continue

    gap_pts = abs(kalshi - polymarket) * 100
    print(
        outcome["name"],
        f"Kalshi {kalshi:.2f}",
        f"Polymarket {polymarket:.2f}",
        f"gap {gap_pts:.1f} pts",
    )

النتيجة هي فارق سعر بين المنصتين عند طابع الوقت priced_at الخاص بـ Market. يبيّن مدى تباعد السعرين الملاحَظين. يتطلّب التنفيذ بيانات دفتر الأوامر الحالية والحجم المتاح والرسوم وشروط تسوية متوافقة. هذه بيانات لمطورين لا نصيحة تداول أو مالية.

استخدم كيف يطابق Dino الأسواق لبوابتي الهوية والتفعيل، ومرجع كائن Market لكل حقل استُخدم أعلاه. تعرض اللوحات المباشرة نفس الإفصاح في عرض مقروء للبشر.

المزيد من المدونة