אנו מפתחים מערכות ניהול פוזיציות מותאמות אישית עבור DEXs תמידיים (perpetual DEXs) – ממעקב פשוט ועד מנהל סיכונים מלא עם סטופ-לוס אוטומטי וניהול מרווח ביטחון (margin). DEXs תמידיים (dYdX, GMX, Hyperliquid, Gains Network) מאפשרים מסחר ממונף ללא תאריך פקיעה וללא נאמן מרכזי. אבל ממשק המשתמש הסטנדרטי שלהם אינו מכסה שליטה פרוגרמטית: בוטים, vaults, פרוטוקולי אוטומציה דורשים פתרון משלהם. לצוות שלנו ניסיון של למעלה מ-5 שנים בפיתוח DeFi ואנו מבטיחים אינטגרציה שקופה עם כל DEX תמידי. מאמר זה מפרק את ההבדלים הארכיטקטוניים של DEXs תמידיים מרכזיים, מציג אינטגרציה אמיתית עם GMX v2, ומספק תבניות מוכנות למעקב וניהול סיכונים.
מהם ההבדלים הארכיטקטוניים בין DEXs תמידיים מבוססי ספר הזמנות (orderbook) לבין מבוססי AMM?
מבוססי ספר הזמנות (dYdX v4, Hyperliquid)
ספר הזמנות קלאסי, אך על-השרשרת (on-chain) או עם ספר הזמנות מחוץ-לשרשרת (off-chain) וסילוק על-השרשרת. dYdX v4 היא שרשרת יישומים (appchain) נפרדת של Cosmos, Hyperliquid היא L1 משלה. האינטראקציה דרך REST API ו-WebSocket, בדומה ל-CEX.
ייחודיות של dYdX v4: עסקאות נשלחות לא דרך Ethereum RPC אלא דרך Cosmos SDK. לקוח שונה, פורמטים שונים. @dydxprotocol/v4-client-js הוא ה-SDK הרשמי.
Hyperliquid: HTTP API ו-WebSocket משלה. חתימה דרך EIP-712 (תואם EVM). התפוקה המהירה ביותר בין perps על-השרשרת.
מבוססי AMM (GMX v2, Gains Network)
פוזיציות נפתחות מול מאגר נזילות, לא מול צד נגדי. קיימת השפעת מחיר (price impact), אין ספר הזמנות. GMX v2 משתמש בנכסים סינתטיים דרך הזנות מחיר של Chainlink.
חוזי GMX v2: ExchangeRouter לפתיחה/סגירת פוזיציות, OrderVault לאחסון בטחונות עד לביצוע. כל הפעולות דרך createOrder() עם פרמטרים.
כיצד מחושב מחיר החיסול (liquidation price) בבורסות שונות?
מעקב פוזיציות
רכיב שמנטר ברציפות פוזיציות פתוחות:
interface Position {
id: string;
exchange: "dydx" | "gmx" | "hyperliquid";
market: string; // "ETH-USD"
side: "long" | "short";
size: bigint; // в USD
entryPrice: number;
currentPrice: number;
unrealizedPnl: number;
liquidationPrice: number;
leverage: number;
margin: bigint;
fundingPaid: number; // накопленные funding payments
}מקורות נתונים: מנויי WebSocket לעדכוני פוזיציות (dYdX, Hyperliquid), שאילתות תקופתיות (polling) דרך REST כל 5–30 שניות (GMX דרך subgraph או קריאות חוזה ישירות).
מנהל סיכונים
מנטר קרבה לחיסול ומבצע סטופ-לוס/טייק-פרופיט:
const riskThresholds = {
liquidationWarning: 0.15, // 15% до ликвидации → алерт
autoReduceAt: 0.10, // 10% до ликвидации → уменьшить позицию
emergencyCloseAt: 0.05, // 5% до ликвидации → закрыть полностью
};
const distanceToLiquidation = (position: Position): number => {
const current = position.currentPrice;
const liq = position.liquidationPrice;
if (position.side === "long") return (current - liq) / current;
return (liq - current) / current;
};הוספת מרווח ביטחון – קו הגנה ראשון. כאשר מתקרבים למחיר החיסול – הוסף בטחונות אוטומטית במקום לסגור. זול יותר בגז ושומר על הפוזיציה. דורש יתרת USDC רזרבה בארנק.
סגירה חלקית – במצבים קשים, הקטן את הגודל ב-30–50%. מפחית סיכון ללא יציאה מלאה.
סגירת חירום – סגירה מלאה עם פקודת שוק. החלקת מחיר (slippage) גבוהה, אבל כאשר עומדים מול איום חיסול אמיתי, הפסד של 1–2% על החלקת מחיר עדיף על קנס חיסול של 5–15%.
ניטור שיעור מימון (funding rate)
תשלומי מימון על חוזים תמידיים הם עלויות נסתרות, שעם סימן לא נכון, אוכלות את ה-PnL. אנו עוקבים:
// Для longs: positive funding rate → вы платите
// Для shorts: positive funding rate → вы получаете
const calculateFundingCost = (
position: Position,
fundingRate8h: number, // например 0.0001 = 0.01%
periods: number
): number => {
const sign = position.side === "long" ? -1 : 1;
return position.size * fundingRate8h * periods * sign;
};אם עלות המימון המצטברת עולה על הרווח הצפוי בפוזיציה – מועמדת לסגירה ללא קשר ל-PnL.
אינטגרציה עם GMX v2: מדריך שלב-אחר-שלב
GMX v2 הוא ה-DEX התמידי הפופולרי המורכב ביותר לאינטגרציה, מכיוון שכל הפעולות הן אסינכרוניות דרך שומר הזמנות (order keeper).
- ייבא חוזי GMX דרך
interface Position { id: string; exchange: "dydx" | "gmx" | "hyperliquid"; market: string; // "ETH-USD" side: "long" | "short"; size: bigint; // в USD entryPrice: number; currentPrice: number; unrealizedPnl: number; liquidationPrice: number; leverage: number; margin: bigint; fundingPaid: number; // накопленные funding payments }. - חבר ספק Viem וקבל מופע של
const riskThresholds = { liquidationWarning: 0.15, // 15% до ликвидации → алерт autoReduceAt: 0.10, // 10% до ликвидации → уменьшить позицию emergencyCloseAt: 0.05, // 5% до ликвидации → закрыть полностью }; const distanceToLiquidation = (position: Position): number => { const current = position.currentPrice; const liq = position.liquidationPrice; if (position.side === "long") return (current - liq) / current; return (liq - current) / current; };. - צור וחתום על
// Для longs: positive funding rate → вы платите // Для shorts: positive funding rate → вы получаете const calculateFundingCost = ( position: Position, fundingRate8h: number, // например 0.0001 = 0.01% periods: number ): number => { const sign = position.side === "long" ? -1 : 1; return position.size * fundingRate8h * periods * sign; };. - שלח עסקה עם
npm install @gmx-v2/contracts. - טפל בקריאה חוזרת (callback)
ExchangeRouter.
// Открытие long позиции на ETH
IExchangeRouter.CreateOrderParams memory params = IExchangeRouter.CreateOrderParams({
addresses: IExchangeRouter.CreateOrderParamsAddresses({
receiver: address(this),
callbackContract: address(this), // наш контракт получит callback
uiFeeReceiver: address(0),
market: ETH_USD_MARKET,
initialCollateralToken: USDC_ADDRESS,
swapPath: new address[](0)
}),
numbers: IExchangeRouter.CreateOrderParamsNumbers({
sizeDeltaUsd: 10_000 * 1e30, // $10,000 позиция (30 decimals)
initialCollateralDeltaAmount: 1_000 * 1e6, // $1,000 collateral (USDC 6 decimals)
triggerPrice: 0, // market order
acceptablePrice: minAcceptablePrice,
executionFee: executionFee,
callbackGasLimit: 700_000,
minOutputAmount: 0
}),
orderType: Order.OrderType.MarketIncrease,
decreasePositionSwapType: Order.DecreasePositionSwapType.NoSwap,
isLong: true,
shouldUnwrapNativeToken: false,
referralCode: bytes32(0)
});
exchangeRouter.createOrder{value: executionFee}(params);
ההזמנה מבוצעת על ידי צמתי keeper של GMX באופן אסינכרוני. קריאה חוזרת CreateOrderParams על החוזה שלך מאותתת על ביצוע. אם ה-keeper לא מבצע תוך זמן מסוים – ניתן לבטל את ההזמנה דרך executionFee.
חישוב מחיר חיסול ב-GMX
| פרמטר | נוסחה |
|---|---|
| לונג (Long) | afterOrderExecution() |
| שורט (Short) | // Открытие long позиции на ETH IExchangeRouter.CreateOrderParams memory params = IExchangeRouter.CreateOrderParams({ addresses: IExchangeRouter.CreateOrderParamsAddresses({ receiver: address(this), callbackContract: address(this), // наш контракт получит callback uiFeeReceiver: address(0), market: ETH_USD_MARKET, initialCollateralToken: USDC_ADDRESS, swapPath: new address[](0) }), numbers: IExchangeRouter.CreateOrderParamsNumbers({ sizeDeltaUsd: 10_000 * 1e30, // $10,000 позиция (30 decimals) initialCollateralDeltaAmount: 1_000 * 1e6, // $1,000 collateral (USDC 6 decimals) triggerPrice: 0, // market order acceptablePrice: minAcceptablePrice, executionFee: executionFee, callbackGasLimit: 700_000, minOutputAmount: 0 }), orderType: Order.OrderType.MarketIncrease, decreasePositionSwapType: Order.DecreasePositionSwapType.NoSwap, isLong: true, shouldUnwrapNativeToken: false, referralCode: bytes32(0) }); exchangeRouter.createOrder{value: executionFee}(params); |
afterOrderExecution() מצטבר לאורך זמן – יש להתחשב בו בעת חישוב המצב הנוכחי. GMX מספק חוזה Reader עם cancelOrder() שמחזיר נתונים עדכניים כולל עמלות.
טבלת השוואת בורסות
| פרמטר | dYdX v4 | Hyperliquid | GMX v2 |
|---|---|---|---|
| ארכיטקטורה | Cosmos appchain | L1 קנייני | Arbitrum/AVAX |
| API | REST + WebSocket, Cosmos SDK | REST + WebSocket, EIP-712 | חוזי Ethereum, הזמנה אסינכרונית |
| מורכבות אינטגרציה | בינונית | נמוכה | גבוהה (הזמנה אסינכרונית) |
| מהירות | ~0.5 שניות | ~0.1 שניות | ~1-5 דקות (keeper) |
מחסנית טכנולוגית ותשתית
TypeScript + viem לאינטראקציות on-chain עם GMX. liq_price = entry_price * (1 - (margin - borrow_fee) / size) עבור dYdX. לקוחות WebSocket לנתונים בזמן אמת. PostgreSQL + TimescaleDB להיסטוריית פוזיציות ו-PnL. Redis לשמירת מצב נוכחי במטמון. לוח מחוונים של Grafana עם מדדים לכל הפוזיציות הפתוחות.
הערכות לוחות זמנים
| שלב | משך | תוצאה |
|---|---|---|
| ניתוח | 1–3 ימים | דרישות, בחירת מחסנית |
| עיצוב | 2–4 ימים | ארכיטקטורה, דיאגרמות |
| יישום | 5–10 ימים | אב-טיפוס עובד |
| בדיקות | 2–3 ימים | בדיקות יחידה + אינטגרציה |
| פריסה | 1–2 ימים | סביבת ייצור |
מערכת מעקב פוזיציות עבור DEX תמידי אחד עם התראות – 3–5 ימים. מערכת מלאה עם ניהול סיכונים, הוספת מרווח אוטומטית וסטופ-לוס/טייק-פרופיט עבור פרוטוקול אחד (GMX או dYdX) – 1–1.5 שבועות. מערכת רב-פרוטוקולית (GMX + dYdX + Hyperliquid) – 2–3 שבועות. העלות נקבעת לאחר הבהרת הבורסות היעד ודרישות האוטומציה.
קבלו ייעוץ לפרויקט שלכם – נעריך מורכבות ולוחות זמנים. אנו מספקים פתרון מפתח ב-2–3 שבועות.







