Polymarket Bot Tutorial · الفصل 20 من 32
تتبّع محافظ الحيتان على Polymarket ونسخ تداول أفضل المتداولين برمجيًا: حدّد المحافظ المربحة عبر لوحة الصدارة والتحليل على السلسلة، وقلّد صفقاتهم مع قواعد للحجم والتوقيت.
ما الذي يغطيه هذا الفصل
نسخ محافظ Polymarket الرابحة فكرة شائعة، لكن الحيتان الفعلية على Polymarket تنفّذ في الغالب arbitrage متأخرًا ضمن النافذة على الأسواق التي تم تسويتها، وليس رهانات اتجاهية. هذا الفصل هو البحث الصريح المستند إلى التحليل على السلسلة: أي المحافظ تستحق النسخ فعلًا، ولماذا لا يستحق معظمها النسخ، وما هي رياضيات تحديد حجم المركز.
- تحديد المحافظ المربحة
- رصد الصفقات على السلسلة
- تحديد حجم المركز مقارنةً بالحوت
- الزمن الكامن: ما مقدار التأخير الذي يُعدّ متأخرًا جدًا
- الفلاتر: اتبع فقط المحافظ ذات الأفضلية المثبتة
- الكود: رصد حدث شراء للحوت، وتنفيذ نسخة بحجم محدد
تحديد المحافظ المربحة
الفرضية وراء نسخ الحيتان هي أن بعض المحافظ مربحة باستمرار، وأن نسخ دخولها يلتقط جزءًا من ميزتها. لكن التحليل على السلسلة لأفضل محافظ Polymarket في 2025-26 قدّم نتيجة محبِطة: معظم الحيتان المرئية تنفذ arbitrage متأخرًا ضمن النافذة على الأسواق التي تم تسويتها، وليس تداولًا اتجاهيًا.
الملف الذي قسناه على ثلاث محافظ حيتان مرشحة:
- "hhhhhh6" (معدل ربح 98.5%، حجم $n M) - 88% من الدخول عند أسعار ≥0.95، ووسيط زمن الدخول 226 ثانية من نافذة 300 ثانية. arbitrage خالص لعائدات الذيل، وليس اتجاهيًا.
- "anonymous" (معدل ربح 20%) - مقامر متدهور. نسخه يخسر المال.
- "Jkim123" (معدل ربح 53.5%) - رمية عملة. ليست إشارة تستحق النسخ.
0% من صفقات هذه الحيتان حدثت في أول 120 ثانية من أي نافذة مدتها 5 دقائق. الإشارة التنبؤية (إن وُجدت) ستأتي من دخولات كبيرة في النافذة المبكرة - لكن تلك المحافظ ليست الموجودة في أعلى لوحة الصدارة، لأن الأمر صعب.
رصد الصفقات على السلسلة
يتطلّب رصد صفقات محفظة مستهدفة إما الاستعلام الدوري عن data-api الخاصة بـ Polymarket أو الاشتراك في أحداث التحويل on-chain الخاصة بـ CTF. خيار data-api أبسط.
def watch_wallet(wallet_addr, last_seen_ts=0):
while True:
url = f"https://data-api.polymarket.com/activity?user={wallet_addr}&limit=100"
events = requests.get(url).json()
for ev in events:
ts = int(ev.get("timestamp", 0))
if ts <= last_seen_ts: continue
if ev["type"] == "TRADE":
process_whale_trade(ev)
last_seen_ts = max(last_seen_ts, ts)
time.sleep(5)
الاستعلام كل خمس ثوانٍ هو الحد العملي الأدنى بالنسبة إلى data-api. أقل من ذلك ستصل إلى rate limits. وللكشف دون ثانية واحدة، اشترك في أحداث ERC-1155 TransferSingle على السلسلة من عقد CTF مع فلترة على عنوان proxy الخاص بالحوت.
تحديد حجم المركز مقارنةً بالحوت
إذا حدّدت حجم نسختك كنسبة ثابتة من صفقة الحوت، فأنت ترث ملف المخاطر الخاص به. هناك بديلان عمليان.
- مبني على السقف: اجعل حجم كل نسخة مبلغًا ثابتًا بالدولار ($10-50) بغض النظر عن حجم الحوت. أبطأ في التراكم، لكن الخسارة محدودة لكل صفقة.
- موزون بمعدل الربح: اجعل حجم النسخة دالة في معدل ربح الحوت الأخير. معدل ربح 60%+ → نسخة بالحجم الكامل؛ 40-60% → نصف الحجم؛ أقل من 40% → تجاهل.
النهج المبني على السقف هو الخيار الأكثر أمانًا في أول نشر. انتقل إلى النهج الموزون بمعدل الربح فقط بعد أن تقيس معدل الربح الفعلي للحوت على نسخك أنت (والذي يكون عادةً أسوأ من رقمه العلني لأنك تصل متأخرًا).
الزمن الكامن: ما مقدار التأخير الذي يُعدّ متأخرًا جدًا
تظهر صفقة الحوت علنًا خلال 1-2 ثانية من التنفيذ. ونسخها يتطلب زمن وصول أسرع من ذلك على جانب القراءة، إضافةً إلى زمن تنفيذ الأمر الخاص بك.
الزمن الكامل لنهاية إلى نهاية بالنسبة إلى bot نسخ نموذجي: استعلام كل 5-10 ثوانٍ + تنفيذ أمر خلال 200ms = إجمالي 5-15 ثانية. بحلول الوقت الذي تنفّذ فيه نسختك، تكون إشارة الحوت قد انعكست في السعر.
بالنسبة إلى 99% من النسخ، هذا متأخر جدًا في أسواق Polymarket الضيقة. دخول الحوت حرّك mid بمقدار 1-2 سنت؛ وأنت تدفع علاوة 1-2 سنت مقابل السعر الذي دخل به. إذا كانت ميزته 3c، فقد ذهب نصفها بالفعل عندما تصل.
بوتات النسخ التي تنجح إما (a) تستهدف أسواقًا بطيئة الحركة حيث لا يهم تأخير 30 ثانية، أو (b) تستخدم الاشتراك في الأحداث on-chain للتفاعل ضمن أطر زمنية دون ثانية.
الفلاتر: اتبع فقط المحافظ ذات الأفضلية المثبتة
ثلاثة فلاتر قبل إضافة أي محفظة إلى قائمة النسخ.
- 30+ صفقة مغلقة في تاريخ المحفظة. العينات الأصغر مجرد ضجيج.
- معدل ربح مدى الحياة > 60%، أو قيمة متوقعة موجبة لكل صفقة بناءً على أسعار الدخول. أيٌّ من الشرطين؛ وكلاهما أفضل.
- النمط ليس arbitrage متأخرًا ضمن النافذة. تحقّق من وسيط الثواني حتى التسوية عند الدخول؛ إذا كان قريبًا من 0، فالمحفظة تنفذ tail-yield arb لا يمكنك تكراره.
معظم الحيتان المرشحة تفشل في واحد من هذه الفلاتر الثلاثة. مجموعة المحافظ التي يمكن نسخها فعلًا صغيرة. والحفاظ على القائمة يتطلب إعادة فحص دورية - فالمحافظ التي كانت مربحة الشهر الماضي قد لا تكون كذلك هذا الشهر.
الكود: رصد حدث شراء للحوت، وتنفيذ نسخة بحجم محدد
مرجع: رصد حدث CTF TransferSingle لحوت تتم مراقبته، ثم تنفيذ شراء نسخة بحجم محدد.
from web3 import Web3
w3 = Web3(Web3.WebsocketProvider(POLYGON_WSS))
ctf = w3.eth.contract(address=CTF_ADDR, abi=CTF_ABI)
WHALES = {"0xabc...": {"fraction": 0.05, "cap": 50}}
def on_transfer(event):
to = event.args["to"].lower()
if to not in WHALES: return
cfg = WHALES[to]
token_id = event.args.id
whale_size = event.args.value / 1e6
copy_size = min(cfg["cap"], whale_size * cfg["fraction"])
if copy_size < 5: return # not worth fees
book = fetch_book(str(token_id))
if book.best_ask:
place_fok(str(token_id), "BUY", book.best_ask + 0.01, copy_size)
# subscribe to ERC-1155 TransferSingle events from CTF
filt = ctf.events.TransferSingle.create_filter(fromBlock="latest")
while True:
for ev in filt.get_new_entries(): on_transfer(ev)
time.sleep(0.5)
ميّز الشراء من البيع عبر التحقق من from (العنوان الصفري = mint = الحوت اشترى) مقابل to (العنوان الصفري = burn = تم البيع).





