@yuants/vendor-okx 0.23.22 → 0.23.24

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.
Files changed (52) hide show
  1. package/dist/account.js +2 -1
  2. package/dist/account.js.map +1 -1
  3. package/dist/api-service.js +29 -0
  4. package/dist/api-service.js.map +1 -0
  5. package/dist/api.js +15 -122
  6. package/dist/api.js.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/interest_rate.js +4 -4
  10. package/dist/interest_rate.js.map +1 -1
  11. package/dist/legacy_index.js +3 -2
  12. package/dist/legacy_index.js.map +1 -1
  13. package/dist/ohlc.js +3 -3
  14. package/dist/ohlc.js.map +1 -1
  15. package/dist/product.js +4 -4
  16. package/dist/product.js.map +1 -1
  17. package/dist/public-api.js +146 -0
  18. package/dist/public-api.js.map +1 -0
  19. package/dist/quote.js +80 -11
  20. package/dist/quote.js.map +1 -1
  21. package/lib/account.d.ts.map +1 -1
  22. package/lib/account.js +2 -1
  23. package/lib/account.js.map +1 -1
  24. package/lib/api-service.d.ts +2 -0
  25. package/lib/api-service.d.ts.map +1 -0
  26. package/lib/api-service.js +31 -0
  27. package/lib/api-service.js.map +1 -0
  28. package/lib/api.d.ts +27 -322
  29. package/lib/api.d.ts.map +1 -1
  30. package/lib/api.js +14 -124
  31. package/lib/api.js.map +1 -1
  32. package/lib/index.d.ts +1 -0
  33. package/lib/index.d.ts.map +1 -1
  34. package/lib/index.js +1 -0
  35. package/lib/index.js.map +1 -1
  36. package/lib/interest_rate.js +4 -4
  37. package/lib/interest_rate.js.map +1 -1
  38. package/lib/legacy_index.js +3 -2
  39. package/lib/legacy_index.js.map +1 -1
  40. package/lib/ohlc.js +3 -3
  41. package/lib/ohlc.js.map +1 -1
  42. package/lib/product.js +4 -4
  43. package/lib/product.js.map +1 -1
  44. package/lib/public-api.d.ts +359 -0
  45. package/lib/public-api.d.ts.map +1 -0
  46. package/lib/public-api.js +161 -0
  47. package/lib/public-api.js.map +1 -0
  48. package/lib/quote.d.ts.map +1 -1
  49. package/lib/quote.js +78 -9
  50. package/lib/quote.js.map +1 -1
  51. package/package.json +14 -14
  52. package/temp/package-deps.json +26 -24
package/lib/api.js CHANGED
@@ -1,12 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.client = exports.OkxClient = void 0;
7
4
  const utils_1 = require("@yuants/utils");
8
- // @ts-ignore
9
- const crypto_js_1 = __importDefault(require("crypto-js"));
10
5
  /**
11
6
  * API v5: https://www.okx.com/docs-v5/#overview
12
7
  */
