پولی مارکیٹ بوٹ ٹیوٹوریل · باب 24 از 32
پولی مارکیٹ Perps کا ایک مکمل عوامی API ہے جس کے ساتھ آفیشل TypeScript اور Python SDKs بھی موجود ہیں۔ اس باب میں اصل انٹرفیس پر ایک بوٹ بنایا گیا ہے۔ اس میں پراکسی ٹریڈنگ کلید سے تصدیق، REST اور WebSocket پر مارکیٹ ڈیٹا، ٹیک پرافٹ اور اسٹاپ لاس والے آرڈرز، اور وہ رسک کنٹرولز شامل ہیں جو لیوریج والے بوٹ کو اکاؤنٹ خالی کرنے سے روکتے ہیں۔
اس باب میں کیا شامل ہے
- بوٹ بنانے والوں کے لیے اہم اعداد
- Perps API کی ساخت
- مرحلہ 1: SDK انسٹال کریں اور سیشن کھولیں
- مرحلہ 2: REST اور WebSocket پر مارکیٹ ڈیٹا پڑھیں
- مرحلہ 3: ٹیک پرافٹ اور اسٹاپ لاس کے ساتھ آرڈرز دیں
- مرحلہ 4: کوڈ میں رسک کنٹرولز کے ساتھ بوٹ کا ڈھانچہ
- غلطیاں، ڈیڈ مینز سوئچ، بوٹس کے قواعد اور ہوسٹنگ
یہاں ہر SDK میتھڈ اور اینڈ پوائنٹ پولی مارکیٹ کی Perps دستاویزات (docs.polymarket.com/perps، 6 نومبر 2026 کو پڑھی گئیں) سے لیا گیا ہے۔ ہماری اپنی منطق تبصروں میں نشان زد ہے، اور اسٹریٹیجی فنکشن ایک لیبل شدہ پلیس ہولڈر ہے۔
بوٹ بنانے والوں کے لیے اہم اعداد (نومبر 2026 تک)
| آئٹم | قدر |
|---|---|
| REST بیس URL | https://api.perpetuals.polymarket.com |
| WebSocket | wss://ws.perpetuals.polymarket.com/v1/ws |
| TypeScript SDK | @polymarket/client (دستخط کے لیے viem کے ساتھ) |
| Python SDK | polymarket-client (async) |
| عوامی ڈیٹا | /v1/info/*، تصدیق کی ضرورت نہیں |
| نجی ریڈز | /v1/account/*، polymarket-proxy اور polymarket-secret ہیڈرز کے ساتھ |
| دستخط شدہ رائٹس | /v1/trade/*، پراکسی کلید کا EIP-712 دستخط، 5 منٹ کے لیے درست |
| سیشن کریڈینشلز | بطور ڈیفالٹ ایک ہفتے بعد ختم ہو جاتے ہیں |
| کم از کم آرڈر | $10 نوشنل مالیت؛ کم از کم ڈپازٹ 10 pUSD |
| سب سے بڑا مارکیٹ آرڈر | 50x اور 20x مارکیٹس پر $1M، زیادہ تر دیگر مارکیٹس پر $500K، 3x اور 5x کوائنز پر $50K |
| قیمت اور سائز کا فارمیٹ | اعشاری اسٹرنگز، مارکیٹ کے اعشاریہ مقامات اور 5 اہم ہندسوں سے زیادہ نہیں |
| زیادہ سے زیادہ لیوریج | 50x (BTC، ETH، USA500، US100)، بصورت دیگر ہر مارکیٹ کے لحاظ سے 20x، 10x، 5x یا 3x، بڑی پوزیشنز کے لیے کم |
| فیس (بنیادی درجہ) | ٹیکر 0.040%، میکر 0.0125%؛ ANT پر آدھی قیمت |
| فنڈنگ | ہر گھنٹے، زیادہ سے زیادہ +/-4% فی گھنٹہ |
| TP/SL ٹرگرز | مارک قیمت پر، آخری ٹریڈ پر نہیں |
| WebSocket کیپ الائیو | تقریباً ہر 25 سیکنڈ پر پنگ؛ تقریباً 65 سیکنڈ کی خاموشی کے بعد کنکشن کو غیر فعال سمجھیں |
| ٹکر کی تازگی | زیادہ سے زیادہ 10 سیکنڈ پرانا |
Perps API کی ساخت
Perps ایک ہائبرڈ ایکسچینج ہے۔ میچنگ آف چین ہوتی ہے، جبکہ تحویل اور تصفیہ Polygon پر ہوتے ہیں۔ صرف ڈپازٹس اور رقم نکلوانا آن چین ہوتے ہیں، اس لیے ہر آرڈر پر گیس فیس نہیں لگتی۔ API کی تین تہیں ہیں:
- عوامی ڈیٹا (
/v1/info/): انسٹرومنٹس، ٹکرز، آرڈر بک، کینڈلز، ٹریڈز، فنڈنگ اور فیس۔ اس کے لیے نہ کلید کی ضرورت ہے اور نہ کوئی جغرافیائی پابندی ہے۔ - نجی ریڈز (
/v1/account/): پورٹ فولیو، بیلنسز، آرڈرز، مکمل شدہ آرڈرز اور کنفیگ۔ - دستخط شدہ رائٹس (
/v1/trade/): آرڈرز، منسوخیاں، لیوریج، آئسولیٹڈ مارجن اور آٹو کینسل۔ ہر رائٹ کو MessagePack میں انکوڈ کیا جاتا ہے، keccak256 سے ہیش کیا جاتا ہے، اور پراکسی کلید اس پر EIP-712 typed data کے طور پر دستخط کرتی ہے۔
دستخط کا کام SDKs آپ کے لیے کر دیتے ہیں۔ ایک OpenAPI اسپیک (دستاویزات کی سائٹ پر /api-spec/perps-openapi.json) اور WebSocket کے لیے ایک AsyncAPI اسپیک بھی موجود ہے۔
BTC-PERP دکھایا گیا ہے۔ لائیو API BTC-USD، SP500-USD (USA500)، NAS100-USD (US100)، ANT-USD وغیرہ واپس کرتا ہے۔ انسٹرومنٹس کی فہرست حاصل کریں، لائیو symbol سے ملان کریں اور عددی id محفوظ کریں۔ مثالوں سے IDs کاپی نہ کریں: لائیو API میں BTC کا ID 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) کے لیے polymarket.com کی Settings میں API Keys سے ایک Relayer API کلید بھی درکار ہے۔ زیادہ آسان اور محفوظ طریقہ یہ ہے کہ ویب ایپ میں اکاؤنٹ میں رقم جمع کریں اور بوٹ کو رقم کی منتقلی سے دور رکھیں۔ 5 نومبر 2026 سے، جن اکاؤنٹس میں ودڈرال ایڈریس بک فعال ہے وہ صرف محفوظ کیے گئے ایڈریسز پر ہی رقم نکال سکتے ہیں۔ ڈیش بورڈز کے لیے ریڈ اونلی کلید استعمال کریں (ایسی پراکسی جس کا لیبل read-only: ہو اور جو دستخط شدہ رائٹس کو مسترد کرتی ہے)۔ ڈیش بورڈز پر ٹریڈنگ کلید کبھی استعمال نہ کریں۔ کلید کو محفوظ رکھنے کا طریقہ ہمارے والیٹس اور تصدیق والے باب میں بیان کیا گیا ہے۔
مرحلہ 2: REST اور WebSocket پر مارکیٹ ڈیٹا پڑھیں
ٹکر میں تین قیمتیں ہوتی ہیں: انڈیکس (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، pUSD میں اختیاری price، اور ٹائم ان فورس (gtc، ioc یا fok)۔ Post-only کے لیے GTC ضروری ہے، اور reduce-only صرف پوزیشن کو چھوٹا کر سکتا ہے۔ لانگ یا شارٹ کا کوئی الگ فلیگ نہیں ہوتا۔ جب کوئی پوزیشن نہ ہو تو BUY لانگ کھولتا ہے اور SELL شارٹ کھولتا ہے۔
بریکٹ آرڈر انٹری کے ساتھ ایک ٹیک پرافٹ اور ایک اسٹاپ لاس جوڑ دیتا ہے۔ جب تک انٹری پوری طرح مکمل نہ ہو جائے، یہ دونوں غیر فعال رہتے ہیں۔ اگر انٹری منسوخ ہو جائے یا صرف جزوی طور پر مکمل ہو تو یہ بھی منسوخ ہو جاتے ہیں۔ نیچے دی گئی قیمتیں فرضی ہیں۔
# 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 مارکیٹ قیمت پر باہر نکلتا ہے، اس لیے کم گہرائی والی آرڈر بکس میں سلپیج کی توقع رکھیں۔
- ہر مارکیٹ میں صرف ایک پوزیشن ٹیک پرافٹ اور ایک اسٹاپ لاس لگ سکتا ہے۔ اسٹاپ منتقل کرنے کے لیے پہلے اسے منسوخ کر کے پھر نیا بنانا پڑتا ہے، اور یہ دونوں کام ایک ہی ایٹمک عمل میں نہیں ہوتے۔
- جس ٹرگر کو مارک قیمت پہلے ہی عبور کر چکی ہو وہ مسترد ہو جاتا ہے، اور مارک قیمت سے بہت دور کی لمیٹ قیمتیں بھی قبول نہیں کی جاتیں۔
آرڈر کے عمل کو خودکار بنانے سے پہلے ہاتھ سے آزمانا چاہیں تو پولی مارکیٹ Perps پر BTC مارکیٹ کھولیں اور سب سے چھوٹا اجازت شدہ آرڈر دیں۔ مکمل ہونے والے آرڈرز، فیس اور پوزیشن پینل دیکھ لینے کے بعد API کے جوابات سمجھنا آسان ہو جاتا ہے۔
مرحلہ 4: کوڈ میں رسک کنٹرولز کے ساتھ بوٹ کا ڈھانچہ
نیچے دیے گئے Python ڈھانچے میں صرف دستاویزات میں موجود SDK کالز استعمال ہوئی ہیں، جبکہ رسک کی منطق ہماری اپنی ہے۔ اس میں تحفظ کی تین تہیں ہیں:
- لیوریج کی حد۔ لیوریج آئسولیٹڈ مارجن کے ساتھ 3x یا مارکیٹ کی زیادہ سے زیادہ حد پر سیٹ کیا جاتا ہے، ان میں سے جو بھی کم ہو۔ جو سائز کم حد والے رسک درجے میں آتے ہوں انہیں مسترد کر دیا جاتا ہے۔
- کِل سوئچز۔ ایک HALT فائل، 5% کی یومیہ نقصان کی حد، اور لیکویڈیشن کی صورت میں اخراج۔ سوئچ reduce-only IOC آرڈرز سے پوزیشنز بند کرتا ہے، باقی آرڈرز منسوخ کرتا ہے، اور پھر جانچتا ہے کہ پوزیشنز اور آرڈرز دونوں ختم ہو گئے ہیں۔
- ہر پوزیشن پر اسٹاپ۔ 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.040% ٹیکر ریٹ پر پوزیشن کھولنے کی فیس 0.40 اور بند کرنے کی تقریباً 0.39 ہے، اس لیے سلپیج سے پہلے کل نقصان تقریباً 20.79 pUSD بنتا ہے۔ لیوریج صرف یہ طے کرتا ہے کہ کتنا مارجن بندھا رہے گا۔ اس سے اسٹاپ پر ہونے والا نقصان نہیں بدلتا۔
لائیو جانے سے پہلے یہ چیزیں شامل کریں: یومیہ ٹریڈز کی حد، مکمل ہونے والے آرڈرز اور کِل سوئچز پر الرٹس، اور اسٹارٹ اپ پر مطابقت کی جانچ (fetch_portfolio، fetch_open_orders، fetch_orders، list_fills)۔ مزید کے لیے ہمارے رسک کوڈ اور پیپر ٹریڈنگ والے ابواب، Perps لیوریج اور لیکویڈیشن گائیڈ اور Perps فنڈنگ ریٹس گائیڈ دیکھیں۔
غلطیاں، دوبارہ کوششیں اور ڈیڈ مینز سوئچ
503 service_unavailableکا مطلب یہ نہیں کہ درخواست یقینی طور پر ناکام ہو گئی۔ ریڈز اور لیوریج کی تبدیلیوں کو بیک آف کے ساتھ دوبارہ بھیجیں اورRetry-Afterکی پابندی کریں۔ دستخط شدہ بیلنس تبدیلیوں (مارجن، رقم نکلوانا) کے لیے صرف وہی اصل دستخط شدہ درخواست دوبارہ بھیجیں، کیونکہ نیا دستخط ایک دوسری ایڈجسٹمنٹ شمار ہوگا۔signature expired: دستخط 5 منٹ سے پرانا ہے۔ سسٹم کی گھڑی ہم آہنگ رکھیں۔insufficient_margin/invalid_leverage: یہ جانچ آپ کی پوزیشن کے ساتھ تمام زیر التوا آرڈرز کو بھی شامل کرتی ہے۔message_rate_limited: WebSocket کا بجٹ ختم ہو گیا ہے۔ ریڈ اونلی کلیدوں کو فی IP فی منٹ 1,000 پیغامات (برسٹ 50) ملتے ہیں، اور فی اکاؤنٹ فی گیٹ وے چار کنکشنز۔ باقی حدود کے لیے دستاویزات کا 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 کے استعمالات میں "مارکیٹ سگنلز پر ردعمل دینے والے ٹریڈنگ بوٹس" اور مارکیٹ میکرز کا ذکر کرتی ہیں۔ یہاں قواعد کے دو مجموعے لاگو ہوتے ہیں۔
- مقابلے۔ واش ٹریڈنگ، سیلف ٹریڈنگ، متعدد اکاؤنٹس، بنیادی طور پر حجم بڑھانے کے لیے ٹریڈنگ، اور "پروگرام میں ہیرا پھیری کے لیے بنائے گئے بوٹس، اسکرپٹس یا خودکار ذرائع" ممنوع ہیں۔ جو بوٹ حقیقی ٹریڈنگ کرتا ہے اس میں کوئی مسئلہ نہیں، لیکن صرف حجم بڑھانے والا بوٹ نااہل قرار دیا جا سکتا ہے۔
- بلڈر کوڈز۔ دوسرے صارفین کے لیے ٹریڈ کرنے والی ایپ ہر ٹریڈر کی منظوری سے زیادہ سے زیادہ 10 بیسس پوائنٹس کی فیس شامل کر سکتی ہے۔ ایپ کو ہر صارف کے مقام کی تصدیق کرنی ہوگی اور محدود دائرہ اختیار سے آنے والے آرڈرز بلاک کرنے ہوں گے۔ صرف انتباہ دینا کافی نہیں۔
میکر لیکویڈیٹی انعامات اور مقابلوں کی تفصیل پولی مارکیٹ Perps گائیڈ میں دی گئی ہے۔
بوٹ کی ہوسٹنگ
لیوریج والا بوٹ لیپ ٹاپ پر نہیں چلانا چاہیے۔ اسے اپنا WebSocket کنکشن مسلسل زندہ رکھنا ہوتا ہے، مکمل ہونے والے آرڈرز پر سیکنڈوں میں ردعمل دینا ہوتا ہے، اور گھر کا انٹرنیٹ بند ہونے پر بھی چلتے رہنا ہوتا ہے۔ اسے VPS پر systemd کے تحت خودکار ری اسٹارٹ کے ساتھ چلائیں۔ کلید ایسی environment فائل میں رکھیں جسے صرف بوٹ والا یوزر پڑھ سکے، اور سسٹم کی گھڑی ہم آہنگ رکھیں۔ محدود مقامات سے آرڈر دینے کی اجازت نہیں ہے، اس لیے بوٹ امریکہ یا کینیڈا میں ہوسٹ نہ کریں، اور اپنے اوپر لاگو پابندی سے بچنے کے لیے کبھی VPS استعمال نہ کریں۔ ہم اپنے بوٹس TradingVPS پر چلاتے ہیں (ایفیلیئیٹ لنک: ہمیں ایک چھوٹا کمیشن ملتا ہے اور آپ کو وہی قیمت ادا کرنی پڑتی ہے)۔ ہمارے VPS ہوسٹنگ والے باب میں لیٹنسی، قیمت اور علاقوں کے لحاظ سے اس کا دوسرے فراہم کنندگان سے موازنہ کیا گیا ہے۔
پیپر ٹریڈنگ کے بعد پولی مارکیٹ Perps صفحے سے اکاؤنٹ میں تھوڑی رقم جمع کریں۔ سائز بڑھانے سے پہلے بوٹ کو ایک ہفتے تک کم سے کم سائز پر چلائیں۔
اہم نکات
- آفیشل SDKs استعمال کریں:
@polymarket/clientیاpolymarket-client۔ آپ کا والیٹ صرف ایک بار دستخط کرتا ہے، اور آرڈرز پر پراکسی کلید دستخط کرتی ہے۔ - مارکیٹس کو لائیو سمبل (
BTC-USD، نہ کہBTC-PERP) سے پہچانیں اور ان کا عددی ID محفوظ کریں۔ - سائز اسٹاپ کے فاصلے سے طے کریں، لیوریج کی حد کوڈ میں رکھیں، آئسولیٹڈ مارجن استعمال کریں، اور ہر پوزیشن پر آرڈر مکمل ہوتے ہی اسٹاپ لگائیں۔
- TP/SL مارک قیمت پر ٹرگر ہوتا ہے اور مارکیٹ قیمت پر باہر نکلتا ہے۔ آٹو کینسل اسٹاپس کو ہٹا سکتا ہے۔
- بوٹس کی اجازت ہے، لیکن مقابلوں میں ہیرا پھیری کی اجازت نہیں۔ کسی محدود ملک سے کبھی ٹریڈ نہ کریں۔





