دليل بوت بوليماركت · الفصل 24 من 32
توفّر منصة Perps من بوليماركت واجهة API عامة كاملة مع حزم SDK رسمية بلغتي TypeScript وPython. يبني هذا الفصل روبوتًا على الواجهة الحقيقية: المصادقة عبر مفتاح تداول وكيل (proxy)، وبيانات السوق عبر REST وWebSocket، والأوامر مع جني الأرباح ووقف الخسارة، وضوابط المخاطر التي تمنع روبوتًا يعمل بالرافعة المالية من إفراغ الحساب.
ما الذي يغطيه هذا الفصل
- أرقام أساسية لمطوّري الروبوتات
- كيف بُنيت واجهة Perps API
- الخطوة 1: تثبيت SDK وفتح جلسة
- الخطوة 2: قراءة بيانات السوق عبر REST وWebSocket
- الخطوة 3: وضع الأوامر مع جني الأرباح ووقف الخسارة
- الخطوة 4: هيكل روبوت مع ضوابط المخاطر داخل الكود
- الأخطاء، ومفتاح الرجل الميت، وقواعد الروبوتات والاستضافة
كل دالة SDK ونقطة نهاية هنا مأخوذة من وثائق Perps الرسمية لدى بوليماركت (docs.polymarket.com/perps، اطّلعنا عليها في 2026-11-06). منطقنا الخاص موضّح في التعليقات، ودالة الاستراتيجية عنصر نائب مُعلَّم بوضوح.
أرقام أساسية لمطوّري الروبوتات (حتى نوفمبر 2026)
| البند | القيمة |
|---|---|
| عنوان URL الأساسي لـ REST | https://api.perpetuals.polymarket.com |
| WebSocket | wss://ws.perpetuals.polymarket.com/v1/ws |
| SDK بلغة TypeScript | @polymarket/client (مع viem للتوقيع) |
| SDK بلغة Python | polymarket-client (غير متزامنة) |
| البيانات العامة | /v1/info/*، دون مصادقة |
| القراءات الخاصة | /v1/account/* مع ترويستي polymarket-proxy وpolymarket-secret |
| عمليات الكتابة الموقّعة | /v1/trade/*، توقيع EIP-712 بالمفتاح الوكيل، صالح لمدة 5 دقائق |
| بيانات اعتماد الجلسة | تنتهي صلاحيتها بعد أسبوع واحد افتراضيًا |
| الحد الأدنى للأمر | $10 قيمة اسمية؛ والحد الأدنى للإيداع 10 pUSD |
| أكبر أمر سوق | $1 مليون في أسواق 50x و20x، و$500 ألف في معظم الأسواق الأخرى، و$50 ألف في العملات ذات الرافعة 3x و5x |
| صيغة السعر والحجم | سلاسل عشرية، دون تجاوز عدد المنازل العشرية للسوق ولا 5 أرقام معنوية |
| الحد الأقصى للرافعة المالية | 50x (BTC وETH وUSA500 وUS100)، وإلا 20x أو 10x أو 5x أو 3x حسب السوق، وأقل من ذلك للمراكز الكبيرة |
| الرسوم (الفئة الأساسية) | رسوم آخذ السوق 0.040%، وصانع السوق 0.0125%؛ وANT بنصف السعر |
| التمويل | كل ساعة، بحد أقصى +/-4% في الساعة |
| مشغّلات TP/SL | سعر العلامة، لا آخر سعر تداول |
| إبقاء اتصال WebSocket نشطًا | إرسال ping كل 25 ثانية تقريبًا؛ واعتبر الاتصال متوقفًا بعد نحو 65 ثانية من الصمت |
| حداثة بيانات الأسعار (ticker) | قد يصل عمرها إلى 10 ثوانٍ |
كيف بُنيت واجهة Perps API
Perps بورصة هجينة: تتم المطابقة خارج السلسلة (offchain)، بينما يتم الحفظ والتسوية على Polygon. الإيداعات والسحوبات وحدها تتم على السلسلة، لذا لا توجد رسوم غاز على كل أمر. تتكون الواجهة من ثلاث طبقات:
- البيانات العامة (
/v1/info/): الأدوات، وبيانات الأسعار (ticker)، ودفتر الأوامر، والشموع، والصفقات، والتمويل، والرسوم. لا حاجة إلى مفتاح ولا يوجد حظر جغرافي. - القراءات الخاصة (
/v1/account/): المحفظة، والأرصدة، والأوامر، وعمليات التنفيذ، والإعدادات. - عمليات الكتابة الموقّعة (
/v1/trade/): الأوامر، والإلغاءات، والرافعة المالية، والهامش المعزول، والإلغاء التلقائي. تُرمَّز كل عملية كتابة بصيغة MessagePack، ثم تُجزَّأ بخوارزمية keccak256 وتُوقَّع كبيانات EIP-712 typed data بالمفتاح الوكيل.
تتولى حزم SDK التوقيع نيابةً عنك. وتتوفر أيضًا مواصفة OpenAPI (/api-spec/perps-openapi.json على موقع الوثائق) ومواصفة AsyncAPI لاتصال WebSocket.
BTC-PERP. أما الواجهة الحية فتعيد BTC-USD وSP500-USD (USA500) وNAS100-USD (US100) وANT-USD وغيرها. اجلب قائمة الأدوات، وطابِق قيمة symbol الحية، واحفظ المعرّف الرقمي id. لا تنسخ المعرّفات من الأمثلة: في البيئة الحية، معرّف BTC هو 6 ومعرّف SP500 هو 1.الخطوة 1: تثبيت SDK وفتح جلسة
ثبّت الحزمة باستخدام pip install polymarket-client أو npm install @polymarket/client@latest viem. يحتاج الروبوت إلى عنوان محفظتك على بوليماركت والمفتاح الخاص للموقِّع الذي يملك حساب Perps (الحساب مرتبط بحساب EOA الخاص بالموقِّع، لا بمحفظة Safe). يتطلب فتح الجلسة توقيعًا واحدًا لتفويض مفتاح تداول وكيل جديد، يتولى بعد ذلك توقيع كل أمر، فلا يتداول مفتاحك الذي يحمل الأموال أبدًا. احفظ session.credentials مشفّرة لاستئناف الجلسة لاحقًا.
import asyncio
import os
from datetime import timedelta
from polymarket import AsyncSecureClient
async def main():
client = await AsyncSecureClient.create(
private_key=os.environ["PRIVATE_KEY"],
wallet=os.environ["POLYMARKET_WALLET_ADDRESS"],
)
# One signature creates a proxy trading key. Orders are signed by the proxy,
# not by your wallet key. Credentials expire after one week by default.
session = await client.open_perps_session(
expires_in=timedelta(days=1),
label="perps-bot",
)
stored = session.credentials.model_dump(mode="json") # keep it encrypted
instruments = await client.fetch_perps_instruments()
btc = next(i for i in instruments if i.symbol == "BTC-USD")
print(btc.id, btc.max_leverage, btc.min_notional, btc.price_decimals)
asyncio.run(main())
import { createSecureClient } from "@polymarket/client";
import { privateKey } from "@polymarket/client/viem";
const client = await createSecureClient({
wallet: process.env.POLYMARKET_WALLET_ADDRESS!,
signer: privateKey(process.env.PRIVATE_KEY!),
});
// One signature creates a proxy trading key. Orders are signed by the proxy,
// not by your wallet key. Credentials expire after one week by default.
const session = await client.openPerpsSession({
expiresIn: 24 * 60 * 60 * 1000,
label: "perps-bot",
});
const stored = session.credentials; // keep it encrypted
const instruments = await client.fetchPerpsInstruments();
const btc = instruments.find((i) => i.symbol === "BTC-USD");
if (!btc) throw new Error("BTC-USD not listed");
console.log(btc.id, btc.maxLeverage, btc.minNotional, btc.priceDecimals);
يتطلب الإيداع من الكود (deposit_to_perps / depositToPerps) أيضًا مفتاح Relayer API من إعدادات polymarket.com، قسم API Keys. والخيار الأبسط والأكثر أمانًا: موّل الحساب عبر تطبيق الويب وأبعِد الروبوت عن تحريك الأموال. منذ 2026-11-05، لا يمكن للحسابات المسجّلة في دفتر عناوين السحب أن تسحب إلا إلى العناوين المحفوظة. أما لوحات المعلومات فاستخدم لها مفتاحًا للقراءة فقط (مفتاح وكيل يحمل التسمية read-only:، ويرفض عمليات الكتابة الموقّعة)، ولا تستخدم مفتاح التداول لذلك أبدًا. نتناول تخزين المفاتيح في فصل المحافظ والمصادقة.
الخطوة 2: قراءة بيانات السوق عبر REST وWebSocket
تتضمن بيانات الأسعار (ticker) ثلاثة أسعار: سعر المؤشر (القيمة العادلة المستمدة من مصادر مثل Pyth وChainlink Data Streams وHyperliquid)، وسعر العلامة (يُستخدم لحساب PnL والهامش والتصفية وTP/SL)، وآخر سعر (للتنفيذ فقط)، إضافةً إلى معدل التمويل وموعد التمويل التالي. ابنِ إشاراتك على سعر العلامة أو سعر المؤشر.
# Inside your async main(), after Step 1 (btc is the BTC-USD instrument)
from polymarket import AsyncPublicClient
from polymarket.streams import PerpsBboSpec
client = AsyncPublicClient()
ticker = await client.fetch_perps_ticker(instrument_id=btc.id)
print(ticker.mark_price, ticker.index_price, ticker.funding_rate)
stream = await client.subscribe(PerpsBboSpec(instrument_id=btc.id))
async for event in stream:
print(event.payload.bid_price, event.payload.ask_price)
// After Step 1 (btc is the BTC-USD instrument)
import { createPublicClient } from "@polymarket/client";
const client = createPublicClient();
const ticker = await client.fetchPerpsTicker({ instrumentId: btc.id });
console.log(ticker.markPrice, ticker.indexPrice, ticker.fundingRate);
const stream = await client.subscribe([{ topic: "perps.bbo", instrumentId: btc.id }]);
for await (const event of stream) {
console.log(event.payload.bidPrice, event.payload.askPrice);
}
من دون SDK، اشترك عبر اتصال WebSocket الخام باستخدام {"id": 1, "req": "sub", "chs": ["bbo::6"]}. تشمل القنوات bbo::<id> وbook::<id> وtrades::<id> وtickers::<id> وklines::<id>::1m. لكل تحديث رقم تسلسلي sq: بعد أي فجوة أو إعادة اتصال، أعِد قراءة الحالة عبر REST. وللاختبار الرجعي، تجلب list_perps_candles / listPerpsCandles السجل التاريخي على صفحات (تعيد نقطة نهاية REST ما يصل إلى 1,000 شمعة في كل استدعاء).
الخطوة 3: وضع الأوامر مع جني الأرباح ووقف الخسارة
للأمر جانب side (BUY أو SELL)، وكمية quantity بوحدات الأصل الأساسي، وسعر price اختياري بعملة pUSD، ومدة سريان (gtc أو ioc أو fok). يتطلب خيار post-only مدة GTC؛ أما reduce-only فلا يمكنه إلا تقليص المركز. لا يوجد مؤشر منفصل للشراء أو البيع على المكشوف (long/short): عند عدم وجود مركز، يفتح BUY مركز شراء (long) ويفتح SELL مركز بيع (short).
يُرفق أمر الإطار (bracket order) أمر جني أرباح واحدًا وأمر وقف خسارة واحدًا بأمر الدخول. ويبقيان خاملين حتى يُنفَّذ أمر الدخول بالكامل، ويُلغيان إذا أُلغي أمر الدخول أو نُفِّذ جزئيًا فقط. الأسعار أدناه افتراضية.
# Inside your async main(), after Step 1 (btc is the BTC-USD instrument)
from polymarket import PerpsTpSlTrigger
result = await session.place_order(
instrument_id=btc.id,
side="BUY",
price="100000",
quantity="0.01",
time_in_force="gtc",
take_profit=PerpsTpSlTrigger(trigger_price="104000"),
stop_loss=PerpsTpSlTrigger(trigger_price="98000"),
)
print(result.order.id, result.order.status)
// After Step 1 (btc is the BTC-USD instrument)
import { OrderSide, PerpsTimeInForce } from "@polymarket/client";
const result = await session.placeOrder({
instrumentId: btc.id,
side: OrderSide.BUY,
price: "100000",
quantity: "0.01",
timeInForce: PerpsTimeInForce.GTC,
takeProfit: { triggerPrice: "104000" },
stopLoss: { triggerPrice: "98000" },
});
console.log(result.order.id, result.tpSl.stopLoss?.orderId);
للمركز المفتوح، تضيف place_position_tp_sl / placePositionTpSl مشغّلات تُغلق المركز بالكامل. القواعد:
- تراقب المشغّلات سعر العلامة وترسل أمرًا من نوع reduce-only. يخرج TP/SL الخاص بالمركز بسعر السوق، لذا توقّع انزلاقًا سعريًا في الدفاتر ضعيفة السيولة.
- أمر جني أرباح واحد وأمر وقف خسارة واحد للمركز في كل سوق. نقل الوقف يعني الإلغاء ثم الإنشاء من جديد، وهي عملية غير ذرّية.
- يُرفض المشغّل الذي تجاوزه سعر العلامة بالفعل، وتُرفض أسعار الأوامر المحددة البعيدة جدًا عن سعر العلامة.
لتجربة مسار الأوامر يدويًا قبل أتمتته، افتح سوق BTC على Perps من بوليماركت وضع أصغر أمر مسموح به. رؤية عمليات التنفيذ والرسوم ولوحة المراكز تجعل قراءة استجابات API أسهل.
الخطوة 4: هيكل روبوت مع ضوابط المخاطر داخل الكود
يستخدم هيكل Python أدناه استدعاءات SDK الموثّقة فقط؛ أما منطق المخاطر فهو من عندنا. ثلاث طبقات من الحماية:
- سقف الرافعة المالية. تُضبط الرافعة المالية على 3x أو الحد الأقصى للسوق، أيهما أقل، مع هامش معزول، وتُرفض الأحجام التي تقع ضمن فئة مخاطر ذات سقف أدنى.
- مفاتيح الإيقاف الطارئ. ملف HALT، وحد خسارة يومي بنسبة 5%، والخروج عند التصفية. يُغلق المفتاح المراكز بأوامر IOC من نوع reduce-only، ويُلغي الأوامر المتبقية، ثم يتحقق من زوال الاثنين معًا.
- وقف خسارة على كل مركز. أوامر الدخول من نوع fill-or-kill تعني عدم وجود تنفيذ جزئي غير محمي. يلي كل تنفيذ أمرا وقف خسارة وجني أرباح للمركز؛ وإذا رُفضا، يُغلق المركز فورًا.
import asyncio
import logging
import os
from datetime import timedelta
from decimal import Decimal, ROUND_DOWN
from polymarket import AsyncSecureClient, PerpsPositionTpSlTrigger
SYMBOL = "BTC-USD" # live API symbol; docs examples say "BTC-PERP"
LEVERAGE_CAP = 3 # our cap, far below the 50x BTC allows
RISK_PER_TRADE = Decimal("20") # pUSD we accept losing if the stop fills
STOP_PCT = Decimal("0.02") # stop 2% from entry
TAKE_PCT = Decimal("0.04") # take profit 4% from entry
MAX_NOTIONAL = Decimal("2000") # hard cap per position, in pUSD
MAX_SLIPPAGE = Decimal("0.002") # worst entry price: ask + 0.2%
MAX_FUNDING = Decimal("0.0005") # skip longs if funding > 0.05% per hour
DAILY_LOSS_LIMIT = Decimal("0.05") # kill switch at -5% of start equity
HALT_FILE = "/opt/perps-bot/HALT" # touch this file to stop the bot
def fit(value: Decimal, decimals: int, sig: int = 5) -> str:
"""Round down to the market's decimals and to 5 significant figures."""
v = value.quantize(Decimal(1).scaleb(-decimals), rounding=ROUND_DOWN)
if v != 0:
step = Decimal(1).scaleb(v.adjusted() - sig + 1)
if step > Decimal(1).scaleb(-decimals):
v = v.quantize(step, rounding=ROUND_DOWN)
return format(v, "f")
def tier_cap(inst, notional: Decimal) -> int:
"""Max leverage allowed for this notional by the market's risk tiers."""
cap = inst.max_leverage
for tier in inst.risk_tiers:
if notional >= Decimal(tier.lower_bound):
cap = tier.max_leverage
return cap
async def close_all(session):
"""Close every position with reduce-only IOC orders, then cancel the rest."""
portfolio = await session.fetch_portfolio()
for pos in portfolio.positions:
if pos.size != 0:
await session.place_order(
instrument_id=pos.instrument_id,
side="SELL" if pos.size > 0 else "BUY",
quantity=abs(pos.size),
time_in_force="ioc",
reduce_only=True,
)
await session.cancel_all_orders()
async def kill_switch(session, reason: str):
logging.error("KILL SWITCH: %s", reason)
for attempt in range(3):
await close_all(session)
portfolio = await session.fetch_portfolio()
open_orders = await session.fetch_open_orders()
if not open_orders and all(p.size == 0 for p in portfolio.positions):
return
await asyncio.sleep(2)
logging.critical("Positions still open after kill switch: act manually")
async def open_long(client, session, inst):
ticker = await client.fetch_perps_ticker(instrument_id=inst.id)
if Decimal(ticker.funding_rate) > MAX_FUNDING:
return # longs would pay too much
book = await client.fetch_perps_book(instrument_id=inst.id, depth=10)
if not book.asks:
return
ask = Decimal(book.asks[0].price)
stop = ask * (1 - STOP_PCT)
qty = RISK_PER_TRADE / (ask - stop) # size from the stop, not leverage
qty = min(qty, MAX_NOTIONAL / ask)
notional = qty * ask
if notional < Decimal(inst.min_notional):
return
if tier_cap(inst, notional) < LEVERAGE_CAP:
return # size would break our cap
entry = await session.place_order(
instrument_id=inst.id,
side="BUY",
price=fit(ask * (1 + MAX_SLIPPAGE), inst.price_decimals),
quantity=fit(qty, inst.quantity_decimals),
time_in_force="fok", # all or nothing
)
if entry.order.status != "filled":
return
try: # stop on the whole position
await session.place_position_tp_sl(
instrument_id=inst.id,
take_profit=PerpsPositionTpSlTrigger(
trigger_price=fit(ask * (1 + TAKE_PCT), inst.price_decimals)),
stop_loss=PerpsPositionTpSlTrigger(
trigger_price=fit(stop, inst.price_decimals)),
)
except Exception:
logging.exception("TP/SL rejected: closing the unprotected position")
await close_all(session)
async def my_signal(client, inst) -> bool:
"""PLACEHOLDER: your strategy goes here. Not part of the SDK."""
return False
async def main():
logging.basicConfig(level=logging.INFO)
client = await AsyncSecureClient.create(
private_key=os.environ["PRIVATE_KEY"],
wallet=os.environ["POLYMARKET_WALLET_ADDRESS"],
)
session = await client.open_perps_session(
expires_in=timedelta(days=1), label="perps-bot")
inst = next(i for i in await client.fetch_perps_instruments()
if i.symbol == SYMBOL)
# Control 1: leverage cap and isolated margin, set before any order
await session.update_leverage(
instrument_id=inst.id,
leverage=min(LEVERAGE_CAP, inst.max_leverage),
cross_margin=False,
)
# Field names below follow the documented portfolio JSON
# (margin.total_account_value, in_liquidation). Check them in your SDK.
start_equity = Decimal((await session.fetch_portfolio()).margin.total_account_value)
while True:
portfolio = await session.fetch_portfolio()
equity = Decimal(portfolio.margin.total_account_value)
# Control 2: kill switches
if os.path.exists(HALT_FILE):
await kill_switch(session, "HALT file found")
break
if equity < start_equity * (1 - DAILY_LOSS_LIMIT):
await kill_switch(session, f"daily loss limit hit: {equity}")
break
if portfolio.in_liquidation:
await kill_switch(session, "account in liquidation")
break
in_position = any(p.instrument_id == inst.id and p.size != 0
for p in portfolio.positions)
if not in_position and await my_signal(client, inst):
await open_long(client, session, inst) # Control 3 lives here
await asyncio.sleep(5)
asyncio.run(main())
حساب الحجم. يُحدَّد الحجم من مسافة الوقف، لا من الرافعة المالية. مع عرض بيع افتراضي لـ BTC عند 100,000 pUSD ووقف بنسبة 2%، يكون الوقف عند 98,000. المخاطرة لكل وحدة 2,000، فتكون الكمية 20 / 2,000 = 0.01 BTC، بقيمة اسمية قدرها 1,000 pUSD. عند 3x يتطلب ذلك نحو 333 pUSD من الهامش. معدل هامش الصيانة لـ BTC هو 1% (0.5 / 50x)، لذا فإن سعر تصفية مركز الشراء هو 100,000 x (1 - 1/3) / (1 - 0.01) = نحو 67,340، أي بانخفاض نسبته 32.7%. ويُفعَّل الوقف عند -2% قبل ذلك بكثير. إذا نُفِّذ الوقف عند سعر تفعيله، تكون الخسارة 20 pUSD مضافًا إليها الرسوم: 0.40 للفتح ونحو 0.39 للإغلاق بمعدل رسوم آخذ السوق البالغ 0.040%، أي نحو 20.79 pUSD قبل الانزلاق السعري. الرافعة المالية تحدد فقط مقدار الهامش المحجوز، ولا تغيّر الخسارة عند الوقف.
قبل التشغيل الفعلي، أضف حدًا يوميًا لعدد الصفقات، وتنبيهات عند التنفيذ وعند تفعيل مفاتيح الإيقاف الطارئ، ومطابقةً للحالة عند بدء التشغيل (fetch_portfolio وfetch_open_orders وfetch_orders وlist_fills). راجع فصلَي كود إدارة المخاطر والتداول التجريبي، ودليل الرافعة المالية والتصفية في Perps ودليل معدلات التمويل في Perps.
الأخطاء وإعادة المحاولة ومفتاح الرجل الميت
503 service_unavailableلا يُثبت أن الطلب فشل. أعِد محاولة عمليات القراءة وتغييرات الرافعة المالية مع تأخير تصاعدي (backoff) والتزم بقيمةRetry-After. أما تغييرات الرصيد الموقّعة (الهامش، السحوبات)، فلا تُعِد إرسال إلا الطلب الموقّع الأصلي نفسه تمامًا؛ فالتوقيع الجديد يُعدّ تعديلًا ثانيًا.signature expired: مضى على التوقيع أكثر من 5 دقائق. حافظ على مزامنة الساعة.insufficient_margin/invalid_leverage: تأخذ عمليات التحقق في الحسبان مركزك وجميع الأوامر المعلّقة.message_rate_limited: استُنفد الحد المسموح من رسائل WebSocket. تحصل مفاتيح القراءة فقط على 1,000 رسالة في الدقيقة لكل IP (دفعة 50) و4 اتصالات لكل حساب لكل بوابة؛ راجع صفحة Rate Limits في الوثائق لبقية الحدود.- أخطاء الصيغة: منازل عشرية كثيرة جدًا أو أكثر من 5 أرقام معنوية. ولهذا وُجدت الدالة
fit().
الإلغاء التلقائي يُلغي كل الأوامر المفتوحة إذا توقف روبوتك عن إعادة تفعيله. يجب أن يكون الموعد النهائي بعد 5 ثوانٍ على الأقل، وعدد مرات التفعيل في كل يوم UTC محدود، لذا ألغِ تفعيله عند الإيقاف النظيف.
// For quoting bots: cancel all resting orders if this process dies
await session.armAutoCancel({ cancelAt: Date.now() + 60_000 });
const rearm = setInterval(() => {
// A missed re-arm is fail-safe: the armed switch still fires.
session.armAutoCancel({ cancelAt: Date.now() + 60_000 }).catch(console.error);
}, 20_000);
// On a clean shutdown
clearInterval(rearm);
await session.disarmAutoCancel();
المسابقات ورموز المطوّرين وقواعد الروبوتات
تذكر الوثائق "روبوتات التداول التي تتفاعل مع إشارات السوق" وصنّاع السوق ضمن استخدامات API. وتنطبق مجموعتان من القواعد.
- المسابقات. يُحظر التداول الوهمي (wash trading)، والتداول مع النفس، والحسابات المتعددة، والتداول بهدف رفع حجم التداول أساسًا، و"الروبوتات أو السكربتات أو الوسائل الآلية المصممة للتلاعب بالبرنامج". الروبوت الذي يتداول فعليًا مقبول؛ أما الذي يكرر الصفقات لتضخيم الحجم فقد يُستبعد.
- رموز المطوّرين (builder codes). يمكن للتطبيق الذي يتداول نيابةً عن مستخدمين آخرين أن يضيف رسومًا تصل إلى 10 نقاط أساس بموافقة كل متداول. ويجب عليه التحقق من موقع كل مستخدم وحظر الأوامر الصادرة من الولايات القضائية المقيّدة، لا الاكتفاء بالتحذير.
نتناول مكافآت السيولة لصنّاع السوق والمسابقات في دليل Perps على بوليماركت.
استضافة الروبوت
لا ينبغي تشغيل روبوت يعمل بالرافعة المالية على حاسوب محمول. فعليه أن يُبقي اتصال WebSocket نشطًا، وأن يتفاعل مع عمليات التنفيذ خلال ثوانٍ، وأن يصمد أمام انقطاع الإنترنت المنزلي. شغّله على خادم VPS تحت systemd مع إعادة تشغيل تلقائية، واحفظ المفتاح في ملف بيئة لا يقرؤه إلا مستخدم الروبوت، وزامِن الساعة. لا يُسمح بإرسال الأوامر من المواقع المقيّدة، لذا لا تستضف الروبوت في الولايات المتحدة أو كندا، ولا تستخدم VPS أبدًا للالتفاف على حظر ينطبق عليك. نشغّل روبوتاتنا على TradingVPS (رابط تسويق بالعمولة: نحصل على عمولة صغيرة، والسعر الذي تدفعه هو نفسه). يقارن فصل استضافة VPS بينه وبين مزوّدين آخرين من حيث زمن الاستجابة والسعر والمناطق.
بعد التداول التجريبي، موّل الحساب بمبلغ صغير من صفحة Perps على بوليماركت وشغّل الروبوت بأدنى حجم لمدة أسبوع قبل التوسّع.
أهم النقاط
- استخدم حزم SDK الرسمية،
@polymarket/clientأوpolymarket-client. توقّع محفظتك مرة واحدة؛ ثم يوقّع مفتاح وكيل الأوامر. - طابِق الأسواق بالرمز الحي (
BTC-USD، لاBTC-PERP) واحفظ المعرّف الرقمي. - حدّد الحجم من مسافة الوقف، وضع سقفًا للرافعة المالية في الكود، واستخدم الهامش المعزول، وضع وقف خسارة لكل مركز فور التنفيذ.
- يُفعَّل TP/SL على سعر العلامة ويخرج بسعر السوق. وقد يزيل الإلغاء التلقائي أوامر الوقف.
- الروبوتات مسموحة، أما التلاعب بالمسابقات فلا. لا تتداول أبدًا من دولة مقيّدة.





