{"id":"1fead14a-13b6-4280-bd42-049b9b4d296e","shortId":"AytuwT","kind":"skill","title":"gmx-trading","tagline":"Trade perpetuals and swap tokens on GMX V2 — a decentralized exchange with oracle-based pricing on Arbitrum, Avalanche, and Botanix. Supports market/limit/stop orders, leverage up to 100x, and programmable position management via TypeScript SDK or REST API.","description":"# GMX Trading Skill\n\n## Overview\n\nGMX V2 is a decentralized perpetual and spot exchange using oracle-based pricing (Chainlink Data Streams) instead of AMM curves. Traders get CEX-like execution with onchain settlement.\n\n**Supported chains:**\n| Chain | Chain ID | Native Token |\n|-------|----------|-------------|\n| Arbitrum | 42161 | ETH |\n| Avalanche | 43114 | AVAX |\n| Botanix | 3637 | BTC |\n\n**Two integration paths:**\n- **SDK** (`@gmx-io/sdk`) — Full read + write: fetch markets, create orders, manage positions\n- **REST API** — Read-only: prices, markets, positions, trade history\n\n**Trading modes:**\n- **Classic** — User signs each transaction directly\n- **Express** — Gelato relay pays gas, user signs EIP-712 message (frontend only)\n- **Express + One-Click** — Subaccount delegates signing for instant execution (frontend only)\n\n## SDK Quick Start\n\nInstall the SDK:\n\n```bash\nnpm install @gmx-io/sdk viem\n```\n\n> **Import note:** The SDK's ESM build has broken imports (missing file extensions). Use CommonJS require or configure your bundler to resolve extensionless imports. In Node.js scripts, use `const { GmxSdk } = require(\"@gmx-io/sdk\")`.\n\nCreate an SDK instance:\n\n```typescript\nconst { GmxSdk } = require(\"@gmx-io/sdk\");\n\nconst sdk = new GmxSdk({\n  chainId: 42161,\n  rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n  oracleUrl: \"https://arbitrum-api.gmxinfra.io\",\n  subsquidUrl: \"https://gmx.squids.live/gmx-synthetics-arbitrum:prod/api/graphql\",\n});\n```\n\n**Chain configuration:**\n\n| Chain | chainId | oracleUrl | subsquidUrl |\n|-------|---------|-----------|-------------|\n| Arbitrum | 42161 | `https://arbitrum-api.gmxinfra.io` | `https://gmx.squids.live/gmx-synthetics-arbitrum:prod/api/graphql` |\n| Avalanche | 43114 | `https://avalanche-api.gmxinfra.io` | `https://gmx.squids.live/gmx-synthetics-avalanche:prod/api/graphql` |\n| Botanix | 3637 | `https://botanix-api.gmxinfra.io` | `https://gmx.squids.live/gmx-synthetics-botanix:prod/api/graphql` |\n\n**Set up a wallet for write operations:**\n\n```typescript\nconst { createWalletClient, http } = require(\"viem\");\nconst { privateKeyToAccount } = require(\"viem/accounts\");\nconst { arbitrum } = require(\"viem/chains\");\n\nconst account = privateKeyToAccount(process.env.PRIVATE_KEY);\nconst walletClient = createWalletClient({\n  account,\n  chain: arbitrum,\n  transport: http(\"https://arb1.arbitrum.io/rpc\"),\n});\n\nconst sdk = new GmxSdk({\n  chainId: 42161,\n  rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n  oracleUrl: \"https://arbitrum-api.gmxinfra.io\",\n  subsquidUrl: \"https://gmx.squids.live/gmx-synthetics-arbitrum:prod/api/graphql\",\n  account: account.address,\n  walletClient,\n});\n```\n\n**Lightweight alternative (read-only, no RPC needed):**\n\n```typescript\nconst { GmxApiSdk } = require(\"@gmx-io/sdk/v2\");\n\nconst apiSdk = new GmxApiSdk({ chainId: 42161 });\nconst markets = await apiSdk.fetchMarketsInfo(); // Returns array-like of MarketInfo objects\n// Access: markets[0].marketTokenAddress, markets[0].indexTokenAddress, etc.\n```\n\n## Order Helpers\n\nThe SDK provides convenience methods that handle amount calculation and transaction submission automatically.\n\n> **Important:** Never hardcode market or token addresses. Always fetch them dynamically — addresses differ per chain and can change between deployments.\n\n### Step 1: Resolve market and token addresses\n\n```typescript\n// Fetch all markets and tokens\nconst { marketsInfoData, tokensData } = await sdk.markets.getMarketsInfo();\n\n// Find ETH/USD market by index token symbol\n// Note: On Arbitrum, perpetual markets use \"WETH\" as the index token symbol.\n// Markets with symbol \"ETH\" are spot-only swap pools.\nconst ethUsdMarket = Object.values(marketsInfoData).find(\n  (m) => tokensData[m.indexTokenAddress]?.symbol === \"WETH\" && !m.isSpotOnly\n);\n\n// Get token addresses from market\nconst marketAddress = ethUsdMarket.marketTokenAddress;\nconst longToken = ethUsdMarket.longTokenAddress;   // e.g., WETH\nconst shortToken = ethUsdMarket.shortTokenAddress;  // e.g., USDC\n\n// Find a token by symbol\nconst usdcAddress = Object.values(tokensData).find((t) => t.symbol === \"USDC\")?.address;\n```\n\n### Step 2: Place orders\n\n**Open a long position:**\n\n```typescript\nawait sdk.orders.long({\n  marketAddress,                         // from step 1\n  payTokenAddress: usdcAddress,          // token you're paying with\n  collateralTokenAddress: longToken,     // WETH as collateral for longs\n  payAmount: 100000000n,                 // 100 USDC (6 decimals)\n  leverage: 50000n,                      // 5x leverage (basis points)\n  allowedSlippageBps: 100,               // 1% slippage\n});\n```\n\n**Open a short position:**\n\n```typescript\nawait sdk.orders.short({\n  marketAddress,\n  payTokenAddress: usdcAddress,\n  collateralTokenAddress: shortToken,    // USDC as collateral for shorts\n  payAmount: 100000000n,\n  leverage: 50000n,\n});\n```\n\n**Swap tokens:**\n\n```typescript\nconst arbAddress = Object.values(tokensData).find((t) => t.symbol === \"ARB\")?.address;\nconst linkAddress = Object.values(tokensData).find((t) => t.symbol === \"LINK\")?.address;\n\nawait sdk.orders.swap({\n  fromTokenAddress: arbAddress,\n  toTokenAddress: linkAddress,\n  fromAmount: 1000000000000000000n, // 1 ARB (18 decimals)\n  allowedSlippageBps: 100,\n});\n```\n\n**Limit orders** — add `limitPrice` for positions or `triggerPrice` for swaps:\n\n```typescript\nawait sdk.orders.long({\n  marketAddress,\n  payTokenAddress: usdcAddress,\n  collateralTokenAddress: longToken,\n  payAmount: 100000000n,\n  leverage: 50000n,\n  limitPrice: 3000000000000000000000000000000000n, // $3000 (30 decimals)\n});\n```\n\n**Key parameters:**\n- `leverage` — In basis points: `10000n` = 1x, `50000n` = 5x, `1000000n` = 100x\n- `allowedSlippageBps` — Default `100` (1%). Range: 1-500\n- `payAmount` — Pay this much collateral. Alternative: use `sizeAmount` to specify position size\n- `fromAmount` / `toAmount` — For swaps, specify input or desired output amount\n\n### Step 3: Close a position\n\nThere is no convenience `close()` method. Closing requires computing decrease amounts via `getDecreasePositionAmounts()` from `@gmx-io/sdk/utils/trade`, then calling `createDecreaseOrder()`.\n\n> **Important:** Always re-fetch `marketsInfoData` and `tokensData` right before closing. These contain oracle prices that go stale within seconds — using old data produces an `acceptablePrice` the keeper will reject.\n\n```typescript\nconst { getDecreasePositionAmounts } = require(\"@gmx-io/sdk/utils/trade\");\n\n// 1. Fetch FRESH market data (prices go stale quickly)\nconst { marketsInfoData, tokensData } = await sdk.markets.getMarketsInfo();\n\n// 2. Get the position to close\nconst positionsInfo = await sdk.positions.getPositionsInfo({\n  marketsInfoData, tokensData, showPnlInLeverage: false,\n});\nconst position = Object.values(positionsInfo).find(\n  (p) => p.marketAddress === marketAddress && p.isLong === true\n);\n\n// 3. Compute decrease amounts\nconst marketInfo = marketsInfoData[position.marketAddress];\nconst collateralToken = tokensData[position.collateralTokenAddress];\nconst { minCollateralUsd, minPositionSizeUsd } = await sdk.positions.getPositionsConstants();\nconst uiFeeFactor = await sdk.utils.getUiFeeFactor();\n\nconst decreaseAmounts = getDecreasePositionAmounts({\n  marketInfo,\n  collateralToken,\n  isLong: position.isLong,\n  position,\n  closeSizeUsd: position.sizeInUsd,   // Full close. Use a smaller value for partial close.\n  keepLeverage: false,\n  userReferralInfo: undefined,\n  minCollateralUsd,\n  minPositionSizeUsd,\n  uiFeeFactor,\n  isSetAcceptablePriceImpactEnabled: false,\n});\n\n// 4. Submit the decrease order\nawait sdk.orders.createDecreaseOrder({\n  marketInfo,\n  marketsInfoData,\n  tokensData,\n  isLong: position.isLong,\n  allowedSlippage: 300,    // 3% — use higher slippage for decrease to avoid keeper rejection\n  decreaseAmounts,\n  collateralToken,\n});\n```\n\n## SDK Modules\n\n| Module | Key Methods | Description |\n|--------|------------|-------------|\n| `sdk.markets` | `getMarkets()`, `getMarketsInfo()`, `getDailyVolumes()` | Market data and liquidity info |\n| `sdk.tokens` | `getTokensData()`, `getTokensBalances()` | Token metadata, prices, balances |\n| `sdk.positions` | `getPositions()`, `getPositionsInfo()`, `getPositionsConstants()` | Open position data |\n| `sdk.orders` | `long()`, `short()`, `swap()`, `getOrders()`, `cancelOrders()` | Order creation and management |\n| `sdk.trades` | `getTradeHistory()` | Historical trade actions |\n| `sdk.utils` | `getGasLimits()`, `getGasPrice()`, `getExecutionFee()`, `getUiFeeFactor()` | Gas and fee estimation |\n| `sdk.oracle` | `getTickers()`, `getMarkets()`, `getTokens()` | Direct oracle data access |\n\n**Typical read flow:**\n\n```typescript\nconst { marketsInfoData, tokensData } = await sdk.markets.getMarketsInfo();\nconst positionsInfo = await sdk.positions.getPositionsInfo({\n  marketsInfoData, tokensData, showPnlInLeverage: false,\n});\nconst { ordersInfoData } = await sdk.orders.getOrders({\n  marketsInfoData, tokensData,\n});\n```\n\n### Convenience vs Low-level Methods\n\nThe SDK has two tiers for order creation:\n\n**Convenience methods** — handle amount calculation, execution fee, and tx submission automatically. Use these for opening positions and swaps:\n\n| Method | Purpose | Key Params |\n|--------|---------|-----------|\n| `sdk.orders.long()` | Open long position | `marketAddress`, `payTokenAddress`, `collateralTokenAddress`, `payAmount`, `leverage` |\n| `sdk.orders.short()` | Open short position | Same as `long()` |\n| `sdk.orders.swap()` | Swap tokens | `fromTokenAddress`, `toTokenAddress`, `fromAmount` |\n| `sdk.orders.cancelOrders()` | Cancel pending orders | `orderKeys: string[]` |\n\n**Low-level methods** — require you to pre-compute amounts, provide full market/token objects, and handle execution fees. Required for closing positions (no convenience `close()` method exists):\n\n| Method | Purpose | Required Setup |\n|--------|---------|---------------|\n| `sdk.orders.createIncreaseOrder()` | Open position (full control) | `IncreasePositionAmounts`, `marketInfo`, `tokensData` |\n| `sdk.orders.createDecreaseOrder()` | Close/reduce position | `DecreasePositionAmounts` via `getDecreasePositionAmounts()` |\n| `sdk.orders.createSwapOrder()` | Swap (full control) | `SwapAmounts`, swap path |\n\n> **Key gap:** There is no `sdk.orders.close()`. To close a position, use `getDecreasePositionAmounts()` from `@gmx-io/sdk/utils/trade` + `createDecreaseOrder()`. See [Step 3: Close a position](#step-3-close-a-position) for the full pattern.\n\n## Order Types\n\n| Type | Enum | Behavior |\n|------|------|----------|\n| Market | `MarketSwap(0)`, `MarketIncrease(2)`, `MarketDecrease(4)` | Execute immediately at current oracle price |\n| Limit | `LimitSwap(1)`, `LimitIncrease(3)`, `LimitDecrease(5)` | Execute when oracle price reaches trigger price |\n| Stop Increase | `StopIncrease(8)` | Open position when price moves past trigger (breakout entry) |\n| Stop-Loss | `StopLossDecrease(6)` | Auto-close position to limit losses |\n| Liquidation | `Liquidation(7)` | System-triggered when position falls below maintenance margin |\n\n**Trigger conditions:**\n- Long Limit: oracle price <= trigger price (buy the dip)\n- Long Stop-Loss: oracle price <= trigger price (exit on drop)\n- Long Take-Profit (LimitDecrease): oracle price >= trigger price (exit on rise)\n- Short Limit: oracle price >= trigger price (sell the rally)\n- Short Stop-Loss: oracle price >= trigger price (exit on rise)\n- Short Take-Profit (LimitDecrease): oracle price <= trigger price (exit on drop)\n\n**Auto-cancel limits:** Maximum concurrent auto-cancel orders per position: 11 on Arbitrum, 6 on Avalanche and Botanix.\n\n**Sidecar orders:** Stop-loss and take-profit orders can be attached to increase orders via `createSltpEntries`, `cancelSltpEntries`, and `updateSltpEntries` parameters in `createIncreaseOrder()`.\n\n**TWAP orders:** Split a large order into 2–30 parts executed over a configurable duration. TWAP utilities (`getTwapDurationInSeconds`, `getIsValidTwapParams`) are exported from `@gmx-io/sdk/utils/twap` but full TWAP order creation is only available via the frontend UI.\n\n## Fees\n\n**Position fees:**\n- Opening/closing: **0.04%** if the trade balances long/short OI, **0.06%** if it imbalances\n- Applied to position size (notional value)\n\n**Swap fees:**\n- Standard pairs: **0.05%** (balancing) / **0.07%** (imbalancing)\n- Stablecoin pairs: **0.005%** (balancing) / **0.02%** (imbalancing)\n\n**Funding rate:**\n- Adaptive rate that flows from the larger open interest side to the smaller side\n- Rebalances long/short exposure over time\n- Accrues continuously, settled on position changes\n\n**Borrowing rate:**\n- Kink model: low rate below utilization threshold, steep above\n- Approximately 45–55% APR at 75% utilization\n- Paid by all positions proportional to size\n\n**Execution fee:**\n- Covers keeper gas cost for executing the order onchain\n- Paid upfront in native token (ETH/AVAX/BTC)\n- Surplus refunded after execution\n- Use `sdk.utils.getExecutionFee()` to estimate\n\n## REST API\n\n### Oracle Endpoints\n\nBase URL: `https://{network}-api.gmxinfra.io`\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/prices/tickers` | GET | Current min/max prices for all tokens |\n| `/prices/candles` | GET | OHLC price candles (`?tokenSymbol=ETH&period=1h`) |\n| `/signed_prices/latest` | GET | Signed oracle prices for order execution |\n| `/tokens` | GET | Token list with addresses and decimals |\n| `/markets` | GET | Market configuration (index/long/short tokens) |\n| `/markets/info` | GET | Extended market info with pool sizes and utilization |\n\nAll endpoints are served from the Oracle base URL above. The legacy `gmx-api-{network}.gmx.io` domain is no longer available.\n\n### GraphQL (Subsquid)\n\nBase URL: `https://gmx.squids.live/gmx-synthetics-{network}:prod/api/graphql`\n\nExample — fetch recent trade actions:\n\n```graphql\nquery {\n  tradeActions(\n    where: { account_eq: \"0x...\" }\n    orderBy: timestamp_DESC\n    limit: 10\n  ) {\n    id\n    eventName\n    orderType\n    sizeDeltaUsd\n    timestamp\n    transactionHash\n  }\n}\n```\n\n### Fallback URLs\n\n| Chain | Primary | Fallback 1 | Fallback 2 |\n|-------|---------|------------|------------|\n| Arbitrum | `arbitrum-api.gmxinfra.io` | `arbitrum-api-fallback.gmxinfra.io` | `arbitrum-api-fallback.gmxinfra2.io` |\n| Avalanche | `avalanche-api.gmxinfra.io` | `avalanche-api-fallback.gmxinfra.io` | `avalanche-api-fallback.gmxinfra2.io` |\n| Botanix | `botanix-api.gmxinfra.io` | `botanix-api-fallback.gmxinfra.io` | `botanix-api-fallback.gmxinfra2.io` |\n\n## Key Concepts\n\n**Oracle-based pricing:** GMX does not use an AMM. Prices come from Chainlink Data Streams, giving traders zero-slippage execution at the oracle price (subject to price impact from pool utilization).\n\n**Two-phase execution:** Orders follow a create → execute pattern. The user submits an order transaction, then a keeper executes it with fresh oracle prices. This typically takes 1–5 seconds.\n\n**BigInt amounts:** All amounts use BigInt. Prices are scaled to 30 decimals (`1 USD = 10^30`). Token amounts use their native decimals (e.g., USDC = 6, ETH = 18).\n\n**Stale data:** `marketsInfoData` and `tokensData` contain oracle prices at fetch time. These go stale within seconds. Always re-fetch fresh data before operations that depend on current prices — especially `createDecreaseOrder()`, which computes `acceptablePrice` from the data you provide. Using stale prices causes keeper rejection.\n\n**Multicall batching:** The SDK batches RPC calls automatically. Production chains use `batchSize: 1024 * 1024` bytes per multicall with no waiting. This is configured per-chain in `BATCH_CONFIGS`.\n\n**GMX Account:** Cross-chain trading from Ethereum, Base, or BNB Chain via LayerZero/Stargate bridge. Users can trade on Arbitrum/Avalanche without bridging manually.\n\n**Subaccounts:** Delegate trading to a subaccount address for one-click trading. The subaccount can execute orders without requiring the main wallet signature each time.\n\n## Full Example: Open → Monitor → Close\n\nEnd-to-end flow that opens a long position, monitors it, and closes it.\n\n```typescript\nconst { GmxSdk } = require(\"@gmx-io/sdk\");\nconst { getDecreasePositionAmounts } = require(\"@gmx-io/sdk/utils/trade\");\nconst { createWalletClient, http } = require(\"viem\");\nconst { privateKeyToAccount } = require(\"viem/accounts\");\nconst { arbitrum } = require(\"viem/chains\");\n\n// ─── Setup ───────────────────────────────────────────────────────────────────\n\nconst account = privateKeyToAccount(process.env.PRIVATE_KEY);\nconst sdk = new GmxSdk({\n  chainId: 42161,\n  rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n  oracleUrl: \"https://arbitrum-api.gmxinfra.io\",\n  subsquidUrl: \"https://gmx.squids.live/gmx-synthetics-arbitrum:prod/api/graphql\",\n  account: account.address,\n  walletClient: createWalletClient({\n    account, chain: arbitrum, transport: http(\"https://arb1.arbitrum.io/rpc\"),\n  }),\n});\n\n// ─── 1. Resolve addresses ───────────────────────────────────────────────────\n\nconst { marketsInfoData, tokensData } = await sdk.markets.getMarketsInfo();\n\nconst ethMarket = Object.values(marketsInfoData).find(\n  (m) => tokensData[m.indexTokenAddress]?.symbol === \"WETH\" && !m.isSpotOnly\n);\nconst marketAddress = ethMarket.marketTokenAddress;\nconst usdcAddress = Object.values(tokensData).find((t) => t.symbol === \"USDC\").address;\n\n// ─── 2. Open long ───────────────────────────────────────────────────────────\n\nawait sdk.orders.long({\n  marketAddress,\n  payTokenAddress: usdcAddress,\n  collateralTokenAddress: usdcAddress,\n  payAmount: 10_000000n,   // 10 USDC\n  leverage: 30000n,        // 3x\n  allowedSlippageBps: 100,\n  skipSimulation: true,\n});\n\n// ─── 3. Wait for position to appear (keeper executes in 1-30s) ──────────────\n\nlet position;\nfor (let i = 0; i < 40; i++) {\n  await new Promise((r) => setTimeout(r, 3000));\n  const info = await sdk.positions.getPositionsInfo({\n    marketsInfoData, tokensData, showPnlInLeverage: false,\n  });\n  position = Object.values(info).find(\n    (p) => p.marketAddress === marketAddress && p.isLong === true\n  );\n  if (position) break;\n}\nif (!position) throw new Error(\"Position did not appear within 120s\");\n\nconsole.log(\"Position opened:\", {\n  sizeUsd: position.sizeInUsd.toString(),\n  leverage: position.leverage.toString(),\n  entryPrice: position.entryPrice.toString(),\n});\n\n// ─── 4. Close position (re-fetch fresh data first!) ─────────────────────────\n\nconst fresh = await sdk.markets.getMarketsInfo();\nconst freshPositions = await sdk.positions.getPositionsInfo({\n  marketsInfoData: fresh.marketsInfoData,\n  tokensData: fresh.tokensData,\n  showPnlInLeverage: false,\n});\nconst pos = Object.values(freshPositions).find(\n  (p) => p.marketAddress === marketAddress && p.isLong === true\n);\n\nconst marketInfo = fresh.marketsInfoData[pos.marketAddress];\nconst collateralToken = fresh.tokensData[pos.collateralTokenAddress];\nconst { minCollateralUsd, minPositionSizeUsd } = await sdk.positions.getPositionsConstants();\nconst uiFeeFactor = await sdk.utils.getUiFeeFactor();\n\nconst decreaseAmounts = getDecreasePositionAmounts({\n  marketInfo, collateralToken, isLong: pos.isLong, position: pos,\n  closeSizeUsd: pos.sizeInUsd, keepLeverage: false,\n  userReferralInfo: undefined, minCollateralUsd, minPositionSizeUsd, uiFeeFactor,\n  isSetAcceptablePriceImpactEnabled: false,\n});\n\nawait sdk.orders.createDecreaseOrder({\n  marketInfo, marketsInfoData: fresh.marketsInfoData, tokensData: fresh.tokensData,\n  isLong: pos.isLong, allowedSlippage: 300, decreaseAmounts, collateralToken,\n});\n\nconsole.log(\"Close order submitted — keeper will execute in 1-30s\");\n```\n\n## Limitations\n\n- **GM pool deposits/withdrawals:** See the [gmx-liquidity](../gmx-liquidity/SKILL.md) skill for contract-level operations. SDK convenience methods not yet available.\n- **GLV vault operations:** See the [gmx-liquidity](../gmx-liquidity/SKILL.md) skill for contract-level operations. SDK convenience methods not yet available.\n- **Express orders:** Frontend-only via Gelato relay. Not exposed in the SDK.\n- **TWAP orders:** Utility functions available (`@gmx-io/sdk/utils/twap`) but no SDK method to create TWAP orders programmatically.\n- **Order updates:** Orders cannot be modified. Cancel and recreate instead (`sdk.orders.cancelOrders()`).\n- **Trade simulation:** The `skipSimulation` parameter exists but simulation is deprecated. Set `skipSimulation: true`.\n\n## References\n\n- [SDK Reference](references/sdk-reference.md) — Full module and method documentation\n- [API Endpoints](references/api-endpoints.md) — Oracle, OpenAPI, and GraphQL endpoint details\n- [Contract Addresses](references/contract-addresses.md) — Deployed contracts per chain\n- [Order Types](references/order-types.md) — Detailed order type behavior and trigger logic\n- [GMX Documentation](https://docs.gmx.io) — Official protocol documentation\n- [GMX App](https://app.gmx.io) — Trading interface\n- [`@gmx-io/sdk` on npm](https://www.npmjs.com/package/@gmx-io/sdk) — SDK package\n- [gmx-io/gmx-interface](https://github.com/gmx-io/gmx-interface) — Frontend source code","tags":["gmx","trading","gmx-io","agent-skills","claude-code-skill","claude-skills","defi","liquidity"],"capabilities":["skill","source-gmx-io","skill-gmx-trading","topic-agent-skills","topic-claude-code-skill","topic-claude-skills","topic-defi","topic-gmx","topic-liquidity","topic-trading"],"categories":["gmx-ai"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/gmx-io/gmx-ai/gmx-trading","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add gmx-io/gmx-ai","source_repo":"https://github.com/gmx-io/gmx-ai","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (21,019 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:30.040Z","embedding":null,"createdAt":"2026-05-18T13:20:37.514Z","updatedAt":"2026-05-18T19:13:30.040Z","lastSeenAt":"2026-05-18T19:13:30.040Z","tsv":"'-3':1046 '-30':1878,2028 '-500':620 '-712':135 '/gmx-interface':2188 '/gmx-io/gmx-interface)':2191 '/gmx-liquidity/skill.md':2039,2060 '/gmx-synthetics-':1472 '/gmx-synthetics-arbitrum:prod/api/graphql':227,239,304,1802 '/gmx-synthetics-avalanche:prod/api/graphql':245 '/gmx-synthetics-botanix:prod/api/graphql':251 '/markets':1428 '/markets/info':1434 '/package/@gmx-io/sdk)':2182 '/prices/candles':1403 '/prices/tickers':1395 '/rpc':221,288,298,1796,1814 '/sdk':99,163,199,211,1760,2177 '/sdk/utils/trade':665,706,1037,1767 '/sdk/utils/twap':1259,2094 '/sdk/v2':323 '/signed_prices/latest':1412 '/tokens':1420 '0':343,346,1062,1885 '0.005':1303 '0.02':1305 '0.04':1276 '0.05':1297 '0.06':1283 '0.07':1299 '000000n':1858 '0x':1486 '1':385,488,517,569,617,619,707,1075,1503,1581,1596,1815,1877,2027 '10':1491,1598,1857,1859 '100':505,516,574,616,1865 '1000000000000000000n':568 '100000000n':504,537,594 '1000000n':612 '10000n':608 '100x':31,613 '1024':1668,1669 '11':1202 '120s':1926 '18':571,1610 '1h':1411 '1x':609 '2':475,721,1064,1241,1505,1846 '3':644,745,808,1041,1077,1868 '30':600,1242,1594,1599 '300':807,2016 '3000':599,1895 '3000000000000000000000000000000000n':598 '30000n':1862 '3637':90,247 '3x':1863 '4':794,1066,1936 '40':1887 '42161':84,217,235,294,329,1792 '43114':87,241 '45':1346 '5':1079,1582 '50000n':510,539,596,610 '55':1347 '5x':511,611 '6':507,1104,1205,1608 '7':1114 '75':1350 '8':1090 'acceptablepric':694,1644 'access':341,880 'account':274,281,305,1484,1686,1783,1803,1807 'account.address':306,1804 'accru':1328 'action':863,1479 'adapt':1309 'add':577 'address':370,375,390,444,473,551,560,1425,1714,1817,1845,2147 'allowedslippag':806,2015 'allowedslippagebp':515,573,614,1864 'altern':309,626 'alway':371,670,1627 'amm':65,1529 'amount':358,642,658,748,921,978,1585,1587,1601 'api':41,110,1385,1458,2137 'api.gmxinfra.io':1391 'apisdk':325 'apisdk.fetchmarketsinfo':333 'app':2170 'app.gmx.io':2171 'appear':1873,1924 'appli':1287 'approxim':1345 'apr':1348 'arb':550,570 'arb1.arbitrum.io':220,287,297,1795,1813 'arb1.arbitrum.io/rpc':219,286,296,1794,1812 'arbaddress':544,564 'arbitrum':21,83,234,270,283,411,1204,1506,1778,1809 'arbitrum-api-fallback.gmxinfra.io':1508 'arbitrum-api-fallback.gmxinfra2.io':1509 'arbitrum-api.gmxinfra.io':223,236,300,1507,1798 'arbitrum/avalanche':1704 'array':336 'array-lik':335 'attach':1222 'auto':1106,1191,1197 'auto-cancel':1190,1196 'auto-clos':1105 'automat':363,928,1663 'avail':1267,1465,2051,2072,2090 'avalanch':22,86,240,1207,1510 'avalanche-api-fallback.gmxinfra.io':1512 'avalanche-api-fallback.gmxinfra2.io':1513 'avalanche-api.gmxinfra.io':242,1511 'avax':88 'avoid':815 'await':332,400,483,524,561,586,719,729,760,764,799,888,892,900,1821,1849,1889,1898,1947,1951,1980,1984,2006 'balanc':841,1280,1298,1304 'base':18,58,1388,1451,1468,1522,1693 'bash':157 'basi':513,606 'batch':1657,1660,1683 'batchsiz':1667 'behavior':1059,2159 'bigint':1584,1589 'bnb':1695 'borrow':1334 'botanix':24,89,246,1209,1514 'botanix-api-fallback.gmxinfra.io':1516 'botanix-api-fallback.gmxinfra2.io':1517 'botanix-api.gmxinfra.io':248,1515 'break':1915 'breakout':1098 'bridg':1699,1706 'broken':173 'btc':91 'build':171 'bundler':184 'buy':1132 'byte':1670 'calcul':359,922 'call':667,1662 'cancel':963,1192,1198,2110 'cancelord':854 'cancelsltpentri':1228 'candl':1407 'cannot':2107 'caus':1653 'cex':70 'cex-lik':69 'chain':77,78,79,228,230,282,378,1500,1665,1681,1689,1696,1808,2152 'chainid':216,231,293,328,1791 'chainlink':60,1533 'chang':381,1333 'classic':121 'click':142,1718 'close':645,652,654,679,726,777,784,989,993,1028,1042,1048,1107,1737,1751,1937,2020 'close-a-posit':1047 'close/reduce':1009 'closesizeusd':774,1995 'code':2194 'collater':500,533,625 'collateraltoken':754,770,819,1974,1990,2018 'collateraltokenaddress':496,529,591,946,1854 'come':1531 'commonj':179 'comput':656,746,977,1643 'concept':1519 'concurr':1195 'condit':1125 'config':1684 'configur':182,229,1247,1431,1678 'console.log':1927,2019 'const':193,205,212,260,265,269,273,278,289,317,324,330,397,431,447,450,455,465,543,552,700,716,727,735,749,753,757,762,766,885,890,898,1754,1761,1768,1773,1777,1782,1787,1818,1823,1834,1837,1896,1945,1949,1959,1969,1973,1977,1982,1986 'contain':681,1616 'continu':1329 'contract':2043,2064,2146,2150 'contract-level':2042,2063 'control':1004,1017 'conveni':354,651,904,918,992,2047,2068 'cost':1364 'cover':1361 'creat':105,200,1560,2100 'createdecreaseord':668,1038,1641 'createincreaseord':1233 'createsltpentri':1227 'createwalletcli':261,280,1769,1806 'creation':856,917,1264 'cross':1688 'cross-chain':1687 'current':1070,1397,1638 'curv':66 'data':61,691,711,831,848,879,1534,1612,1632,1647,1943 'decentr':13,50 'decim':508,572,601,1427,1595,1605 'decreas':657,747,797,813 'decreaseamount':767,818,1987,2017 'decreasepositionamount':1011 'default':615 'deleg':144,1709 'depend':1636 'deploy':383,2149 'deposits/withdrawals':2033 'deprec':2124 'desc':1489 'descript':825,1394 'desir':640 'detail':2145,2156 'differ':376 'dip':1134 'direct':126,877 'docs.gmx.io':2165 'document':2136,2164,2168 'domain':1461 'drop':1145,1189 'durat':1248 'dynam':374 'e.g':453,458,1606 'eip':134 'end':1739,1741 'end-to-end':1738 'endpoint':1387,1392,1445,2138,2144 'entri':1099 'entrypric':1934 'enum':1058 'eq':1485 'error':1920 'esm':170 'especi':1640 'estim':872,1383 'etc':348 'eth':85,424,1409,1609 'eth/avax/btc':1375 'eth/usd':403 'ethereum':1692 'ethmarket':1824 'ethmarket.markettokenaddress':1836 'ethusdmarket':432 'ethusdmarket.longtokenaddress':452 'ethusdmarket.markettokenaddress':449 'ethusdmarket.shorttokenaddress':457 'eventnam':1493 'exampl':1475,1734 'exchang':14,54 'execut':72,148,923,985,1067,1080,1244,1359,1366,1379,1419,1541,1556,1561,1572,1723,1875,2025 'exist':995,2120 'exit':1143,1155,1175,1187 'export':1254 'expos':2082 'exposur':1325 'express':127,139,2073 'extend':1436 'extens':177 'extensionless':187 'fall':1120 'fallback':1498,1502,1504 'fals':734,786,793,897,1903,1958,1998,2005 'fee':871,924,986,1272,1274,1294,1360 'fetch':103,372,392,673,708,1476,1620,1630,1941 'file':176 'find':402,435,460,469,547,556,739,1827,1841,1907,1963 'first':1944 'flow':883,1312,1742 'follow':1558 'fresh':709,1575,1631,1942,1946 'fresh.marketsinfodata':1954,1971,2010 'fresh.tokensdata':1956,1975,2012 'freshposit':1950,1962 'fromamount':567,633,961 'fromtokenaddress':563,959 'frontend':137,149,1270,2076,2192 'frontend-on':2075 'full':100,776,980,1003,1016,1053,1261,1733,2132 'function':2089 'fund':1307 'gap':1022 'gas':131,869,1363 'gelato':128,2079 'get':68,442,722,1396,1404,1413,1421,1429,1435 'getdailyvolum':829 'getdecreasepositionamount':660,701,768,1013,1032,1762,1988 'getexecutionfe':867 'getgaslimit':865 'getgaspric':866 'getisvalidtwapparam':1252 'getmarket':827,875 'getmarketsinfo':828 'getord':853 'getposit':843 'getpositionsconst':845 'getpositionsinfo':844 'gettick':874 'gettoken':876 'gettokensbal':837 'gettokensdata':836 'gettradehistori':860 'gettwapdurationinsecond':1251 'getuifeefactor':868 'github.com':2190 'github.com/gmx-io/gmx-interface)':2189 'give':1536 'glv':2052 'gm':2031 'gmx':2,10,42,46,97,161,197,209,321,663,704,1035,1257,1457,1524,1685,1758,1765,2037,2058,2092,2163,2169,2175,2186 'gmx-api':1456 'gmx-io':96,160,196,208,320,662,703,1034,1256,1757,1764,2091,2174,2185 'gmx-liquid':2036,2057 'gmx-trade':1 'gmx.io':1460 'gmx.squids.live':226,238,244,250,303,1471,1801 'gmx.squids.live/gmx-synthetics-':1470 'gmx.squids.live/gmx-synthetics-arbitrum:prod/api/graphql':225,237,302,1800 'gmx.squids.live/gmx-synthetics-avalanche:prod/api/graphql':243 'gmx.squids.live/gmx-synthetics-botanix:prod/api/graphql':249 'gmxapisdk':318,327 'gmxsdk':194,206,215,292,1755,1790 'go':685,713,1623 'graphql':1466,1480,2143 'handl':357,920,984 'hardcod':366 'helper':350 'higher':810 'histor':861 'histori':118 'http':262,285,1770,1811 'id':80,1492 'imbal':1286 'imbalanc':1300,1306 'immedi':1068 'impact':1549 'import':165,174,188,364,669 'increas':1088,1224 'increasepositionamount':1005 'index':406,418 'index/long/short':1432 'indextokenaddress':347 'info':834,1438,1897,1906 'input':638 'instal':154,159 'instanc':203 'instant':147 'instead':63,2113 'integr':93 'interest':1317 'interfac':2173 'io':98,162,198,210,322,664,705,1036,1258,1759,1766,2093,2176,2187 'islong':771,804,1991,2013 'issetacceptablepriceimpacten':792,2004 'keeper':696,816,1362,1571,1654,1874,2023 'keepleverag':785,1997 'key':277,602,823,938,1021,1518,1786 'kink':1336 'larg':1238 'larger':1315 'layerzero/stargate':1698 'legaci':1455 'let':1880,1883 'level':908,970,2044,2065 'leverag':28,509,512,538,595,604,948,1861,1932 'lightweight':308 'like':71,337 'limit':575,1073,1110,1127,1159,1193,1490,2030 'limitdecreas':1078,1150,1182 'limitincreas':1076 'limitpric':578,597 'limitswap':1074 'link':559 'linkaddress':553,566 'liquid':833,1112,1113,2038,2059 'list':1423 'logic':2162 'long':480,502,850,942,955,1126,1135,1146,1746,1848 'long/short':1281,1324 'longer':1464 'longtoken':451,497,592 'loss':1102,1111,1138,1170,1214 'low':907,969,1338 'low-level':906,968 'm':436,1828 'm.indextokenaddress':438,1830 'm.isspotonly':441,1833 'main':1728 'mainten':1122 'manag':35,107,858 'manual':1707 'margin':1123 'market':104,115,331,342,345,367,387,394,404,413,421,446,710,830,1060,1430,1437 'market/limit/stop':26 'market/token':981 'marketaddress':448,485,526,588,742,944,1835,1851,1910,1966 'marketdecreas':1065 'marketincreas':1063 'marketinfo':339,750,769,801,1006,1970,1989,2008 'marketsinfodata':398,434,674,717,731,751,802,886,894,902,1613,1819,1826,1900,1953,2009 'marketswap':1061 'markettokenaddress':344 'maximum':1194 'messag':136 'metadata':839 'method':355,653,824,909,919,936,971,994,996,1393,2048,2069,2098,2135 'min/max':1398 'mincollateralusd':758,789,1978,2001 'minpositionsizeusd':759,790,1979,2002 'miss':175 'mode':120 'model':1337 'modifi':2109 'modul':821,822,2133 'monitor':1736,1748 'move':1095 'much':624 'multical':1656,1672 'nativ':81,1373,1604 'need':315 'network':1390,1459,1473 'never':365 'new':214,291,326,1789,1890,1919 'node.js':190 'note':166,409 'notion':1291 'npm':158,2179 'object':340,982 'object.values':433,467,545,554,737,1825,1839,1905,1961 'offici':2166 'ohlc':1405 'oi':1282 'old':690 'onchain':74,1369 'one':141,1717 'one-click':140,1716 'open':478,519,846,932,941,950,1001,1091,1316,1735,1744,1847,1929 'openapi':2141 'opening/closing':1275 'oper':258,1634,2045,2054,2066 'oracl':17,57,682,878,1071,1082,1128,1139,1151,1160,1171,1183,1386,1415,1450,1521,1544,1576,1617,2140 'oracle-bas':16,56,1520 'oracleurl':222,232,299,1797 'order':27,106,349,477,576,798,855,916,965,1055,1199,1211,1219,1225,1235,1239,1263,1368,1418,1557,1567,1724,2021,2074,2087,2102,2104,2106,2153,2157 'orderbi':1487 'orderkey':966 'ordersinfodata':899 'ordertyp':1494 'output':641 'overview':45 'p':740,1908,1964 'p.islong':743,1911,1967 'p.marketaddress':741,1909,1965 'packag':2184 'paid':1352,1370 'pair':1296,1302 'param':939 'paramet':603,1231,2119 'part':1243 'partial':783 'past':1096 'path':94,1020 'pattern':1054,1562 'pay':130,494,622 'payamount':503,536,593,621,947,1856 'paytokenaddress':489,527,589,945,1852 'pend':964 'per':377,1200,1671,1680,2151 'per-chain':1679 'period':1410 'perpetu':5,51,412 'phase':1555 'place':476 'point':514,607 'pool':430,1440,1551,2032 'pos':1960,1994 'pos.collateraltokenaddress':1976 'pos.islong':1992,2014 'pos.marketaddress':1972 'pos.sizeinusd':1996 'posit':34,108,116,481,522,580,631,647,724,736,773,847,933,943,952,990,1002,1010,1030,1044,1050,1092,1108,1119,1201,1273,1289,1332,1355,1747,1871,1881,1904,1914,1917,1921,1928,1938,1993 'position.collateraltokenaddress':756 'position.entryprice.tostring':1935 'position.islong':772,805 'position.leverage.tostring':1933 'position.marketaddress':752 'position.sizeinusd':775 'position.sizeinusd.tostring':1931 'positionsinfo':728,738,891 'pre':976 'pre-comput':975 'price':19,59,114,683,712,840,1072,1083,1086,1094,1129,1131,1140,1142,1152,1154,1161,1163,1172,1174,1184,1186,1399,1406,1416,1523,1530,1545,1548,1577,1590,1618,1639,1652 'primari':1501 'privatekeytoaccount':266,275,1774,1784 'process.env.private':276,1785 'prod/api/graphql':1474 'produc':692 'product':1664 'profit':1149,1181,1218 'programm':33 'programmat':2103 'promis':1891 'proport':1356 'protocol':2167 'provid':353,979,1649 'purpos':937,997 'queri':1481 'quick':152,715 'r':1892,1894 'ralli':1166 'rang':618 'rate':1308,1310,1335,1339 're':493,672,1629,1940 're-fetch':671,1628,1939 'reach':1084 'read':101,112,311,882 'read-on':111,310 'rebal':1323 'recent':1477 'recreat':2112 'refer':2128,2130 'references/api-endpoints.md':2139 'references/contract-addresses.md':2148 'references/order-types.md':2155 'references/sdk-reference.md':2131 'refund':1377 'reject':698,817,1655 'relay':129,2080 'requir':180,195,207,263,267,271,319,655,702,972,987,998,1726,1756,1763,1771,1775,1779 'resolv':186,386,1816 'rest':40,109,1384 'return':334 'right':677 'rise':1157,1177 'rpc':314,1661 'rpcurl':218,295,1793 'scale':1592 'script':191 'sdk':38,95,151,156,168,202,213,290,352,820,911,1659,1788,2046,2067,2085,2097,2129,2183 'sdk.markets':826 'sdk.markets.getmarketsinfo':401,720,889,1822,1948 'sdk.oracle':873 'sdk.orders':849 'sdk.orders.cancelorders':962,2114 'sdk.orders.close':1026 'sdk.orders.createdecreaseorder':800,1008,2007 'sdk.orders.createincreaseorder':1000 'sdk.orders.createswaporder':1014 'sdk.orders.getorders':901 'sdk.orders.long':484,587,940,1850 'sdk.orders.short':525,949 'sdk.orders.swap':562,956 'sdk.positions':842 'sdk.positions.getpositionsconstants':761,1981 'sdk.positions.getpositionsinfo':730,893,1899,1952 'sdk.tokens':835 'sdk.trades':859 'sdk.utils':864 'sdk.utils.getexecutionfee':1381 'sdk.utils.getuifeefactor':765,1985 'second':688,1583,1626 'see':1039,2034,2055 'sell':1164 'serv':1447 'set':252,2125 'settimeout':1893 'settl':1330 'settlement':75 'setup':999,1781 'short':521,535,851,951,1158,1167,1178 'shorttoken':456,530 'showpnlinleverag':733,896,1902,1957 'side':1318,1322 'sidecar':1210 'sign':123,133,145,1414 'signatur':1730 'simul':2116,2122 'size':632,1290,1358,1441 'sizeamount':628 'sizedeltausd':1495 'sizeusd':1930 'skill':44,2040,2061 'skill-gmx-trading' 'skipsimul':1866,2118,2126 'slippag':518,811,1540 'smaller':780,1321 'sourc':2193 'source-gmx-io' 'specifi':630,637 'split':1236 'spot':53,427 'spot-on':426 'stablecoin':1301 'stale':686,714,1611,1624,1651 'standard':1295 'start':153 'steep':1343 'step':384,474,487,643,1040,1045 'stop':1087,1101,1137,1169,1213 'stop-loss':1100,1136,1168,1212 'stopincreas':1089 'stoplossdecreas':1103 'stream':62,1535 'string':967 'subaccount':143,1708,1713,1721 'subject':1546 'submiss':362,927 'submit':795,1565,2022 'subsquid':1467 'subsquidurl':224,233,301,1799 'support':25,76 'surplus':1376 'swap':7,429,540,584,636,852,935,957,1015,1019,1293 'swapamount':1018 'symbol':408,420,423,439,464,1831 'system':1116 'system-trigg':1115 't.symbol':471,549,558,1843 'take':1148,1180,1217,1580 'take-profit':1147,1179,1216 'threshold':1342 'throw':1918 'tier':914 'time':1327,1621,1732 'timestamp':1488,1496 'toamount':634 'token':8,82,369,389,396,407,419,443,462,491,541,838,958,1374,1402,1422,1433,1600 'tokensdata':399,437,468,546,555,676,718,732,755,803,887,895,903,1007,1615,1820,1829,1840,1901,1955,2011 'tokensymbol':1408 'topic-agent-skills' 'topic-claude-code-skill' 'topic-claude-skills' 'topic-defi' 'topic-gmx' 'topic-liquidity' 'topic-trading' 'totokenaddress':565,960 'trade':3,4,43,117,119,862,1279,1478,1690,1702,1710,1719,2115,2172 'tradeact':1482 'trader':67,1537 'transact':125,361,1568 'transactionhash':1497 'transport':284,1810 'trigger':1085,1097,1117,1124,1130,1141,1153,1162,1173,1185,2161 'triggerpric':582 'true':744,1867,1912,1968,2127 'twap':1234,1249,1262,2086,2101 'two':92,913,1554 'two-phas':1553 'tx':926 'type':1056,1057,2154,2158 'typescript':37,204,259,316,391,482,523,542,585,699,884,1753 'typic':881,1579 'ui':1271 'uifeefactor':763,791,1983,2003 'undefin':788,2000 'updat':2105 'updatesltpentri':1230 'upfront':1371 'url':1389,1452,1469,1499 'usd':1597 'usdc':459,472,506,531,1607,1844,1860 'usdcaddress':466,490,528,590,1838,1853,1855 'use':55,178,192,414,627,689,778,809,929,1031,1380,1527,1588,1602,1650,1666 'user':122,132,1564,1700 'userreferralinfo':787,1999 'util':1250,1341,1351,1443,1552,2088 'v2':11,47 'valu':781,1292 'vault':2053 'via':36,659,1012,1226,1268,1697,2078 'viem':164,264,1772 'viem/accounts':268,1776 'viem/chains':272,1780 'vs':905 'wait':1675,1869 'wallet':255,1729 'walletcli':279,307,1805 'weth':415,440,454,498,1832 'within':687,1625,1925 'without':1705,1725 'write':102,257 'www.npmjs.com':2181 'www.npmjs.com/package/@gmx-io/sdk)':2180 'yet':2050,2071 'zero':1539 'zero-slippag':1538","prices":[{"id":"e9cc3447-07cf-471f-af3f-edc3fcf71488","listingId":"1fead14a-13b6-4280-bd42-049b9b4d296e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"gmx-io","category":"gmx-ai","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:37.514Z"}],"sources":[{"listingId":"1fead14a-13b6-4280-bd42-049b9b4d296e","source":"github","sourceId":"gmx-io/gmx-ai/gmx-trading","sourceUrl":"https://github.com/gmx-io/gmx-ai/tree/main/skills/gmx-trading","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:37.514Z","lastSeenAt":"2026-05-18T19:13:30.040Z"}],"details":{"listingId":"1fead14a-13b6-4280-bd42-049b9b4d296e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"gmx-io","slug":"gmx-trading","github":{"repo":"gmx-io/gmx-ai","stars":8,"topics":["agent-skills","claude-code-skill","claude-skills","defi","gmx","liquidity","trading"],"license":"mit","html_url":"https://github.com/gmx-io/gmx-ai","pushed_at":"2026-03-20T08:59:28Z","description":"Agent skills for trading perpetuals and swapping tokens on GMX V2.","skill_md_sha":"67f3f0ec19705c1457a6800bd661214f4b4fdbdb","skill_md_path":"skills/gmx-trading/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/gmx-io/gmx-ai/tree/main/skills/gmx-trading"},"layout":"multi","source":"github","category":"gmx-ai","frontmatter":{"name":"gmx-trading","license":"MIT","description":"Trade perpetuals and swap tokens on GMX V2 — a decentralized exchange with oracle-based pricing on Arbitrum, Avalanche, and Botanix. Supports market/limit/stop orders, leverage up to 100x, and programmable position management via TypeScript SDK or REST API."},"skills_sh_url":"https://skills.sh/gmx-io/gmx-ai/gmx-trading"},"updatedAt":"2026-05-18T19:13:30.040Z"}}