@@ -14,17 +9,6 @@ class OkxClient {
14
9
  constructor(config) {
15
10
  this.config = config;
16
11
  this.noAuth = true;
17
- /**
18
- * 获取所有产品行情信息
19
- *
20
- * 获取产品行情信息
21
- *
22
- * 限速:20次/2s
23
- * 限速规则:IP
24
- *
25
- * https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-tickers
26
- */
27
- this.getMarketTickers = (params) => this.request('GET', '/api/v5/market/tickers', params);
28
12
  /**
29
13
  * 获取账户资产估值
30
14
  *
@@ -36,17 +20,6 @@ class OkxClient {
36
20
  * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-account-asset-valuation
37
21
  */
38
22
  this.getAssetValuation = (params) => this.request('GET', '/api/v5/asset/asset-valuation', params);
39
- /**
40
- * 获取持仓总量
41
- *
42
- * 查询单个交易产品的市场的持仓总量
43
- *
44
- * 限速:20次/2s
45
- * 限速规则:IP + instrumentID
46
- *
47
- * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-open-interest
48
- */
49
- this.getOpenInterest = (params) => this.request('GET', '/api/v5/public/open-interest', params);
50
23
  /**
51
24
  * 查看账户配置
52
25
  * 查看当前账户的配置信息。
@@ -57,70 +30,6 @@ class OkxClient {
57
30
  * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-account-configuration
58
31
  */
59
32
  this.getAccountConfig = () => this.request('GET', '/api/v5/account/config');
60
- /**
61
- * 获取市场借币杠杆利率和借币限额
62
- *
63
- * 限速:2次/2s
64
- * 限速规则:IP
65
- *
66
- * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-interest-rate-and-loan-quota
67
- */
68
- this.getInterestRateLoanQuota = () => this.request('GET', '/api/v5/public/interest-rate-loan-quota');
69
- /**
70
- * 获取交易产品基础信息
71
- *
72
- * 获取所有可交易产品的信息列表。
73
- *
74
- * 限速:20次/2s
75
- * 限速规则:IP +instType
76
- *
77
- * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-instruments
78
- */
79
- this.getInstruments = (params) => this.request('GET', '/api/v5/public/instruments', params);
80
- /**
81
- * 获取永续合约当前资金费率
82
- * 获取当前资金费率
83
- *
84
- * 限速:20次/2s
85
- * 限速规则:IP +instrumentID
86
- *
87
- * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate
88
- */
89
- this.getFundingRate = (params) => this.request('GET', '/api/v5/public/funding-rate', params);
90
- /**
91
- * 获取永续合约历史资金费率
92
- *
93
- * 获取最近3个月的历史资金费率
94
- *
95
- * 限速:10次/2s
96
- * 限速规则:IP +instrumentID
97
- *
98
- * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate-history
99
- */
100
- this.getFundingRateHistory = (params) => this.request('GET', '/api/v5/public/funding-rate-history', params);
101
- /**
102
- * 获取标记价格历史K线数据
103
- *
104
- * 获取最近几年的标记价格K线数据
105
- *
106
- * 限速:10次/2s
107
- * 限速规则:IP
108
- *
109
- * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-mark-price-candlesticks-history
110
- */
111
- this.getHistoryMarkPriceCandles = (params) => this.request('GET', '/api/v5/market/history-mark-price-candles', params);
112
- /**
113
- * GET / 获取交易产品历史K线数据
114
- *
115
- * 获取最近几年的历史k线数据(1s k线支持查询最近3个月的数据)
116
- *
117
- * 限速:20次/2s
118
- *
119
- * 限速规则:IP
120
- *
121
- * 期权不支持 1s K线, 其他业务线 (币币, 杠杆, 交割和永续)支持
122
- */
123
- this.getHistoryCandles = (params) => this.request('GET', '/api/v5/market/history-candles', params);
124
33
  /**
125
34
  * 获取余币宝余额
126
35
  *
@@ -142,19 +51,6 @@ class OkxClient {
142
51
  * https://www.okx.com/docs-v5/zh/#financial-product-savings-post-savings-purchase-redemption
143
52
  */
144
53
  this.postFinanceSavingsPurchaseRedempt = (params) => this.request('POST', '/api/v5/finance/savings/purchase-redempt', params);
145
- /**
146
- * GET / 获取市场借贷历史(公共)
147
- *
148
- * 公共接口无须鉴权
149
- *
150
- * 返回2021年12月14日后的记录
151
- *
152
- * 限速:6次/s
153
- * 限速规则:IP
154
- *
155
- * https://www.okx.com/docs-v5/zh/#financial-product-savings-get-public-borrow-history-public
156
- */
157
- this.getLendingRateHistory = (params) => this.request('GET', '/api/v5/finance/savings/lending-rate-history', params);
158
54
  /**
159
55
  * 提币
160
56
  *
@@ -264,6 +160,17 @@ class OkxClient {
264
160
  * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-positions
265
161
  */
266
162
  this.getAccountPositions = (params) => this.request('GET', '/api/v5/account/positions', params);
163
+ /**
164
+ * 获取最大可下单数量
165
+ *
166
+ * 获取最大可买卖/开仓数量,可对应下单时的 sz 字段
167
+ *
168
+ * 限速:20次/2s
169
+ * 限速规则:UserID
170
+ *
171
+ * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-maximum-tradable-size
172
+ */
173
+ this.getAccountMaxSize = (params) => this.request('GET', '/api/v5/account/max-size', params);
267
174
  /**
268
175
  * 赚币
269
176
  * GET / 查看项目
@@ -393,16 +300,6 @@ class OkxClient {
393
300
  * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-currencies
394
301
  */
395
302
  this.getAssetCurrencies = (params) => this.request('GET', '/api/v5/asset/currencies', params);
396
- /**
397
- * 获取指数行情数据
398
- *
399
- *
400
- * 限速:20 次/2s
401
- *
402
- *
403
- * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-index-tickers
404
- */
405
- this.getMarketIndexTicker = (params) => this.request('GET', '/api/v5/market/index-tickers', params);
406
303
  /**
407
304
  * GET / 借贷信息
408
305
  * 限速:5次/2s
@@ -463,15 +360,6 @@ class OkxClient {
463
360
  * https://www.okx.com/docs-v5/zh/#order-book-trading-grid-trading-get-grid-algo-order-positions
464
361
  */
465
362
  this.getGridPositions = (param) => this.request('GET', '/api/v5/tradingBot/grid/positions', param);
466
- /**
467
- * GET / 获取产品深度
468
- * 限速:40次/2s
469
- * 限速规则:IP
470
- * HTTP请求
471
- *
472
- * https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-order-book
473
- */
474
- this.getMarketBooks = (param) => this.request('GET', '/api/v5/market/books', param);
475
363
  if (config.auth.public_key && config.auth.secret_key && config.auth.passphrase) {
476
364
  this.noAuth = false;
477
365
  }
@@ -493,7 +381,9 @@ class OkxClient {
493
381
  const secret_key = this.config.auth.secret_key;
494
382
  const body = method === 'GET' ? '' : JSON.stringify(params);
495
383
  const signData = timestamp + method + url.pathname + url.search + body;
496
- const str = crypto_js_1.default.enc.Base64.stringify(crypto_js_1.default.HmacSHA256(signData, secret_key));
384
+ const str = (0, utils_1.encodeBase64)(await (0, utils_1.HmacSHA256)(
385
+ //
386
+ new TextEncoder().encode(signData), new TextEncoder().encode(secret_key)));
497
387
  const headers = {
498
388
  'Content-Type': 'application/json',
499
389
  'OK-ACCESS-KEY': this.config.auth.public_key,
package/lib/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath, formatTime } from '@yuants/utils';\n// @ts-ignore\nimport CryptoJS from 'crypto-js';\n\n/**\n * API v5: https://www.okx.com/docs-v5/#overview\n */\nexport class OkxClient {\n noAuth = true;\n constructor(\n public config: {\n auth: {\n public_key: string;\n secret_key: string;\n passphrase: string;\n };\n },\n ) {\n if (config.auth.public_key && config.auth.secret_key && config.auth.passphrase) {\n this.noAuth = false;\n }\n }\n\n async request(method: string, path: string, params?: any) {\n const url = new URL('https://www.okx.com');\n url.pathname = path;\n if (method === 'GET') {\n for (const key in params) {\n url.searchParams.set(key, params[key]);\n }\n }\n if (this.noAuth) {\n console.info(formatTime(Date.now()), method, url.href);\n const res = await fetch(url.href, { method });\n return res.json();\n }\n const timestamp = formatTime(Date.now(), 'UTC').replace(' ', 'T');\n const secret_key = this.config.auth.secret_key;\n const body = method === 'GET' ? '' : JSON.stringify(params);\n const signData = timestamp + method + url.pathname + url.search + body;\n const str = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n\n const headers = {\n 'Content-Type': 'application/json',\n 'OK-ACCESS-KEY': this.config.auth.public_key!,\n 'OK-ACCESS-SIGN': str,\n 'OK-ACCESS-TIMESTAMP': timestamp,\n 'OK-ACCESS-PASSPHRASE': this.config.auth.passphrase,\n };\n\n console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body, signData);\n const res = await fetch(url.href, {\n method,\n headers,\n body: body || undefined,\n });\n return res.json();\n }\n\n /**\n * 获取所有产品行情信息\n *\n * 获取产品行情信息\n *\n * 限速:20次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-tickers\n */\n getMarketTickers = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n instType: string;\n instId: string;\n last: string;\n lastSz: string;\n askPx: string;\n askSz: string;\n bidPx: string;\n bidSz: string;\n open24h: string;\n high24h: string;\n low24h: string;\n volCcy24h: string;\n vol24h: string;\n sodUtc0: string;\n sodUtc8: string;\n ts: string;\n }>;\n }> => this.request('GET', '/api/v5/market/tickers', params);\n\n /**\n * 获取账户资产估值\n *\n * 查看账户资产估值\n *\n * 限速:1次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-account-asset-valuation\n */\n getAssetValuation = (params?: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n details: {\n classic: string;\n earn: string;\n funding: string;\n trading: string;\n };\n totalBal: string;\n ts: string;\n }>;\n }> => this.request('GET', '/api/v5/asset/asset-valuation', params);\n\n /**\n * 获取持仓总量\n *\n * 查询单个交易产品的市场的持仓总量\n *\n * 限速:20次/2s\n * 限速规则:IP + instrumentID\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-open-interest\n */\n getOpenInterest = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n instId: string;\n oi: string;\n oiCcy: string;\n ts: string;\n }[];\n }> => this.request('GET', '/api/v5/public/open-interest', params);\n\n /**\n * 查看账户配置\n * 查看当前账户的配置信息。\n *\n * 限速:5次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-account-configuration\n */\n getAccountConfig = (): Promise<{\n code: string;\n data: Array<{\n acctLv: string;\n autoLoan: boolean;\n ctIsoMode: string;\n greeksType: string;\n level: string;\n levelTmp: string;\n mgnIsoMode: string;\n posMode: string;\n spotOffsetType: string;\n uid: string;\n label: string;\n roleType: string;\n traderInsts: any[];\n spotRoleType: string;\n spotTraderInsts: any[];\n opAuth: string;\n kycLv: string;\n ip: string;\n perm: string;\n mainUid: string;\n }>;\n msg: string;\n }> => this.request('GET', '/api/v5/account/config');\n\n /**\n * 获取市场借币杠杆利率和借币限额\n *\n * 限速:2次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-interest-rate-and-loan-quota\n */\n getInterestRateLoanQuota = (): Promise<{\n code: string;\n data?: Array<{\n basic: Array<{\n ccy: string;\n rate: string;\n quota: string;\n }>;\n vip: Array<{\n loanQuotaCoef: string;\n level: string;\n }>;\n regular: Array<{\n loanQuotaCoef: string;\n level: string;\n }>;\n }>;\n }> => this.request('GET', '/api/v5/public/interest-rate-loan-quota');\n\n /**\n * 获取交易产品基础信息\n *\n * 获取所有可交易产品的信息列表。\n *\n * 限速:20次/2s\n * 限速规则:IP +instType\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-instruments\n */\n getInstruments = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n alias: string;\n baseCcy: string;\n category: string;\n ctMult: string;\n ctType: string;\n ctVal: string;\n ctValCcy: string;\n expTime: string;\n instFamily: string;\n instId: string;\n instType: string;\n lever: string;\n listTime: string;\n lotSz: string;\n maxIcebergSz: string;\n maxLmtAmt: string;\n maxLmtSz: string;\n maxMktAmt: string;\n maxMktSz: string;\n maxStopSz: string;\n maxTriggerSz: string;\n maxTwapSz: string;\n minSz: string;\n optType: string;\n quoteCcy: string;\n settleCcy: string;\n state: string;\n stk: string;\n tickSz: string;\n uly: string;\n }>;\n }> => this.request('GET', '/api/v5/public/instruments', params);\n\n /**\n * 获取永续合约当前资金费率\n * 获取当前资金费率\n *\n * 限速:20次/2s\n * 限速规则:IP +instrumentID\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate\n */\n getFundingRate = (params: {\n instId: string;\n }): Promise<{\n code: string;\n data: Array<{\n fundingRate: string;\n fundingTime: string;\n instId: string;\n instType: string;\n method: string;\n maxFundingRate: string;\n minFundingRate: string;\n nextFundingRate: string;\n nextFundingTime: string;\n premium: string;\n settFundingRate: string;\n settState: string;\n ts: string;\n }>;\n msg: string;\n }> => this.request('GET', '/api/v5/public/funding-rate', params);\n\n /**\n * 获取永续合约历史资金费率\n *\n * 获取最近3个月的历史资金费率\n *\n * 限速:10次/2s\n * 限速规则:IP +instrumentID\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate-history\n */\n getFundingRateHistory = (params: {\n instId: string;\n before?: string;\n after?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n fundingRate: string;\n fundingTime: string;\n instId: string;\n instType: string;\n method: string;\n realizedRate: string;\n }>;\n }> => this.request('GET', '/api/v5/public/funding-rate-history', params);\n\n /**\n * 获取标记价格历史K线数据\n *\n * 获取最近几年的标记价格K线数据\n *\n * 限速:10次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-mark-price-candlesticks-history\n */\n getHistoryMarkPriceCandles = (params: {\n instId: string;\n bar?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<[ts: string, o: string, h: string, l: string, c: string, confirm: string]>;\n }> => this.request('GET', '/api/v5/market/history-mark-price-candles', params);\n\n /**\n * GET / 获取交易产品历史K线数据\n *\n * 获取最近几年的历史k线数据(1s k线支持查询最近3个月的数据)\n *\n * 限速:20次/2s\n *\n * 限速规则:IP\n *\n * 期权不支持 1s K线, 其他业务线 (币币, 杠杆, 交割和永续)支持\n */\n getHistoryCandles = (params: {\n instId: string;\n bar?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<\n [\n ts: string,\n o: string,\n h: string,\n l: string,\n c: string,\n vol: string,\n volCcy: string,\n volCcyQuote: string,\n confirm: string,\n ]\n >;\n }> => this.request('GET', '/api/v5/market/history-candles', params);\n\n /**\n * 获取余币宝余额\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-get-saving-balance\n */\n getFinanceSavingsBalance = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n earnings: string;\n redemptAmt: string;\n rate: string;\n ccy: string;\n amt: string;\n loanAmt: string;\n pendingAmt: string;\n }[];\n }> => this.request('GET', '/api/v5/finance/savings/balance', params);\n\n /**\n * 余币宝申购/赎回\n *\n * 仅资金账户中的资产支持余币宝申购。\n *\n * 限速:6次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-post-savings-purchase-redemption\n */\n postFinanceSavingsPurchaseRedempt = (params: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n }[];\n }> => this.request('POST', '/api/v5/finance/savings/purchase-redempt', params);\n\n /**\n * GET / 获取市场借贷历史(公共)\n *\n * 公共接口无须鉴权\n *\n * 返回2021年12月14日后的记录\n *\n * 限速:6次/s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-get-public-borrow-history-public\n */\n getLendingRateHistory = (params: {\n ccy?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n ccy: string;\n amt: string;\n rate: string;\n ts: string;\n }>;\n }> => this.request('GET', '/api/v5/finance/savings/lending-rate-history', params);\n\n /**\n * 提币\n *\n * 用户提币。普通子账户不支持提币。\n *\n * API只能提币到免认证地址/账户上,通过 WEB/APP 可以设置免认证地址。\n *\n * 关于标签:某些币种如XRP充币时同时需要一个充值地址和标签(又名memo/payment_id),标签是一种保证您的充币地址唯一性的数字串,与充币地址成对出现并一一对应。请您务必遵守正确的充值步骤,在提币时输入完整信息,否则将面临丢失币的风险!\n * 对于有标签的币种,如果是OKX用户间的提币,请走内部转账不要走链上提币。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-withdrawal\n */\n postAssetWithdrawal = (params: {\n amt: string;\n fee: string;\n dest: string;\n ccy: string;\n chain?: string;\n toAddr: string;\n clientId?: string;\n rcvrInfo?: {\n walletType: string;\n exchId: string;\n rcvrFirstName: string;\n rcvrLastName: string;\n };\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n amt: string;\n wdId: string;\n ccy: string;\n clientId: string;\n chain: string;\n }>;\n }> => this.request('POST', '/api/v5/asset/withdrawal', params);\n\n /**\n * 获取充值地址信息\n *\n * 获取各个币种的充值地址,包括曾使用过的老地址。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-address\n */\n getAssetDepositAddress = (params: {\n ccy: string;\n }): Promise<{\n code: string;\n data: {\n chain: string;\n ctAddr: string;\n ccy: string;\n to: string;\n addr: string;\n verifiedName: string;\n selected: boolean;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/asset/deposit-address', params);\n\n /**\n * 获取提币记录\n *\n * 根据币种,提币状态,时间范围获取提币记录,按照时间倒序排列,默认返回100条数据。\n * 支持Websocket订阅,参考 提币信息频道。\n *\n * 限速:6 次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-withdrawal-history\n */\n getAssetWithdrawalHistory = (params: {\n ccy?: string;\n wdId?: string;\n clientId?: string;\n txId?: string;\n type?: string;\n state?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n chain: string;\n fee: string;\n feeCcy: string;\n ccy: string;\n clientId: string;\n amt: string;\n txId: string;\n from: string;\n areaCodeFrom: string;\n to: string;\n areaCodeTo: string;\n state: string;\n ts: string;\n nonTradableAsset: boolean;\n wdId: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/withdrawal-history', params);\n\n /**\n * 获取充值记录\n *\n * 根据币种,充值状态,时间范围获取充值记录,按照时间倒序排列,默认返回 100 条数据。\n * 支持Websocket订阅,参考 充值信息频道。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-history\n */\n getAssetDepositHistory = (params: {\n ccy?: string;\n depId?: string;\n state?: string;\n fromWdId?: string;\n txId?: string;\n type?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n actualDepBlkConfirm: string;\n amt: string;\n areaCodeFrom: string;\n ccy: string;\n chain: string;\n depId: string;\n from: string;\n fromWdId: string;\n state: string;\n to: string;\n ts: string;\n txId: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/deposit-history', params);\n\n /**\n * 获取资金账户余额\n *\n * 获取资金账户所有资产列表,查询各币种的余额、冻结和可用等信息。\n *\n * 只返回余额大于0的币资产信息。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-balance\n */\n getAssetBalances = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n availBal: string;\n bal: string;\n ccy: string;\n frozenBal: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/balances', params);\n\n /**\n * 资金划转\n *\n * 调用时,API Key 需要有交易权限。\n *\n * 支持母账户的资金账户划转到交易账户,母账户到子账户的资金账户和交易账户划转。\n *\n * 子账户默认可转出至母账户,划转到同一母账户下的其他子账户,需要先调用 设置子账户主动转出权限 接口进行授权。\n *\n * 请求失败不代表划转失败,建议以获取资金划转状态接口返回的状态为准。\n *\n * 限速:2 次/s\n * 限速规则:UserID + Currency\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-funds-transfer\n */\n postAssetTransfer = (params: {\n ccy: string;\n type?: string;\n amt: string;\n from: string;\n to: string;\n subAcct?: string;\n loanTrans?: boolean;\n omitPosRisk?: string;\n clientId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n transId: string;\n ccy: string;\n clientId: string;\n from: string;\n amt: string;\n to: string;\n }[];\n }> => this.request('POST', '/api/v5/asset/transfer', params);\n\n /**\n * 查看账户余额\n *\n * 获取交易账户中资金余额信息。\n *\n * 免息额度和折算率都是公共数据,不在账户接口内展示\n *\n * 限速:10次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-balance\n */\n getAccountBalance = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n data: {\n adjEq: string;\n borrowFroz: string;\n details: {\n availBal: string;\n availEq: string;\n borrowFroz: string;\n cashBal: string;\n ccy: string;\n crossLiab: string;\n disEq: string;\n eq: string;\n eqUsd: string;\n fixedBal: string;\n frozenBal: string;\n imr: string;\n interest: string;\n isoEq: string;\n isoLiab: string;\n isoUpl: string;\n liab: string;\n maxLoan: string;\n mgnRatio: string;\n mmr: string;\n notionalLever: string;\n ordFrozen: string;\n rewardBal: string;\n spotInUseAmt: string;\n spotIsoBal: string;\n stgyEq: string;\n twap: string;\n uTime: string;\n upl: string;\n uplLiab: string;\n openAvgPx: string;\n spotUpl: string;\n accAvgPx: string;\n totalPnl: string;\n spotBal: string;\n }[];\n imr: string;\n isoEq: string;\n mgnRatio: string;\n mmr: string;\n notionalUsd: string;\n ordFroz: string;\n totalEq: string;\n uTime: string;\n upl: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/account/balance', params);\n\n /**\n * 查看持仓信息\n *\n * 获取该账户下拥有实际持仓的信息。账户为买卖模式会显示净持仓(net),账户为开平仓模式下会分别返回开多(long)或开空(short)的仓位。按照仓位创建时间倒序排列。\n *\n * 如果该 instId 拥有过仓位且当前持仓量为0,传 instId 时,如果当前存在有效的posId,会返回仓位信息,如果当前不存在有效的 posId 时,不会返回仓位信息;不传 instId 时,仓位信息不返回。\n *\n * 逐仓交易设置中,如果设置为自主划转模式,逐仓转入保证金后,会生成一个持仓量为0的仓位\n *\n * 限速:10次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-positions\n */\n getAccountPositions = (params: {\n instType?: string;\n instId?: string;\n posId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n adl: string;\n availPos: string;\n avgPx: string;\n cTime: string;\n ccy: string;\n deltaBS: string;\n deltaPA: string;\n gammaBS: string;\n gammaPA: string;\n imr: string;\n instId: string;\n instType: string;\n interest: string;\n idxPx: string;\n last: string;\n usdPx: string;\n bePx: string;\n lever: string;\n liab: string;\n liabCcy: string;\n liqPx: string;\n markPx: string;\n margin: string;\n mgnMode: string;\n mgnRatio: string;\n mmr: string;\n notionalUsd: string;\n optVal: string;\n pTime: string;\n pos: string;\n posCcy: string;\n posId: string;\n posSide: string;\n spotInUseAmt: string;\n spotInUseCcy: string;\n thetaBS: string;\n thetaPA: string;\n tradeId: string;\n bizRefId: string;\n bizRefType: string;\n quoteBal: string;\n baseBal: string;\n baseBorrowed: string;\n baseInterest: string;\n quoteBorrowed: string;\n quoteInterest: string;\n uTime: string;\n upl: string;\n uplLastPx: string;\n uplRatio: string;\n uplRatioLastPx: string;\n vegaBS: string;\n vegaPA: string;\n realizedPnl: string;\n pnl: string;\n fee: string;\n fundingFee: string;\n liqPenalty: string;\n closeOrderAlgo: {\n algoId: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n closeFraction: string;\n }[];\n }[];\n }> => this.request('GET', '/api/v5/account/positions', params);\n\n /**\n * 赚币\n * GET / 查看项目\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\n getFinanceStakingDeFiOffers = (params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n productId: string;\n protocol: string;\n protocolType: string;\n term: string;\n apy: string;\n earlyRedeem: boolean;\n investData: {\n ccy: string;\n bal: string;\n minAmt: string;\n maxAmt: string;\n }[];\n earningData: {\n ccy: string;\n earningType: string;\n }[];\n state: string;\n earningCcy?: string[];\n }[];\n }> => this.request('GET', '/api/v5/finance/staking-defi/offers', params);\n\n /**\n * 赚币\n * GET / 查看活跃订单\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\n getFinanceStakingDeFiOrdersActive = (params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n state?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ordId: string;\n state: string;\n ccy: string;\n protocol: string;\n protocolType: string;\n term: string;\n apy: string;\n investData: {\n ccy: string;\n amt: string;\n minAmt?: string;\n maxAmt?: string;\n }[];\n earningData: {\n ccy: string;\n earningType: string;\n earnings: string;\n }[];\n purchasedTime: string;\n estSettlementTime: string;\n cancelRedemptionDeadline: string;\n tag: string;\n earningCcy?: string[];\n }[];\n }> => this.request('GET', '/api/v5/finance/staking-defi/orders-active', params);\n\n /**\n * 下单\n *\n * 只有当您的账户有足够的资金才能下单。\n *\n * 限速:60次/2s\n *\n * 跟单交易带单产品的限速:4次/2s\n *\n * 限速规则(期权以外):UserID + Instrument ID\n *\n * 限速规则(只限期权):UserID + Instrument Family\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-place-order\n */\n postTradeOrder = (params: {\n instId: string;\n tdMode: string;\n ccy?: string;\n clOrdId?: string;\n tag?: string;\n side: string;\n posSide?: string;\n ordType: string;\n sz: string;\n px?: string;\n pxUsd?: string;\n pxVol?: string;\n reduceOnly?: string;\n tgtCcy?: string;\n banAmend?: string;\n quickMgnType?: string;\n stpId?: string;\n stpMode?: string;\n attachAlgoOrds?: Array<{\n attachAlgoClOrdId?: string;\n tpTriggerPx?: string;\n tpOrdPx?: string;\n tpOrdKind?: string;\n slTriggerPx?: string;\n slOrdPx?: string;\n tpTriggerPxType?: string;\n slTriggerPxType?: string;\n sz?: string;\n amendPxOnTriggerType?: string;\n }>;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n tag: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/order', params);\n\n /**\n * 修改订单\n *\n * 修改当前未成交的挂单\n *\n * 限速:60次/2s\n *\n * 跟单交易带单员带单产品的限速:4个/2s\n *\n * 限速规则:User ID + Instrument ID\n *\n * 权限:交易\n *\n * 该接口限速同时受到 子账户限速 及 基于成交比率的子账户限速 限速规则的影响。\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-amend-order\n */\n postTradeAmendOrder = (params: {\n instId: string;\n cxIOnFail?: boolean;\n ordId?: string;\n clOrdId?: string;\n reqId?: string;\n newSz?: string;\n newPx?: string;\n newPxUsd?: string;\n newPxVol?: string;\n attachAlgoOrds?: Array<{\n attachAlgoId?: string;\n attachAlgoClOrdId?: string;\n newTpTriggerPx?: string;\n newTpOrdPx?: string;\n newTpOrdKind?: string;\n newSlTriggerPx?: string;\n newSlOrdPx?: string;\n newTpTriggerPxType?: string;\n newSlTriggerPxType?: string;\n sz?: string;\n amendPxOnTriggerType?: string;\n }>;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n ts: string;\n reqId: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/amend-order', params);\n\n /**\n * 获取未成交订单列表\n *\n * 获取当前账户下所有未成交订单信息\n *\n * 限速:60次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-get-order-list\n */\n getTradeOrdersPending = (params: {\n instType?: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n ordType?: string;\n state?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n accFillSz: string;\n avgPx: string;\n cTime: string;\n category: string;\n ccy: string;\n clOrdId: string;\n fee: string;\n feeCcy: string;\n fillPx: string;\n fillSz: string;\n fillTime: string;\n instId: string;\n instType: string;\n lever: string;\n ordId: string;\n ordType: string;\n pnl: string;\n posSide: string;\n px: string;\n pxUsd: string;\n pxVol: string;\n pxType: string;\n rebate: string;\n rebateCcy: string;\n side: string;\n attachAlgoClOrdId: string;\n slOrdPx: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n attachAlgoOrds: any[];\n source: string;\n state: string;\n stpId: string;\n stpMode: string;\n sz: string;\n tag: string;\n tdMode: string;\n tgtCcy: string;\n tpOrdPx: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n tradeId: string;\n reduceOnly: string;\n quickMgnType: string;\n algoClOrdId: string;\n algoId: string;\n isTpLimit: string;\n uTime: string;\n }[];\n }> => this.request('GET', '/api/v5/trade/orders-pending', params);\n\n /**\n * 获取历史订单记录(近七天)\n *\n * 获取最近7天挂单,且完成的订单数据,包括7天以前挂单,但近7天才成交的订单数据。按照订单创建时间倒序排序。\n *\n * 已经撤销的未成交单 只保留2小时\n * 限速:40次/2s\n * 限速规则:User ID\n */\n getTradeOrdersHistory = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n ordType?: string;\n state?: string;\n category?: string;\n after?: string;\n before?: string;\n begin?: string;\n end?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n instType: string;\n instId: string;\n tgtCcy: string;\n ccy: string;\n ordId: string;\n clOrdId: string;\n tag: string;\n px: string;\n pxUsd: string;\n pxVol: string;\n pxType: string;\n sz: string;\n ordType: string;\n side: string;\n posSide: string;\n tdMode: string;\n accFillSz: string;\n fillPx: string;\n tradeId: string;\n fillSz: string;\n fillTime: string;\n avgPx: string;\n state: string;\n lever: string;\n attachAlgoClOrdId: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n tpOrdPx: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n slOrdPx: string;\n attachAlgoOrds: any[];\n linkedAlgoOrd: any[];\n stpId: string;\n stpMode: string;\n feeCcy: string;\n fee: string;\n rebateCcy: string;\n source: string;\n rebate: string;\n pnl: string;\n category: string;\n reduceOnly: string;\n cancelSource: string;\n cancelSourceReason: string;\n algoClOrdId: string;\n algoId: string;\n isTpLimit: string;\n uTime: string;\n cTime: string;\n tradeQuoteCcy: string;\n }>;\n }> => this.request('GET', '/api/v5/trade/orders-history', params);\n\n /**\n * 撤单\n *\n * 撤销之前下的未完成订单。\n *\n * 限速:60次/2s\n *\n * 限速规则(期权以外):UserID + Instrument ID\n *\n * 限速规则(只限期权):UserID + Instrument Family\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-cancel-order\n */\n postTradeCancelOrder = (params: {\n instId: string;\n ordId?: string;\n clOrdId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/cancel-order', params);\n\n /**\n * 查看子账户列表\n *\n * 仅适用于母账户。\n *\n * 限速:2次/2s\n *\n * 限速规则:UserID\n */\n getSubAccountList = (params?: {\n enable?: string;\n subAct?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n data: {\n type: string;\n enable: string;\n subAcct: string;\n uid: string;\n label: string;\n mobile: string;\n gAuth: boolean;\n frozenFunc: string[];\n canTransOut: boolean;\n ts: string;\n }[];\n code: string;\n msg: string;\n }> => this.request('GET', '/api/v5/users/subaccount/list', params);\n\n /**\n * 设置子账户主动转出权限\n *\n * 设置子账户转出权限(仅适用于母账户),默认可转出至母账户。\n *\n * 限速:1次/s\n *\n * 限速规则:UserID\n */\n postSetSubAccountTransferOut = (params: {\n subAcct: string;\n canTransOut: boolean;\n }): Promise<{\n subAcct: string;\n canTransOut: boolean;\n }> => this.request('POST', '/api/v5/users/subaccount/set-transfer-out', params);\n\n /**\n * 获取资金划转状态\n *\n * 获取最近2个星期内的资金划转状态数据\n *\n * 限速:10 次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-funds-transfer-state\n */\n getAssetTransferState = (params: {\n transId?: string;\n clientId?: string;\n type?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n transId: string;\n clientId: string;\n ccy: string;\n amt: string;\n type: string;\n from: string;\n to: string;\n subAcct: string;\n // success | pending | failed\n state: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/transfer-state', params);\n\n /**\n * 获取币种列表\n *\n * 获取当前用户KYC实体支持的币种列表。\n *\n * 限速:6 次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-currencies\n */\n getAssetCurrencies = (params?: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n name: string;\n chain: string;\n canWd: boolean;\n canInternal: boolean;\n minWd: string;\n maxWd: string;\n wdTickSz: string;\n wdQuota: string;\n usedWdQuota: string;\n minFee: string;\n maxFee: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/currencies', params);\n\n /**\n * 获取指数行情数据\n *\n *\n * 限速:20 次/2s\n *\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-index-tickers\n */\n getMarketIndexTicker = (params?: {\n quoteCcy?: string;\n instId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instId: string;\n idxPx: string;\n high24h: string;\n sodUtc0: string;\n open24h: string;\n low24h: string;\n sodUtc8: string;\n ts: string;\n }[];\n }> => this.request('GET', '/api/v5/market/index-tickers', params);\n\n /**\n * GET / 借贷信息\n * 限速:5次/2s\n * 限速规则:User ID\n * 权限:读取\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-flexible-loan-get-loan-info\n */\n getFlexibleLoanInfo = (): Promise<{\n code: string;\n data: {\n collateralData: {\n amt: string;\n ccy: string;\n }[];\n collateralNotionalUsd: string;\n curLTV: string;\n liqLTV: string;\n loanData: {\n amt: string;\n ccy: string;\n }[];\n loanNotionalUsd: string;\n marginCallLTV: string;\n riskWarningData: {\n instId: string;\n liqPx: string;\n };\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/finance/flexible-loan/loan-info');\n\n /**\n * 账单流水查询(近七天)\n *\n *\n * 限速:5次/s\n *\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-7-days\n */\n getAccountBills = (params?: {\n instType?: string;\n instId?: string;\n ccy?: string;\n mgnMode?: 'isolated' | 'cross';\n ctType?: 'linear' | 'inverse';\n type?: AccountBillType;\n subType?: string;\n after?: string; //请求此id之前(更旧的数据)的分页内容,传的值为对应接口的billId\n before?: string; //请求此id之后(更新的数据)的分页内容,传的值为对应接口的billId\n begin?: string; //筛选的开始时间戳 ts,Unix 时间戳为毫秒数格式,如 1597026383085\n end?: string;\n limit?: string; //分页返回的结果集数量,最大为100,不填默认返回100条\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n billId: string;\n type: string;\n subType: string;\n ts: string;\n balChg: string;\n posBalChg: string;\n bal: string;\n posBal: string;\n sz: string;\n px: string;\n ccy: string;\n pnl: string;\n fee: string;\n mgnMode: 'isolated' | 'cross' | 'cash' | '';\n instId: string;\n ordId: string;\n execType: string;\n from: string;\n to: string;\n notes: string;\n interest: string;\n tag: string;\n fillTime: string;\n tradeId: string;\n clOrdId: string;\n fillIdxPx: string;\n fillMarkPx: string;\n fillPxVol: string;\n fillPxUsd: string;\n fillMarkVol: string;\n fillFwdPx: string;\n }[];\n }> => this.request('GET', '/api/v5/account/bills', params);\n\n /**\n * 账单流水查询(近三个月)\n *\n *\n * 限速:5次/2s\n *\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-3-months\n */\n getAccountBillsArchive = (params?: {\n instType?: string;\n instId?: string;\n ccy?: string;\n mgnMode?: 'isolated' | 'cross';\n ctType?: 'linear' | 'inverse';\n type?: AccountBillType;\n subType?: string;\n after?: string; //请求此id之前(更旧的数据)的分页内容,传的值为对应接口的billId\n before?: string; //请求此id之后(更新的数据)的分页内容,传的值为对应接口的billId\n begin?: string; //筛选的开始时间戳 ts,Unix 时间戳为毫秒数格式,如 1597026383085\n end?: string;\n limit?: string; //分页返回的结果集数量,最大为100,不填默认返回100条\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n billId: string;\n type: string;\n subType: string;\n ts: string;\n balChg: string;\n posBalChg: string;\n bal: string;\n posBal: string;\n sz: string;\n px: string;\n ccy: string;\n pnl: string;\n fee: string;\n mgnMode: 'isolated' | 'cross' | 'cash' | '';\n instId: string;\n ordId: string;\n execType: string;\n from: string;\n to: string;\n notes: string;\n interest: string;\n tag: string;\n fillTime: string;\n tradeId: string;\n clOrdId: string;\n fillIdxPx: string;\n fillMarkPx: string;\n fillPxVol: string;\n fillPxUsd: string;\n fillMarkVol: string;\n fillFwdPx: string;\n }[];\n }> => this.request('GET', '/api/v5/account/bills-archive', params);\n\n /**\n * POST / 网格策略委托下单\n * 限速:20次/2s\n * 限速规则:User ID + Instrument ID\n * 权限:交易\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/?language=shell#order-book-trading-grid-trading-post-place-grid-algo-order\n */\n postGridAlgoOrder = (\n params: {\n instId: string;\n algoOrdType: string;\n maxPx: string;\n minPx: string;\n gridNum: string;\n runType?: string;\n tpTriggerPx?: string;\n slTriggerPx?: string;\n algoClOrdId?: string;\n tag?: string;\n profitSharingRatio?: string;\n triggerParams?: {\n triggerAction: string;\n triggerStrategy: string;\n timeframe?: string;\n thold?: string;\n triggerCond?: string;\n timePeriod?: string;\n delaySeconds?: string;\n triggerPx?: string;\n stopType?: string;\n }[];\n } & Grid,\n ): Promise<{\n code: string;\n msg: string;\n data: {\n algoId: string;\n algoClOrdId: string;\n sCode: string;\n sMsg: string;\n tag: string;\n }[];\n }> => this.request('POST', '/api/v5/tradingBot/grid/order-algo', params);\n\n /**\n * GET / 获取未完成网格策略委托单列表\n * 限速:20次/2s\n * 限速规则:User ID\n * 权限:读取\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-grid-trading-get-grid-algo-order-list\n */\n getGridOrdersAlgoPending = (param: {\n algoOrdType: 'grid' | 'contract_grid';\n algoId?: string;\n instId?: string;\n instType?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n data: {\n algoId: string;\n algoClOrdId: string;\n instType: string;\n instId: string;\n cTime: string;\n uTime: string;\n algoOrdType: 'grid' | 'contract_grid';\n state: 'starting' | 'running' | 'stopping' | 'pending_signal' | 'no_close_position';\n rebateTrans: {\n rebate: string;\n rebateCcy: string;\n }[];\n triggerParams: {\n triggerAction: string;\n triggerStrategy: string;\n delaySeconds: string;\n triggerTime: string;\n triggerType: string;\n timeframe: string;\n thold: string;\n triggerCond: 'cross_up' | 'cross_down' | 'above' | 'below' | 'cross';\n timePeriod: string;\n triggerPx: string;\n stopType: string;\n }[];\n maxPx: string;\n minPx: string;\n gridNum: string;\n runType: '1' | '2';\n tpTriggerPx: string;\n slTriggerPx: string;\n arbitrageNum: string;\n totalPnl: string;\n pnlRatio: string;\n investment: string;\n gridProfit: string;\n floatProfit: string;\n cancelType: '0' | '1' | '2' | '3' | '4' | '5' | '6';\n stopType: '1' | '2';\n quoteSz: string;\n baseSz: SpotGrid;\n direction: string;\n basePos: string;\n sz: string;\n lever: string;\n actualLever: string;\n liqPx: string;\n uly: string;\n instFamily: string;\n ordFrozen: string;\n availEq: string;\n tag: string;\n profitSharingRatio: string;\n copyType: string;\n fee: string;\n fundingFee: string;\n tradeQuoteCcy: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/tradingBot/grid/orders-algo-pending', param);\n\n /**\n * GET / 获取网格策略委托持仓\n * 限速:20次/2s\n * 限速规则:User ID\n * 权限:读取\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-grid-trading-get-grid-algo-order-positions\n */\n getGridPositions = (param: {\n algoOrdType: 'contract_grid';\n algoId: string;\n }): Promise<{\n code: string;\n data: {\n algoId: string;\n algoClOrdId: string;\n instType: string;\n instId: string;\n cTime: string;\n uTime: string;\n avgPx: string;\n ccy: string;\n lever: string;\n liqPx: string;\n posSide: string;\n pos: string;\n mgnMode: string;\n mgnRatio: string;\n imr: string;\n mmr: string;\n upl: string;\n uplRatio: string;\n last: string;\n notionalUsd: string;\n adl: string;\n markPx: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/tradingBot/grid/positions', param);\n\n /**\n * GET / 获取产品深度\n * 限速:40次/2s\n * 限速规则:IP\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-order-book\n */\n getMarketBooks = (param: {\n sz?: string;\n instId: string;\n }): Promise<{\n code: string;\n data: {\n asks: [price: string, volume: string, abandon: string, order_number: string][];\n bids: [price: string, volume: string, abandon: string, order_number: string][];\n ts: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/market/books', param);\n}\n\ntype SpotGrid = {\n quoteSz?: string;\n baseSz?: string;\n tradeQuoteCcy?: string;\n};\n\ntype SwapGrid = {\n sz: string;\n direction: string;\n lever: string;\n basePos?: string;\n tpRatio?: string;\n slRatio?: string;\n};\n\ntype Grid = SpotGrid | SwapGrid;\n\ntype AccountBillType =\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | '10'\n | '11'\n | '12'\n | '13'\n | '14'\n | '15'\n | '16'\n | '22'\n | '24'\n | '26'\n | '27'\n | '28'\n | '29'\n | '30'\n | '32'\n | '33'\n | '34'\n | '250'\n | '251';\n\nexport const client = new OkxClient({\n auth: {\n public_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n passphrase: process.env.PASSPHRASE!,\n },\n});\n"]}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { encodeBase64, formatTime, HmacSHA256 } from '@yuants/utils';\n\n/**\n * API v5: https://www.okx.com/docs-v5/#overview\n */\nexport class OkxClient {\n noAuth = true;\n constructor(\n public config: {\n auth: {\n public_key: string;\n secret_key: string;\n passphrase: string;\n };\n },\n ) {\n if (config.auth.public_key && config.auth.secret_key && config.auth.passphrase) {\n this.noAuth = false;\n }\n }\n\n async request(method: string, path: string, params?: any) {\n const url = new URL('https://www.okx.com');\n url.pathname = path;\n if (method === 'GET') {\n for (const key in params) {\n url.searchParams.set(key, params[key]);\n }\n }\n if (this.noAuth) {\n console.info(formatTime(Date.now()), method, url.href);\n const res = await fetch(url.href, { method });\n return res.json();\n }\n const timestamp = formatTime(Date.now(), 'UTC').replace(' ', 'T');\n const secret_key = this.config.auth.secret_key;\n const body = method === 'GET' ? '' : JSON.stringify(params);\n const signData = timestamp + method + url.pathname + url.search + body;\n const str = encodeBase64(\n await HmacSHA256(\n //\n new TextEncoder().encode(signData),\n new TextEncoder().encode(secret_key),\n ),\n );\n\n const headers = {\n 'Content-Type': 'application/json',\n 'OK-ACCESS-KEY': this.config.auth.public_key!,\n 'OK-ACCESS-SIGN': str,\n 'OK-ACCESS-TIMESTAMP': timestamp,\n 'OK-ACCESS-PASSPHRASE': this.config.auth.passphrase,\n };\n\n console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body, signData);\n const res = await fetch(url.href, {\n method,\n headers,\n body: body || undefined,\n });\n return res.json();\n }\n\n /**\n * 获取账户资产估值\n *\n * 查看账户资产估值\n *\n * 限速:1次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-account-asset-valuation\n */\n getAssetValuation = (params?: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n details: {\n classic: string;\n earn: string;\n funding: string;\n trading: string;\n };\n totalBal: string;\n ts: string;\n }>;\n }> => this.request('GET', '/api/v5/asset/asset-valuation', params);\n\n /**\n * 查看账户配置\n * 查看当前账户的配置信息。\n *\n * 限速:5次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-account-configuration\n */\n getAccountConfig = (): Promise<{\n code: string;\n data: Array<{\n acctLv: string;\n autoLoan: boolean;\n ctIsoMode: string;\n greeksType: string;\n level: string;\n levelTmp: string;\n mgnIsoMode: string;\n posMode: string;\n spotOffsetType: string;\n uid: string;\n label: string;\n roleType: string;\n traderInsts: any[];\n spotRoleType: string;\n spotTraderInsts: any[];\n opAuth: string;\n kycLv: string;\n ip: string;\n perm: string;\n mainUid: string;\n }>;\n msg: string;\n }> => this.request('GET', '/api/v5/account/config');\n\n /**\n * 获取余币宝余额\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-get-saving-balance\n */\n getFinanceSavingsBalance = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n earnings: string;\n redemptAmt: string;\n rate: string;\n ccy: string;\n amt: string;\n loanAmt: string;\n pendingAmt: string;\n }[];\n }> => this.request('GET', '/api/v5/finance/savings/balance', params);\n\n /**\n * 余币宝申购/赎回\n *\n * 仅资金账户中的资产支持余币宝申购。\n *\n * 限速:6次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-post-savings-purchase-redemption\n */\n postFinanceSavingsPurchaseRedempt = (params: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n }[];\n }> => this.request('POST', '/api/v5/finance/savings/purchase-redempt', params);\n\n /**\n * 提币\n *\n * 用户提币。普通子账户不支持提币。\n *\n * API只能提币到免认证地址/账户上,通过 WEB/APP 可以设置免认证地址。\n *\n * 关于标签:某些币种如XRP充币时同时需要一个充值地址和标签(又名memo/payment_id),标签是一种保证您的充币地址唯一性的数字串,与充币地址成对出现并一一对应。请您务必遵守正确的充值步骤,在提币时输入完整信息,否则将面临丢失币的风险!\n * 对于有标签的币种,如果是OKX用户间的提币,请走内部转账不要走链上提币。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-withdrawal\n */\n postAssetWithdrawal = (params: {\n amt: string;\n fee: string;\n dest: string;\n ccy: string;\n chain?: string;\n toAddr: string;\n clientId?: string;\n rcvrInfo?: {\n walletType: string;\n exchId: string;\n rcvrFirstName: string;\n rcvrLastName: string;\n };\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n amt: string;\n wdId: string;\n ccy: string;\n clientId: string;\n chain: string;\n }>;\n }> => this.request('POST', '/api/v5/asset/withdrawal', params);\n\n /**\n * 获取充值地址信息\n *\n * 获取各个币种的充值地址,包括曾使用过的老地址。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-address\n */\n getAssetDepositAddress = (params: {\n ccy: string;\n }): Promise<{\n code: string;\n data: {\n chain: string;\n ctAddr: string;\n ccy: string;\n to: string;\n addr: string;\n verifiedName: string;\n selected: boolean;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/asset/deposit-address', params);\n\n /**\n * 获取提币记录\n *\n * 根据币种,提币状态,时间范围获取提币记录,按照时间倒序排列,默认返回100条数据。\n * 支持Websocket订阅,参考 提币信息频道。\n *\n * 限速:6 次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-withdrawal-history\n */\n getAssetWithdrawalHistory = (params: {\n ccy?: string;\n wdId?: string;\n clientId?: string;\n txId?: string;\n type?: string;\n state?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n chain: string;\n fee: string;\n feeCcy: string;\n ccy: string;\n clientId: string;\n amt: string;\n txId: string;\n from: string;\n areaCodeFrom: string;\n to: string;\n areaCodeTo: string;\n state: string;\n ts: string;\n nonTradableAsset: boolean;\n wdId: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/withdrawal-history', params);\n\n /**\n * 获取充值记录\n *\n * 根据币种,充值状态,时间范围获取充值记录,按照时间倒序排列,默认返回 100 条数据。\n * 支持Websocket订阅,参考 充值信息频道。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-history\n */\n getAssetDepositHistory = (params: {\n ccy?: string;\n depId?: string;\n state?: string;\n fromWdId?: string;\n txId?: string;\n type?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n actualDepBlkConfirm: string;\n amt: string;\n areaCodeFrom: string;\n ccy: string;\n chain: string;\n depId: string;\n from: string;\n fromWdId: string;\n state: string;\n to: string;\n ts: string;\n txId: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/deposit-history', params);\n\n /**\n * 获取资金账户余额\n *\n * 获取资金账户所有资产列表,查询各币种的余额、冻结和可用等信息。\n *\n * 只返回余额大于0的币资产信息。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-balance\n */\n getAssetBalances = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n availBal: string;\n bal: string;\n ccy: string;\n frozenBal: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/balances', params);\n\n /**\n * 资金划转\n *\n * 调用时,API Key 需要有交易权限。\n *\n * 支持母账户的资金账户划转到交易账户,母账户到子账户的资金账户和交易账户划转。\n *\n * 子账户默认可转出至母账户,划转到同一母账户下的其他子账户,需要先调用 设置子账户主动转出权限 接口进行授权。\n *\n * 请求失败不代表划转失败,建议以获取资金划转状态接口返回的状态为准。\n *\n * 限速:2 次/s\n * 限速规则:UserID + Currency\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-funds-transfer\n */\n postAssetTransfer = (params: {\n ccy: string;\n type?: string;\n amt: string;\n from: string;\n to: string;\n subAcct?: string;\n loanTrans?: boolean;\n omitPosRisk?: string;\n clientId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n transId: string;\n ccy: string;\n clientId: string;\n from: string;\n amt: string;\n to: string;\n }[];\n }> => this.request('POST', '/api/v5/asset/transfer', params);\n\n /**\n * 查看账户余额\n *\n * 获取交易账户中资金余额信息。\n *\n * 免息额度和折算率都是公共数据,不在账户接口内展示\n *\n * 限速:10次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-balance\n */\n getAccountBalance = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n data: {\n adjEq: string;\n borrowFroz: string;\n details: {\n availBal: string;\n availEq: string;\n borrowFroz: string;\n cashBal: string;\n ccy: string;\n crossLiab: string;\n disEq: string;\n eq: string;\n eqUsd: string;\n fixedBal: string;\n frozenBal: string;\n imr: string;\n interest: string;\n isoEq: string;\n isoLiab: string;\n isoUpl: string;\n liab: string;\n maxLoan: string;\n mgnRatio: string;\n mmr: string;\n notionalLever: string;\n ordFrozen: string;\n rewardBal: string;\n spotInUseAmt: string;\n spotIsoBal: string;\n stgyEq: string;\n twap: string;\n uTime: string;\n upl: string;\n uplLiab: string;\n openAvgPx: string;\n spotUpl: string;\n accAvgPx: string;\n totalPnl: string;\n spotBal: string;\n }[];\n imr: string;\n isoEq: string;\n mgnRatio: string;\n mmr: string;\n notionalUsd: string;\n ordFroz: string;\n totalEq: string;\n uTime: string;\n upl: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/account/balance', params);\n\n /**\n * 查看持仓信息\n *\n * 获取该账户下拥有实际持仓的信息。账户为买卖模式会显示净持仓(net),账户为开平仓模式下会分别返回开多(long)或开空(short)的仓位。按照仓位创建时间倒序排列。\n *\n * 如果该 instId 拥有过仓位且当前持仓量为0,传 instId 时,如果当前存在有效的posId,会返回仓位信息,如果当前不存在有效的 posId 时,不会返回仓位信息;不传 instId 时,仓位信息不返回。\n *\n * 逐仓交易设置中,如果设置为自主划转模式,逐仓转入保证金后,会生成一个持仓量为0的仓位\n *\n * 限速:10次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-positions\n */\n getAccountPositions = (params: {\n instType?: string;\n instId?: string;\n posId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n adl: string;\n availPos: string;\n avgPx: string;\n cTime: string;\n ccy: string;\n deltaBS: string;\n deltaPA: string;\n gammaBS: string;\n gammaPA: string;\n imr: string;\n instId: string;\n instType: string;\n interest: string;\n idxPx: string;\n last: string;\n usdPx: string;\n bePx: string;\n lever: string;\n liab: string;\n liabCcy: string;\n liqPx: string;\n markPx: string;\n margin: string;\n mgnMode: string;\n mgnRatio: string;\n mmr: string;\n notionalUsd: string;\n optVal: string;\n pTime: string;\n pos: string;\n posCcy: string;\n posId: string;\n posSide: string;\n spotInUseAmt: string;\n spotInUseCcy: string;\n thetaBS: string;\n thetaPA: string;\n tradeId: string;\n bizRefId: string;\n bizRefType: string;\n quoteBal: string;\n baseBal: string;\n baseBorrowed: string;\n baseInterest: string;\n quoteBorrowed: string;\n quoteInterest: string;\n uTime: string;\n upl: string;\n uplLastPx: string;\n uplRatio: string;\n uplRatioLastPx: string;\n vegaBS: string;\n vegaPA: string;\n realizedPnl: string;\n pnl: string;\n fee: string;\n fundingFee: string;\n liqPenalty: string;\n closeOrderAlgo: {\n algoId: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n closeFraction: string;\n }[];\n }[];\n }> => this.request('GET', '/api/v5/account/positions', params);\n\n /**\n * 获取最大可下单数量\n *\n * 获取最大可买卖/开仓数量,可对应下单时的 sz 字段\n *\n * 限速:20次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-maximum-tradable-size\n */\n getAccountMaxSize = (params: {\n instId: string;\n tdMode: string;\n ccy?: string;\n px?: string;\n leverage?: string;\n tradeQuoteCcy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n instId: string;\n ccy: string;\n maxBuy: string;\n maxSell: string;\n }>;\n }> => this.request('GET', '/api/v5/account/max-size', params);\n\n /**\n * 赚币\n * GET / 查看项目\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\n getFinanceStakingDeFiOffers = (params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n productId: string;\n protocol: string;\n protocolType: string;\n term: string;\n apy: string;\n earlyRedeem: boolean;\n investData: {\n ccy: string;\n bal: string;\n minAmt: string;\n maxAmt: string;\n }[];\n earningData: {\n ccy: string;\n earningType: string;\n }[];\n state: string;\n earningCcy?: string[];\n }[];\n }> => this.request('GET', '/api/v5/finance/staking-defi/offers', params);\n\n /**\n * 赚币\n * GET / 查看活跃订单\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\n getFinanceStakingDeFiOrdersActive = (params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n state?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ordId: string;\n state: string;\n ccy: string;\n protocol: string;\n protocolType: string;\n term: string;\n apy: string;\n investData: {\n ccy: string;\n amt: string;\n minAmt?: string;\n maxAmt?: string;\n }[];\n earningData: {\n ccy: string;\n earningType: string;\n earnings: string;\n }[];\n purchasedTime: string;\n estSettlementTime: string;\n cancelRedemptionDeadline: string;\n tag: string;\n earningCcy?: string[];\n }[];\n }> => this.request('GET', '/api/v5/finance/staking-defi/orders-active', params);\n\n /**\n * 下单\n *\n * 只有当您的账户有足够的资金才能下单。\n *\n * 限速:60次/2s\n *\n * 跟单交易带单产品的限速:4次/2s\n *\n * 限速规则(期权以外):UserID + Instrument ID\n *\n * 限速规则(只限期权):UserID + Instrument Family\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-place-order\n */\n postTradeOrder = (params: {\n instId: string;\n tdMode: string;\n ccy?: string;\n clOrdId?: string;\n tag?: string;\n side: string;\n posSide?: string;\n ordType: string;\n sz: string;\n px?: string;\n pxUsd?: string;\n pxVol?: string;\n reduceOnly?: string;\n tgtCcy?: string;\n banAmend?: string;\n quickMgnType?: string;\n stpId?: string;\n stpMode?: string;\n attachAlgoOrds?: Array<{\n attachAlgoClOrdId?: string;\n tpTriggerPx?: string;\n tpOrdPx?: string;\n tpOrdKind?: string;\n slTriggerPx?: string;\n slOrdPx?: string;\n tpTriggerPxType?: string;\n slTriggerPxType?: string;\n sz?: string;\n amendPxOnTriggerType?: string;\n }>;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n tag: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/order', params);\n\n /**\n * 修改订单\n *\n * 修改当前未成交的挂单\n *\n * 限速:60次/2s\n *\n * 跟单交易带单员带单产品的限速:4个/2s\n *\n * 限速规则:User ID + Instrument ID\n *\n * 权限:交易\n *\n * 该接口限速同时受到 子账户限速 及 基于成交比率的子账户限速 限速规则的影响。\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-amend-order\n */\n postTradeAmendOrder = (params: {\n instId: string;\n cxIOnFail?: boolean;\n ordId?: string;\n clOrdId?: string;\n reqId?: string;\n newSz?: string;\n newPx?: string;\n newPxUsd?: string;\n newPxVol?: string;\n attachAlgoOrds?: Array<{\n attachAlgoId?: string;\n attachAlgoClOrdId?: string;\n newTpTriggerPx?: string;\n newTpOrdPx?: string;\n newTpOrdKind?: string;\n newSlTriggerPx?: string;\n newSlOrdPx?: string;\n newTpTriggerPxType?: string;\n newSlTriggerPxType?: string;\n sz?: string;\n amendPxOnTriggerType?: string;\n }>;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n ts: string;\n reqId: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/amend-order', params);\n\n /**\n * 获取未成交订单列表\n *\n * 获取当前账户下所有未成交订单信息\n *\n * 限速:60次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-get-order-list\n */\n getTradeOrdersPending = (params: {\n instType?: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n ordType?: string;\n state?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n accFillSz: string;\n avgPx: string;\n cTime: string;\n category: string;\n ccy: string;\n clOrdId: string;\n fee: string;\n feeCcy: string;\n fillPx: string;\n fillSz: string;\n fillTime: string;\n instId: string;\n instType: string;\n lever: string;\n ordId: string;\n ordType: string;\n pnl: string;\n posSide: string;\n px: string;\n pxUsd: string;\n pxVol: string;\n pxType: string;\n rebate: string;\n rebateCcy: string;\n side: string;\n attachAlgoClOrdId: string;\n slOrdPx: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n attachAlgoOrds: any[];\n source: string;\n state: string;\n stpId: string;\n stpMode: string;\n sz: string;\n tag: string;\n tdMode: string;\n tgtCcy: string;\n tpOrdPx: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n tradeId: string;\n reduceOnly: string;\n quickMgnType: string;\n algoClOrdId: string;\n algoId: string;\n isTpLimit: string;\n uTime: string;\n }[];\n }> => this.request('GET', '/api/v5/trade/orders-pending', params);\n\n /**\n * 获取历史订单记录(近七天)\n *\n * 获取最近7天挂单,且完成的订单数据,包括7天以前挂单,但近7天才成交的订单数据。按照订单创建时间倒序排序。\n *\n * 已经撤销的未成交单 只保留2小时\n * 限速:40次/2s\n * 限速规则:User ID\n */\n getTradeOrdersHistory = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n ordType?: string;\n state?: string;\n category?: string;\n after?: string;\n before?: string;\n begin?: string;\n end?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n instType: string;\n instId: string;\n tgtCcy: string;\n ccy: string;\n ordId: string;\n clOrdId: string;\n tag: string;\n px: string;\n pxUsd: string;\n pxVol: string;\n pxType: string;\n sz: string;\n ordType: string;\n side: string;\n posSide: string;\n tdMode: string;\n accFillSz: string;\n fillPx: string;\n tradeId: string;\n fillSz: string;\n fillTime: string;\n avgPx: string;\n state: string;\n lever: string;\n attachAlgoClOrdId: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n tpOrdPx: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n slOrdPx: string;\n attachAlgoOrds: any[];\n linkedAlgoOrd: any[];\n stpId: string;\n stpMode: string;\n feeCcy: string;\n fee: string;\n rebateCcy: string;\n source: string;\n rebate: string;\n pnl: string;\n category: string;\n reduceOnly: string;\n cancelSource: string;\n cancelSourceReason: string;\n algoClOrdId: string;\n algoId: string;\n isTpLimit: string;\n uTime: string;\n cTime: string;\n tradeQuoteCcy: string;\n }>;\n }> => this.request('GET', '/api/v5/trade/orders-history', params);\n\n /**\n * 撤单\n *\n * 撤销之前下的未完成订单。\n *\n * 限速:60次/2s\n *\n * 限速规则(期权以外):UserID + Instrument ID\n *\n * 限速规则(只限期权):UserID + Instrument Family\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-cancel-order\n */\n postTradeCancelOrder = (params: {\n instId: string;\n ordId?: string;\n clOrdId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/cancel-order', params);\n\n /**\n * 查看子账户列表\n *\n * 仅适用于母账户。\n *\n * 限速:2次/2s\n *\n * 限速规则:UserID\n */\n getSubAccountList = (params?: {\n enable?: string;\n subAct?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n data: {\n type: string;\n enable: string;\n subAcct: string;\n uid: string;\n label: string;\n mobile: string;\n gAuth: boolean;\n frozenFunc: string[];\n canTransOut: boolean;\n ts: string;\n }[];\n code: string;\n msg: string;\n }> => this.request('GET', '/api/v5/users/subaccount/list', params);\n\n /**\n * 设置子账户主动转出权限\n *\n * 设置子账户转出权限(仅适用于母账户),默认可转出至母账户。\n *\n * 限速:1次/s\n *\n * 限速规则:UserID\n */\n postSetSubAccountTransferOut = (params: {\n subAcct: string;\n canTransOut: boolean;\n }): Promise<{\n subAcct: string;\n canTransOut: boolean;\n }> => this.request('POST', '/api/v5/users/subaccount/set-transfer-out', params);\n\n /**\n * 获取资金划转状态\n *\n * 获取最近2个星期内的资金划转状态数据\n *\n * 限速:10 次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-funds-transfer-state\n */\n getAssetTransferState = (params: {\n transId?: string;\n clientId?: string;\n type?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n transId: string;\n clientId: string;\n ccy: string;\n amt: string;\n type: string;\n from: string;\n to: string;\n subAcct: string;\n // success | pending | failed\n state: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/transfer-state', params);\n\n /**\n * 获取币种列表\n *\n * 获取当前用户KYC实体支持的币种列表。\n *\n * 限速:6 次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-currencies\n */\n getAssetCurrencies = (params?: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n name: string;\n chain: string;\n canWd: boolean;\n canInternal: boolean;\n minWd: string;\n maxWd: string;\n wdTickSz: string;\n wdQuota: string;\n usedWdQuota: string;\n minFee: string;\n maxFee: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/currencies', params);\n\n /**\n * GET / 借贷信息\n * 限速:5次/2s\n * 限速规则:User ID\n * 权限:读取\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-flexible-loan-get-loan-info\n */\n getFlexibleLoanInfo = (): Promise<{\n code: string;\n data: {\n collateralData: {\n amt: string;\n ccy: string;\n }[];\n collateralNotionalUsd: string;\n curLTV: string;\n liqLTV: string;\n loanData: {\n amt: string;\n ccy: string;\n }[];\n loanNotionalUsd: string;\n marginCallLTV: string;\n riskWarningData: {\n instId: string;\n liqPx: string;\n };\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/finance/flexible-loan/loan-info');\n\n /**\n * 账单流水查询(近七天)\n *\n *\n * 限速:5次/s\n *\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-7-days\n */\n getAccountBills = (params?: {\n instType?: string;\n instId?: string;\n ccy?: string;\n mgnMode?: 'isolated' | 'cross';\n ctType?: 'linear' | 'inverse';\n type?: AccountBillType;\n subType?: string;\n after?: string; //请求此id之前(更旧的数据)的分页内容,传的值为对应接口的billId\n before?: string; //请求此id之后(更新的数据)的分页内容,传的值为对应接口的billId\n begin?: string; //筛选的开始时间戳 ts,Unix 时间戳为毫秒数格式,如 1597026383085\n end?: string;\n limit?: string; //分页返回的结果集数量,最大为100,不填默认返回100条\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n billId: string;\n type: string;\n subType: string;\n ts: string;\n balChg: string;\n posBalChg: string;\n bal: string;\n posBal: string;\n sz: string;\n px: string;\n ccy: string;\n pnl: string;\n fee: string;\n mgnMode: 'isolated' | 'cross' | 'cash' | '';\n instId: string;\n ordId: string;\n execType: string;\n from: string;\n to: string;\n notes: string;\n interest: string;\n tag: string;\n fillTime: string;\n tradeId: string;\n clOrdId: string;\n fillIdxPx: string;\n fillMarkPx: string;\n fillPxVol: string;\n fillPxUsd: string;\n fillMarkVol: string;\n fillFwdPx: string;\n }[];\n }> => this.request('GET', '/api/v5/account/bills', params);\n\n /**\n * 账单流水查询(近三个月)\n *\n *\n * 限速:5次/2s\n *\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-3-months\n */\n getAccountBillsArchive = (params?: {\n instType?: string;\n instId?: string;\n ccy?: string;\n mgnMode?: 'isolated' | 'cross';\n ctType?: 'linear' | 'inverse';\n type?: AccountBillType;\n subType?: string;\n after?: string; //请求此id之前(更旧的数据)的分页内容,传的值为对应接口的billId\n before?: string; //请求此id之后(更新的数据)的分页内容,传的值为对应接口的billId\n begin?: string; //筛选的开始时间戳 ts,Unix 时间戳为毫秒数格式,如 1597026383085\n end?: string;\n limit?: string; //分页返回的结果集数量,最大为100,不填默认返回100条\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n billId: string;\n type: string;\n subType: string;\n ts: string;\n balChg: string;\n posBalChg: string;\n bal: string;\n posBal: string;\n sz: string;\n px: string;\n ccy: string;\n pnl: string;\n fee: string;\n mgnMode: 'isolated' | 'cross' | 'cash' | '';\n instId: string;\n ordId: string;\n execType: string;\n from: string;\n to: string;\n notes: string;\n interest: string;\n tag: string;\n fillTime: string;\n tradeId: string;\n clOrdId: string;\n fillIdxPx: string;\n fillMarkPx: string;\n fillPxVol: string;\n fillPxUsd: string;\n fillMarkVol: string;\n fillFwdPx: string;\n }[];\n }> => this.request('GET', '/api/v5/account/bills-archive', params);\n\n /**\n * POST / 网格策略委托下单\n * 限速:20次/2s\n * 限速规则:User ID + Instrument ID\n * 权限:交易\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/?language=shell#order-book-trading-grid-trading-post-place-grid-algo-order\n */\n postGridAlgoOrder = (\n params: {\n instId: string;\n algoOrdType: string;\n maxPx: string;\n minPx: string;\n gridNum: string;\n runType?: string;\n tpTriggerPx?: string;\n slTriggerPx?: string;\n algoClOrdId?: string;\n tag?: string;\n profitSharingRatio?: string;\n triggerParams?: {\n triggerAction: string;\n triggerStrategy: string;\n timeframe?: string;\n thold?: string;\n triggerCond?: string;\n timePeriod?: string;\n delaySeconds?: string;\n triggerPx?: string;\n stopType?: string;\n }[];\n } & Grid,\n ): Promise<{\n code: string;\n msg: string;\n data: {\n algoId: string;\n algoClOrdId: string;\n sCode: string;\n sMsg: string;\n tag: string;\n }[];\n }> => this.request('POST', '/api/v5/tradingBot/grid/order-algo', params);\n\n /**\n * GET / 获取未完成网格策略委托单列表\n * 限速:20次/2s\n * 限速规则:User ID\n * 权限:读取\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-grid-trading-get-grid-algo-order-list\n */\n getGridOrdersAlgoPending = (param: {\n algoOrdType: 'grid' | 'contract_grid';\n algoId?: string;\n instId?: string;\n instType?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n data: {\n algoId: string;\n algoClOrdId: string;\n instType: string;\n instId: string;\n cTime: string;\n uTime: string;\n algoOrdType: 'grid' | 'contract_grid';\n state: 'starting' | 'running' | 'stopping' | 'pending_signal' | 'no_close_position';\n rebateTrans: {\n rebate: string;\n rebateCcy: string;\n }[];\n triggerParams: {\n triggerAction: string;\n triggerStrategy: string;\n delaySeconds: string;\n triggerTime: string;\n triggerType: string;\n timeframe: string;\n thold: string;\n triggerCond: 'cross_up' | 'cross_down' | 'above' | 'below' | 'cross';\n timePeriod: string;\n triggerPx: string;\n stopType: string;\n }[];\n maxPx: string;\n minPx: string;\n gridNum: string;\n runType: '1' | '2';\n tpTriggerPx: string;\n slTriggerPx: string;\n arbitrageNum: string;\n totalPnl: string;\n pnlRatio: string;\n investment: string;\n gridProfit: string;\n floatProfit: string;\n cancelType: '0' | '1' | '2' | '3' | '4' | '5' | '6';\n stopType: '1' | '2';\n quoteSz: string;\n baseSz: SpotGrid;\n direction: string;\n basePos: string;\n sz: string;\n lever: string;\n actualLever: string;\n liqPx: string;\n uly: string;\n instFamily: string;\n ordFrozen: string;\n availEq: string;\n tag: string;\n profitSharingRatio: string;\n copyType: string;\n fee: string;\n fundingFee: string;\n tradeQuoteCcy: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/tradingBot/grid/orders-algo-pending', param);\n\n /**\n * GET / 获取网格策略委托持仓\n * 限速:20次/2s\n * 限速规则:User ID\n * 权限:读取\n * HTTP请求\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-grid-trading-get-grid-algo-order-positions\n */\n getGridPositions = (param: {\n algoOrdType: 'contract_grid';\n algoId: string;\n }): Promise<{\n code: string;\n data: {\n algoId: string;\n algoClOrdId: string;\n instType: string;\n instId: string;\n cTime: string;\n uTime: string;\n avgPx: string;\n ccy: string;\n lever: string;\n liqPx: string;\n posSide: string;\n pos: string;\n mgnMode: string;\n mgnRatio: string;\n imr: string;\n mmr: string;\n upl: string;\n uplRatio: string;\n last: string;\n notionalUsd: string;\n adl: string;\n markPx: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/tradingBot/grid/positions', param);\n}\n\ntype SpotGrid = {\n quoteSz?: string;\n baseSz?: string;\n tradeQuoteCcy?: string;\n};\n\ntype SwapGrid = {\n sz: string;\n direction: string;\n lever: string;\n basePos?: string;\n tpRatio?: string;\n slRatio?: string;\n};\n\ntype Grid = SpotGrid | SwapGrid;\n\ntype AccountBillType =\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | '10'\n | '11'\n | '12'\n | '13'\n | '14'\n | '15'\n | '16'\n | '22'\n | '24'\n | '26'\n | '27'\n | '28'\n | '29'\n | '30'\n | '32'\n | '33'\n | '34'\n | '250'\n | '251';\n\nexport const client = new OkxClient({\n auth: {\n public_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n passphrase: process.env.PASSPHRASE!,\n },\n});\n"]}
package/lib/index.d.ts CHANGED
@@ -9,4 +9,5 @@ import './trade';
9
9
  import './services';
10
10
  import './strategy-account';
11
11
  import './market-order';
12
+ import './api-service';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC;AACnB,OAAO,iBAAiB,CAAC;AACzB,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,CAAC;AACxB,OAAO,QAAQ,CAAC;AAChB,OAAO,SAAS,CAAC;AACjB,OAAO,SAAS,CAAC;AACjB,OAAO,SAAS,CAAC;AACjB,OAAO,YAAY,CAAC;AACpB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC;AACnB,OAAO,iBAAiB,CAAC;AACzB,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,CAAC;AACxB,OAAO,QAAQ,CAAC;AAChB,OAAO,SAAS,CAAC;AACjB,OAAO,SAAS,CAAC;AACjB,OAAO,SAAS,CAAC;AACjB,OAAO,YAAY,CAAC;AACpB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,eAAe,CAAC"}
package/lib/index.js CHANGED
@@ -11,4 +11,5 @@ require("./trade");
11
11
  require("./services");
12
12
  require("./strategy-account");
13
13
  require("./market-order");
14
+ require("./api-service");
14
15
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,qBAAmB;AACnB,2BAAyB;AACzB,0BAAwB;AACxB,0BAAwB;AACxB,kBAAgB;AAChB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,sBAAoB;AACpB,8BAA4B;AAC5B,0BAAwB","sourcesContent":["import './account';\nimport './interest_rate';\nimport './legacy_index';\nimport './loan-account';\nimport './ohlc';\nimport './order';\nimport './quote';\nimport './trade';\nimport './services';\nimport './strategy-account';\nimport './market-order';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,qBAAmB;AACnB,2BAAyB;AACzB,0BAAwB;AACxB,0BAAwB;AACxB,kBAAgB;AAChB,mBAAiB;AACjB,mBAAiB;AACjB,mBAAiB;AACjB,sBAAoB;AACpB,8BAA4B;AAC5B,0BAAwB;AACxB,yBAAuB","sourcesContent":["import './account';\nimport './interest_rate';\nimport './legacy_index';\nimport './loan-account';\nimport './ohlc';\nimport './order';\nimport './quote';\nimport './trade';\nimport './services';\nimport './strategy-account';\nimport './market-order';\nimport './api-service';\n"]}
@@ -17,8 +17,8 @@ const protocol_1 = require("@yuants/protocol");
17
17
  const sql_1 = require("@yuants/sql");
18
18
  const utils_1 = require("@yuants/utils");
19
19
  const rxjs_1 = require("rxjs");
20
- const api_1 = require("./api");
21
20
  const product_1 = require("./product");
21
+ const public_api_1 = require("./public-api");
22
22
  (0, sql_1.createSQLWriter)(protocol_1.Terminal.fromNodeEnv(), {
23
23
  data$: product_1.productService.products$.pipe((0, rxjs_1.mergeAll)(), (0, rxjs_1.map)((x) => ({
24
24
  series_id: (0, utils_1.encodePath)(x.datasource_id, x.product_id),
@@ -47,7 +47,7 @@ const product_1 = require("./product");
47
47
  let current_end = end;
48
48
  while (true) {
49
49
  // 接口行为备注:向前翻页,时间降序,不含 after 当前时间点
50
- const res = yield __await(api_1.client.getFundingRateHistory({
50
+ const res = yield __await((0, public_api_1.getFundingRateHistory)({
51
51
  instId: instId,
52
52
  after: `${current_end}`,
53
53
  }));
@@ -82,8 +82,8 @@ const product_1 = require("./product");
82
82
  const [base, quote] = instId.split('-');
83
83
  let current_end = end;
84
84
  while (true) {
85
- const resBase = yield __await(api_1.client.getLendingRateHistory({ ccy: base, after: `${current_end}` }));
86
- const resQuote = yield __await(api_1.client.getLendingRateHistory({ ccy: quote, after: `${current_end}` }));
85
+ const resBase = yield __await((0, public_api_1.getLendingRateHistory)({ ccy: base, after: `${current_end}` }));
86
+ const resQuote = yield __await((0, public_api_1.getLendingRateHistory)({ ccy: quote, after: `${current_end}` }));
87
87
  if (resBase.code !== '0') {
88
88
  throw `getLendingRateHistory failed: ${resBase.code} ${resBase.msg}`;
89
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"interest_rate.js","sourceRoot":"","sources":["../src/interest_rate.ts"],"names":[],"mappings":"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","sourcesContent":["import { IInterestRate } from '@yuants/data-interest-rate';\nimport { createSeriesProvider, ISeriesCollectingTask } from '@yuants/data-series';\nimport { Terminal } from '@yuants/protocol';\nimport { createSQLWriter } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { firstValueFrom, map, mergeAll, timer } from 'rxjs';\nimport { client } from './api';\nimport { productService } from './product';\n\ncreateSQLWriter<ISeriesCollectingTask>(Terminal.fromNodeEnv(), {\n data$: productService.products$.pipe(\n mergeAll(),\n map(\n (x): ISeriesCollectingTask => ({\n series_id: encodePath(x.datasource_id, x.product_id),\n table_name: 'interest_rate',\n cron_pattern: '0 * * * *', // 每小时执行一次\n cron_timezone: 'UTC',\n disabled: false,\n replay_count: 0,\n }),\n ),\n ),\n tableName: 'series_collecting_task',\n writeInterval: 1000,\n conflictKeys: ['series_id', 'table_name'],\n});\n\ncreateSeriesProvider<IInterestRate>(Terminal.fromNodeEnv(), {\n tableName: 'interest_rate',\n series_id_prefix_parts: ['OKX'],\n reversed: true,\n serviceOptions: { concurrent: 1 },\n queryFn: async function* ({ series_id, started_at, ended_at }) {\n const start = started_at || 0;\n const end = ended_at || Date.now();\n const [datasource_id, product_id] = decodePath(series_id);\n const [instType, instId] = decodePath(product_id);\n\n if (instType === 'SWAP') {\n let current_end = end;\n while (true) {\n // 接口行为备注:向前翻页,时间降序,不含 after 当前时间点\n const res = await client.getFundingRateHistory({\n instId: instId,\n after: `${current_end}`,\n });\n if (res.code !== '0') {\n throw `getFundingRateHistory failed: ${res.code} ${res.msg}`;\n }\n // 如果没有数据了,就退出\n if (res.data.length === 0) {\n break;\n }\n console.info(formatTime(Date.now()), 'getFundingRateHistory', JSON.stringify(res.data));\n const data = res.data.map(\n (v): IInterestRate => ({\n series_id: series_id,\n product_id,\n datasource_id,\n created_at: formatTime(+v.fundingTime),\n long_rate: `${-v.fundingRate}`,\n short_rate: `${v.fundingRate}`,\n settlement_price: '',\n }),\n );\n yield data;\n current_end = +res.data[res.data.length - 1].fundingTime;\n if (current_end <= start) {\n break;\n }\n // for API rate limit\n await firstValueFrom(timer(1000));\n }\n }\n\n if (instType === 'MARGIN') {\n // MARGIN/BTC-USDT\n const [base, quote] = instId.split('-');\n let current_end = end;\n while (true) {\n const resBase = await client.getLendingRateHistory({ ccy: base, after: `${current_end}` });\n const resQuote = await client.getLendingRateHistory({ ccy: quote, after: `${current_end}` });\n\n if (resBase.code !== '0') {\n throw `getLendingRateHistory failed: ${resBase.code} ${resBase.msg}`;\n }\n if (resBase.data.length === 0) {\n break;\n }\n console.info(formatTime(Date.now()), 'getLendingRateHistory', JSON.stringify(resBase.data));\n\n if (resQuote.code !== '0') {\n throw `getLendingRateHistory failed: ${resQuote.code} ${resQuote.msg}`;\n }\n if (resQuote.data.length === 0) {\n break;\n }\n console.info(formatTime(Date.now()), 'getLendingRateHistory', JSON.stringify(resQuote.data));\n\n // 做多时,借入 quote 的资金,做空时,借入 base 的资金\n // 用 quote 的 rate 作为 long_rate,base 的 rate 作为 short_rate\n\n const mapTsToBaseRate = new Map<string, string>();\n resBase.data.forEach((v) => {\n mapTsToBaseRate.set(v.ts, v.rate);\n });\n\n const data: IInterestRate[] = [];\n\n resQuote.data.forEach((v) => {\n if (!mapTsToBaseRate.has(v.ts)) return;\n const long_rate = +v.rate / 365 / 24; // 转换为小时利率\n const short_rate = +mapTsToBaseRate.get(v.ts)! / 365 / 24; // 转换为小时利率\n data.push({\n series_id,\n product_id,\n datasource_id,\n created_at: formatTime(+v.ts),\n long_rate: `${-long_rate}`,\n short_rate: `${-short_rate}`,\n settlement_price: '',\n });\n });\n\n yield data;\n current_end = new Date(data[data.length - 1].created_at).getTime();\n if (current_end <= start) {\n break;\n }\n // for API rate limit\n await firstValueFrom(timer(1000));\n }\n }\n },\n});\n"]}
1
+ {"version":3,"file":"interest_rate.js","sourceRoot":"","sources":["../src/interest_rate.ts"],"names":[],"mappings":"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","sourcesContent":["import { IInterestRate } from '@yuants/data-interest-rate';\nimport { createSeriesProvider, ISeriesCollectingTask } from '@yuants/data-series';\nimport { Terminal } from '@yuants/protocol';\nimport { createSQLWriter } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { firstValueFrom, map, mergeAll, timer } from 'rxjs';\nimport { productService } from './product';\nimport { getFundingRateHistory, getLendingRateHistory } from './public-api';\n\ncreateSQLWriter<ISeriesCollectingTask>(Terminal.fromNodeEnv(), {\n data$: productService.products$.pipe(\n mergeAll(),\n map(\n (x): ISeriesCollectingTask => ({\n series_id: encodePath(x.datasource_id, x.product_id),\n table_name: 'interest_rate',\n cron_pattern: '0 * * * *', // 每小时执行一次\n cron_timezone: 'UTC',\n disabled: false,\n replay_count: 0,\n }),\n ),\n ),\n tableName: 'series_collecting_task',\n writeInterval: 1000,\n conflictKeys: ['series_id', 'table_name'],\n});\n\ncreateSeriesProvider<IInterestRate>(Terminal.fromNodeEnv(), {\n tableName: 'interest_rate',\n series_id_prefix_parts: ['OKX'],\n reversed: true,\n serviceOptions: { concurrent: 1 },\n queryFn: async function* ({ series_id, started_at, ended_at }) {\n const start = started_at || 0;\n const end = ended_at || Date.now();\n const [datasource_id, product_id] = decodePath(series_id);\n const [instType, instId] = decodePath(product_id);\n\n if (instType === 'SWAP') {\n let current_end = end;\n while (true) {\n // 接口行为备注:向前翻页,时间降序,不含 after 当前时间点\n const res = await getFundingRateHistory({\n instId: instId,\n after: `${current_end}`,\n });\n if (res.code !== '0') {\n throw `getFundingRateHistory failed: ${res.code} ${res.msg}`;\n }\n // 如果没有数据了,就退出\n if (res.data.length === 0) {\n break;\n }\n console.info(formatTime(Date.now()), 'getFundingRateHistory', JSON.stringify(res.data));\n const data = res.data.map(\n (v): IInterestRate => ({\n series_id: series_id,\n product_id,\n datasource_id,\n created_at: formatTime(+v.fundingTime),\n long_rate: `${-v.fundingRate}`,\n short_rate: `${v.fundingRate}`,\n settlement_price: '',\n }),\n );\n yield data;\n current_end = +res.data[res.data.length - 1].fundingTime;\n if (current_end <= start) {\n break;\n }\n // for API rate limit\n await firstValueFrom(timer(1000));\n }\n }\n\n if (instType === 'MARGIN') {\n // MARGIN/BTC-USDT\n const [base, quote] = instId.split('-');\n let current_end = end;\n while (true) {\n const resBase = await getLendingRateHistory({ ccy: base, after: `${current_end}` });\n const resQuote = await getLendingRateHistory({ ccy: quote, after: `${current_end}` });\n\n if (resBase.code !== '0') {\n throw `getLendingRateHistory failed: ${resBase.code} ${resBase.msg}`;\n }\n if (resBase.data.length === 0) {\n break;\n }\n console.info(formatTime(Date.now()), 'getLendingRateHistory', JSON.stringify(resBase.data));\n\n if (resQuote.code !== '0') {\n throw `getLendingRateHistory failed: ${resQuote.code} ${resQuote.msg}`;\n }\n if (resQuote.data.length === 0) {\n break;\n }\n console.info(formatTime(Date.now()), 'getLendingRateHistory', JSON.stringify(resQuote.data));\n\n // 做多时,借入 quote 的资金,做空时,借入 base 的资金\n // 用 quote 的 rate 作为 long_rate,base 的 rate 作为 short_rate\n\n const mapTsToBaseRate = new Map<string, string>();\n resBase.data.forEach((v) => {\n mapTsToBaseRate.set(v.ts, v.rate);\n });\n\n const data: IInterestRate[] = [];\n\n resQuote.data.forEach((v) => {\n if (!mapTsToBaseRate.has(v.ts)) return;\n const long_rate = +v.rate / 365 / 24; // 转换为小时利率\n const short_rate = +mapTsToBaseRate.get(v.ts)! / 365 / 24; // 转换为小时利率\n data.push({\n series_id,\n product_id,\n datasource_id,\n created_at: formatTime(+v.ts),\n long_rate: `${-long_rate}`,\n short_rate: `${-short_rate}`,\n settlement_price: '',\n });\n });\n\n yield data;\n current_end = new Date(data[data.length - 1].created_at).getTime();\n if (current_end <= start) {\n break;\n }\n // for API rate limit\n await firstValueFrom(timer(1000));\n }\n }\n },\n});\n"]}
@@ -7,6 +7,7 @@ const rxjs_1 = require("rxjs");
7
7
  const account_1 = require("./account");
8
8
  const api_1 = require("./api");
9
9
  const product_1 = require("./product");
10
+ const public_api_1 = require("./public-api");
10
11
  const quote_1 = require("./quote");
11
12
  const terminal = protocol_1.Terminal.fromNodeEnv();
12
13
  console.info((0, utils_1.formatTime)(Date.now()), 'Terminal', terminal.terminalInfo.terminal_id);
@@ -16,8 +17,8 @@ const memoizeMap = (fn) => {
16
17
  const cache = {};
17
18
  return ((...params) => { var _a; var _b; return ((_a = cache[_b = (0, utils_1.encodePath)(params)]) !== null && _a !== void 0 ? _a : (cache[_b] = fn(...params))); });
18
19
  };
19
- const fundingRate$ = memoizeMap((product_id) => (0, rxjs_1.defer)(() => api_1.client.getFundingRate({ instId: (0, utils_1.decodePath)(product_id)[1] })).pipe((0, rxjs_1.mergeMap)((x) => x.data), (0, rxjs_1.repeat)({ delay: 5000 }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.shareReplay)(1)));
20
- const interestRateLoanQuota$ = (0, rxjs_1.defer)(() => api_1.client.getInterestRateLoanQuota()).pipe((0, rxjs_1.repeat)({ delay: 60000 }), (0, rxjs_1.retry)({ delay: 60000 }), (0, rxjs_1.shareReplay)(1));
20
+ const fundingRate$ = memoizeMap((product_id) => (0, rxjs_1.defer)(() => (0, public_api_1.getFundingRate)({ instId: (0, utils_1.decodePath)(product_id)[1] })).pipe((0, rxjs_1.mergeMap)((x) => x.data), (0, rxjs_1.repeat)({ delay: 5000 }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.shareReplay)(1)));
21
+ const interestRateLoanQuota$ = (0, rxjs_1.defer)(() => (0, public_api_1.getInterestRateLoanQuota)()).pipe((0, rxjs_1.repeat)({ delay: 60000 }), (0, rxjs_1.retry)({ delay: 60000 }), (0, rxjs_1.shareReplay)(1));
21
22
  const interestRateByCurrency$ = memoizeMap((currency) => interestRateLoanQuota$.pipe((0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x.data || []).pipe((0, rxjs_1.mergeMap)((x) => x.basic), (0, rxjs_1.filter)((x) => x.ccy === currency), (0, rxjs_1.map)((x) => +x.rate))), (0, rxjs_1.shareReplay)(1)));
22
23
  // provideTicks(terminal, 'OKX', (product_id) => {
23
24
  // const [instType, instId] = decodePath(product_id);