@yuants/vendor-okx 0.27.9 → 0.27.11

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.
@@ -29,35 +29,19 @@ export const getTradingAccountInfo = async (credential) => {
29
29
  const positions = [];
30
30
  // 现货头寸
31
31
  (_a = balanceApi.data[0]) === null || _a === void 0 ? void 0 : _a.details.forEach((detail) => {
32
- var _a, _b, _c, _d, _e, _f;
33
- if (detail.ccy === 'USDT') {
34
- const balance = +((_a = detail.cashBal) !== null && _a !== void 0 ? _a : 0);
35
- const free = Math.min(balance, // free should no more than balance if there is much profits
36
- +((_b = detail.availEq) !== null && _b !== void 0 ? _b : 0));
37
- const equity = +((_c = detail.eq) !== null && _c !== void 0 ? _c : 0) - +((_d = detail.stgyEq) !== null && _d !== void 0 ? _d : 0);
38
- positions.push(makeSpotPosition({
39
- position_id: encodePath('SPOT', 'USDT'),
40
- datasource_id: 'OKX',
41
- product_id: encodePath('SPOT', 'USDT'),
42
- volume: equity,
43
- free_volume: free,
44
- closable_price: 1,
45
- }));
46
- }
47
- else {
48
- const volume = +((_e = detail.cashBal) !== null && _e !== void 0 ? _e : 0);
49
- const free_volume = Math.min(volume, // free should no more than balance if there is much profits
50
- +((_f = detail.availEq) !== null && _f !== void 0 ? _f : 0));
51
- const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);
52
- positions.push(makeSpotPosition({
53
- position_id: product_id,
54
- datasource_id: 'OKX',
55
- product_id: product_id,
56
- volume: volume,
57
- free_volume: free_volume,
58
- closable_price: getSpotPrice(detail.ccy),
59
- }));
60
- }
32
+ var _a, _b;
33
+ const volume = +((_a = detail.cashBal) !== null && _a !== void 0 ? _a : 0);
34
+ const free_volume = Math.min(volume, // free should no more than balance if there is much profits
35
+ +((_b = detail.availEq) !== null && _b !== void 0 ? _b : 0));
36
+ const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);
37
+ positions.push(makeSpotPosition({
38
+ position_id: product_id,
39
+ datasource_id: 'OKX',
40
+ product_id: product_id,
41
+ volume: volume,
42
+ free_volume: free_volume,
43
+ closable_price: getSpotPrice(detail.ccy),
44
+ }));
61
45
  });
