روبوت مراجحة على Polymarket: عندما ينخفض مجموع YES وNO عن دولار
بنية روبوت مراجحة الدمج ومخاطره: يشتري الجانبين ويدمجهما عندما ينخفض مجموع سعري رمزي YES وNO على Polymarket عن دولار واحد.
Polymarket سوق تنبؤ يعمل على شبكة Polygon. في كل سوق سؤال (مثل "هل سيرتفع Bitcoin خلال الدقائق الخمس عشرة القادمة؟")، ويُتداول رمزان للنتيجة: YES وNO. أنا Berke Özyaşar؛ طوّرت روبوتات Python تمسح هذه الأسواق بحثًا عن تناقضات صغيرة بين الأسعار وتنفّذ صفقات تلقائيًا. وفي هذا المقال أشرح فكرة مراجحة الدمج التي تقوم عليها روبوتات Polymarket، وبنية الروبوت، والمخاطر الحقيقية لهذا العمل.
الفكرة الأساسية: 1 YES + 1 NO = 1 USDC
يستخدم Polymarket العقود الذكية لإطار Conditional Token Framework (CTF) الذي طوّرته Gnosis. وفي هذه البنية عمليتان أساسيتان:
- Split (التقسيم): يُودَع 1 USDC كضمان، ويُستلم مقابله رمز YES واحد ورمز NO واحد من السوق نفسه.
- Merge (الدمج): يُعاد رمز YES ورمز NO اللذان بحوزتك إلى العقد، ويُسترد ضمان 1 USDC.
أيًّا كانت نتيجة السوق، يساوي أحد الرمزين دولارًا واحدًا والآخر صفرًا. أي أن المجموعة الكاملة المكوّنة من YES وNO تساوي دائمًا دولارًا واحدًا، والعقد يضمن ذلك. وفي سوق كفؤة ينبغي أن يكون مجموع أفضل سعر بيع لـYES وأفضل سعر بيع لـNO قريبًا من دولار واحد. لكن الأسعار تتحرك بسرعة، خاصة في أسواق العملات المشفرة قصيرة الأجل من نوع "Up or Down" لمدة 5 إلى 15 دقيقة، فينخفض هذا المجموع أحيانًا عن دولار واحد.
مثال: إذا كان "Down" يُباع في سوق ما بـ74 سنتًا و"Up" بـ22 سنتًا، فإن شراء الجانبين معًا يكلّف 96 سنتًا. وعند دمج الرمزين يُسترد 100 سنت؛ والسنتات الأربعة الفاصلة هي الفرق الإجمالي قبل خصم الرسوم. ولا يهم في أي اتجاه يتحرك السعر.
البنية الهجينة لـPolymarket
لفهم طريقة عمل الروبوت يجب معرفة طبقتي Polymarket. تُطابَق الأوامر خارج السلسلة في دفتر أوامر مركزي (CLOB)؛ ولا يتطلب إصدار الأوامر وإلغاؤها رسوم غاز، وتُوقَّع الأوامر وفق معيار EIP-712. أما الصفقات المطابقة فتُسوّى على Polygon؛ وتُنفَّذ عمليات مثل split وmerge وredeem مباشرة على السلسلة. ويُستخدم USDC.e كضمان، وPOL لرسوم الغاز في المعاملات على السلسلة.
لهذه البنية نتيجة مهمة من منظور المراجحة: شراء الجانبين يتم خارج السلسلة، بينما يتم الدمج على السلسلة. أي أن عمليتي الشراء ليستا معاملة ذرية واحدة. وسأعود إلى سبب أهمية ذلك في قسم المخاطر.
بنية الروبوت
يتكوّن الروبوت من أربعة أجزاء رئيسية.
1. اكتشاف الأسواق
تُجلب أسواق العملات المشفرة النشطة من نوع "up-or-down" عبر Gamma API الخاص بـPolymarket. ويُسجَّل لكل سوق معرّف conditionId ومعرّفا رمزي YES/NO. ولأن الأسواق قصيرة الأجل تُفتح وتُغلق باستمرار، تُحدَّث هذه القائمة بانتظام.
2. الماسح
يقرأ الماسح دفتر أوامر كلا الرمزين من CLOB API كل ثانيتين تقريبًا، ويجمع أفضل سعري بيع، ويحسب الفرق عن دولار واحد. والمهم هنا ليس الفرق الإجمالي بل صافي الربح. فرسوم الـtaker في أسواق العملات المشفرة على Polymarket تعتمد على السعر: تكون في أعلاها حول 50 سنتًا، وتقل كلما اقترب السعر من الطرفين. ويحسب الماسح رسوم كل جانب على حدة وفق سعره، ويضيف تكلفة الغاز لعملية الدمج. وتُتجاهل الفرص التي تقل عن الحدود الدنيا للفرق والربح. كما يُقيَّد حجم الصفقة بالكمية المتاحة في أعلى مستوى من دفتر الأوامر؛ فالأمر الأكبر يحرّك السعر ضد صاحبه.
3. المنفّذ
عند العثور على فرصة تُرسَل أوامر موقّعة للجانبين بأقرب ما يمكن من التزامن. وعلى جانب Python أستخدم لذلك مكتبة py-clob-client؛ وتُدار عبرها عملية توقيع الأوامر وبيانات اعتماد API.
4. الدمج أو الاحتفاظ حتى حسم النتيجة
عندما يُنفَّذ الجانبان، تُستدعى الدالة mergePositions() في عقد CTF عبر web3.py، فيعود USDC.e إلى المحفظة. وبدلًا من ذلك يمكن الاحتفاظ بالمركز حتى حسم السوق؛ وهذا يوفّر رسوم الغاز التي تُدفع للدمج، لكنه يجمّد رأس المال طوال تلك المدة. وفي استراتيجية كثيرة الصفقات يكون استرداد رأس المال فورًا هو الأجدى عادةً.
الاستراتيجية الثانية: Dump & Hedge
في مراجحة الدمج الصرفة تُغلق الفرص بسرعة. لذلك يتضمن الروبوت إلى جانبها استراتيجية ثانية تُسمى "Dump & Hedge":
- عند حدوث هبوط مفاجئ (10 سنتات أو أكثر) في سعر أحد الجانبين، يُشترى ذلك الجانب.
- عندما تنخفض التكلفة الإجمالية مع الجانب المقابل إلى 95 سنتًا أو أقل، يُشترى الجانب الآخر أيضًا وتكتمل المجموعة.
- إذا لم يتحقق هذا الشرط خلال مدة محددة، يُشترى الجانب المقابل ولو بخسارة لتجنّب البقاء في مركز أحادي الجانب (تحوّط بوقف خسارة زمني).
تقتنص هذه الاستراتيجية فرصًا أكثر، لكنها بحكم تعريفها تحمل مركزًا مفتوحًا أحادي الجانب لفترة؛ أي أنها أكثر مخاطرة من المراجحة الصرفة.
البنية التحتية
- اللغة والمكتبات: Python وpy-clob-client وweb3.py. ولدى Polymarket أيضًا SDK بلغتي TypeScript وRust؛ ويمكن النظر فيهما في الحالات التي يكون فيها زمن الاستجابة أكثر حساسية.
- RPC: قد تكون نقاط RPC العامة لشبكة Polygon بطيئة وغير مستقرة؛ واستخدام مزوّد RPC مدفوع يؤثر مباشرة في زمن الاستجابة.
- المراقبة: تُتابَع نتائج المسح، والأوامر المرسلة، وحالات التنفيذ، وعمليات الدمج عبر لوحات Grafana. وفي رأيي، تشغيل روبوت لا ترى ما يفعله مخاطرة في حد ذاته.
- الإيقاف الطارئ: مفتاح إيقاف (kill switch) يوقف جميع العمليات بأمر واحد في حال حدوث موقف غير متوقع.
المخاطر: لا يوجد شيء اسمه "مراجحة بلا مخاطر"
تبدو مراجحة الدمج على الورق مستقلة عن النتيجة، لكن في الواقع توجد مخاطر جدية:
- مخاطر الجانب الواحد: بعد تنفيذ الجانب الأول قد يتغير سعر الجانب الثاني أو قد لا يُنفَّذ الأمر إطلاقًا. وحينها يبقى بين يديك مركز أحادي الجانب تحوّل إلى رهان على الاتجاه.
- تآكل الرسوم: إذا تجاوز مجموع رسوم الـtaker والغاز الفرقَ، تتحقق خسارة بدلًا من الربح. وكون الرسوم مرتبطة بالسعر يستلزم إعادة الحساب عند كل فرصة.
- الانزلاق والسيولة: قد يكون دفتر الأوامر ضحلًا. والسعر الذي تراه قد لا يطابق السعر لحظة وصول الأمر.
- المنافسة: هناك روبوتات أخرى تمسح الفرص نفسها؛ وقد تُغلق الفرص في وقت قصير جدًا.
- حدود معدّل الطلبات: تقف Cloudflare أمام واجهات API؛ وإرسال طلبات متكررة جدًا قد يؤدي إلى الحظر. لذا يجب ضبط منطق إعادة المحاولة وتكرار الطلبات وفقًا لذلك.
- لا توجد بيئة اختبار: ليس لدى Polymarket شبكة اختبار؛ وكل صفقة تتم بأموال حقيقية. لذلك يجب تجربة كل إصدار جديد بمبالغ صغيرة جدًا.
- قيود الوصول: يقيّد Polymarket الوصول من بعض الدول؛ وعليك التحقق من قواعد المكان الذي توجد فيه ومن شروط استخدام المنصة.
هذا المقال ليس نصيحة استثمارية. يُصمَّم روبوت المراجحة لاقتناص الفرص في ظروف معيّنة؛ ومن الممكن أيضًا أن يخسر بسبب الرسوم والانزلاق والسيولة.
إذا كنت تفكر في روبوتك الخاص
إذا كانت لديك فكرة روبوت لـPolymarket أو لأسواق مشابهة، فعليك أولًا صياغة الاستراتيجية في قواعد واضحة، ثم المضي بمبالغ صغيرة مع بنية مراقبة جيدة. وقد شرحت كيف أعمل في مثل هذه المشاريع في صفحة روبوتات التداول؛ ويمكنك التواصل معي من هناك أو عبر صفحة التواصل.