hvip-mcp-server 0.2.16 → 0.2.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +286 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21151,6 +21151,9 @@ var publicApi = {
|
|
|
21151
21151
|
getFundingRate: (instId) => request("GET", "/api/v5/public/funding-rate", { params: { instId } }),
|
|
21152
21152
|
getMarkPrice: (instType, instId) => request("GET", "/api/v5/public/mark-price", { params: { instType, instId } }),
|
|
21153
21153
|
getIndexPrice: (instId) => request("GET", "/api/v5/market/index-tickers", { params: { instId } }),
|
|
21154
|
+
getBooksFull: (instId, sz) => request("GET", "/api/v5/market/books-full", { params: { instId, sz } }),
|
|
21155
|
+
getIndexTickers: (quoteCcy, instId) => request("GET", "/api/v5/market/index-tickers", { params: { quoteCcy, instId } }),
|
|
21156
|
+
getIndexCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/index-candles", { params: { instId, bar, after, before, limit } }),
|
|
21154
21157
|
getOpenInterest: (instType, instId) => request("GET", "/api/v5/public/open-interest", { params: { instType, instId } }),
|
|
21155
21158
|
getSystemTime: () => request("GET", "/api/v5/public/time"),
|
|
21156
21159
|
// ── 交易大数据(公共,无需鉴权) ─────────────────────────────────────────────
|
|
@@ -21189,7 +21192,10 @@ var publicApi = {
|
|
|
21189
21192
|
getAnnouncements: (annType, lang) => request("GET", "/api/v5/support/announcements", { params: { annType, lang } }),
|
|
21190
21193
|
getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types"),
|
|
21191
21194
|
getUnderlying: (instType) => request("GET", "/api/v5/public/underlying", { params: { instType } }),
|
|
21192
|
-
getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } })
|
|
21195
|
+
getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } }),
|
|
21196
|
+
getTopTradersContractLSRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/top-traders-contract-ls-ratio", { params: { ccy, begin, end } }),
|
|
21197
|
+
getContractsTakerVolume: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/contracts-taker-volume", { params: { ccy, begin, end } }),
|
|
21198
|
+
getContractsLongShortRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/long-short-ratio", { params: { ccy, begin, end } })
|
|
21193
21199
|
};
|
|
21194
21200
|
var privateApi = {
|
|
21195
21201
|
getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
|
|
@@ -21246,6 +21252,8 @@ var privateApi = {
|
|
|
21246
21252
|
getAlgoOrdersHistory: (auth, ordType, state, instType) => request("GET", "/api/v5/trade/orders-algo-history", { params: { ordType, state, instType }, auth }),
|
|
21247
21253
|
placeAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/order-algo", { body, auth }),
|
|
21248
21254
|
cancelAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/cancel-algos", { body, auth }),
|
|
21255
|
+
amendAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/amend-algos", { body, auth }),
|
|
21256
|
+
getOrdersAlgoPending: (auth, algoId, instType, instId, ordType, limit) => request("GET", "/api/v5/trade/orders-algo-pending", { params: { algoId, instType, instId, ordType, limit }, auth }),
|
|
21249
21257
|
// ── 子账户 ──────────────────────────────────────────────────────────────────
|
|
21250
21258
|
listSubAccounts: (auth, enable) => request("GET", "/api/v5/users/subaccount/list", { params: { enable }, auth }),
|
|
21251
21259
|
getSubAccountBalance: (auth, subAcct) => request("GET", "/api/v5/account/subaccount/balances", { params: { subAcct }, auth }),
|
|
@@ -21261,7 +21269,13 @@ var privateApi = {
|
|
|
21261
21269
|
getSignalPositions: (auth, algoId) => request("GET", "/api/v5/tradingBot/signal/positions", { params: { algoId }, auth }),
|
|
21262
21270
|
getSignalPositionsHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/positions-history", { params: { algoOrdType: "contract", algoId, limit }, auth }),
|
|
21263
21271
|
getSignalSubOrders: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/sub-orders", { params: { algoOrdType: "contract", algoId, limit }, auth }),
|
|
21264
|
-
getSignalEventHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/event-histories", { params: { algoId, limit }, auth })
|
|
21272
|
+
getSignalEventHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/event-histories", { params: { algoId, limit }, auth }),
|
|
21273
|
+
// ── 交易扩展 ──────────────────────────────────────────────────────────────────
|
|
21274
|
+
cancelAllAfter: (auth, body) => request("POST", "/api/v5/trade/cancel-all-after", { body, auth }),
|
|
21275
|
+
orderPrecheck: (auth, body) => request("POST", "/api/v5/trade/order-precheck", { body, auth }),
|
|
21276
|
+
getAccountRateLimit: (auth) => request("GET", "/api/v5/trade/account-rate-limit", { auth }),
|
|
21277
|
+
easyConvert: (auth, body) => request("POST", "/api/v5/trade/easy-convert", { body, auth }),
|
|
21278
|
+
getEasyConvertHistory: (auth, after, before, limit) => request("GET", "/api/v5/trade/easy-convert-history", { params: { after, before, limit }, auth })
|
|
21265
21279
|
};
|
|
21266
21280
|
|
|
21267
21281
|
// src/adapters/hrails.ts
|
|
@@ -21582,6 +21596,85 @@ function registerMarketTools(server) {
|
|
|
21582
21596
|
}
|
|
21583
21597
|
}
|
|
21584
21598
|
);
|
|
21599
|
+
server.tool(
|
|
21600
|
+
"okx_get_books_full",
|
|
21601
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EA7\u54C1\u5168\u6DF1\u5EA6\u8BA2\u5355\u7C3F\uFF08\u6240\u6709\u6863\u4F4D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7CBE\u786E\u5206\u6790\u5E02\u573A\u6D41\u52A8\u6027\u5168\u8C8C\u3001\u53D1\u73B0\u9690\u85CF\u7684\u5927\u989D\u6302\u5355\u3001\u8BA1\u7B97\u6DF1\u5EA6\u52A0\u6743\u4EF7\u683C\n## \u5173\u952E\u8BCD\uFF1A\u5168\u6DF1\u5EA6, \u5B8C\u6574\u8BA2\u5355\u7C3F, books full, \u6240\u6709\u6863\u4F4D, \u6DF1\u5EA6\u5206\u6790, \u6D41\u52A8\u6027\u5168\u666F\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - depth: \u6DF1\u5EA6\u6863\u4F4D\uFF0C\u9ED8\u8BA4\u5168\u90E8\uFF0C\u53EF\u9009\u6307\u5B9A\u6863\u4F4D\u6570\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\u3002\u26A0\uFE0F \u6570\u636E\u91CF\u5927\uFF08\u53EF\u8FBE\u6570\u767EKB\uFF09\uFF0C\u614E\u91CD\u5168\u91CF\u8FD4\u56DE\n## \u8FD4\u56DE\u91CF\uFF1A\u5927\u578B ~200KB+\uFF08\u5305\u542B\u6240\u6709\u6863\u4F4D\u6570\u636E\uFF09\n## \u5173\u8054\uFF1Aokx_get_orderbook \u770B\u6709\u9650\u6DF1\u5EA6 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u6DF1\u5EA6 \u2192 \u8BA1\u7B97\u7CBE\u786E\u5E02\u573A\u51B2\u51FB\u6210\u672C",
|
|
21602
|
+
{
|
|
21603
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
21604
|
+
depth: external_exports.number().int().min(1).max(400).optional().describe("\u6DF1\u5EA6\u6863\u4F4D\uFF0C\u9ED8\u8BA4\u5168\u91CF\uFF0C\u53EF\u9009\u9650\u5236")
|
|
21605
|
+
},
|
|
21606
|
+
async ({ instId, depth }) => {
|
|
21607
|
+
try {
|
|
21608
|
+
const data = await publicApi.getBooksFull(instId, depth);
|
|
21609
|
+
const enriched = data.data || data;
|
|
21610
|
+
if (Array.isArray(enriched)) {
|
|
21611
|
+
const withTsIso = enriched.map((item) => ({
|
|
21612
|
+
...item,
|
|
21613
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21614
|
+
}));
|
|
21615
|
+
return toResult(withTsIso);
|
|
21616
|
+
}
|
|
21617
|
+
if (enriched && typeof enriched === "object") {
|
|
21618
|
+
return toResult({
|
|
21619
|
+
...enriched,
|
|
21620
|
+
tsIso: enriched.ts ? new Date(parseInt(enriched.ts)).toISOString() : void 0
|
|
21621
|
+
});
|
|
21622
|
+
}
|
|
21623
|
+
return toResult(data);
|
|
21624
|
+
} catch (e) {
|
|
21625
|
+
return toError(e);
|
|
21626
|
+
}
|
|
21627
|
+
}
|
|
21628
|
+
);
|
|
21629
|
+
server.tool(
|
|
21630
|
+
"okx_get_index_tickers",
|
|
21631
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570\u884C\u60C5\u5217\u8868\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6307\u6570\u73B0\u8D27\u4EF7\u683C\u57FA\u51C6\u3001\u6279\u91CF\u83B7\u53D6\u5404\u5E01\u79CD\u6307\u6570\u4EF7\u683C\u3001\u5224\u65AD\u5408\u7EA6\u6807\u8BB0\u4EF7\u504F\u5DEE\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570\u884C\u60C5, index tickers, \u6307\u6570\u4EF7\u683C, \u52A0\u6743\u5747\u4EF7, \u73B0\u8D27\u57FA\u51C6\n## \u53C2\u6570\uFF1A\n## - quoteCcy: \u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USDT\u3001USD\u3001BTC\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - instId: \u6307\u5B9A\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6307\u6570\u4EF7\u683C \u2192 okx_get_mark_price \u770B\u6807\u8BB0\u4EF7 \u2192 \u5BF9\u6BD4\u504F\u5DEE\u5224\u65AD\u5957\u5229\u7A7A\u95F4",
|
|
21632
|
+
{
|
|
21633
|
+
quoteCcy: external_exports.string().optional().describe("\u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USDT\u3001USD\u3001BTC"),
|
|
21634
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT")
|
|
21635
|
+
},
|
|
21636
|
+
async ({ quoteCcy, instId }) => {
|
|
21637
|
+
try {
|
|
21638
|
+
const data = await publicApi.getIndexTickers(quoteCcy, instId);
|
|
21639
|
+
const enriched = data.map((item) => ({
|
|
21640
|
+
...item,
|
|
21641
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21642
|
+
}));
|
|
21643
|
+
return toResult(enriched);
|
|
21644
|
+
} catch (e) {
|
|
21645
|
+
return toError(e);
|
|
21646
|
+
}
|
|
21647
|
+
}
|
|
21648
|
+
);
|
|
21649
|
+
server.tool(
|
|
21650
|
+
"okx_get_index_candles",
|
|
21651
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570K\u7EBF\u6570\u636E\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\u7684OHLCV\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u73B0\u8D27\u5E02\u573A\u6574\u4F53\u4EF7\u683C\u8D70\u52BF\u3001\u6392\u9664\u5355\u4EA4\u6613\u6240\u5F02\u5E38\u6CE2\u52A8\u3001\u5224\u65AD\u771F\u5B9E\u5E02\u573A\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570K\u7EBF, index candles, \u6307\u6570OHLCV, \u52A0\u6743K\u7EBF, \u73B0\u8D27\u8D8B\u52BF\n## \u53C2\u6570\uFF1A\n## - instId: \u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - bar: K\u7EBF\u5468\u671F\u30021m/3m/5m/15m/30m=\u5206\u949F, 1H=1\u5C0F\u65F6, 4H=4\u5C0F\u65F6, 1D=\u65E5\u7EBF, 1W=\u5468\u7EBF\u3002\u9ED8\u8BA41H\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u5927300\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A100\u6761 ~5KB \u2014 \u5FAE\u5C0F\n## \u5173\u8054\uFF1Aokx_get_candles \u770B\u5355\u4EA4\u6613\u6240K\u7EBF \u2192 \u672C\u5DE5\u5177\u770B\u6307\u6570K\u7EBF \u2192 \u5BF9\u6BD4\u5224\u65AD\u4EA4\u6613\u6240\u504F\u5DEE",
|
|
21652
|
+
{
|
|
21653
|
+
instId: external_exports.string().describe("\u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
21654
|
+
bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
|
|
21655
|
+
after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
21656
|
+
before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
21657
|
+
limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
21658
|
+
},
|
|
21659
|
+
async ({ instId, bar, after, before, limit }) => {
|
|
21660
|
+
try {
|
|
21661
|
+
const data = await publicApi.getIndexCandles(instId, bar, after, before, limit);
|
|
21662
|
+
const enriched = data.map((row) => ({
|
|
21663
|
+
ts: row[0],
|
|
21664
|
+
tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
|
|
21665
|
+
open: row[1],
|
|
21666
|
+
high: row[2],
|
|
21667
|
+
low: row[3],
|
|
21668
|
+
close: row[4],
|
|
21669
|
+
vol: row[5],
|
|
21670
|
+
volCcy: row[6]
|
|
21671
|
+
}));
|
|
21672
|
+
return toResult(enriched);
|
|
21673
|
+
} catch (e) {
|
|
21674
|
+
return toError(e);
|
|
21675
|
+
}
|
|
21676
|
+
}
|
|
21677
|
+
);
|
|
21585
21678
|
}
|
|
21586
21679
|
|
|
21587
21680
|
// src/tools/public.ts
|
|
@@ -22430,6 +22523,97 @@ function registerTradingTools(server, auth) {
|
|
|
22430
22523
|
}
|
|
22431
22524
|
}
|
|
22432
22525
|
);
|
|
22526
|
+
server.tool(
|
|
22527
|
+
"okx_cancel_all_after",
|
|
22528
|
+
"## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u5B9A\u65F6\u5168\u64A4\uFF08N\u79D2\u540E\u81EA\u52A8\u64A4\u9500\u6240\u6709\u6302\u5355\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6781\u7AEF\u884C\u60C5\u4E0B\u542F\u52A8\u7D27\u6025\u64A4\u5355\u5012\u8BA1\u65F6\u3001\u7A0B\u5E8F\u5316\u98CE\u9669\u63A7\u5236\u3001\u8D85\u65F6\u81EA\u52A8\u6E05\u7A7A\u6302\u5355\n## \u5173\u952E\u8BCD\uFF1A\u5B9A\u65F6\u5168\u64A4, cancel all after, \u5012\u8BA1\u65F6\u64A4\u5355, \u7D27\u6025\u98CE\u63A7, \u81EA\u52A8\u64A4\u5355\n## \u53C2\u6570\uFF1A\n## - timeOut: \u5012\u8BA1\u65F6\u79D2\u6570\u30020=\u53D6\u6D88\u5B9A\u65F6\u5168\u64A4, \u6B63\u6570=\u8BBEN\u79D2\u540E\u5168\u64A4\u3002\u6700\u5927120\u79D2\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u98CE\u63A7\u6838\u5FC3\u5DE5\u5177\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u5B9A\u65F6\u64A4\u9500\u6240\u6709\u6302\u5355\uFF0C\u5F71\u54CD\u8303\u56F4\u6781\u5927\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_orders_pending \u786E\u8BA4\u5F53\u524D\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u8BBE\u5012\u8BA1\u65F6 \u2192 \u5230\u65F6\u95F4\u81EA\u52A8\u64A4\u9500",
|
|
22529
|
+
{
|
|
22530
|
+
timeOut: external_exports.string().describe("\u5012\u8BA1\u65F6\u79D2\u6570\uFF0C0=\u53D6\u6D88\u5B9A\u65F6\u5168\u64A4\uFF0C\u6B63\u6570=\u8BBEN\u79D2\u540E\u5168\u64A4\uFF0C\u6700\u5927120\u79D2")
|
|
22531
|
+
},
|
|
22532
|
+
async ({ timeOut }) => {
|
|
22533
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22534
|
+
try {
|
|
22535
|
+
const data = await privateApi.cancelAllAfter(auth, { timeOut });
|
|
22536
|
+
return toResult(data);
|
|
22537
|
+
} catch (e) {
|
|
22538
|
+
return toError(e);
|
|
22539
|
+
}
|
|
22540
|
+
}
|
|
22541
|
+
);
|
|
22542
|
+
server.tool(
|
|
22543
|
+
"okx_order_precheck",
|
|
22544
|
+
`## \u529F\u80FD\uFF1A\u4E0B\u5355\u9884\u68C0\uFF08\u9A8C\u8BC1\u8BA2\u5355\u53C2\u6570\u662F\u5426\u5408\u6CD5\uFF0C\u4E0D\u5B9E\u9645\u4E0B\u5355\uFF09
|
|
22545
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u4E0B\u5355\u524D\u9A8C\u8BC1\u53C2\u6570\u6B63\u786E\u6027\u3001\u68C0\u67E5\u4F59\u989D\u548C\u98CE\u63A7\u9650\u5236\u3001\u907F\u514D\u56E0\u53C2\u6570\u9519\u8BEF\u5BFC\u81F4\u7684\u8BA2\u5355\u5931\u8D25
|
|
22546
|
+
## \u5173\u952E\u8BCD\uFF1A\u4E0B\u5355\u9884\u68C0, \u9884\u68C0\u67E5, order precheck, \u8BA2\u5355\u9A8C\u8BC1, \u53C2\u6570\u68C0\u67E5
|
|
22547
|
+
## \u53C2\u6570\uFF1A
|
|
22548
|
+
## - params: \u8BA2\u5355\u53C2\u6570JSON\u5BF9\u8C61\uFF0C\u4E0E okx_place_order \u53C2\u6570\u76F8\u540C\u3002\u5FC5\u586B
|
|
22549
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
22550
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u9884\u68C0\uFF0C\u4E0D\u4EA7\u751F\u5B9E\u9645\u8BA2\u5355\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22551
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
|
|
22552
|
+
## \u5173\u8054\uFF1Aokx_place_order \u4E0B\u5355\u524D \u2192 \u672C\u5DE5\u5177\u9884\u68C0\u53C2\u6570 \u2192 \u901A\u8FC7\u540E\u6B63\u5F0F\u4E0B\u5355`,
|
|
22553
|
+
{
|
|
22554
|
+
params: external_exports.string().describe(`\u8BA2\u5355\u53C2\u6570JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '{"instId":"BTC-USDT","tdMode":"cash","side":"buy","ordType":"limit","sz":"0.001","px":"60000"}'`)
|
|
22555
|
+
},
|
|
22556
|
+
async ({ params }) => {
|
|
22557
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22558
|
+
try {
|
|
22559
|
+
const parsed = JSON.parse(params);
|
|
22560
|
+
const data = await privateApi.orderPrecheck(auth, parsed);
|
|
22561
|
+
return toResult(data);
|
|
22562
|
+
} catch (e) {
|
|
22563
|
+
return toError(e);
|
|
22564
|
+
}
|
|
22565
|
+
}
|
|
22566
|
+
);
|
|
22567
|
+
server.tool(
|
|
22568
|
+
"okx_get_account_rate_limit",
|
|
22569
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u8D26\u6237\u7684API\u9891\u7387\u9650\u5236\u4F7F\u7528\u60C5\u51B5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u9AD8\u9891\u4EA4\u6613\u524D\u68C0\u67E5\u5269\u4F59\u914D\u989D\u3001\u907F\u514D\u89E6\u53D1\u9650\u9891\u3001\u8C03\u6574\u8BF7\u6C42\u8282\u594F\n## \u5173\u952E\u8BCD\uFF1A\u9891\u7387\u9650\u5236, rate limit, API\u914D\u989D, \u9650\u9891\u67E5\u8BE2, \u5269\u4F59\u6B21\u6570\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u5269\u4F59\u914D\u989D \u2192 \u9AD8\u9891\u4E0B\u5355\u524D\u786E\u8BA4 \u2192 \u907F\u514D HTTP 429 \u9519\u8BEF",
|
|
22570
|
+
{},
|
|
22571
|
+
async () => {
|
|
22572
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22573
|
+
try {
|
|
22574
|
+
const data = await privateApi.getAccountRateLimit(auth);
|
|
22575
|
+
return toResult(data);
|
|
22576
|
+
} catch (e) {
|
|
22577
|
+
return toError(e);
|
|
22578
|
+
}
|
|
22579
|
+
}
|
|
22580
|
+
);
|
|
22581
|
+
server.tool(
|
|
22582
|
+
"okx_easy_convert",
|
|
22583
|
+
"## \u529F\u80FD\uFF1A\u95EA\u5151\uFF08\u4E00\u952E\u5151\u6362\u4E0D\u540C\u5E01\u79CD\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u5151\u6362USDT\u5230BTC/ETH\u7B49\u3001\u5C0F\u989D\u6362\u5E01\u9700\u6C42\u3001\u65E0\u9700\u6302\u5355\u5373\u65F6\u6210\u4EA4\n## \u5173\u952E\u8BCD\uFF1A\u95EA\u5151, easy convert, \u5E01\u79CD\u5151\u6362, \u4E00\u952E\u6362\u5E01, \u5FEB\u901F\u5151\u6362\n## \u53C2\u6570\uFF1A\n## - fromCcy: \u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B\n## - toCcy: \u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B\n## - sz: \u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u5151\u6362\u5E01\u79CD\u548C\u6570\u91CF\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u4EA7\u751F\u771F\u5B9E\u5151\u6362\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_ticker \u770B\u5F53\u524D\u4EF7 \u2192 \u672C\u5DE5\u5177\u95EA\u5151 \u2192 okx_get_easy_convert_history \u67E5\u8BB0\u5F55",
|
|
22584
|
+
{
|
|
22585
|
+
fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT"),
|
|
22586
|
+
toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC"),
|
|
22587
|
+
sz: external_exports.string().describe("\u5356\u51FA\u6570\u91CF")
|
|
22588
|
+
},
|
|
22589
|
+
async ({ fromCcy, toCcy, sz }) => {
|
|
22590
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22591
|
+
try {
|
|
22592
|
+
const data = await privateApi.easyConvert(auth, { fromCcy, toCcy, sz });
|
|
22593
|
+
return toResult(data);
|
|
22594
|
+
} catch (e) {
|
|
22595
|
+
return toError(e);
|
|
22596
|
+
}
|
|
22597
|
+
}
|
|
22598
|
+
);
|
|
22599
|
+
server.tool(
|
|
22600
|
+
"okx_get_easy_convert_history",
|
|
22601
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u95EA\u5151\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u95EA\u5151\u4EA4\u6613\u3001\u6838\u5BF9\u5151\u6362\u6C47\u7387\u3001\u7EDF\u8BA1\u6362\u5E01\u6210\u672C\n## \u5173\u952E\u8BCD\uFF1A\u95EA\u5151\u5386\u53F2, easy convert history, \u5151\u6362\u8BB0\u5F55, \u6362\u5E01\u5386\u53F2\n## \u53C2\u6570\uFF1A\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_easy_convert \u95EA\u5151 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 okx_get_account_bills \u5BF9\u8D26",
|
|
22602
|
+
{
|
|
22603
|
+
after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
22604
|
+
before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
22605
|
+
limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22606
|
+
},
|
|
22607
|
+
async ({ after, before, limit }) => {
|
|
22608
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22609
|
+
try {
|
|
22610
|
+
const data = await privateApi.getEasyConvertHistory(auth, after, before, limit);
|
|
22611
|
+
return toResult(data);
|
|
22612
|
+
} catch (e) {
|
|
22613
|
+
return toError(e);
|
|
22614
|
+
}
|
|
22615
|
+
}
|
|
22616
|
+
);
|
|
22433
22617
|
}
|
|
22434
22618
|
|
|
22435
22619
|
// src/tools/algo.ts
|
|
@@ -22500,6 +22684,43 @@ function registerAlgoTools(server, auth) {
|
|
|
22500
22684
|
}
|
|
22501
22685
|
}
|
|
22502
22686
|
);
|
|
22687
|
+
server.tool(
|
|
22688
|
+
"okx_get_orders_algo_pending",
|
|
22689
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F85\u89E6\u53D1\u7684\u7B56\u7565\u59D4\u6258\u5355\uFF08\u66F4\u7075\u6D3B\u7684\u67E5\u8BE2\u65B9\u5F0F\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6240\u6709\u5F85\u89E6\u53D1\u7B56\u7565\u3001\u6309\u4EA7\u54C1\u6216ID\u7CBE\u786E\u67E5\u627E\u7B56\u7565\u5355\u3001\u76D1\u63A7\u81EA\u52A8\u4EA4\u6613\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u7B56\u7565\u6302\u5355, orders algo pending, \u5F85\u89E6\u53D1, \u6761\u4EF6\u5355\u67E5\u8BE2, \u6B62\u76C8\u6B62\u635F\u67E5\u8BE2\n## \u53C2\u6570\uFF1A\n## - algoId: \u7B56\u7565\u8BA2\u5355ID\uFF0C\u7CBE\u786E\u67E5\u8BE2\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## - ordType: \u7B56\u7565\u7C7B\u578B\u3002conditional/trigger/oco/move_order_stop/iceberg/twap\n## - limit: \u8FD4\u56DE\u6761\u6570\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u8BE2\u5F85\u89E6\u53D1\u7B56\u7565 \u2192 okx_place_algo_order \u4E0B\u7B56\u7565\u5355 \u2192 okx_cancel_algo_order \u64A4\u9500",
|
|
22690
|
+
{
|
|
22691
|
+
algoId: external_exports.string().optional().describe("\u7B56\u7565\u8BA2\u5355ID\uFF0C\u7CBE\u786E\u67E5\u8BE2"),
|
|
22692
|
+
instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
22693
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
22694
|
+
ordType: external_exports.enum(["conditional", "oco", "trigger", "move_order_stop", "iceberg", "twap"]).optional().describe("\u7B56\u7565\u7C7B\u578B"),
|
|
22695
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570")
|
|
22696
|
+
},
|
|
22697
|
+
async ({ algoId, instType, instId, ordType, limit }) => {
|
|
22698
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22699
|
+
try {
|
|
22700
|
+
const data = await privateApi.getOrdersAlgoPending(auth, algoId, instType, instId, ordType, limit);
|
|
22701
|
+
return toResult(data);
|
|
22702
|
+
} catch (e) {
|
|
22703
|
+
return toError(e);
|
|
22704
|
+
}
|
|
22705
|
+
}
|
|
22706
|
+
);
|
|
22707
|
+
server.tool(
|
|
22708
|
+
"okx_amend_algo_order",
|
|
22709
|
+
"## \u529F\u80FD\uFF1A\u4FEE\u6539\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u4EF7\u683C\u3001\u89E6\u53D1\u6761\u4EF6\u7B49\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u6B62\u76C8\u6B62\u635F\u4EF7\u683C\u3001\u4FEE\u6539\u89E6\u53D1\u6761\u4EF6\u3001\u66F4\u65B0\u7B56\u7565\u5355\u53C2\u6570\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539\u7B56\u7565, amend algo, \u8C03\u6574\u6B62\u76C8\u6B62\u635F, \u4FEE\u6539\u6761\u4EF6\u5355, \u66F4\u65B0\u7B56\u7565\n## \u53C2\u6570\uFF1A\n## - orders: \u4FEE\u6539\u7B56\u7565\u8BA2\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B algoId/instId \u53CA\u9700\u4FEE\u6539\u7684\u5B57\u6BB5\uFF08\u5982 newSz/newPx/slTriggerPx/tpTriggerPx\uFF09\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u7B56\u7565\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_orders_algo_pending \u67E5\u8BE2\u7B56\u7565 \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 okx_get_algo_orders \u786E\u8BA4\u4FEE\u6539",
|
|
22710
|
+
{
|
|
22711
|
+
orders: external_exports.string().describe(`\u4FEE\u6539\u7B56\u7565\u8BA2\u5355\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '[{"algoId":"123","instId":"BTC-USDT","newTpTriggerPx":"65000"}]'`)
|
|
22712
|
+
},
|
|
22713
|
+
async ({ orders }) => {
|
|
22714
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22715
|
+
try {
|
|
22716
|
+
const parsed = JSON.parse(orders);
|
|
22717
|
+
const data = await privateApi.amendAlgoOrder(auth, parsed);
|
|
22718
|
+
return toResult(data);
|
|
22719
|
+
} catch (e) {
|
|
22720
|
+
return toError(e);
|
|
22721
|
+
}
|
|
22722
|
+
}
|
|
22723
|
+
);
|
|
22503
22724
|
}
|
|
22504
22725
|
|
|
22505
22726
|
// src/tools/funding.ts
|
|
@@ -22777,6 +22998,69 @@ function registerStatsTools(server) {
|
|
|
22777
22998
|
}
|
|
22778
22999
|
}
|
|
22779
23000
|
);
|
|
23001
|
+
server.tool(
|
|
23002
|
+
"okx_get_top_traders_contract_ls_ratio",
|
|
23003
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u7CBE\u82F1\u4EA4\u6613\u5458\u591A\u7A7A\u6301\u4ED3\u6BD4\u4F8B\uFF08\u5168\u90E8\u5408\u7EA6\u6C47\u603B\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u7CBE\u82F1\u7FA4\u4F53\u6574\u4F53\u6301\u4ED3\u65B9\u5411\u3001\u5206\u6790\u5927\u6237\u60C5\u7EEA\u53D8\u5316\u8D8B\u52BF\u3001\u53D1\u73B0\u6781\u7AEF\u6301\u4ED3\u7684\u8F6C\u6298\u4FE1\u53F7\n## \u5173\u952E\u8BCD\uFF1A\u7CBE\u82F1\u591A\u7A7A\u6BD4, \u5168\u90E8\u5408\u7EA6, top traders LS ratio, \u5927\u6237\u60C5\u7EEA, \u6301\u4ED3\u6C47\u603B\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_top_trader_long_short_ratio \u770B\u5355\u4E00\u5408\u7EA6\u5927\u6237 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5224\u65AD\u6574\u4F53\u5927\u6237\u65B9\u5411",
|
|
23004
|
+
{
|
|
23005
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
23006
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
23007
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
|
|
23008
|
+
},
|
|
23009
|
+
async ({ ccy, begin, end }) => {
|
|
23010
|
+
try {
|
|
23011
|
+
const data = await publicApi.getTopTradersContractLSRatio(ccy, begin, end);
|
|
23012
|
+
const enriched = data.map((item) => ({
|
|
23013
|
+
...item,
|
|
23014
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
23015
|
+
}));
|
|
23016
|
+
return toResult(enriched);
|
|
23017
|
+
} catch (e) {
|
|
23018
|
+
return toError(e);
|
|
23019
|
+
}
|
|
23020
|
+
}
|
|
23021
|
+
);
|
|
23022
|
+
server.tool(
|
|
23023
|
+
"okx_get_contracts_taker_volume",
|
|
23024
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u4E3B\u52A8\u4E70\u5356\u91CF\u7EDF\u8BA1\uFF08\u5168\u90E8\u5408\u7EA6\u6C47\u603B\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u6574\u4F53\u5408\u7EA6\u5E02\u573A\u7684\u4E70\u5356\u529B\u91CF\u5BF9\u6BD4\u3001\u5206\u6790\u5168\u5E02\u573A\u8D44\u91D1\u6D41\u5411\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u5408\u7EA6\u4E70\u5356\u91CF, contracts taker volume, \u4E3B\u52A8\u4E70\u5356, \u5168\u90E8\u5408\u7EA6, \u4E70\u5356\u529B\u91CF\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_taker_volume \u770B\u5206\u7C7B\u578B\u4E70\u5356\u91CF \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5224\u65AD\u6574\u4F53\u5E02\u573A\u65B9\u5411",
|
|
23025
|
+
{
|
|
23026
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
23027
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
23028
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
|
|
23029
|
+
},
|
|
23030
|
+
async ({ ccy, begin, end }) => {
|
|
23031
|
+
try {
|
|
23032
|
+
const data = await publicApi.getContractsTakerVolume(ccy, begin, end);
|
|
23033
|
+
const enriched = data.map((item) => ({
|
|
23034
|
+
...item,
|
|
23035
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
23036
|
+
}));
|
|
23037
|
+
return toResult(enriched);
|
|
23038
|
+
} catch (e) {
|
|
23039
|
+
return toError(e);
|
|
23040
|
+
}
|
|
23041
|
+
}
|
|
23042
|
+
);
|
|
23043
|
+
server.tool(
|
|
23044
|
+
"okx_get_contracts_long_short_ratio",
|
|
23045
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5168\u90E8\u5408\u7EA6\u591A\u7A7A\u6301\u4ED3\u6BD4\u4F8B\uFF08\u591A\u7A7A\u6BD4\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u6574\u4F53\u5408\u7EA6\u5E02\u573A\u60C5\u7EEA\uFF08>1\u591A\u5934\u504F\u591A\uFF0C<1\u7A7A\u5934\u504F\u591A\uFF09\u3001\u53D1\u73B0\u6781\u7AEF\u60C5\u7EEA\u7684\u8F6C\u6298\u4FE1\u53F7\n## \u5173\u952E\u8BCD\uFF1A\u5408\u7EA6\u591A\u7A7A\u6BD4, contracts LS ratio, \u5168\u90E8\u5408\u7EA6\u6301\u4ED3, \u5E02\u573A\u60C5\u7EEA, \u591A\u7A7A\u8D26\u6237\u6BD4\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_long_short_ratio \u770B\u5206\u5408\u7EA6\u591A\u7A7A\u6BD4 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5BF9\u6BD4\u5224\u65AD\u60C5\u7EEA\u65B9\u5411",
|
|
23046
|
+
{
|
|
23047
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
23048
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
23049
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
|
|
23050
|
+
},
|
|
23051
|
+
async ({ ccy, begin, end }) => {
|
|
23052
|
+
try {
|
|
23053
|
+
const data = await publicApi.getContractsLongShortRatio(ccy, begin, end);
|
|
23054
|
+
const enriched = data.map((item) => ({
|
|
23055
|
+
...item,
|
|
23056
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
23057
|
+
}));
|
|
23058
|
+
return toResult(enriched);
|
|
23059
|
+
} catch (e) {
|
|
23060
|
+
return toError(e);
|
|
23061
|
+
}
|
|
23062
|
+
}
|
|
23063
|
+
);
|
|
22780
23064
|
}
|
|
22781
23065
|
|
|
22782
23066
|
// src/tools/subaccount.ts
|