62
46
  positionsApi.data.forEach((x) => {
63
47
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnG,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;AAExD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE7C,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;QAC3B,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,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,sBAAsB,CAAC,SAAS,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE;IAC1C,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAgD,KAAK,EAAE,UAAU,EAAE,EAAE;;IACrG,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1E,mBAAmB,CAAC,UAAU,EAAE,EAAE,CAAC;QACnC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC;QACjC,cAAc,CAAC,cAAc,CAAC,sBAAsB,CAAC;KACtD,CAAC,CAAC;IAEH,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,OAAO;IACP,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,SAAS,CAAC,IAAI,CACZ,gBAAgB,CAAC;gBACf,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;gBACvC,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;gBACtC,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,IAAI;gBACjB,cAAc,EAAE,CAAC;aAClB,CAAC,CACH,CAAC;SACH;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;YAEF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;YAC5D,SAAS,CAAC,IAAI,CACZ,gBAAgB,CAAC;gBACf,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,UAAU;gBACtB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,WAAW;gBACxB,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;aACzC,CAAC,CACH,CAAC;SACH;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,SAAS,CAAC;AACnB,CAAC,CAAC","sourcesContent":["import { IActionHandlerOfGetAccountInfo, IPosition, makeSpotPosition } 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';\n\nconst priceCache = new Map<string, number>();\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) => {\n mapInstIdToPrice.set(inst.instId, Number(inst.idxPx));\n priceCache.set(inst.instId, Number(inst.idxPx));\n });\n return mapInstIdToPrice;\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nmarketIndexTickerUSDT$.subscribe();\n\nexport const getSpotPrice = (ccy: string) => {\n if (ccy === 'USDT') return 1;\n return priceCache.get(`${ccy}-USDT`) || 0;\n};\n\nexport const getTradingAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\n const [positionsApi, balanceApi, mapProductIdToProduct] = await Promise.all([\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n firstValueFrom(productService.mapProductIdToProduct$),\n ]);\n\n const positions: IPosition[] = [];\n\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 positions.push(\n makeSpotPosition({\n position_id: encodePath('SPOT', 'USDT'),\n datasource_id: 'OKX',\n product_id: encodePath('SPOT', 'USDT'),\n volume: equity,\n free_volume: free,\n closable_price: 1,\n }),\n );\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\n const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);\n positions.push(\n makeSpotPosition({\n position_id: product_id,\n datasource_id: 'OKX',\n product_id: product_id,\n volume: volume,\n free_volume: free_volume,\n closable_price: getSpotPrice(detail.ccy),\n }),\n );\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 positions;\n};\n"]}
1
+ {"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"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","sourcesContent":["import { IActionHandlerOfGetAccountInfo, IPosition, makeSpotPosition } 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';\n\nconst priceCache = new Map<string, number>();\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) => {\n mapInstIdToPrice.set(inst.instId, Number(inst.idxPx));\n priceCache.set(inst.instId, Number(inst.idxPx));\n });\n return mapInstIdToPrice;\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nmarketIndexTickerUSDT$.subscribe();\n\nexport const getSpotPrice = (ccy: string) => {\n if (ccy === 'USDT') return 1;\n return priceCache.get(`${ccy}-USDT`) || 0;\n};\n\nexport const getTradingAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\n const [positionsApi, balanceApi, mapProductIdToProduct] = await Promise.all([\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n firstValueFrom(productService.mapProductIdToProduct$),\n ]);\n\n const positions: IPosition[] = [];\n\n // 现货头寸\n balanceApi.data[0]?.details.forEach((detail) => {\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\n const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);\n positions.push(\n makeSpotPosition({\n position_id: product_id,\n datasource_id: 'OKX',\n product_id: product_id,\n volume: volume,\n free_volume: free_volume,\n closable_price: getSpotPrice(detail.ccy),\n }),\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 positions;\n};\n"]}
package/dist/trade.js CHANGED
@@ -6,6 +6,7 @@ import { getAccountBillsArchive, getDefaultCredential } from './api/private-api'
6
6
  import { getTradingAccountId } from './accountInfos/uid';
7
7
  const credential = getDefaultCredential();
8
8
  const tradeParser = async (accountId, params) => {
9
+ var _a, _b;
9
10
  const tradeList = [];
10
11
  const result = await getAccountBillsArchive(credential, params);
11
12
  const productIdToProduct = new Map();
@@ -28,10 +29,9 @@ const tradeParser = async (accountId, params) => {
28
29
  productList.forEach((p) => productIdToProduct.set(p.product_id, p));
29
30
  }
30
31
  }
31
- mapTradeIdToBillList.forEach(async (v, tradeId) => {
32
- var _a, _b;
32
+ for (const [tradeId, v] of mapTradeIdToBillList) {
33
33
  if (!((v[0].instType === 'SPOT' && v.length === 2) || v[0].instType === 'SWAP'))
34
- return;
34
+ continue;
35
35
  const trade = {
36
36
  id: tradeId,
37
37
  account_id: accountId,
@@ -95,7 +95,7 @@ const tradeParser = async (accountId, params) => {
95
95
  throw new Error(`Not Found Product With Product Id: ${trade.product_id}`);
96
96
  }
97
97
  tradeList.push(trade);
98
- });
98
+ }
99
99
  }
100
100
  return tradeList;
101
101
  };
package/dist/trade.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trade.js","sourceRoot":"","sources":["../src/trade.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { ITrade } from '@yuants/data-trade';\nimport { Terminal } from '@yuants/protocol';\nimport { buildInsertManyIntoTableSQL, escapeSQL, requestSQL } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, tap, timeout } from 'rxjs';\nimport { getAccountBillsArchive, getDefaultCredential } from './api/private-api';\nimport { getTradingAccountId } from './accountInfos/uid';\n\nconst credential = getDefaultCredential();\n\nconst tradeParser = async (accountId: string, params: Record<string, string>): Promise<ITrade[]> => {\n const tradeList: ITrade[] = [];\n const result = await getAccountBillsArchive(credential, params);\n const productIdToProduct = new Map<string, IProduct>();\n const productIdSet = new Set<string>();\n if (result.code === '0' && result.data) {\n const data = result.data;\n const mapTradeIdToBillList = new Map<string, typeof data>();\n data.forEach((item) => {\n productIdSet.add(encodePath(item.instType, item.instId));\n mapTradeIdToBillList.set(item.tradeId, [...(mapTradeIdToBillList.get(item.tradeId) ?? []), item]);\n });\n if (productIdSet.size > 0) {\n const productList = await requestSQL<IProduct[]>(\n Terminal.fromNodeEnv(),\n `\n select * from product where product_id in (${Array.from(productIdSet)\n .map((productId) => escapeSQL(productId))\n .join(',')})\n `,\n );\n if (productList.length > 0) {\n productList.forEach((p) => productIdToProduct.set(p.product_id, p));\n }\n }\n mapTradeIdToBillList.forEach(async (v, tradeId) => {\n if (!((v[0].instType === 'SPOT' && v.length === 2) || v[0].instType === 'SWAP')) return;\n\n const trade: ITrade = {\n id: tradeId,\n account_id: accountId,\n product_id: '',\n direction: '',\n traded_volume: '',\n traded_price: '',\n traded_value: '',\n post_volume: '',\n fee: '',\n fee_currency: '',\n created_at: '0',\n };\n\n v.forEach((bill) => {\n trade.created_at = Math.max(Number(trade.created_at), Number(bill.ts)).toString();\n trade.product_id = encodePath(bill.instType, bill.instId);\n trade.traded_price = bill.px;\n if (bill.instType === 'SWAP') {\n if (bill.subType === '1') trade.direction = 'OPEN_LONG';\n if (bill.subType === '2') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '3') trade.direction = 'OPEN_LONG';\n if (bill.subType === '4') trade.direction = 'OPEN_SHORT';\n if (bill.subType === '5') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '6') trade.direction = 'CLOSE_SHORT';\n trade.traded_volume = bill.sz;\n trade.traded_value = (Number(bill.sz) * Number(bill.px)).toString();\n }\n if (bill.instType === 'SPOT') {\n if (bill.subType === '1') {\n if (bill.ccy !== 'USDT') {\n trade.direction = 'OPEN_LONG';\n } else {\n trade.direction = 'CLOSE_LONG';\n }\n }\n\n if (bill.ccy !== 'USDT') {\n trade.traded_volume = bill.sz;\n }\n if (bill.ccy === 'USDT') {\n trade.traded_value = bill.sz;\n }\n }\n // fee\n if (bill.fee !== '0') {\n trade.fee = Math.abs(Number(bill.fee)).toString();\n trade.fee_currency = bill.ccy;\n }\n });\n trade.created_at = formatTime(Number(trade.created_at));\n if (productIdToProduct.has(trade.product_id)) {\n trade.traded_value = (\n +trade.traded_value * +(productIdToProduct.get(trade.product_id)?.value_scale ?? 1)\n ).toString();\n } else {\n throw new Error(`Not Found Product With Product Id: ${trade.product_id}`);\n }\n tradeList.push(trade);\n });\n }\n return tradeList;\n};\n\nconst getAccountTradeWithAccountId = async (accountId: string) => {\n const currentTrade = await requestSQL<ITrade[]>(\n Terminal.fromNodeEnv(),\n `\n select * from trade where account_id=${escapeSQL(accountId)} order by created_at desc limit 1;\n `,\n );\n const params: Record<string, string> = {\n type: '2',\n begin: (new Date().getTime() - 1000 * 60 * 60 * 24 * 30 * 3).toString(),\n };\n if (currentTrade.length === 1) {\n params['begin'] = new Date(currentTrade[0].created_at ?? 0).getTime().toString();\n }\n console.log(formatTime(Date.now()), 'getAccountTrade', `params: ${JSON.stringify(params)}`);\n const tradeList = await tradeParser(accountId, params);\n console.log(formatTime(Date.now()), 'getAccountTrade', `tradeList: ${JSON.stringify(tradeList)}`);\n await requestSQL(\n Terminal.fromNodeEnv(),\n buildInsertManyIntoTableSQL(tradeList, 'trade', {\n columns: [\n 'id',\n 'account_id',\n 'product_id',\n 'traded_volume',\n 'traded_value',\n 'traded_price',\n 'direction',\n 'fee',\n 'fee_currency',\n 'created_at',\n ],\n conflictKeys: ['id'],\n }),\n );\n};\n\n(async () => {\n const account_id = await getTradingAccountId(credential);\n console.log(formatTime(Date.now()), 'getAccountTrade', `AccountID: ${account_id}`);\n defer(() => getAccountTradeWithAccountId(account_id))\n .pipe(\n //\n timeout(10_000), // 超时设定:10 秒\n tap({\n error: (err) => {\n console.error(formatTime(Date.now()), 'getAccountTradeError', err);\n },\n }),\n repeat({ delay: 30_000 }),\n retry({ delay: 5000 }),\n )\n .subscribe();\n})();\n"]}
1
+ {"version":3,"file":"trade.js","sourceRoot":"","sources":["../src/trade.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { ITrade } from '@yuants/data-trade';\nimport { Terminal } from '@yuants/protocol';\nimport { buildInsertManyIntoTableSQL, escapeSQL, requestSQL } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, tap, timeout } from 'rxjs';\nimport { getAccountBillsArchive, getDefaultCredential } from './api/private-api';\nimport { getTradingAccountId } from './accountInfos/uid';\n\nconst credential = getDefaultCredential();\n\nconst tradeParser = async (accountId: string, params: Record<string, string>): Promise<ITrade[]> => {\n const tradeList: ITrade[] = [];\n const result = await getAccountBillsArchive(credential, params);\n const productIdToProduct = new Map<string, IProduct>();\n const productIdSet = new Set<string>();\n if (result.code === '0' && result.data) {\n const data = result.data;\n const mapTradeIdToBillList = new Map<string, typeof data>();\n data.forEach((item) => {\n productIdSet.add(encodePath(item.instType, item.instId));\n mapTradeIdToBillList.set(item.tradeId, [...(mapTradeIdToBillList.get(item.tradeId) ?? []), item]);\n });\n if (productIdSet.size > 0) {\n const productList = await requestSQL<IProduct[]>(\n Terminal.fromNodeEnv(),\n `\n select * from product where product_id in (${Array.from(productIdSet)\n .map((productId) => escapeSQL(productId))\n .join(',')})\n `,\n );\n if (productList.length > 0) {\n productList.forEach((p) => productIdToProduct.set(p.product_id, p));\n }\n }\n for (const [tradeId, v] of mapTradeIdToBillList) {\n if (!((v[0].instType === 'SPOT' && v.length === 2) || v[0].instType === 'SWAP')) continue;\n\n const trade: ITrade = {\n id: tradeId,\n account_id: accountId,\n product_id: '',\n direction: '',\n traded_volume: '',\n traded_price: '',\n traded_value: '',\n post_volume: '',\n fee: '',\n fee_currency: '',\n created_at: '0',\n };\n\n v.forEach((bill) => {\n trade.created_at = Math.max(Number(trade.created_at), Number(bill.ts)).toString();\n trade.product_id = encodePath(bill.instType, bill.instId);\n trade.traded_price = bill.px;\n if (bill.instType === 'SWAP') {\n if (bill.subType === '1') trade.direction = 'OPEN_LONG';\n if (bill.subType === '2') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '3') trade.direction = 'OPEN_LONG';\n if (bill.subType === '4') trade.direction = 'OPEN_SHORT';\n if (bill.subType === '5') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '6') trade.direction = 'CLOSE_SHORT';\n trade.traded_volume = bill.sz;\n trade.traded_value = (Number(bill.sz) * Number(bill.px)).toString();\n }\n if (bill.instType === 'SPOT') {\n if (bill.subType === '1') {\n if (bill.ccy !== 'USDT') {\n trade.direction = 'OPEN_LONG';\n } else {\n trade.direction = 'CLOSE_LONG';\n }\n }\n\n if (bill.ccy !== 'USDT') {\n trade.traded_volume = bill.sz;\n }\n if (bill.ccy === 'USDT') {\n trade.traded_value = bill.sz;\n }\n }\n // fee\n if (bill.fee !== '0') {\n trade.fee = Math.abs(Number(bill.fee)).toString();\n trade.fee_currency = bill.ccy;\n }\n });\n trade.created_at = formatTime(Number(trade.created_at));\n if (productIdToProduct.has(trade.product_id)) {\n trade.traded_value = (\n +trade.traded_value * +(productIdToProduct.get(trade.product_id)?.value_scale ?? 1)\n ).toString();\n } else {\n throw new Error(`Not Found Product With Product Id: ${trade.product_id}`);\n }\n tradeList.push(trade);\n }\n }\n return tradeList;\n};\n\nconst getAccountTradeWithAccountId = async (accountId: string) => {\n const currentTrade = await requestSQL<ITrade[]>(\n Terminal.fromNodeEnv(),\n `\n select * from trade where account_id=${escapeSQL(accountId)} order by created_at desc limit 1;\n `,\n );\n const params: Record<string, string> = {\n type: '2',\n begin: (new Date().getTime() - 1000 * 60 * 60 * 24 * 30 * 3).toString(),\n };\n if (currentTrade.length === 1) {\n params['begin'] = new Date(currentTrade[0].created_at ?? 0).getTime().toString();\n }\n console.log(formatTime(Date.now()), 'getAccountTrade', `params: ${JSON.stringify(params)}`);\n const tradeList = await tradeParser(accountId, params);\n console.log(formatTime(Date.now()), 'getAccountTrade', `tradeList: ${JSON.stringify(tradeList)}`);\n await requestSQL(\n Terminal.fromNodeEnv(),\n buildInsertManyIntoTableSQL(tradeList, 'trade', {\n columns: [\n 'id',\n 'account_id',\n 'product_id',\n 'traded_volume',\n 'traded_value',\n 'traded_price',\n 'direction',\n 'fee',\n 'fee_currency',\n 'created_at',\n ],\n conflictKeys: ['id'],\n }),\n );\n};\n\n(async () => {\n const account_id = await getTradingAccountId(credential);\n console.log(formatTime(Date.now()), 'getAccountTrade', `AccountID: ${account_id}`);\n defer(() => getAccountTradeWithAccountId(account_id))\n .pipe(\n //\n timeout(10_000), // 超时设定:10 秒\n tap({\n error: (err) => {\n console.error(formatTime(Date.now()), 'getAccountTradeError', err);\n },\n }),\n repeat({ delay: 30_000 }),\n retry({ delay: 5000 }),\n )\n .subscribe();\n})();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"trading.d.ts","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAA+B,MAAM,sBAAsB,CAAC;AAGnG,OAAO,EAAE,WAAW,EAA0C,MAAM,oBAAoB,CAAC;AAMzF,eAAO,MAAM,sBAAsB,gDAYlC,CAAC;AAIF,eAAO,MAAM,YAAY,QAAS,MAAM,WAGvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,8BAA8B,CAAC,WAAW,CAuE7E,CAAC"}
1
+ {"version":3,"file":"trading.d.ts","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAA+B,MAAM,sBAAsB,CAAC;AAGnG,OAAO,EAAE,WAAW,EAA0C,MAAM,oBAAoB,CAAC;AAMzF,eAAO,MAAM,sBAAsB,gDAYlC,CAAC;AAIF,eAAO,MAAM,YAAY,QAAS,MAAM,WAGvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,8BAA8B,CAAC,WAAW,CAoD7E,CAAC"}
@@ -33,35 +33,19 @@ const getTradingAccountInfo = async (credential) => {
33
33
  const positions = [];
34
34
  // 现货头寸
35
35
  (_a = balanceApi.data[0]) === null || _a === void 0 ? void 0 : _a.details.forEach((detail) => {
36
- var _a, _b, _c, _d, _e, _f;
37
- if (detail.ccy === 'USDT') {
38
- const balance = +((_a = detail.cashBal) !== null && _a !== void 0 ? _a : 0);
39
- const free = Math.min(balance, // free should no more than balance if there is much profits
40
- +((_b = detail.availEq) !== null && _b !== void 0 ? _b : 0));
41
- const equity = +((_c = detail.eq) !== null && _c !== void 0 ? _c : 0) - +((_d = detail.stgyEq) !== null && _d !== void 0 ? _d : 0);
42
- positions.push((0, data_account_1.makeSpotPosition)({
43
- position_id: (0, utils_1.encodePath)('SPOT', 'USDT'),
44
- datasource_id: 'OKX',
45
- product_id: (0, utils_1.encodePath)('SPOT', 'USDT'),
46
- volume: equity,
47
- free_volume: free,
48
- closable_price: 1,
49
- }));
50
- }
51
- else {
52
- const volume = +((_e = detail.cashBal) !== null && _e !== void 0 ? _e : 0);
53
- const free_volume = Math.min(volume, // free should no more than balance if there is much profits
54
- +((_f = detail.availEq) !== null && _f !== void 0 ? _f : 0));
55
- const product_id = (0, utils_1.encodePath)('SPOT', `${detail.ccy}-USDT`);
56
- positions.push((0, data_account_1.makeSpotPosition)({
57
- position_id: product_id,
58
- datasource_id: 'OKX',
59
- product_id: product_id,
60
- volume: volume,
61
- free_volume: free_volume,
62
- closable_price: (0, exports.getSpotPrice)(detail.ccy),
63
- }));
64
- }
36
+ var _a, _b;
37
+ const volume = +((_a = detail.cashBal) !== null && _a !== void 0 ? _a : 0);
38
+ const free_volume = Math.min(volume, // free should no more than balance if there is much profits
39
+ +((_b = detail.availEq) !== null && _b !== void 0 ? _b : 0));
40
+ const product_id = (0, utils_1.encodePath)('SPOT', `${detail.ccy}-USDT`);
41
+ positions.push((0, data_account_1.makeSpotPosition)({
42
+ position_id: product_id,
43
+ datasource_id: 'OKX',
44
+ product_id: product_id,
45
+ volume: volume,
46
+ free_volume: free_volume,
47
+ closable_price: (0, exports.getSpotPrice)(detail.ccy),
48
+ }));
65
49
  });
66
50
  positionsApi.data.forEach((x) => {
67
51
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"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","sourcesContent":["import { IActionHandlerOfGetAccountInfo, IPosition, makeSpotPosition } 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';\n\nconst priceCache = new Map<string, number>();\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) => {\n mapInstIdToPrice.set(inst.instId, Number(inst.idxPx));\n priceCache.set(inst.instId, Number(inst.idxPx));\n });\n return mapInstIdToPrice;\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nmarketIndexTickerUSDT$.subscribe();\n\nexport const getSpotPrice = (ccy: string) => {\n if (ccy === 'USDT') return 1;\n return priceCache.get(`${ccy}-USDT`) || 0;\n};\n\nexport const getTradingAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\n const [positionsApi, balanceApi, mapProductIdToProduct] = await Promise.all([\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n firstValueFrom(productService.mapProductIdToProduct$),\n ]);\n\n const positions: IPosition[] = [];\n\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 positions.push(\n makeSpotPosition({\n position_id: encodePath('SPOT', 'USDT'),\n datasource_id: 'OKX',\n product_id: encodePath('SPOT', 'USDT'),\n volume: equity,\n free_volume: free,\n closable_price: 1,\n }),\n );\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\n const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);\n positions.push(\n makeSpotPosition({\n position_id: product_id,\n datasource_id: 'OKX',\n product_id: product_id,\n volume: volume,\n free_volume: free_volume,\n closable_price: getSpotPrice(detail.ccy),\n }),\n );\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 positions;\n};\n"]}
1
+ {"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"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","sourcesContent":["import { IActionHandlerOfGetAccountInfo, IPosition, makeSpotPosition } 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';\n\nconst priceCache = new Map<string, number>();\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) => {\n mapInstIdToPrice.set(inst.instId, Number(inst.idxPx));\n priceCache.set(inst.instId, Number(inst.idxPx));\n });\n return mapInstIdToPrice;\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nmarketIndexTickerUSDT$.subscribe();\n\nexport const getSpotPrice = (ccy: string) => {\n if (ccy === 'USDT') return 1;\n return priceCache.get(`${ccy}-USDT`) || 0;\n};\n\nexport const getTradingAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\n const [positionsApi, balanceApi, mapProductIdToProduct] = await Promise.all([\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n firstValueFrom(productService.mapProductIdToProduct$),\n ]);\n\n const positions: IPosition[] = [];\n\n // 现货头寸\n balanceApi.data[0]?.details.forEach((detail) => {\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\n const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);\n positions.push(\n makeSpotPosition({\n position_id: product_id,\n datasource_id: 'OKX',\n product_id: product_id,\n volume: volume,\n free_volume: free_volume,\n closable_price: getSpotPrice(detail.ccy),\n }),\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 positions;\n};\n"]}
package/lib/trade.js CHANGED
@@ -8,6 +8,7 @@ const private_api_1 = require("./api/private-api");
8
8
  const uid_1 = require("./accountInfos/uid");
9
9
  const credential = (0, private_api_1.getDefaultCredential)();
10
10
  const tradeParser = async (accountId, params) => {
11
+ var _a, _b;
11
12
  const tradeList = [];
12
13
  const result = await (0, private_api_1.getAccountBillsArchive)(credential, params);
13
14
  const productIdToProduct = new Map();
@@ -30,10 +31,9 @@ const tradeParser = async (accountId, params) => {
30
31
  productList.forEach((p) => productIdToProduct.set(p.product_id, p));
31
32
  }
32
33
  }
33
- mapTradeIdToBillList.forEach(async (v, tradeId) => {
34
- var _a, _b;
34
+ for (const [tradeId, v] of mapTradeIdToBillList) {
35
35
  if (!((v[0].instType === 'SPOT' && v.length === 2) || v[0].instType === 'SWAP'))
36
- return;
36
+ continue;
37
37
  const trade = {
38
38
  id: tradeId,
39
39
  account_id: accountId,
@@ -97,7 +97,7 @@ const tradeParser = async (accountId, params) => {
97
97
  throw new Error(`Not Found Product With Product Id: ${trade.product_id}`);
98
98
  }
99
99
  tradeList.push(trade);
100
- });
100
+ }
101
101
  }
102
102
  return tradeList;
103
103
  };
package/lib/trade.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trade.js","sourceRoot":"","sources":["../src/trade.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { ITrade } from '@yuants/data-trade';\nimport { Terminal } from '@yuants/protocol';\nimport { buildInsertManyIntoTableSQL, escapeSQL, requestSQL } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, tap, timeout } from 'rxjs';\nimport { getAccountBillsArchive, getDefaultCredential } from './api/private-api';\nimport { getTradingAccountId } from './accountInfos/uid';\n\nconst credential = getDefaultCredential();\n\nconst tradeParser = async (accountId: string, params: Record<string, string>): Promise<ITrade[]> => {\n const tradeList: ITrade[] = [];\n const result = await getAccountBillsArchive(credential, params);\n const productIdToProduct = new Map<string, IProduct>();\n const productIdSet = new Set<string>();\n if (result.code === '0' && result.data) {\n const data = result.data;\n const mapTradeIdToBillList = new Map<string, typeof data>();\n data.forEach((item) => {\n productIdSet.add(encodePath(item.instType, item.instId));\n mapTradeIdToBillList.set(item.tradeId, [...(mapTradeIdToBillList.get(item.tradeId) ?? []), item]);\n });\n if (productIdSet.size > 0) {\n const productList = await requestSQL<IProduct[]>(\n Terminal.fromNodeEnv(),\n `\n select * from product where product_id in (${Array.from(productIdSet)\n .map((productId) => escapeSQL(productId))\n .join(',')})\n `,\n );\n if (productList.length > 0) {\n productList.forEach((p) => productIdToProduct.set(p.product_id, p));\n }\n }\n mapTradeIdToBillList.forEach(async (v, tradeId) => {\n if (!((v[0].instType === 'SPOT' && v.length === 2) || v[0].instType === 'SWAP')) return;\n\n const trade: ITrade = {\n id: tradeId,\n account_id: accountId,\n product_id: '',\n direction: '',\n traded_volume: '',\n traded_price: '',\n traded_value: '',\n post_volume: '',\n fee: '',\n fee_currency: '',\n created_at: '0',\n };\n\n v.forEach((bill) => {\n trade.created_at = Math.max(Number(trade.created_at), Number(bill.ts)).toString();\n trade.product_id = encodePath(bill.instType, bill.instId);\n trade.traded_price = bill.px;\n if (bill.instType === 'SWAP') {\n if (bill.subType === '1') trade.direction = 'OPEN_LONG';\n if (bill.subType === '2') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '3') trade.direction = 'OPEN_LONG';\n if (bill.subType === '4') trade.direction = 'OPEN_SHORT';\n if (bill.subType === '5') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '6') trade.direction = 'CLOSE_SHORT';\n trade.traded_volume = bill.sz;\n trade.traded_value = (Number(bill.sz) * Number(bill.px)).toString();\n }\n if (bill.instType === 'SPOT') {\n if (bill.subType === '1') {\n if (bill.ccy !== 'USDT') {\n trade.direction = 'OPEN_LONG';\n } else {\n trade.direction = 'CLOSE_LONG';\n }\n }\n\n if (bill.ccy !== 'USDT') {\n trade.traded_volume = bill.sz;\n }\n if (bill.ccy === 'USDT') {\n trade.traded_value = bill.sz;\n }\n }\n // fee\n if (bill.fee !== '0') {\n trade.fee = Math.abs(Number(bill.fee)).toString();\n trade.fee_currency = bill.ccy;\n }\n });\n trade.created_at = formatTime(Number(trade.created_at));\n if (productIdToProduct.has(trade.product_id)) {\n trade.traded_value = (\n +trade.traded_value * +(productIdToProduct.get(trade.product_id)?.value_scale ?? 1)\n ).toString();\n } else {\n throw new Error(`Not Found Product With Product Id: ${trade.product_id}`);\n }\n tradeList.push(trade);\n });\n }\n return tradeList;\n};\n\nconst getAccountTradeWithAccountId = async (accountId: string) => {\n const currentTrade = await requestSQL<ITrade[]>(\n Terminal.fromNodeEnv(),\n `\n select * from trade where account_id=${escapeSQL(accountId)} order by created_at desc limit 1;\n `,\n );\n const params: Record<string, string> = {\n type: '2',\n begin: (new Date().getTime() - 1000 * 60 * 60 * 24 * 30 * 3).toString(),\n };\n if (currentTrade.length === 1) {\n params['begin'] = new Date(currentTrade[0].created_at ?? 0).getTime().toString();\n }\n console.log(formatTime(Date.now()), 'getAccountTrade', `params: ${JSON.stringify(params)}`);\n const tradeList = await tradeParser(accountId, params);\n console.log(formatTime(Date.now()), 'getAccountTrade', `tradeList: ${JSON.stringify(tradeList)}`);\n await requestSQL(\n Terminal.fromNodeEnv(),\n buildInsertManyIntoTableSQL(tradeList, 'trade', {\n columns: [\n 'id',\n 'account_id',\n 'product_id',\n 'traded_volume',\n 'traded_value',\n 'traded_price',\n 'direction',\n 'fee',\n 'fee_currency',\n 'created_at',\n ],\n conflictKeys: ['id'],\n }),\n );\n};\n\n(async () => {\n const account_id = await getTradingAccountId(credential);\n console.log(formatTime(Date.now()), 'getAccountTrade', `AccountID: ${account_id}`);\n defer(() => getAccountTradeWithAccountId(account_id))\n .pipe(\n //\n timeout(10_000), // 超时设定:10 秒\n tap({\n error: (err) => {\n console.error(formatTime(Date.now()), 'getAccountTradeError', err);\n },\n }),\n repeat({ delay: 30_000 }),\n retry({ delay: 5000 }),\n )\n .subscribe();\n})();\n"]}
1
+ {"version":3,"file":"trade.js","sourceRoot":"","sources":["../src/trade.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { ITrade } from '@yuants/data-trade';\nimport { Terminal } from '@yuants/protocol';\nimport { buildInsertManyIntoTableSQL, escapeSQL, requestSQL } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, tap, timeout } from 'rxjs';\nimport { getAccountBillsArchive, getDefaultCredential } from './api/private-api';\nimport { getTradingAccountId } from './accountInfos/uid';\n\nconst credential = getDefaultCredential();\n\nconst tradeParser = async (accountId: string, params: Record<string, string>): Promise<ITrade[]> => {\n const tradeList: ITrade[] = [];\n const result = await getAccountBillsArchive(credential, params);\n const productIdToProduct = new Map<string, IProduct>();\n const productIdSet = new Set<string>();\n if (result.code === '0' && result.data) {\n const data = result.data;\n const mapTradeIdToBillList = new Map<string, typeof data>();\n data.forEach((item) => {\n productIdSet.add(encodePath(item.instType, item.instId));\n mapTradeIdToBillList.set(item.tradeId, [...(mapTradeIdToBillList.get(item.tradeId) ?? []), item]);\n });\n if (productIdSet.size > 0) {\n const productList = await requestSQL<IProduct[]>(\n Terminal.fromNodeEnv(),\n `\n select * from product where product_id in (${Array.from(productIdSet)\n .map((productId) => escapeSQL(productId))\n .join(',')})\n `,\n );\n if (productList.length > 0) {\n productList.forEach((p) => productIdToProduct.set(p.product_id, p));\n }\n }\n for (const [tradeId, v] of mapTradeIdToBillList) {\n if (!((v[0].instType === 'SPOT' && v.length === 2) || v[0].instType === 'SWAP')) continue;\n\n const trade: ITrade = {\n id: tradeId,\n account_id: accountId,\n product_id: '',\n direction: '',\n traded_volume: '',\n traded_price: '',\n traded_value: '',\n post_volume: '',\n fee: '',\n fee_currency: '',\n created_at: '0',\n };\n\n v.forEach((bill) => {\n trade.created_at = Math.max(Number(trade.created_at), Number(bill.ts)).toString();\n trade.product_id = encodePath(bill.instType, bill.instId);\n trade.traded_price = bill.px;\n if (bill.instType === 'SWAP') {\n if (bill.subType === '1') trade.direction = 'OPEN_LONG';\n if (bill.subType === '2') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '3') trade.direction = 'OPEN_LONG';\n if (bill.subType === '4') trade.direction = 'OPEN_SHORT';\n if (bill.subType === '5') trade.direction = 'CLOSE_LONG';\n if (bill.subType === '6') trade.direction = 'CLOSE_SHORT';\n trade.traded_volume = bill.sz;\n trade.traded_value = (Number(bill.sz) * Number(bill.px)).toString();\n }\n if (bill.instType === 'SPOT') {\n if (bill.subType === '1') {\n if (bill.ccy !== 'USDT') {\n trade.direction = 'OPEN_LONG';\n } else {\n trade.direction = 'CLOSE_LONG';\n }\n }\n\n if (bill.ccy !== 'USDT') {\n trade.traded_volume = bill.sz;\n }\n if (bill.ccy === 'USDT') {\n trade.traded_value = bill.sz;\n }\n }\n // fee\n if (bill.fee !== '0') {\n trade.fee = Math.abs(Number(bill.fee)).toString();\n trade.fee_currency = bill.ccy;\n }\n });\n trade.created_at = formatTime(Number(trade.created_at));\n if (productIdToProduct.has(trade.product_id)) {\n trade.traded_value = (\n +trade.traded_value * +(productIdToProduct.get(trade.product_id)?.value_scale ?? 1)\n ).toString();\n } else {\n throw new Error(`Not Found Product With Product Id: ${trade.product_id}`);\n }\n tradeList.push(trade);\n }\n }\n return tradeList;\n};\n\nconst getAccountTradeWithAccountId = async (accountId: string) => {\n const currentTrade = await requestSQL<ITrade[]>(\n Terminal.fromNodeEnv(),\n `\n select * from trade where account_id=${escapeSQL(accountId)} order by created_at desc limit 1;\n `,\n );\n const params: Record<string, string> = {\n type: '2',\n begin: (new Date().getTime() - 1000 * 60 * 60 * 24 * 30 * 3).toString(),\n };\n if (currentTrade.length === 1) {\n params['begin'] = new Date(currentTrade[0].created_at ?? 0).getTime().toString();\n }\n console.log(formatTime(Date.now()), 'getAccountTrade', `params: ${JSON.stringify(params)}`);\n const tradeList = await tradeParser(accountId, params);\n console.log(formatTime(Date.now()), 'getAccountTrade', `tradeList: ${JSON.stringify(tradeList)}`);\n await requestSQL(\n Terminal.fromNodeEnv(),\n buildInsertManyIntoTableSQL(tradeList, 'trade', {\n columns: [\n 'id',\n 'account_id',\n 'product_id',\n 'traded_volume',\n 'traded_value',\n 'traded_price',\n 'direction',\n 'fee',\n 'fee_currency',\n 'created_at',\n ],\n conflictKeys: ['id'],\n }),\n );\n};\n\n(async () => {\n const account_id = await getTradingAccountId(credential);\n console.log(formatTime(Date.now()), 'getAccountTrade', `AccountID: ${account_id}`);\n defer(() => getAccountTradeWithAccountId(account_id))\n .pipe(\n //\n timeout(10_000), // 超时设定:10 秒\n tap({\n error: (err) => {\n console.error(formatTime(Date.now()), 'getAccountTradeError', err);\n },\n }),\n repeat({ delay: 30_000 }),\n retry({ delay: 5000 }),\n )\n .subscribe();\n})();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-okx",
3
- "version": "0.27.9",
3
+ "version": "0.27.11",
4
4
  "main": "lib/index.js",
5
5
  "files": [
6
6
  "dist",
@@ -22,7 +22,7 @@
22
22
  "@yuants/data-interest-rate": "0.1.48",
23
23
  "@yuants/data-quote": "0.2.43",
24
24
  "@yuants/data-trade": "0.1.21",
25
- "@yuants/exchange": "0.1.2",
25
+ "@yuants/exchange": "0.2.0",
26
26
  "rxjs": "~7.5.6",
27
27
  "ws": "~8.8.1"
28
28
  },
@@ -1,13 +1,13 @@
1
1
  {
2
- "apps/vendor-okx/CHANGELOG.json": "44e3b1b566859aebedfc4b4c86c85d2ebaa2f867",
3
- "apps/vendor-okx/CHANGELOG.md": "4382ac89deb8bf434001c2f31183da0dc73ac06a",
2
+ "apps/vendor-okx/CHANGELOG.json": "86dcbf01ffc974edd74b429ea560fb81aa89547d",
3
+ "apps/vendor-okx/CHANGELOG.md": "69bb7225b6f295e536ed94c033b4cb3459686411",
4
4
  "apps/vendor-okx/README.md": "68caeb8e383d77ece973cd70f4b167b86abb54c3",
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": "145cfb3d3e373a66aa59750532443f8612f6e523",
10
+ "apps/vendor-okx/package.json": "701c10ee906f811c255b99c80bc569fb7980330a",
11
11
  "apps/vendor-okx/src/account-actions-with-credential.ts": "1a2de787b588e98ceef60b3ffb951f298504bf12",
12
12
  "apps/vendor-okx/src/account.ts": "672014c974457b438cf026f763d6eecfe585c82b",
13
13
  "apps/vendor-okx/src/accountInfos/earning.ts": "62aaeb3b62fa9197d07ee14155625530cdb9b1cd",
@@ -15,7 +15,7 @@
15
15
  "apps/vendor-okx/src/accountInfos/index.ts": "272c4a49a94749b17d83bfb1f39a9bd932707288",
16
16
  "apps/vendor-okx/src/accountInfos/loan.ts": "693df52e7f9f3d1e1ae3179e5c4c4572db9597f1",
17
17
  "apps/vendor-okx/src/accountInfos/strategy.ts": "176add92022ad1fb43bad61880c5053aaa9fd5be",
18
- "apps/vendor-okx/src/accountInfos/trading.ts": "5e6ef37f23c970cc2379887167f886fc63f8822f",
18
+ "apps/vendor-okx/src/accountInfos/trading.ts": "60ded8fdeb5c448fea467d3eb10aa9dab752f903",
19
19
  "apps/vendor-okx/src/accountInfos/types.ts": "c3c1096c3ad6849f6f679f1dfe0badb3ae876e41",
20
20
  "apps/vendor-okx/src/accountInfos/uid.ts": "348b64b205771143974e5ac5f5a7d06e9391a9f9",
21
21
  "apps/vendor-okx/src/api-service.ts": "f1d977b144b1096965c5990260d9e6c81b08cb8c",
@@ -36,7 +36,7 @@
36
36
  "apps/vendor-okx/src/public-data/quote.ts": "4ab43a1d668393d90ae90ec1221de51a28101b32",
37
37
  "apps/vendor-okx/src/services.ts": "2cbbc938f50f8348c02fd5b05cf53b3643a66d05",
38
38
  "apps/vendor-okx/src/strategy-account.ts": "2d8f913e19c4402eab249291aaab0b77bc4d9ff8",
39
- "apps/vendor-okx/src/trade.ts": "4d1f330a6cf1407d292e09f5928cd73ee8e9059d",
39
+ "apps/vendor-okx/src/trade.ts": "cbb88bc535b8377ecd54a18e39082923fd5a4fda",
40
40
  "apps/vendor-okx/src/transfer.ts": "381e4bf18846c8f79d3e970277d8800a2f94dacd",
41
41
  "apps/vendor-okx/src/utils/provideOHLCFromTimeBackwardService.ts": "3a44206410b5b73683f2395d6c551549b553d7bd",
42
42
  "apps/vendor-okx/src/utils/provideSeriesFromTimeBackwardService.ts": "daf3c793eb4fc20e59a740bb69e50fadab5f62f0",
@@ -57,7 +57,7 @@
57
57
  "libraries/data-interest-rate/temp/package-deps.json": "cef1e1cb0116ad593c24635684e0cbf03488d67c",
58
58
  "libraries/data-quote/temp/package-deps.json": "34d079eab44d2bf65e07b112ac2099c6e92a015e",
59
59
  "libraries/data-trade/temp/package-deps.json": "aa7929cce3f5a00f2cfb250e7aa4c442e3858517",
60
- "libraries/exchange/temp/package-deps.json": "f9a2557b53874e78a809b82326b850d98b524a9b",
60
+ "libraries/exchange/temp/package-deps.json": "3cc8493e0f93738d571c8ea2c23fc54e8b1bc4f3",
61
61
  "libraries/extension/temp/package-deps.json": "9569c553c2f9a7d50b70d8f101fc2d3825aaccb9",
62
62
  "tools/toolkit/temp/package-deps.json": "23e053490eb8feade23e4d45de4e54883e322711"
63
63
  }