@yuants/vendor-okx 0.23.26 → 0.24.0

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 (193) hide show
  1. package/dist/account.js +24 -10
  2. package/dist/account.js.map +1 -1
  3. package/dist/accountInfos/earning.js +1 -1
  4. package/dist/accountInfos/earning.js.map +1 -1
  5. package/dist/accountInfos/funding.js +1 -1
  6. package/dist/accountInfos/funding.js.map +1 -1
  7. package/dist/accountInfos/loan.js +1 -1
  8. package/dist/accountInfos/loan.js.map +1 -1
  9. package/dist/accountInfos/strategy.js +1 -1
  10. package/dist/accountInfos/strategy.js.map +1 -1
  11. package/dist/accountInfos/trading.js +3 -3
  12. package/dist/accountInfos/trading.js.map +1 -1
  13. package/dist/{api.js → api/private-api.js} +1 -1
  14. package/dist/api/private-api.js.map +1 -0
  15. package/dist/api/public-api.js.map +1 -0
  16. package/dist/api-service.js +1 -1
  17. package/dist/api-service.js.map +1 -1
  18. package/dist/index.js +5 -4
  19. package/dist/index.js.map +1 -1
  20. package/dist/loan-account.js +4 -4
  21. package/dist/loan-account.js.map +1 -1
  22. package/dist/order-actions-with-credential.js +69 -0
  23. package/dist/order-actions-with-credential.js.map +1 -0
  24. package/dist/order-actions.js +4 -4
  25. package/dist/order-actions.js.map +1 -1
  26. package/dist/order.js +4 -7
  27. package/dist/order.js.map +1 -1
  28. package/dist/orders/cancelOrder.js +1 -1
  29. package/dist/orders/cancelOrder.js.map +1 -1
  30. package/dist/orders/modifyOrder.js +3 -3
  31. package/dist/orders/modifyOrder.js.map +1 -1
  32. package/dist/orders/submitOrder.js +3 -3
  33. package/dist/orders/submitOrder.js.map +1 -1
  34. package/dist/{interest_rate.js → public-data/interest_rate.js} +1 -1
  35. package/dist/public-data/interest_rate.js.map +1 -0
  36. package/dist/{market-order.js → public-data/market-order.js} +1 -1
  37. package/dist/public-data/market-order.js.map +1 -0
  38. package/dist/{ohlc.js → public-data/ohlc.js} +3 -4
  39. package/dist/public-data/ohlc.js.map +1 -0
  40. package/dist/{product.js → public-data/product.js} +1 -1
  41. package/dist/public-data/product.js.map +1 -0
  42. package/dist/{quote.js → public-data/quote.js} +2 -3
  43. package/dist/public-data/quote.js.map +1 -0
  44. package/dist/services.js +4 -4
  45. package/dist/services.js.map +1 -1
  46. package/dist/strategy-account.js +5 -12
  47. package/dist/strategy-account.js.map +1 -1
  48. package/dist/trade.js +6 -8
  49. package/dist/trade.js.map +1 -1
  50. package/dist/transfer.js +6 -4
  51. package/dist/transfer.js.map +1 -1
  52. package/dist/utils/provideOHLCFromTimeBackwardService.js.map +1 -0
  53. package/dist/utils/provideSeriesFromTimeBackwardService.js.map +1 -0
  54. package/dist/ws.js.map +1 -1
  55. package/lib/account.d.ts +4 -3
  56. package/lib/account.d.ts.map +1 -1
  57. package/lib/account.js +27 -11
  58. package/lib/account.js.map +1 -1
  59. package/lib/accountInfos/earning.d.ts +1 -1
  60. package/lib/accountInfos/earning.d.ts.map +1 -1
  61. package/lib/accountInfos/earning.js +2 -2
  62. package/lib/accountInfos/earning.js.map +1 -1
  63. package/lib/accountInfos/funding.d.ts +1 -1
  64. package/lib/accountInfos/funding.d.ts.map +1 -1
  65. package/lib/accountInfos/funding.js +2 -2
  66. package/lib/accountInfos/funding.js.map +1 -1
  67. package/lib/accountInfos/loan.d.ts +1 -1
  68. package/lib/accountInfos/loan.d.ts.map +1 -1
  69. package/lib/accountInfos/loan.js +2 -2
  70. package/lib/accountInfos/loan.js.map +1 -1
  71. package/lib/accountInfos/strategy.d.ts +1 -1
  72. package/lib/accountInfos/strategy.d.ts.map +1 -1
  73. package/lib/accountInfos/strategy.js +3 -3
  74. package/lib/accountInfos/strategy.js.map +1 -1
  75. package/lib/accountInfos/trading.d.ts +1 -1
  76. package/lib/accountInfos/trading.d.ts.map +1 -1
  77. package/lib/accountInfos/trading.js +5 -5
  78. package/lib/accountInfos/trading.js.map +1 -1
  79. package/lib/{api.d.ts → api/private-api.d.ts} +1 -1
  80. package/lib/api/private-api.d.ts.map +1 -0
  81. package/lib/{api.js → api/private-api.js} +1 -1
  82. package/lib/api/private-api.js.map +1 -0
  83. package/lib/api/public-api.d.ts.map +1 -0
  84. package/lib/api/public-api.js.map +1 -0
  85. package/lib/api-service.js +1 -1
  86. package/lib/api-service.js.map +1 -1
  87. package/lib/index.d.ts +5 -4
  88. package/lib/index.d.ts.map +1 -1
  89. package/lib/index.js +5 -4
  90. package/lib/index.js.map +1 -1
  91. package/lib/loan-account.js +3 -3
  92. package/lib/loan-account.js.map +1 -1
  93. package/lib/order-actions-with-credential.d.ts +2 -0
  94. package/lib/order-actions-with-credential.d.ts.map +1 -0
  95. package/lib/order-actions-with-credential.js +71 -0
  96. package/lib/order-actions-with-credential.js.map +1 -0
  97. package/lib/order-actions.js +3 -3
  98. package/lib/order-actions.js.map +1 -1
  99. package/lib/order.d.ts.map +1 -1
  100. package/lib/order.js +4 -7
  101. package/lib/order.js.map +1 -1
  102. package/lib/orders/cancelOrder.d.ts +1 -1
  103. package/lib/orders/cancelOrder.d.ts.map +1 -1
  104. package/lib/orders/cancelOrder.js +2 -2
  105. package/lib/orders/cancelOrder.js.map +1 -1
  106. package/lib/orders/modifyOrder.d.ts +1 -1
  107. package/lib/orders/modifyOrder.d.ts.map +1 -1
  108. package/lib/orders/modifyOrder.js +4 -4
  109. package/lib/orders/modifyOrder.js.map +1 -1
  110. package/lib/orders/submitOrder.d.ts +1 -1
  111. package/lib/orders/submitOrder.d.ts.map +1 -1
  112. package/lib/orders/submitOrder.js +4 -4
  113. package/lib/orders/submitOrder.js.map +1 -1
  114. package/lib/public-data/interest_rate.d.ts.map +1 -0
  115. package/lib/{interest_rate.js → public-data/interest_rate.js} +1 -1
  116. package/lib/public-data/interest_rate.js.map +1 -0
  117. package/lib/public-data/market-order.d.ts.map +1 -0
  118. package/lib/{market-order.js → public-data/market-order.js} +1 -1
  119. package/lib/public-data/market-order.js.map +1 -0
  120. package/lib/public-data/ohlc.d.ts.map +1 -0
  121. package/lib/{ohlc.js → public-data/ohlc.js} +3 -4
  122. package/lib/public-data/ohlc.js.map +1 -0
  123. package/lib/public-data/product.d.ts.map +1 -0
  124. package/lib/{product.js → public-data/product.js} +1 -1
  125. package/{dist → lib/public-data}/product.js.map +1 -1
  126. package/lib/public-data/quote.d.ts.map +1 -0
  127. package/lib/{quote.js → public-data/quote.js} +2 -3
  128. package/lib/public-data/quote.js.map +1 -0
  129. package/lib/services.js +4 -4
  130. package/lib/services.js.map +1 -1
  131. package/lib/strategy-account.d.ts +1 -28
  132. package/lib/strategy-account.d.ts.map +1 -1
  133. package/lib/strategy-account.js +6 -14
  134. package/lib/strategy-account.js.map +1 -1
  135. package/lib/trade.js +6 -8
  136. package/lib/trade.js.map +1 -1
  137. package/lib/transfer.js +17 -15
  138. package/lib/transfer.js.map +1 -1
  139. package/lib/utils/provideOHLCFromTimeBackwardService.d.ts.map +1 -0
  140. package/lib/utils/provideOHLCFromTimeBackwardService.js.map +1 -0
  141. package/lib/utils/provideSeriesFromTimeBackwardService.d.ts.map +1 -0
  142. package/lib/utils/provideSeriesFromTimeBackwardService.js.map +1 -0
  143. package/lib/ws.d.ts +1 -1
  144. package/lib/ws.d.ts.map +1 -1
  145. package/lib/ws.js.map +1 -1
  146. package/package.json +2 -1
  147. package/temp/package-deps.json +34 -33
  148. package/dist/api.js.map +0 -1
  149. package/dist/interest_rate.js.map +0 -1
  150. package/dist/market-order.js.map +0 -1
  151. package/dist/ohlc.js.map +0 -1
  152. package/dist/provideOHLCFromTimeBackwardService.js.map +0 -1
  153. package/dist/provideSeriesFromTimeBackwardService.js.map +0 -1
  154. package/dist/public-api.js.map +0 -1
  155. package/dist/quote.js.map +0 -1
  156. package/dist/websocket.js +0 -157
  157. package/dist/websocket.js.map +0 -1
  158. package/lib/api.d.ts.map +0 -1
  159. package/lib/api.js.map +0 -1
  160. package/lib/interest_rate.d.ts.map +0 -1
  161. package/lib/interest_rate.js.map +0 -1
  162. package/lib/market-order.d.ts.map +0 -1
  163. package/lib/market-order.js.map +0 -1
  164. package/lib/ohlc.d.ts.map +0 -1
  165. package/lib/ohlc.js.map +0 -1
  166. package/lib/product.d.ts.map +0 -1
  167. package/lib/product.js.map +0 -1
  168. package/lib/provideOHLCFromTimeBackwardService.d.ts.map +0 -1
  169. package/lib/provideOHLCFromTimeBackwardService.js.map +0 -1
  170. package/lib/provideSeriesFromTimeBackwardService.d.ts.map +0 -1
  171. package/lib/provideSeriesFromTimeBackwardService.js.map +0 -1
  172. package/lib/public-api.d.ts.map +0 -1
  173. package/lib/public-api.js.map +0 -1
  174. package/lib/quote.d.ts.map +0 -1
  175. package/lib/quote.js.map +0 -1
  176. package/lib/websocket.d.ts +0 -15
  177. package/lib/websocket.d.ts.map +0 -1
  178. package/lib/websocket.js +0 -163
  179. package/lib/websocket.js.map +0 -1
  180. /package/dist/{public-api.js → api/public-api.js} +0 -0
  181. /package/dist/{provideOHLCFromTimeBackwardService.js → utils/provideOHLCFromTimeBackwardService.js} +0 -0
  182. /package/dist/{provideSeriesFromTimeBackwardService.js → utils/provideSeriesFromTimeBackwardService.js} +0 -0
  183. /package/lib/{public-api.d.ts → api/public-api.d.ts} +0 -0
  184. /package/lib/{public-api.js → api/public-api.js} +0 -0
  185. /package/lib/{interest_rate.d.ts → public-data/interest_rate.d.ts} +0 -0
  186. /package/lib/{market-order.d.ts → public-data/market-order.d.ts} +0 -0
  187. /package/lib/{ohlc.d.ts → public-data/ohlc.d.ts} +0 -0
  188. /package/lib/{product.d.ts → public-data/product.d.ts} +0 -0
  189. /package/lib/{quote.d.ts → public-data/quote.d.ts} +0 -0
  190. /package/lib/{provideOHLCFromTimeBackwardService.d.ts → utils/provideOHLCFromTimeBackwardService.d.ts} +0 -0
  191. /package/lib/{provideOHLCFromTimeBackwardService.js → utils/provideOHLCFromTimeBackwardService.js} +0 -0
  192. /package/lib/{provideSeriesFromTimeBackwardService.d.ts → utils/provideSeriesFromTimeBackwardService.d.ts} +0 -0
  193. /package/lib/{provideSeriesFromTimeBackwardService.js → utils/provideSeriesFromTimeBackwardService.js} +0 -0
