@yuants/vendor-okx 0.23.6 → 0.23.8

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.
@@ -30,7 +30,7 @@ defer(async () => {
30
30
  datasource_id: 'OKX',
31
31
  product_id: encodePath(position.instType, position.instId),
32
32
  direction,
33
- volume: +position.pos,
33
+ volume: Math.abs(+position.pos),
34
34
  free_volume: +position.pos,
35
35
  position_price: +position.avgPx,
36
36
  floating_profit: +position.upl,
@@ -1 +1 @@
1
- {"version":3,"file":"strategy-account.js","sourceRoot":"","sources":["../src/strategy-account.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { defer, filter, first, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nexport const accountConfig$ = defer(() => client.getAccountConfig()).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\nexport const strategyAccountId$ = accountUid$.pipe(\n map((uid) => `okx/${uid}/strategy`),\n shareReplay(1),\n);\ndefer(async () => {\n const strategyAccountId = await firstValueFrom(strategyAccountId$);\n\n provideAccountInfoService(\n terminal,\n strategyAccountId,\n async () => {\n const [gridAlgoOrders] = await Promise.all([\n client.getGridOrdersAlgoPending({\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 client.getGridPositions({ algoOrdType: 'contract_grid', algoId: item.algoId }),\n ),\n );\n\n gridPositionsRes.forEach((gridPositions, index) => {\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: +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\n // 历史提取金额不会从 investment, totalPnl 扣减\n // 计算净值需要通过仓位的名义价值和实际杠杆计算\n totalEquity += +position.notionalUsd / +gridAlgoOrders.data?.[index].actualLever;\n }\n });\n });\n\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n // TODO: 累计策略的可提取资金作为 free\n free: 0,\n },\n positions,\n };\n },\n { auto_refresh_interval: 5000 },\n );\n}).subscribe();\n\nconst sub = defer(() => accountUid$)\n .pipe(first())\n .subscribe((uid) => {\n addAccountMarket(terminal, { account_id: `okx/${uid}/strategy`, market_id: 'OKX' });\n });\ndefer(() => terminal.dispose$).subscribe(() => sub.unsubscribe());\n"]}
1
+ {"version":3,"file":"strategy-account.js","sourceRoot":"","sources":["../src/strategy-account.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { defer, filter, first, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nexport const accountConfig$ = defer(() => client.getAccountConfig()).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\nexport const strategyAccountId$ = accountUid$.pipe(\n map((uid) => `okx/${uid}/strategy`),\n shareReplay(1),\n);\ndefer(async () => {\n const strategyAccountId = await firstValueFrom(strategyAccountId$);\n\n provideAccountInfoService(\n terminal,\n strategyAccountId,\n async () => {\n const [gridAlgoOrders] = await Promise.all([\n client.getGridOrdersAlgoPending({\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 client.getGridPositions({ algoOrdType: 'contract_grid', algoId: item.algoId }),\n ),\n );\n\n gridPositionsRes.forEach((gridPositions, index) => {\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\n // 历史提取金额不会从 investment, totalPnl 扣减\n // 计算净值需要通过仓位的名义价值和实际杠杆计算\n totalEquity += +position.notionalUsd / +gridAlgoOrders.data?.[index].actualLever;\n }\n });\n });\n\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n // TODO: 累计策略的可提取资金作为 free\n free: 0,\n },\n positions,\n };\n },\n { auto_refresh_interval: 5000 },\n );\n}).subscribe();\n\nconst sub = defer(() => accountUid$)\n .pipe(first())\n .subscribe((uid) => {\n addAccountMarket(terminal, { account_id: `okx/${uid}/strategy`, market_id: 'OKX' });\n });\ndefer(() => terminal.dispose$).subscribe(() => sub.unsubscribe());\n"]}
@@ -33,7 +33,7 @@ exports.strategyAccountId$ = exports.accountUid$.pipe((0, rxjs_1.map)((uid) => `
33
33
  datasource_id: 'OKX',
34
34
  product_id: (0, utils_1.encodePath)(position.instType, position.instId),
35
35
  direction,
36
- volume: +position.pos,
36
+ volume: Math.abs(+position.pos),
37
37
  free_volume: +position.pos,
38
38
  position_price: +position.avgPx,
39
39
  floating_profit: +position.upl,
@@ -1 +1 @@
1
- {"version":3,"file":"strategy-account.js","sourceRoot":"","sources":["../src/strategy-account.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { defer, filter, first, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nexport const accountConfig$ = defer(() => client.getAccountConfig()).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\nexport const strategyAccountId$ = accountUid$.pipe(\n map((uid) => `okx/${uid}/strategy`),\n shareReplay(1),\n);\ndefer(async () => {\n const strategyAccountId = await firstValueFrom(strategyAccountId$);\n\n provideAccountInfoService(\n terminal,\n strategyAccountId,\n async () => {\n const [gridAlgoOrders] = await Promise.all([\n client.getGridOrdersAlgoPending({\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 client.getGridPositions({ algoOrdType: 'contract_grid', algoId: item.algoId }),\n ),\n );\n\n gridPositionsRes.forEach((gridPositions, index) => {\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: +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\n // 历史提取金额不会从 investment, totalPnl 扣减\n // 计算净值需要通过仓位的名义价值和实际杠杆计算\n totalEquity += +position.notionalUsd / +gridAlgoOrders.data?.[index].actualLever;\n }\n });\n });\n\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n // TODO: 累计策略的可提取资金作为 free\n free: 0,\n },\n positions,\n };\n },\n { auto_refresh_interval: 5000 },\n );\n}).subscribe();\n\nconst sub = defer(() => accountUid$)\n .pipe(first())\n .subscribe((uid) => {\n addAccountMarket(terminal, { account_id: `okx/${uid}/strategy`, market_id: 'OKX' });\n });\ndefer(() => terminal.dispose$).subscribe(() => sub.unsubscribe());\n"]}
1
+ {"version":3,"file":"strategy-account.js","sourceRoot":"","sources":["../src/strategy-account.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { defer, filter, first, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nexport const accountConfig$ = defer(() => client.getAccountConfig()).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\nexport const strategyAccountId$ = accountUid$.pipe(\n map((uid) => `okx/${uid}/strategy`),\n shareReplay(1),\n);\ndefer(async () => {\n const strategyAccountId = await firstValueFrom(strategyAccountId$);\n\n provideAccountInfoService(\n terminal,\n strategyAccountId,\n async () => {\n const [gridAlgoOrders] = await Promise.all([\n client.getGridOrdersAlgoPending({\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 client.getGridPositions({ algoOrdType: 'contract_grid', algoId: item.algoId }),\n ),\n );\n\n gridPositionsRes.forEach((gridPositions, index) => {\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\n // 历史提取金额不会从 investment, totalPnl 扣减\n // 计算净值需要通过仓位的名义价值和实际杠杆计算\n totalEquity += +position.notionalUsd / +gridAlgoOrders.data?.[index].actualLever;\n }\n });\n });\n\n return {\n money: {\n currency: 'USDT',\n equity: totalEquity,\n // TODO: 累计策略的可提取资金作为 free\n free: 0,\n },\n positions,\n };\n },\n { auto_refresh_interval: 5000 },\n );\n}).subscribe();\n\nconst sub = defer(() => accountUid$)\n .pipe(first())\n .subscribe((uid) => {\n addAccountMarket(terminal, { account_id: `okx/${uid}/strategy`, market_id: 'OKX' });\n });\ndefer(() => terminal.dispose$).subscribe(() => sub.unsubscribe());\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-okx",
3
- "version": "0.23.6",
3
+ "version": "0.23.8",
4
4
  "bin": "lib/cli.js",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -11,7 +11,7 @@
11
11
  "dependencies": {
12
12
  "@yuants/protocol": "0.46.1",
13
13
  "@yuants/transfer": "0.2.20",
14
- "@yuants/data-account": "0.5.3",
14
+ "@yuants/data-account": "0.6.0",
15
15
  "@yuants/data-order": "0.2.17",
16
16
  "@yuants/utils": "0.8.0",
17
17
  "@yuants/sql": "0.9.11",
@@ -1,13 +1,13 @@
1
1
  {
2
- "apps/vendor-okx/CHANGELOG.json": "4bfaa7c438a54196ac0b678c39f3f00c67858d04",
3
- "apps/vendor-okx/CHANGELOG.md": "42f67b6c99d69919fe44f83e8f6335daff34ae8d",
2
+ "apps/vendor-okx/CHANGELOG.json": "08ac32207e94e002355f681ce73378ed0b0367f5",
3
+ "apps/vendor-okx/CHANGELOG.md": "6a7f46a496ccf3bfe5c47cd91369bc36ec335240",
4
4
  "apps/vendor-okx/README.md": "ac3d1f6c4c8d73066664699b0bb1b01db02e67a2",
5
5
  "apps/vendor-okx/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
6
6
  "apps/vendor-okx/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
7
7
  "apps/vendor-okx/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
8
8
  "apps/vendor-okx/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
9
9
  "apps/vendor-okx/etc/vendor-okx.api.md": "92c54ccd547d2ad81ca6088158ca193e85c208df",
10
- "apps/vendor-okx/package.json": "abcd9a5f67e264e4a1e123c26c8df0c7c2cea18c",
10
+ "apps/vendor-okx/package.json": "87e3455c3172755d9cbe606d5b522bbf90eb5737",
11
11
  "apps/vendor-okx/src/account.ts": "ecfbe5017d6b5d4d1bc833de9f48fe72db76bdb7",
12
12
  "apps/vendor-okx/src/api.ts": "1ed5d9e4a758523e5f97183a1e6377bed0d75493",
13
13
  "apps/vendor-okx/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
@@ -25,7 +25,7 @@
25
25
  "apps/vendor-okx/src/provideSeriesFromTimeBackwardService.ts": "daf3c793eb4fc20e59a740bb69e50fadab5f62f0",
26
26
  "apps/vendor-okx/src/quote.ts": "e289161a274db61505efcdecfafb817e7376742f",
27
27
  "apps/vendor-okx/src/services.ts": "7b7df830a6d78b6de5cee44bbcec66f282ab53ab",
28
- "apps/vendor-okx/src/strategy-account.ts": "3d55c425df2688eeb3ecdd3a3ff2e428b10fa2a1",
28
+ "apps/vendor-okx/src/strategy-account.ts": "b6d0f9b3588277cfe02d73410ec2de8773290a3c",
29
29
  "apps/vendor-okx/src/trade.ts": "5265a7215b803c5f357842e1ece7ddca53f7e7fc",
30
30
  "apps/vendor-okx/src/websocket.ts": "6c0199bbb9db714ec96b59d90b35b3c801975194",
31
31
  "apps/vendor-okx/src/ws.ts": "1a8cfac0a5e86139db4b6a8f8dfd6d2b0a82e729",
@@ -33,7 +33,7 @@
33
33
  "apps/vendor-okx/.rush/temp/shrinkwrap-deps.json": "0a6205550d411d42b6d36324572e5e2a0ba166b2",
34
34
  "libraries/protocol/temp/package-deps.json": "62bc1cb0a7d7ffadb33a35dfa823e03a48ad8572",
35
35
  "libraries/transfer/temp/package-deps.json": "6c45e5623e560e2602ecf792eea3e8a3141076cf",
36
- "libraries/data-account/temp/package-deps.json": "e77f6cfba0d46e3ea05892041b1bc184c1af7a9f",
36
+ "libraries/data-account/temp/package-deps.json": "2d16f693e2605cfc57c2fb7c60ede9e9c2c5bfb0",
37
37
  "libraries/data-order/temp/package-deps.json": "55f1b82dd7d30da8d33d768584241d9a901aa22a",
38
38
  "libraries/utils/temp/package-deps.json": "56def945d0e67a9d0ca13447d2333155be0138f2",
39
39
  "libraries/sql/temp/package-deps.json": "5e5778a9e2daa9352ca5876b282d3aca297b5d01",