package/dist/account.js CHANGED
@@ -1,16 +1,23 @@
1
+ import { createCache } from '@yuants/cache';
1
2
  import { addAccountMarket, provideAccountInfoService } from '@yuants/data-account';
2
3
  import { providePendingOrdersService } from '@yuants/data-order';
3
4
  import { Terminal } from '@yuants/protocol';
4
5
  import { encodePath } from '@yuants/utils';
5
- import { defer, filter, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';
6
- import { getAccountConfig, getDefaultCredential, getTradeOrdersPending } from './api';
7
- import { getTradingAccountInfo, getFundingAccountInfo, getEarningAccountInfo, marketIndexTickerUSDT$, } from './accountInfos';
6
+ import { defer } from 'rxjs';
7
+ import { getEarningAccountInfo, getFundingAccountInfo, getTradingAccountInfo, marketIndexTickerUSDT$, } from './accountInfos';
8
+ import { getAccountConfig, getDefaultCredential, getTradeOrdersPending } from './api/private-api';
8
9
  const terminal = Terminal.fromNodeEnv();
9
10
  const credential = getDefaultCredential();
10
- export const accountConfig$ = defer(() => getAccountConfig(credential)).pipe(repeat({ delay: 10000 }), retry({ delay: 10000 }), shareReplay(1));
11
- export const accountUid$ = accountConfig$.pipe(map((x) => x.data[0].uid), filter((x) => !!x), shareReplay(1));
11
+ export const accountConfigCache = createCache(() => getAccountConfig(credential), {
12
+ expire: 100000,
13
+ swrAfter: 10000,
14
+ });
15
+ export const accountUidCache = createCache(async () => {
16
+ const config = await accountConfigCache.query('');
17
+ return config === null || config === void 0 ? void 0 : config.data[0].uid;
18
+ });
12
19
  defer(async () => {
13
- const uid = await firstValueFrom(accountUid$);
20
+ const uid = await accountUidCache.query('');
14
21
  const account_id = `okx/${uid}/trading`;
15
22
  providePendingOrdersService(terminal, account_id, async () => {
16
23
  const orders = await getTradeOrdersPending(credential, {});
@@ -39,23 +46,30 @@ defer(async () => {
39
46
  });
40
47
  }, { auto_refresh_interval: 5000 });
41
48
  }).subscribe();
42
- export const tradingAccountId$ = accountUid$.pipe(map((uid) => `okx/${uid}/trading`), shareReplay(1));
49
+ export const getTradingAccountId = async () => {
50
+ const uid = await accountUidCache.query('');
51
+ return `okx/${uid}/trading`;
52
+ };
53
+ export const getStrategyAccountId = async () => {
54
+ const uid = await accountUidCache.query('');
55
+ return `okx/${uid}/strategy`;
56
+ };
43
57
  defer(async () => {
44
- const tradingAccountId = await firstValueFrom(tradingAccountId$);
58
+ const tradingAccountId = await getTradingAccountId();
45
59
  addAccountMarket(terminal, { account_id: tradingAccountId, market_id: 'OKX' });
46
60
  provideAccountInfoService(terminal, tradingAccountId, () => getTradingAccountInfo(credential), {
47
61
  auto_refresh_interval: 1000,
48
62
  });
49
63
  }).subscribe();
50
64
  defer(async () => {
51
- const uid = await firstValueFrom(accountUid$);
65
+ const uid = await accountUidCache.query('');
52
66
  const fundingAccountId = `okx/${uid}/funding/USDT`;
53
67
  provideAccountInfoService(terminal, fundingAccountId, () => getFundingAccountInfo(credential), {
54
68
  auto_refresh_interval: 1000,
55
69
  });
56
70
  }).subscribe();
57
71
  defer(async () => {
58
- const uid = await firstValueFrom(accountUid$);
72
+ const uid = await accountUidCache.query('');
59
73
  const earningAccountId = `okx/${uid}/earning/USDT`;
60
74
  provideAccountInfoService(terminal, earningAccountId, () => getEarningAccountInfo(credential), {
61
75
  auto_refresh_interval: 5000,
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, provideAccountInfoService } from '@yuants/data-account';\nimport { providePendingOrdersService } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { defer, filter, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';\nimport { getAccountConfig, getDefaultCredential, getTradeOrdersPending } from './api';\nimport {\n getTradingAccountInfo,\n getFundingAccountInfo,\n getEarningAccountInfo,\n marketIndexTickerUSDT$,\n} from './accountInfos';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst credential = getDefaultCredential();\n\nexport const accountConfig$ = defer(() => getAccountConfig(credential)).pipe(\n repeat({ delay: 10_000 }),\n retry({ delay: 10_000 }),\n shareReplay(1),\n);\n\nexport const accountUid$ = accountConfig$.pipe(\n map((x) => x.data[0].uid),\n filter((x) => !!x),\n shareReplay(1),\n);\n\ndefer(async () => {\n const uid = await firstValueFrom(accountUid$);\n const account_id = `okx/${uid}/trading`;\n providePendingOrdersService(\n terminal,\n account_id,\n async () => {\n const orders = await getTradeOrdersPending(credential, {});\n return orders.data.map((x) => {\n const order_type = x.ordType === 'market' ? 'MARKET' : x.ordType === 'limit' ? 'LIMIT' : 'UNKNOWN';\n\n const order_direction =\n x.side === 'buy'\n ? x.posSide === 'long'\n ? 'OPEN_LONG'\n : 'CLOSE_SHORT'\n : x.posSide === 'short'\n ? 'OPEN_SHORT'\n : 'CLOSE_LONG';\n return {\n order_id: x.ordId,\n account_id,\n product_id: encodePath(x.instType, x.instId),\n submit_at: +x.cTime,\n filled_at: +x.fillTime,\n order_type,\n order_direction,\n volume: +x.sz,\n traded_volume: +x.accFillSz,\n price: +x.px,\n traded_price: +x.avgPx,\n };\n });\n },\n { auto_refresh_interval: 5000 },\n );\n}).subscribe();\n\nexport const tradingAccountId$ = accountUid$.pipe(\n map((uid) => `okx/${uid}/trading`),\n shareReplay(1),\n);\n\ndefer(async () => {\n const tradingAccountId = await firstValueFrom(tradingAccountId$);\n addAccountMarket(terminal, { account_id: tradingAccountId, market_id: 'OKX' });\n\n provideAccountInfoService(terminal, tradingAccountId, () => getTradingAccountInfo(credential), {\n auto_refresh_interval: 1000,\n });\n}).subscribe();\n\ndefer(async () => {\n const uid = await firstValueFrom(accountUid$);\n\n const fundingAccountId = `okx/${uid}/funding/USDT`;\n\n provideAccountInfoService(terminal, fundingAccountId, () => getFundingAccountInfo(credential), {\n auto_refresh_interval: 1000,\n });\n}).subscribe();\n\ndefer(async () => {\n const uid = await firstValueFrom(accountUid$);\n const earningAccountId = `okx/${uid}/earning/USDT`;\n provideAccountInfoService(terminal, earningAccountId, () => getEarningAccountInfo(credential), {\n auto_refresh_interval: 5000,\n });\n}).subscribe();\n\n// 导出 marketIndexTickerUSDT$ 供其他模块使用\nexport { marketIndexTickerUSDT$ };\n"]}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCache } from '@yuants/cache';\nimport { addAccountMarket, provideAccountInfoService } from '@yuants/data-account';\nimport { providePendingOrdersService } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { defer } from 'rxjs';\nimport {\n getEarningAccountInfo,\n getFundingAccountInfo,\n getTradingAccountInfo,\n marketIndexTickerUSDT$,\n} from './accountInfos';\nimport { getAccountConfig, getDefaultCredential, getTradeOrdersPending } from './api/private-api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst credential = getDefaultCredential();\n\nexport const accountConfigCache = createCache(() => getAccountConfig(credential), {\n expire: 100_000,\n swrAfter: 10_000,\n});\n\nexport const accountUidCache = createCache(async () => {\n const config = await accountConfigCache.query('');\n return config?.data[0].uid;\n});\n\ndefer(async () => {\n const uid = await accountUidCache.query('');\n const account_id = `okx/${uid}/trading`;\n providePendingOrdersService(\n terminal,\n account_id,\n async () => {\n const orders = await getTradeOrdersPending(credential, {});\n return orders.data.map((x) => {\n const order_type = x.ordType === 'market' ? 'MARKET' : x.ordType === 'limit' ? 'LIMIT' : 'UNKNOWN';\n\n const order_direction =\n x.side === 'buy'\n ? x.posSide === 'long'\n ? 'OPEN_LONG'\n : 'CLOSE_SHORT'\n : x.posSide === 'short'\n ? 'OPEN_SHORT'\n : 'CLOSE_LONG';\n return {\n order_id: x.ordId,\n account_id,\n product_id: encodePath(x.instType, x.instId),\n submit_at: +x.cTime,\n filled_at: +x.fillTime,\n order_type,\n order_direction,\n volume: +x.sz,\n traded_volume: +x.accFillSz,\n price: +x.px,\n traded_price: +x.avgPx,\n };\n });\n },\n { auto_refresh_interval: 5000 },\n );\n}).subscribe();\n\nexport const getTradingAccountId = async () => {\n const uid = await accountUidCache.query('');\n return `okx/${uid}/trading`;\n};\n\nexport const getStrategyAccountId = async () => {\n const uid = await accountUidCache.query('');\n return `okx/${uid}/strategy`;\n};\n\ndefer(async () => {\n const tradingAccountId = await getTradingAccountId();\n addAccountMarket(terminal, { account_id: tradingAccountId, market_id: 'OKX' });\n\n provideAccountInfoService(terminal, tradingAccountId, () => getTradingAccountInfo(credential), {\n auto_refresh_interval: 1000,\n });\n}).subscribe();\n\ndefer(async () => {\n const uid = await accountUidCache.query('');\n\n const fundingAccountId = `okx/${uid}/funding/USDT`;\n\n provideAccountInfoService(terminal, fundingAccountId, () => getFundingAccountInfo(credential), {\n auto_refresh_interval: 1000,\n });\n}).subscribe();\n\ndefer(async () => {\n const uid = await accountUidCache.query('');\n const earningAccountId = `okx/${uid}/earning/USDT`;\n provideAccountInfoService(terminal, earningAccountId, () => getEarningAccountInfo(credential), {\n auto_refresh_interval: 5000,\n });\n}).subscribe();\n\n// 导出 marketIndexTickerUSDT$ 供其他模块使用\nexport { marketIndexTickerUSDT$ };\n"]}
@@ -1,4 +1,4 @@
1
- import { getFinanceSavingsBalance } from '../api';
1
+ import { getFinanceSavingsBalance } from '../api/private-api';
2
2
  export const getEarningAccountInfo = async (credential) => {
3
3
  const offers = await getFinanceSavingsBalance(credential, {});
4
4
  const equity = offers.data.filter((x) => x.ccy === 'USDT').reduce((acc, x) => acc + +x.amt, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"earning.js","sourceRoot":"","sources":["../../src/accountInfos/earning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAG/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IAChG,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC;IAEpB,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM;YACN,IAAI;SACL;QACD,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { ICredential, getFinanceSavingsBalance } from '../api';\nimport { IAccountInfoCore } from './types';\n\nexport const getEarningAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const offers = await getFinanceSavingsBalance(credential, {});\n const equity = offers.data.filter((x) => x.ccy === 'USDT').reduce((acc, x) => acc + +x.amt, 0);\n const free = equity;\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions: [],\n };\n};\n"]}
1
+ {"version":3,"file":"earning.js","sourceRoot":"","sources":["../../src/accountInfos/earning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAG3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IAChG,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC;IAEpB,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM;YACN,IAAI;SACL;QACD,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { ICredential, getFinanceSavingsBalance } from '../api/private-api';\nimport { IAccountInfoCore } from './types';\n\nexport const getEarningAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const offers = await getFinanceSavingsBalance(credential, {});\n const equity = offers.data.filter((x) => x.ccy === 'USDT').reduce((acc, x) => acc + +x.amt, 0);\n const free = equity;\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions: [],\n };\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { encodePath } from '@yuants/utils';
2
2
  import { firstValueFrom } from 'rxjs';
3
- import { getAssetBalances } from '../api';
3
+ import { getAssetBalances } from '../api/private-api';
4
4
  import { marketIndexTickerUSDT$ } from './trading';
5
5
  export const getFundingAccountInfo = async (credential) => {
6
6
  const [assetBalances, marketIndexTickerUSDT] = await Promise.all([
@@ -1 +1 @@
1
- {"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/accountInfos/funding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAe,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IAChG,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/D,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC;QAChC,cAAc,CAAC,sBAAsB,CAAC;KACvC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE;YACpB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACvB,MAAM,IAAI,OAAO,CAAC;YAClB,IAAI,IAAI,OAAO,CAAC;YAChB,OAAO;SACR;QAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QAEtD,SAAS,CAAC,IAAI,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;YACd,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG;YACnB,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,CAAC;YAClB,cAAc,EAAE,KAAK;YACrB,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,IAAI,SAAS,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM;YACN,IAAI;SACL;QACD,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { firstValueFrom } from 'rxjs';\nimport { ICredential, getAssetBalances } from '../api';\nimport { marketIndexTickerUSDT$ } from './trading';\nimport { IAccountInfoCore } from './types';\n\nexport const getFundingAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const [assetBalances, marketIndexTickerUSDT] = await Promise.all([\n getAssetBalances(credential, {}),\n firstValueFrom(marketIndexTickerUSDT$),\n ]);\n\n const positions: IPosition[] = [];\n let equity = 0;\n let free = 0;\n\n assetBalances.data.forEach((x) => {\n if (x.ccy === 'USDT') {\n const balance = +x.bal;\n equity += balance;\n free += balance;\n return;\n }\n\n const price = marketIndexTickerUSDT.get(`${x.ccy}-USDT`) || 0;\n const valuation = price * +x.bal || 0;\n const productId = encodePath('SPOT', `${x.ccy}-USDT`);\n\n positions.push({\n datasource_id: 'OKX',\n position_id: productId,\n product_id: productId,\n direction: 'LONG',\n volume: +x.bal,\n free_volume: +x.bal,\n position_price: price,\n floating_profit: 0,\n closable_price: price,\n valuation,\n });\n\n equity += valuation;\n });\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n};\n"]}
1
+ {"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/accountInfos/funding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAe,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IAChG,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/D,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC;QAChC,cAAc,CAAC,sBAAsB,CAAC;KACvC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE;YACpB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACvB,MAAM,IAAI,OAAO,CAAC;YAClB,IAAI,IAAI,OAAO,CAAC;YAChB,OAAO;SACR;QAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QAEtD,SAAS,CAAC,IAAI,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;YACd,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG;YACnB,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,CAAC;YAClB,cAAc,EAAE,KAAK;YACrB,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,IAAI,SAAS,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM;YACN,IAAI;SACL;QACD,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { firstValueFrom } from 'rxjs';\nimport { ICredential, getAssetBalances } from '../api/private-api';\nimport { marketIndexTickerUSDT$ } from './trading';\nimport { IAccountInfoCore } from './types';\n\nexport const getFundingAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const [assetBalances, marketIndexTickerUSDT] = await Promise.all([\n getAssetBalances(credential, {}),\n firstValueFrom(marketIndexTickerUSDT$),\n ]);\n\n const positions: IPosition[] = [];\n let equity = 0;\n let free = 0;\n\n assetBalances.data.forEach((x) => {\n if (x.ccy === 'USDT') {\n const balance = +x.bal;\n equity += balance;\n free += balance;\n return;\n }\n\n const price = marketIndexTickerUSDT.get(`${x.ccy}-USDT`) || 0;\n const valuation = price * +x.bal || 0;\n const productId = encodePath('SPOT', `${x.ccy}-USDT`);\n\n positions.push({\n datasource_id: 'OKX',\n position_id: productId,\n product_id: productId,\n direction: 'LONG',\n volume: +x.bal,\n free_volume: +x.bal,\n position_price: price,\n floating_profit: 0,\n closable_price: price,\n valuation,\n });\n\n equity += valuation;\n });\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { encodePath } from '@yuants/utils';
2
- import { getFlexibleLoanInfo } from '../api';
2
+ import { getFlexibleLoanInfo } from '../api/private-api';
3
3
  export const getLoanAccountInfo = async (credential) => {
4
4
  const res = await getFlexibleLoanInfo(credential);
5
5
  const data = res.data[0];
@@ -1 +1 @@
1
- {"version":3,"file":"loan.js","sourceRoot":"","sources":["../../src/accountInfos/loan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAe,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAG1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IAC7F,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QAChC,SAAS,CAAC,IAAI,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ,IAAI,CAAC,GAAG,OAAO;YACnC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;YACjB,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG;YACtB,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;YACzC,SAAS,EAAE,OAAO;YAClB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;KACJ;IACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE;QAC5C,SAAS,CAAC,IAAI,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ,UAAU,CAAC,GAAG,OAAO;YACzC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG;YACvB,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG;YAC5B,WAAW,EAAE,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC;YACrD,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;KACJ;IACD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC;IAElD,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM;YACN,IAAI;SACL;QACD,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { ICredential, getFlexibleLoanInfo } from '../api';\nimport { IAccountInfoCore } from './types';\n\nexport const getLoanAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const res = await getFlexibleLoanInfo(credential);\n const data = res.data[0];\n\n const positions: IPosition[] = [];\n for (const loan of data.loanData) {\n positions.push({\n datasource_id: 'OKX',\n product_id: `SPOT/${loan.ccy}-USDT`,\n volume: +loan.amt,\n free_volume: +loan.amt,\n position_id: encodePath('loan', loan.ccy),\n direction: 'SHORT',\n position_price: 0,\n closable_price: 0,\n floating_profit: 0,\n valuation: 0,\n });\n }\n for (const collateral of data.collateralData) {\n positions.push({\n datasource_id: 'OKX',\n product_id: `SPOT/${collateral.ccy}-USDT`,\n volume: +collateral.amt,\n free_volume: +collateral.amt,\n position_id: encodePath('collateral', collateral.ccy),\n direction: 'LONG',\n position_price: 0,\n closable_price: 0,\n floating_profit: 0,\n valuation: 0,\n });\n }\n const equity = +data.collateralNotionalUsd - +data.loanNotionalUsd;\n const free = equity - +data.collateralNotionalUsd;\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n};\n"]}
1
+ {"version":3,"file":"loan.js","sourceRoot":"","sources":["../../src/accountInfos/loan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAe,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IAC7F,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QAChC,SAAS,CAAC,IAAI,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ,IAAI,CAAC,GAAG,OAAO;YACnC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;YACjB,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG;YACtB,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;YACzC,SAAS,EAAE,OAAO;YAClB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;KACJ;IACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE;QAC5C,SAAS,CAAC,IAAI,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ,UAAU,CAAC,GAAG,OAAO;YACzC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG;YACvB,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG;YAC5B,WAAW,EAAE,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC;YACrD,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;KACJ;IACD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC;IAElD,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM;YACN,IAAI;SACL;QACD,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { ICredential, getFlexibleLoanInfo } from '../api/private-api';\nimport { IAccountInfoCore } from './types';\n\nexport const getLoanAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const res = await getFlexibleLoanInfo(credential);\n const data = res.data[0];\n\n const positions: IPosition[] = [];\n for (const loan of data.loanData) {\n positions.push({\n datasource_id: 'OKX',\n product_id: `SPOT/${loan.ccy}-USDT`,\n volume: +loan.amt,\n free_volume: +loan.amt,\n position_id: encodePath('loan', loan.ccy),\n direction: 'SHORT',\n position_price: 0,\n closable_price: 0,\n floating_profit: 0,\n valuation: 0,\n });\n }\n for (const collateral of data.collateralData) {\n positions.push({\n datasource_id: 'OKX',\n product_id: `SPOT/${collateral.ccy}-USDT`,\n volume: +collateral.amt,\n free_volume: +collateral.amt,\n position_id: encodePath('collateral', collateral.ccy),\n direction: 'LONG',\n position_price: 0,\n closable_price: 0,\n floating_profit: 0,\n valuation: 0,\n });\n }\n const equity = +data.collateralNotionalUsd - +data.loanNotionalUsd;\n const free = equity - +data.collateralNotionalUsd;\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { encodePath } from '@yuants/utils';
2
- import { getGridOrdersAlgoPending, getGridPositions } from '../api';
2
+ import { getGridOrdersAlgoPending, getGridPositions } from '../api/private-api';
3
3
  export const getStrategyAccountInfo = async (credential) => {
4
4
  // TODO: 需要分页获取所有的网格订单 (每页 100 条)
5
5
  const [gridAlgoOrders] = await Promise.all([
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../src/accountInfos/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAe,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAGjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IACjG,iCAAiC;IACjC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,wBAAwB,CAAC,UAAU,EAAE;YACnC,WAAW,EAAE,eAAe;SAC7B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,gBAAgB,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CACpF,CACF,CAAC;IAEF,gBAAgB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;;QAChD,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,CAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,EAAE,WAAW,CAAA,CAAC;QAC3D,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,0CAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;;YACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE;gBACvB,MAAM,YAAY,GAAG,MAAA,MAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,CAAC,0CAAE,SAAS,mCAAI,EAAE,CAAC;gBACnE,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrE,SAAS,CAAC,IAAI,CAAC;oBACb,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;oBACzD,aAAa,EAAE,KAAK;oBACpB,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;oBAC1D,SAAS;oBACT,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC/B,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG;oBAC1B,cAAc,EAAE,CAAC,QAAQ,CAAC,KAAK;oBAC/B,eAAe,EAAE,CAAC,QAAQ,CAAC,GAAG;oBAC9B,cAAc,EAAE,CAAC,QAAQ,CAAC,IAAI;oBAC9B,SAAS,EAAE,CAAC,QAAQ,CAAC,WAAW;iBACjC,CAAC,CAAC;gBACH,iBAAiB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,CAAC,EAAE;YAClB,mCAAmC;YACnC,WAAW,IAAI,CAAC,CAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,EAAE,UAAU,CAAA,GAAG,CAAC,CAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,EAAE,QAAQ,CAAA,CAAC;SAClG;aAAM;YACL,oCAAoC;YACpC,yBAAyB;YACzB,WAAW,IAAI,iBAAiB,GAAG,QAAQ,CAAC;SAC7C;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,CAAC,EAAE,0BAA0B;SACpC;QACD,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { ICredential, getGridOrdersAlgoPending, getGridPositions } from '../api';\nimport { IAccountInfoCore } from './types';\n\nexport const getStrategyAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n // TODO: 需要分页获取所有的网格订单 (每页 100 条)\n const [gridAlgoOrders] = await Promise.all([\n getGridOrdersAlgoPending(credential, {\n algoOrdType: 'contract_grid',\n }),\n ]);\n\n let totalEquity = 0;\n const positions: IPosition[] = [];\n\n const gridPositionsRes = await Promise.all(\n gridAlgoOrders.data.map((item) =>\n getGridPositions(credential, { algoOrdType: 'contract_grid', algoId: item.algoId }),\n ),\n );\n\n gridPositionsRes.forEach((gridPositions, index) => {\n let positionValuation = 0;\n const leverage = +gridAlgoOrders.data?.[index].actualLever;\n gridPositions?.data?.forEach((position) => {\n if (+position.pos !== 0) {\n const directionRaw = gridAlgoOrders.data?.[index]?.direction ?? '';\n const direction = directionRaw ? directionRaw.toUpperCase() : 'LONG';\n positions.push({\n position_id: encodePath(position.algoId, position.instId),\n datasource_id: 'OKX',\n product_id: encodePath(position.instType, position.instId),\n direction,\n volume: Math.abs(+position.pos),\n free_volume: +position.pos,\n position_price: +position.avgPx,\n floating_profit: +position.upl,\n closable_price: +position.last,\n valuation: +position.notionalUsd,\n });\n positionValuation += +position.notionalUsd;\n }\n });\n if (leverage === 0) {\n // 实际杠杆为 0,说明没有持仓,直接把投资金额和累计盈亏算到净值里\n totalEquity += +gridAlgoOrders.data?.[index].investment + +gridAlgoOrders.data?.[index].totalPnl;\n } else {\n // 历史提取金额不会从 investment, totalPnl 扣减\n // 计算净值需要通过仓位的名义价值和实际杠杆计算\n totalEquity += positionValuation / leverage;\n }\n });\n\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n free: 0, // TODO: 累计策略的可提取资金作为 free\n },\n positions,\n };\n};\n"]}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../src/accountInfos/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAe,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG7F,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;IACjG,iCAAiC;IACjC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,wBAAwB,CAAC,UAAU,EAAE;YACnC,WAAW,EAAE,eAAe;SAC7B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,gBAAgB,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CACpF,CACF,CAAC;IAEF,gBAAgB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;;QAChD,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,CAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,EAAE,WAAW,CAAA,CAAC;QAC3D,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,0CAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;;YACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE;gBACvB,MAAM,YAAY,GAAG,MAAA,MAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,CAAC,0CAAE,SAAS,mCAAI,EAAE,CAAC;gBACnE,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrE,SAAS,CAAC,IAAI,CAAC;oBACb,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;oBACzD,aAAa,EAAE,KAAK;oBACpB,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;oBAC1D,SAAS;oBACT,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC/B,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG;oBAC1B,cAAc,EAAE,CAAC,QAAQ,CAAC,KAAK;oBAC/B,eAAe,EAAE,CAAC,QAAQ,CAAC,GAAG;oBAC9B,cAAc,EAAE,CAAC,QAAQ,CAAC,IAAI;oBAC9B,SAAS,EAAE,CAAC,QAAQ,CAAC,WAAW;iBACjC,CAAC,CAAC;gBACH,iBAAiB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,CAAC,EAAE;YAClB,mCAAmC;YACnC,WAAW,IAAI,CAAC,CAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,EAAE,UAAU,CAAA,GAAG,CAAC,CAAA,MAAA,cAAc,CAAC,IAAI,0CAAG,KAAK,EAAE,QAAQ,CAAA,CAAC;SAClG;aAAM;YACL,oCAAoC;YACpC,yBAAyB;YACzB,WAAW,IAAI,iBAAiB,GAAG,QAAQ,CAAC;SAC7C;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,CAAC,EAAE,0BAA0B;SACpC;QACD,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { ICredential, getGridOrdersAlgoPending, getGridPositions } from '../api/private-api';\nimport { IAccountInfoCore } from './types';\n\nexport const getStrategyAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n // TODO: 需要分页获取所有的网格订单 (每页 100 条)\n const [gridAlgoOrders] = await Promise.all([\n getGridOrdersAlgoPending(credential, {\n algoOrdType: 'contract_grid',\n }),\n ]);\n\n let totalEquity = 0;\n const positions: IPosition[] = [];\n\n const gridPositionsRes = await Promise.all(\n gridAlgoOrders.data.map((item) =>\n getGridPositions(credential, { algoOrdType: 'contract_grid', algoId: item.algoId }),\n ),\n );\n\n gridPositionsRes.forEach((gridPositions, index) => {\n let positionValuation = 0;\n const leverage = +gridAlgoOrders.data?.[index].actualLever;\n gridPositions?.data?.forEach((position) => {\n if (+position.pos !== 0) {\n const directionRaw = gridAlgoOrders.data?.[index]?.direction ?? '';\n const direction = directionRaw ? directionRaw.toUpperCase() : 'LONG';\n positions.push({\n position_id: encodePath(position.algoId, position.instId),\n datasource_id: 'OKX',\n product_id: encodePath(position.instType, position.instId),\n direction,\n volume: Math.abs(+position.pos),\n free_volume: +position.pos,\n position_price: +position.avgPx,\n floating_profit: +position.upl,\n closable_price: +position.last,\n valuation: +position.notionalUsd,\n });\n positionValuation += +position.notionalUsd;\n }\n });\n if (leverage === 0) {\n // 实际杠杆为 0,说明没有持仓,直接把投资金额和累计盈亏算到净值里\n totalEquity += +gridAlgoOrders.data?.[index].investment + +gridAlgoOrders.data?.[index].totalPnl;\n } else {\n // 历史提取金额不会从 investment, totalPnl 扣减\n // 计算净值需要通过仓位的名义价值和实际杠杆计算\n totalEquity += positionValuation / leverage;\n }\n });\n\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n free: 0, // TODO: 累计策略的可提取资金作为 free\n },\n positions,\n };\n};\n"]}
@@ -1,8 +1,8 @@
1
1
  import { encodePath } from '@yuants/utils';
2
2
  import { defer, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';
3
- import { getAccountBalance, getAccountPositions } from '../api';
4
- import { productService } from '../product';
5
- import { getMarketIndexTicker } from '../public-api';
3
+ import { getAccountBalance, getAccountPositions } from '../api/private-api';
4
+ import { getMarketIndexTicker } from '../api/public-api';
5
+ import { productService } from '../public-data/product';
6
6
  export const marketIndexTickerUSDT$ = defer(() => getMarketIndexTicker({ quoteCcy: 'USDT' })).pipe(map((x) => {
7
7
  const mapInstIdToPrice = new Map();
8
8
  x.data.forEach((inst) => mapInstIdToPrice.set(inst.instId, Number(inst.idxPx)));
@@ -1 +1 @@
1
- {"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"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","sourcesContent":["import { IAccountMoney, IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { defer, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';\nimport { ICredential, getAccountBalance, getAccountPositions } from '../api';\nimport { productService } from '../product';\nimport { getMarketIndexTicker } from '../public-api';\nimport { IAccountInfoCore } from './types';\n\nexport const marketIndexTickerUSDT$ = defer(() => getMarketIndexTicker({ quoteCcy: 'USDT' })).pipe(\n map((x) => {\n const mapInstIdToPrice = new Map<string, number>();\n x.data.forEach((inst: any) => mapInstIdToPrice.set(inst.instId, Number(inst.idxPx)));\n return mapInstIdToPrice;\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nexport const getTradingAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const [positionsApi, balanceApi, mapProductIdToProduct, marketIndexTickerUSDT] = await Promise.all([\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n firstValueFrom(productService.mapProductIdToProduct$),\n firstValueFrom(marketIndexTickerUSDT$),\n ]);\n\n let totalEquity = 0;\n let totalFree = 0;\n const positions: IPosition[] = [];\n\n balanceApi.data[0]?.details.forEach((detail) => {\n if (detail.ccy === 'USDT') {\n const balance = +(detail.cashBal ?? 0);\n const free = Math.min(\n balance, // free should no more than balance if there is much profits\n +(detail.availEq ?? 0),\n );\n const equity = +(detail.eq ?? 0) - +(detail.stgyEq ?? 0);\n totalEquity += equity;\n totalFree += free;\n } else {\n const volume = +(detail.cashBal ?? 0);\n const free_volume = Math.min(\n volume, // free should no more than balance if there is much profits\n +(detail.availEq ?? 0),\n );\n const closable_price = marketIndexTickerUSDT.get(detail.ccy + '-USDT') || 0;\n const delta_equity = volume * closable_price || 0;\n const delta_profit = +detail.totalPnl || 0;\n\n const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);\n positions.push({\n position_id: product_id,\n datasource_id: 'OKX',\n product_id: product_id,\n direction: 'LONG',\n volume: volume,\n free_volume: free_volume,\n position_price: +detail.accAvgPx,\n floating_profit: delta_profit,\n closable_price: closable_price,\n valuation: delta_equity,\n });\n\n totalEquity += delta_equity;\n }\n });\n positionsApi.data.forEach((x) => {\n const direction =\n x.posSide === 'long' ? 'LONG' : x.posSide === 'short' ? 'SHORT' : +x.pos > 0 ? 'LONG' : 'SHORT';\n const volume = Math.abs(+x.pos);\n const product_id = encodePath(x.instType, x.instId);\n const closable_price = +x.last;\n const valuation =\n (mapProductIdToProduct.get(product_id)?.value_scale ?? 1) * volume * closable_price || 0;\n\n positions.push({\n position_id: x.posId,\n datasource_id: 'OKX',\n product_id,\n direction,\n volume: volume,\n free_volume: +x.availPos,\n closable_price,\n position_price: +x.avgPx,\n floating_profit: +x.upl,\n valuation,\n });\n });\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n free: totalFree,\n },\n positions: positions,\n };\n};\n"]}
1
+ {"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAC9E,OAAO,EAAe,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAChG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACR,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC,EACF,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACvB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtB,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,UAAuB,EAA6B,EAAE;;IAChG,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjG,mBAAmB,CAAC,UAAU,EAAE,EAAE,CAAC;QACnC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC;QACjC,cAAc,CAAC,cAAc,CAAC,sBAAsB,CAAC;QACrD,cAAc,CAAC,sBAAsB,CAAC;KACvC,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;;QAC7C,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,EAAE;YACzB,MAAM,OAAO,GAAG,CAAC,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,OAAO,EAAE,4DAA4D;YACrE,CAAC,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC,CAAC,CACvB,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,CAAC,MAAA,MAAM,CAAC,EAAE,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAA,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC,CAAC;YACzD,WAAW,IAAI,MAAM,CAAC;YACtB,SAAS,IAAI,IAAI,CAAC;SACnB;aAAM;YACL,MAAM,MAAM,GAAG,CAAC,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,MAAM,EAAE,4DAA4D;YACpE,CAAC,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC,CAAC,CACvB,CAAC;YACF,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5E,MAAM,YAAY,GAAG,MAAM,GAAG,cAAc,IAAI,CAAC,CAAC;YAClD,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;YAE3C,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;YAC5D,SAAS,CAAC,IAAI,CAAC;gBACb,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,UAAU;gBACtB,SAAS,EAAE,MAAM;gBACjB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,WAAW;gBACxB,cAAc,EAAE,CAAC,MAAM,CAAC,QAAQ;gBAChC,eAAe,EAAE,YAAY;gBAC7B,cAAc,EAAE,cAAc;gBAC9B,SAAS,EAAE,YAAY;aACxB,CAAC,CAAC;YAEH,WAAW,IAAI,YAAY,CAAC;SAC7B;IACH,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;QAC9B,MAAM,SAAS,GACb,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAClG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/B,MAAM,SAAS,GACb,CAAC,MAAA,MAAA,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,0CAAE,WAAW,mCAAI,CAAC,CAAC,GAAG,MAAM,GAAG,cAAc,IAAI,CAAC,CAAC;QAE3F,SAAS,CAAC,IAAI,CAAC;YACb,WAAW,EAAE,CAAC,CAAC,KAAK;YACpB,aAAa,EAAE,KAAK;YACpB,UAAU;YACV,SAAS;YACT,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ;YACxB,cAAc;YACd,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK;YACxB,eAAe,EAAE,CAAC,CAAC,CAAC,GAAG;YACvB,SAAS;SACV,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,SAAS;SAChB;QACD,SAAS,EAAE,SAAS;KACrB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { defer, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';\nimport { ICredential, getAccountBalance, getAccountPositions } from '../api/private-api';\nimport { getMarketIndexTicker } from '../api/public-api';\nimport { productService } from '../public-data/product';\nimport { IAccountInfoCore } from './types';\n\nexport const marketIndexTickerUSDT$ = defer(() => getMarketIndexTicker({ quoteCcy: 'USDT' })).pipe(\n map((x) => {\n const mapInstIdToPrice = new Map<string, number>();\n x.data.forEach((inst: any) => mapInstIdToPrice.set(inst.instId, Number(inst.idxPx)));\n return mapInstIdToPrice;\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nexport const getTradingAccountInfo = async (credential: ICredential): Promise<IAccountInfoCore> => {\n const [positionsApi, balanceApi, mapProductIdToProduct, marketIndexTickerUSDT] = await Promise.all([\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n firstValueFrom(productService.mapProductIdToProduct$),\n firstValueFrom(marketIndexTickerUSDT$),\n ]);\n\n let totalEquity = 0;\n let totalFree = 0;\n const positions: IPosition[] = [];\n\n balanceApi.data[0]?.details.forEach((detail) => {\n if (detail.ccy === 'USDT') {\n const balance = +(detail.cashBal ?? 0);\n const free = Math.min(\n balance, // free should no more than balance if there is much profits\n +(detail.availEq ?? 0),\n );\n const equity = +(detail.eq ?? 0) - +(detail.stgyEq ?? 0);\n totalEquity += equity;\n totalFree += free;\n } else {\n const volume = +(detail.cashBal ?? 0);\n const free_volume = Math.min(\n volume, // free should no more than balance if there is much profits\n +(detail.availEq ?? 0),\n );\n const closable_price = marketIndexTickerUSDT.get(detail.ccy + '-USDT') || 0;\n const delta_equity = volume * closable_price || 0;\n const delta_profit = +detail.totalPnl || 0;\n\n const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);\n positions.push({\n position_id: product_id,\n datasource_id: 'OKX',\n product_id: product_id,\n direction: 'LONG',\n volume: volume,\n free_volume: free_volume,\n position_price: +detail.accAvgPx,\n floating_profit: delta_profit,\n closable_price: closable_price,\n valuation: delta_equity,\n });\n\n totalEquity += delta_equity;\n }\n });\n positionsApi.data.forEach((x) => {\n const direction =\n x.posSide === 'long' ? 'LONG' : x.posSide === 'short' ? 'SHORT' : +x.pos > 0 ? 'LONG' : 'SHORT';\n const volume = Math.abs(+x.pos);\n const product_id = encodePath(x.instType, x.instId);\n const closable_price = +x.last;\n const valuation =\n (mapProductIdToProduct.get(product_id)?.value_scale ?? 1) * volume * closable_price || 0;\n\n positions.push({\n position_id: x.posId,\n datasource_id: 'OKX',\n product_id,\n direction,\n volume: volume,\n free_volume: +x.availPos,\n closable_price,\n position_price: +x.avgPx,\n floating_profit: +x.upl,\n valuation,\n });\n });\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n free: totalFree,\n },\n positions: positions,\n };\n};\n"]}
@@ -446,4 +446,4 @@ export function getGridOrdersAlgoPending(credential, param) {
446
446
  export function getGridPositions(credential, param) {
447
447
  return request(credential, 'GET', '/api/v5/tradingBot/grid/positions', param);
448
448
  }
449
- //# sourceMappingURL=api.js.map
449
+ //# sourceMappingURL=private-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-api.js","sourceRoot":"","sources":["../../src/api/private-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 */\n\nexport interface ICredential {\n access_key: string;\n secret_key: string;\n passphrase: string;\n}\n\nexport const getDefaultCredential = (): ICredential => ({\n access_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n passphrase: process.env.PASSPHRASE!,\n});\n\nexport async function request(\n credential: ICredential,\n method: string,\n path: string,\n params?: Record<string, unknown>,\n) {\n const url = new URL('https://www.okx.com');\n url.pathname = path;\n if (method === 'GET' && params) {\n for (const key in params) {\n url.searchParams.set(key, String(params[key]));\n }\n }\n const timestamp = formatTime(Date.now(), 'UTC').replace(' ', 'T');\n const secret_key = credential.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': credential.access_key!,\n 'OK-ACCESS-SIGN': str,\n 'OK-ACCESS-TIMESTAMP': timestamp,\n 'OK-ACCESS-PASSPHRASE': credential.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\n console.info(\n formatTime(Date.now()),\n 'PrivateApiResponse',\n credential.access_key,\n method,\n url.href,\n res.status,\n );\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 */\nexport function getAssetValuation(\n credential: ICredential,\n params?: {\n ccy?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/asset/asset-valuation', params);\n}\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 */\nexport function getAccountConfig(credential: ICredential): 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: unknown[];\n spotRoleType: string;\n spotTraderInsts: unknown[];\n opAuth: string;\n kycLv: string;\n ip: string;\n perm: string;\n mainUid: string;\n }>;\n msg: string;\n}> {\n return request(credential, 'GET', '/api/v5/account/config');\n}\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 */\nexport function getFinanceSavingsBalance(\n credential: ICredential,\n params: {\n ccy?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/finance/savings/balance', params);\n}\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 */\nexport function postFinanceSavingsPurchaseRedempt(\n credential: ICredential,\n params: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n },\n): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n }[];\n}> {\n return request(credential, 'POST', '/api/v5/finance/savings/purchase-redempt', params);\n}\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 */\nexport function postAssetWithdrawal(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'POST', '/api/v5/asset/withdrawal', params);\n}\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 */\nexport function getAssetDepositAddress(\n credential: ICredential,\n params: {\n ccy: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/asset/deposit-address', params);\n}\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 */\nexport function getAssetWithdrawalHistory(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'GET', '/api/v5/asset/withdrawal-history', params);\n}\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 */\nexport function getAssetDepositHistory(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'GET', '/api/v5/asset/deposit-history', params);\n}\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 */\nexport function getAssetBalances(\n credential: ICredential,\n params: {\n ccy?: string;\n },\n): Promise<{\n code: string;\n msg: string;\n data: {\n availBal: string;\n bal: string;\n ccy: string;\n frozenBal: string;\n }[];\n}> {\n return request(credential, 'GET', '/api/v5/asset/balances', params);\n}\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 */\nexport function postAssetTransfer(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'POST', '/api/v5/asset/transfer', params);\n}\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 */\nexport function getAccountBalance(\n credential: ICredential,\n params: {\n ccy?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/account/balance', params);\n}\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 */\nexport function getAccountPositions(\n credential: ICredential,\n params: {\n instType?: string;\n instId?: string;\n posId?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/account/positions', params);\n}\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 */\nexport function getAccountMaxSize(\n credential: ICredential,\n params: {\n instId: string;\n tdMode: string;\n ccy?: string;\n px?: string;\n leverage?: string;\n tradeQuoteCcy?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/account/max-size', params);\n}\n\n/**\n * 赚币\n * GET / 查看项目\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\nexport function getFinanceStakingDeFiOffers(\n credential: ICredential,\n params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/finance/staking-defi/offers', params);\n}\n\n/**\n * 赚币\n * GET / 查看活跃订单\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\nexport function getFinanceStakingDeFiOrdersActive(\n credential: ICredential,\n params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n state?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/finance/staking-defi/orders-active', params);\n}\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 */\nexport function postTradeOrder(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'POST', '/api/v5/trade/order', params);\n}\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 */\nexport function postTradeAmendOrder(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'POST', '/api/v5/trade/amend-order', params);\n}\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 */\nexport function getTradeOrdersPending(\n credential: ICredential,\n 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 },\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: unknown[];\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}> {\n return request(credential, 'GET', '/api/v5/trade/orders-pending', params);\n}\n\n/**\n * 获取历史订单记录(近七天)\n *\n * 获取最近7天挂单,且完成的订单数据,包括7天以前挂单,但近7天才成交的订单数据。按照订单创建时间倒序排序。\n *\n * 已经撤销的未成交单 只保留2小时\n * 限速:40次/2s\n * 限速规则:User ID\n */\nexport function getTradeOrdersHistory(\n credential: ICredential,\n 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 },\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: unknown[];\n linkedAlgoOrd: unknown[];\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}> {\n return request(credential, 'GET', '/api/v5/trade/orders-history', params);\n}\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 */\nexport function postTradeCancelOrder(\n credential: ICredential,\n params: {\n instId: string;\n ordId?: string;\n clOrdId?: string;\n },\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}> {\n return request(credential, 'POST', '/api/v5/trade/cancel-order', params);\n}\n\n/**\n * 查看子账户列表\n *\n * 仅适用于母账户。\n *\n * 限速:2次/2s\n *\n * 限速规则:UserID\n */\nexport function getSubAccountList(\n credential: ICredential,\n params?: {\n enable?: string;\n subAct?: string;\n after?: string;\n before?: string;\n limit?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/users/subaccount/list', params);\n}\n\n/**\n * 设置子账户主动转出权限\n *\n * 设置子账户转出权限(仅适用于母账户),默认可转出至母账户。\n *\n * 限速:1次/s\n *\n * 限速规则:UserID\n */\nexport function postSetSubAccountTransferOut(\n credential: ICredential,\n params: {\n subAcct: string;\n canTransOut: boolean;\n },\n): Promise<{\n subAcct: string;\n canTransOut: boolean;\n}> {\n return request(credential, 'POST', '/api/v5/users/subaccount/set-transfer-out', params);\n}\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 */\nexport function getAssetTransferState(\n credential: ICredential,\n params: {\n transId?: string;\n clientId?: string;\n type?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/asset/transfer-state', params);\n}\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 */\nexport function getAssetCurrencies(\n credential: ICredential,\n params?: {\n ccy?: string;\n },\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}> {\n return request(credential, 'GET', '/api/v5/asset/currencies', params);\n}\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 */\nexport function getFlexibleLoanInfo(credential: ICredential): 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}> {\n return request(credential, 'GET', '/api/v5/finance/flexible-loan/loan-info');\n}\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 */\nexport function getAccountBills(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'GET', '/api/v5/account/bills', params);\n}\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 */\nexport function getAccountBillsArchive(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'GET', '/api/v5/account/bills-archive', params);\n}\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 */\nexport function postGridAlgoOrder(\n credential: ICredential,\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}> {\n return request(credential, 'POST', '/api/v5/tradingBot/grid/order-algo', params);\n}\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 */\nexport function getGridOrdersAlgoPending(\n credential: ICredential,\n 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 },\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}> {\n return request(credential, 'GET', '/api/v5/tradingBot/grid/orders-algo-pending', param);\n}\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 */\nexport function getGridPositions(\n credential: ICredential,\n param: {\n algoOrdType: 'contract_grid';\n algoId: string;\n },\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}> {\n return request(credential, '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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatTime } from '@yuants/utils';\n\n/**\n * 基础公共请求函数\n */\nasync function publicRequest(method: string, path: string, params?: Record<string, string>) {\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\n console.info(formatTime(Date.now()), method, url.href);\n const res = await fetch(url.href, { method });\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 */\nexport const 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}> => publicRequest('GET', '/api/v5/market/tickers', params);\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 */\nexport const 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}> => publicRequest('GET', '/api/v5/public/instruments', 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-funding-rate\n */\nexport const 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}> => publicRequest('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 */\nexport const 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}> => publicRequest('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 */\nexport const 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}> => publicRequest('GET', '/api/v5/market/history-mark-price-candles', params);\n\n/**\n * 获取交易产品历史K线数据\n *\n * 获取最近几年的历史k线数据(1s k线支持查询最近3个月的数据)\n *\n * 限速:20次/2s\n * 限速规则:IP\n *\n * 期权不支持 1s K线, 其他业务线 (币币, 杠杆, 交割和永续)支持\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-candlesticks-history\n */\nexport const 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}> => publicRequest('GET', '/api/v5/market/history-candles', 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 */\nexport const 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}> => publicRequest('GET', '/api/v5/public/open-interest', params);\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 */\nexport const 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}> => publicRequest('GET', '/api/v5/public/interest-rate-loan-quota');\n\n/**\n * 获取市场借贷历史(公共)\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 */\nexport const 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}> => publicRequest('GET', '/api/v5/finance/savings/lending-rate-history', params);\n\n/**\n * 获取指数行情数据\n *\n * 限速:20次/2s\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-index-tickers\n */\nexport const 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}> => publicRequest('GET', '/api/v5/market/index-tickers', params);\n\n/**\n * 获取产品深度\n *\n * 限速:40次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-order-book\n */\nexport const getMarketBooks = (params: {\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}> => publicRequest('GET', '/api/v5/market/books', params);\n\n/**\n * 获取衍生品仓位档位\n *\n * 获取全部仓位档位对应信息\n *\n * 限速:10次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-position-tiers\n */\nexport const getPositionTiers = (params: {\n instType: string;\n tdMode: string;\n instFamily?: string;\n instId?: string;\n uly?: string;\n ccy?: string;\n tier?: string;\n}): Promise<{\n code: string;\n msg: string;\n data: Array<{\n uly: string;\n instFamily: string;\n instId: string;\n tier: string;\n minSz: string;\n maxSz: string;\n mmr: string;\n imr: string;\n maxLever: string;\n optMgnFactor: string;\n quoteMaxLoan: string;\n baseMaxLoan: string;\n }>;\n}> => publicRequest('GET', '/api/v5/public/position-tiers', params);\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Terminal } from '@yuants/protocol';
2
- import { getPositionTiers } from './public-api';
2
+ import { getPositionTiers } from './api/public-api';
3
3
  const terminal = Terminal.fromNodeEnv();
4
4
  terminal.server.provideService('OKX/PositionTiers', {
5
5
  required: ['instType', 'tdMode'],
@@ -1 +1 @@
1
- {"version":3,"file":"api-service.js","sourceRoot":"","sources":["../src/api-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAY5B,mBAAmB,EACnB;IACE,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IAChC,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACvB,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACvB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KACzB;CACF,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;IACZ,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI;SACL;KACF,CAAC;AACJ,CAAC,EACD;IACE,UAAU,EAAE,CAAC;IACb,qBAAqB,EAAE,EAAE;IACzB,4BAA4B,EAAE,IAAI;CACnC,CACF,CAAC","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { getPositionTiers } from './public-api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nterminal.server.provideService<\n {\n instType: string;\n tdMode: string;\n instFamily?: string;\n instId?: string;\n uly?: string;\n ccy?: string;\n tier?: string;\n },\n Awaited<ReturnType<typeof getPositionTiers>>\n>(\n 'OKX/PositionTiers',\n {\n required: ['instType', 'tdMode'],\n properties: {\n instType: { type: 'string' },\n tdMode: { type: 'string' },\n instFamily: { type: 'string' },\n instId: { type: 'string' },\n uly: { type: 'string' },\n ccy: { type: 'string' },\n tier: { type: 'string' },\n },\n },\n async (msg) => {\n const data = await getPositionTiers(msg.req);\n return {\n res: {\n code: 0,\n message: 'OK',\n data,\n },\n };\n },\n {\n concurrent: 1,\n egress_token_capacity: 10,\n egress_token_refill_interval: 2100,\n },\n);\n"]}
1
+ {"version":3,"file":"api-service.js","sourceRoot":"","sources":["../src/api-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAY5B,mBAAmB,EACnB;IACE,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IAChC,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACvB,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACvB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KACzB;CACF,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;IACZ,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI;SACL;KACF,CAAC;AACJ,CAAC,EACD;IACE,UAAU,EAAE,CAAC;IACb,qBAAqB,EAAE,EAAE;IACzB,4BAA4B,EAAE,IAAI;CACnC,CACF,CAAC","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { getPositionTiers } from './api/public-api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nterminal.server.provideService<\n {\n instType: string;\n tdMode: string;\n instFamily?: string;\n instId?: string;\n uly?: string;\n ccy?: string;\n tier?: string;\n },\n Awaited<ReturnType<typeof getPositionTiers>>\n>(\n 'OKX/PositionTiers',\n {\n required: ['instType', 'tdMode'],\n properties: {\n instType: { type: 'string' },\n tdMode: { type: 'string' },\n instFamily: { type: 'string' },\n instId: { type: 'string' },\n uly: { type: 'string' },\n ccy: { type: 'string' },\n tier: { type: 'string' },\n },\n },\n async (msg) => {\n const data = await getPositionTiers(msg.req);\n return {\n res: {\n code: 0,\n message: 'OK',\n data,\n },\n };\n },\n {\n concurrent: 1,\n egress_token_capacity: 10,\n egress_token_refill_interval: 2100,\n },\n);\n"]}
package/dist/index.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import './account';
2
2
  import './api-service';
3
- import './interest_rate';
4
3
  import './loan-account';
5
- import './market-order';
6
- import './ohlc';
7
4
  import './order';
8
5
  import './order-actions';
9
- import './quote';
6
+ import './order-actions-with-credential';
7
+ import './public-data/interest_rate';
8
+ import './public-data/market-order';
9
+ import './public-data/ohlc';
10
+ import './public-data/quote';
10
11
  import './services';
11
12
  import './strategy-account';
12
13
  import './trade';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC;AACnB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,CAAC;AACxB,OAAO,QAAQ,CAAC;AAChB,OAAO,SAAS,CAAC;AACjB,OAAO,iBAAiB,CAAC;AACzB,OAAO,SAAS,CAAC;AACjB,OAAO,YAAY,CAAC;AACpB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,SAAS,CAAC;AACjB,OAAO,YAAY,CAAC","sourcesContent":["import './account';\nimport './api-service';\nimport './interest_rate';\nimport './loan-account';\nimport './market-order';\nimport './ohlc';\nimport './order';\nimport './order-actions';\nimport './quote';\nimport './services';\nimport './strategy-account';\nimport './trade';\nimport './transfer';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC;AACnB,OAAO,eAAe,CAAC;AACvB,OAAO,gBAAgB,CAAC;AACxB,OAAO,SAAS,CAAC;AACjB,OAAO,iBAAiB,CAAC;AACzB,OAAO,iCAAiC,CAAC;AACzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,4BAA4B,CAAC;AACpC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,YAAY,CAAC;AACpB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,SAAS,CAAC;AACjB,OAAO,YAAY,CAAC","sourcesContent":["import './account';\nimport './api-service';\nimport './loan-account';\nimport './order';\nimport './order-actions';\nimport './order-actions-with-credential';\nimport './public-data/interest_rate';\nimport './public-data/market-order';\nimport './public-data/ohlc';\nimport './public-data/quote';\nimport './services';\nimport './strategy-account';\nimport './trade';\nimport './transfer';\n"]}
@@ -1,11 +1,11 @@
1
1
  import { provideAccountInfoService } from '@yuants/data-account';
2
2
  import { Terminal } from '@yuants/protocol';
3
- import { defer, firstValueFrom } from 'rxjs';
4
- import { accountUid$ } from './account';
5
- import { getDefaultCredential } from './api';
3
+ import { defer } from 'rxjs';
4
+ import { accountUidCache } from './account';
6
5
  import { getLoanAccountInfo } from './accountInfos';
6
+ import { getDefaultCredential } from './api/private-api';
7
7
  defer(async () => {
8
- const uid = await firstValueFrom(accountUid$);
8
+ const uid = await accountUidCache.query('');
9
9
  const loanAccountId = `okx/${uid}/loan/USDT`;
10
10
  const credential = getDefaultCredential();
11
11
  provideAccountInfoService(Terminal.fromNodeEnv(), loanAccountId, () => getLoanAccountInfo(credential), {
@@ -1 +1 @@
1
- {"version":3,"file":"loan-account.js","sourceRoot":"","sources":["../src/loan-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,CAAC;IAC7C,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;IAE1C,yBAAyB,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACrG,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC","sourcesContent":["import { provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { defer, firstValueFrom } from 'rxjs';\nimport { accountUid$ } from './account';\nimport { getDefaultCredential } from './api';\nimport { getLoanAccountInfo } from './accountInfos';\n\ndefer(async () => {\n const uid = await firstValueFrom(accountUid$);\n const loanAccountId = `okx/${uid}/loan/USDT`;\n const credential = getDefaultCredential();\n\n provideAccountInfoService(Terminal.fromNodeEnv(), loanAccountId, () => getLoanAccountInfo(credential), {\n auto_refresh_interval: 1000,\n });\n}).subscribe();\n"]}
1
+ {"version":3,"file":"loan-account.js","sourceRoot":"","sources":["../src/loan-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,CAAC;IAC7C,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;IAE1C,yBAAyB,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACrG,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC","sourcesContent":["import { provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { defer } from 'rxjs';\nimport { accountUidCache } from './account';\nimport { getLoanAccountInfo } from './accountInfos';\nimport { getDefaultCredential } from './api/private-api';\n\ndefer(async () => {\n const uid = await accountUidCache.query('');\n const loanAccountId = `okx/${uid}/loan/USDT`;\n const credential = getDefaultCredential();\n\n provideAccountInfoService(Terminal.fromNodeEnv(), loanAccountId, () => getLoanAccountInfo(credential), {\n auto_refresh_interval: 1000,\n });\n}).subscribe();\n"]}
@@ -0,0 +1,69 @@
1
+ import { Terminal } from '@yuants/protocol';
2
+ import { cancelOrder } from './orders/cancelOrder';
3
+ import { modifyOrder } from './orders/modifyOrder';
4
+ import { submitOrder } from './orders/submitOrder';
5
+ const terminal = Terminal.fromNodeEnv();
6
+ terminal.server.provideService('SubmitOrder', {
7
+ required: ['account_id', 'credential'],
8
+ properties: {
9
+ account_id: {
10
+ type: 'string',
11
+ pattern: '^okx/',
12
+ },
13
+ credential: {
14
+ type: 'object',
15
+ required: ['access_key', 'secret_key', 'passphrase'],
16
+ properties: {
17
+ access_key: { type: 'string' },
18
+ secret_key: { type: 'string' },
19
+ passphrase: { type: 'string' },
20
+ },
21
+ },
22
+ },
23
+ }, async (msg) => {
24
+ const order_id = await submitOrder(msg.req.credential, msg.req);
25
+ return { res: { code: 0, message: 'OK', data: { order_id } } };
26
+ });
27
+ terminal.server.provideService('ModifyOrder', {
28
+ required: ['account_id', 'credential'],
29
+ properties: {
30
+ account_id: {
31
+ type: 'string',
32
+ pattern: '^okx/',
33
+ },
34
+ credential: {
35
+ type: 'object',
36
+ required: ['access_key', 'secret_key', 'passphrase'],
37
+ properties: {
38
+ access_key: { type: 'string' },
39
+ secret_key: { type: 'string' },
40
+ passphrase: { type: 'string' },
41
+ },
42
+ },
43
+ },
44
+ }, async (msg) => {
45
+ await modifyOrder(msg.req.credential, msg.req);
46
+ return { res: { code: 0, message: 'OK' } };
47
+ });
48
+ terminal.server.provideService('CancelOrder', {
49
+ required: ['account_id', 'credential'],
50
+ properties: {
51
+ account_id: {
52
+ type: 'string',
53
+ pattern: '^okx/',
54
+ },
55
+ credential: {
56
+ type: 'object',
57
+ required: ['access_key', 'secret_key', 'passphrase'],
58
+ properties: {
59
+ access_key: { type: 'string' },
60
+ secret_key: { type: 'string' },
61
+ passphrase: { type: 'string' },
62
+ },
63
+ },
64
+ },
65
+ }, async (msg) => {
66
+ await cancelOrder(msg.req.credential, msg.req);
67
+ return { res: { code: 0, message: 'OK' } };
68
+ });
69
+ //# sourceMappingURL=order-actions-with-credential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-actions-with-credential.js","sourceRoot":"","sources":["../src/order-actions-with-credential.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { ICredential } from './api/private-api';\nimport { cancelOrder } from './orders/cancelOrder';\nimport { modifyOrder } from './orders/modifyOrder';\nimport { submitOrder } from './orders/submitOrder';\n\nconst terminal = Terminal.fromNodeEnv();\n\nterminal.server.provideService<IOrder & { credential: ICredential }, { order_id?: string }>(\n 'SubmitOrder',\n {\n required: ['account_id', 'credential'],\n properties: {\n account_id: {\n type: 'string',\n pattern: '^okx/',\n },\n credential: {\n type: 'object',\n required: ['access_key', 'secret_key', 'passphrase'],\n properties: {\n access_key: { type: 'string' },\n secret_key: { type: 'string' },\n passphrase: { type: 'string' },\n },\n },\n },\n },\n async (msg) => {\n const order_id = await submitOrder(msg.req.credential, msg.req);\n return { res: { code: 0, message: 'OK', data: { order_id } } };\n },\n);\n\nterminal.server.provideService<IOrder & { credential: ICredential }>(\n 'ModifyOrder',\n {\n required: ['account_id', 'credential'],\n properties: {\n account_id: {\n type: 'string',\n pattern: '^okx/',\n },\n credential: {\n type: 'object',\n required: ['access_key', 'secret_key', 'passphrase'],\n properties: {\n access_key: { type: 'string' },\n secret_key: { type: 'string' },\n passphrase: { type: 'string' },\n },\n },\n },\n },\n async (msg) => {\n await modifyOrder(msg.req.credential, msg.req);\n return { res: { code: 0, message: 'OK' } };\n },\n);\n\nterminal.server.provideService<IOrder & { credential: ICredential }>(\n 'CancelOrder',\n {\n required: ['account_id', 'credential'],\n properties: {\n account_id: {\n type: 'string',\n pattern: '^okx/',\n },\n credential: {\n type: 'object',\n required: ['access_key', 'secret_key', 'passphrase'],\n properties: {\n access_key: { type: 'string' },\n secret_key: { type: 'string' },\n passphrase: { type: 'string' },\n },\n },\n },\n },\n async (msg) => {\n await cancelOrder(msg.req.credential, msg.req);\n return { res: { code: 0, message: 'OK' } };\n },\n);\n"]}
@@ -1,14 +1,14 @@
1
1
  import { Terminal } from '@yuants/protocol';
2
- import { defer, firstValueFrom } from 'rxjs';
3
- import { tradingAccountId$ } from './account';
4
- import { getDefaultCredential } from './api';
2
+ import { defer } from 'rxjs';
3
+ import { getTradingAccountId } from './account';
4
+ import { getDefaultCredential } from './api/private-api';
5
5
  import { cancelOrder } from './orders/cancelOrder';
6
6
  import { modifyOrder } from './orders/modifyOrder';
7
7
  import { submitOrder } from './orders/submitOrder';
8
8
  const terminal = Terminal.fromNodeEnv();
9
9
  const credential = getDefaultCredential();
10
10
  defer(async () => {
11
- const tradingAccountId = await firstValueFrom(tradingAccountId$);
11
+ const tradingAccountId = await getTradingAccountId();
12
12
  terminal.server.provideService('SubmitOrder', {
13
13
  required: ['account_id'],
14
14
  properties: {