@yuants/vendor-okx 0.29.11 → 0.29.12

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.
@@ -49,6 +49,7 @@ export const getPositions = async (credential) => {
49
49
  closable_price,
50
50
  position_price: +x.avgPx,
51
51
  floating_profit: +x.upl,
52
+ liquidation_price: x.liqPx,
52
53
  valuation,
53
54
  });
54
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getPositions.js","sourceRoot":"","sources":["../../src/experimental/getPositions.ts"],"names":[],"mappings":"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","sourcesContent":["import { IPosition, makeSpotPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { getSpotPrice } from '../accountInfos/trading';\nimport {\n getAccountBalance,\n getAccountPositions,\n getAssetBalances,\n getFinanceSavingsBalance,\n getFlexibleLoanInfo,\n ICredential,\n} from '../api/private-api';\nimport { productCache } from './product';\n\nexport const getPositions = async (credential: ICredential): Promise<IPosition[]> => {\n const positions: IPosition[] = [];\n\n const [positionsApi, balanceApi, assetBalancesApi, offersApi, flexibleLoanInfoApi] = await Promise.all([\n // Trading Accounts\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n // Funding Accounts\n getAssetBalances(credential, {}),\n // Earning Accounts\n getFinanceSavingsBalance(credential, {}),\n // Loan Accounts\n getFlexibleLoanInfo(credential),\n ]);\n\n // 现货头寸\n for (const detail of balanceApi.data?.[0]?.details || []) {\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('OKX', '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 for (const x of positionsApi.data || []) {\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('OKX', x.instType, x.instId);\n const closable_price = +x.last;\n const theProduct = await productCache.query(product_id);\n const valuation = (theProduct?.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\n for (const x of assetBalancesApi.data || []) {\n positions.push(\n makeSpotPosition({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n product_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n volume: +x.bal,\n free_volume: +x.bal,\n closable_price: getSpotPrice(x.ccy),\n }),\n );\n }\n\n for (const offer of offersApi.data || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n volume: +offer.amt,\n free_volume: +offer.amt,\n closable_price: getSpotPrice(offer.ccy),\n }),\n );\n }\n\n for (const loan of flexibleLoanInfoApi.data?.[0]?.loanData || []) {\n positions.push({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n product_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n volume: +loan.amt,\n free_volume: +loan.amt,\n direction: 'SHORT',\n position_price: 0,\n closable_price: getSpotPrice(loan.ccy),\n floating_profit: -getSpotPrice(loan.ccy) * +loan.amt,\n valuation: getSpotPrice(loan.ccy) * +loan.amt,\n });\n }\n\n for (const collateral of flexibleLoanInfoApi.data?.[0]?.collateralData || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n volume: +collateral.amt,\n free_volume: +collateral.amt,\n closable_price: getSpotPrice(collateral.ccy),\n }),\n );\n }\n\n return positions;\n};\n"]}
1
+ {"version":3,"file":"getPositions.js","sourceRoot":"","sources":["../../src/experimental/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,UAAuB,EAAwB,EAAE;;IAClF,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrG,mBAAmB;QACnB,mBAAmB,CAAC,UAAU,EAAE,EAAE,CAAC;QACnC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC;QACjC,mBAAmB;QACnB,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC;QAChC,mBAAmB;QACnB,wBAAwB,CAAC,UAAU,EAAE,EAAE,CAAC;QACxC,gBAAgB;QAChB,mBAAmB,CAAC,UAAU,CAAC;KAChC,CAAC,CAAC;IAEH,OAAO;IACP,KAAK,MAAM,MAAM,IAAI,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,0CAAG,CAAC,CAAC,0CAAE,OAAO,KAAI,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,MAAM,EAAE,4DAA4D;QACpE,CAAC,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,CAAC,CAAC,CACvB,CAAC;QAEF,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;QACnE,SAAS,CAAC,IAAI,CACZ,gBAAgB,CAAC;YACf,WAAW,EAAE,UAAU;YACvB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,WAAW;YACxB,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;SACzC,CAAC,CACH,CAAC;KACH;IACD,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,IAAI,EAAE,EAAE;QACvC,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,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,mCAAI,CAAC,CAAC,GAAG,MAAM,GAAG,cAAc,IAAI,CAAC,CAAC;QAEhF,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,iBAAiB,EAAE,CAAC,CAAC,KAAK;YAC1B,SAAS;SACV,CAAC,CAAC;KACJ;IAED,KAAK,MAAM,CAAC,IAAI,gBAAgB,CAAC,IAAI,IAAI,EAAE,EAAE;QAC3C,SAAS,CAAC,IAAI,CACZ,gBAAgB,CAAC;YACf,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3D,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC1D,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;YACd,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG;YACnB,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;SACpC,CAAC,CACH,CAAC;KACH;IAED,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,IAAI,EAAE,EAAE;QACxC,SAAS,CAAC,IAAI,CACZ,gBAAgB,CAAC;YACf,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAC/D,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG;YAClB,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG;YACvB,cAAc,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;SACxC,CAAC,CACH,CAAC;KACH;IAED,KAAK,MAAM,IAAI,IAAI,CAAA,MAAA,MAAA,mBAAmB,CAAC,IAAI,0CAAG,CAAC,CAAC,0CAAE,QAAQ,KAAI,EAAE,EAAE;QAChE,SAAS,CAAC,IAAI,CAAC;YACb,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrD,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACpD,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;YACjB,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG;YACtB,SAAS,EAAE,OAAO;YAClB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YACtC,eAAe,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;YACpD,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;SAC9C,CAAC,CAAC;KACJ;IAED,KAAK,MAAM,UAAU,IAAI,CAAA,MAAA,MAAA,mBAAmB,CAAC,IAAI,0CAAG,CAAC,CAAC,0CAAE,cAAc,KAAI,EAAE,EAAE;QAC5E,SAAS,CAAC,IAAI,CACZ,gBAAgB,CAAC;YACf,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YACjE,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAChE,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG;YACvB,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG;YAC5B,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;SAC7C,CAAC,CACH,CAAC;KACH;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC","sourcesContent":["import { IPosition, makeSpotPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { getSpotPrice } from '../accountInfos/trading';\nimport {\n getAccountBalance,\n getAccountPositions,\n getAssetBalances,\n getFinanceSavingsBalance,\n getFlexibleLoanInfo,\n ICredential,\n} from '../api/private-api';\nimport { productCache } from './product';\n\nexport const getPositions = async (credential: ICredential): Promise<IPosition[]> => {\n const positions: IPosition[] = [];\n\n const [positionsApi, balanceApi, assetBalancesApi, offersApi, flexibleLoanInfoApi] = await Promise.all([\n // Trading Accounts\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n // Funding Accounts\n getAssetBalances(credential, {}),\n // Earning Accounts\n getFinanceSavingsBalance(credential, {}),\n // Loan Accounts\n getFlexibleLoanInfo(credential),\n ]);\n\n // 现货头寸\n for (const detail of balanceApi.data?.[0]?.details || []) {\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('OKX', '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 for (const x of positionsApi.data || []) {\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('OKX', x.instType, x.instId);\n const closable_price = +x.last;\n const theProduct = await productCache.query(product_id);\n const valuation = (theProduct?.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 liquidation_price: x.liqPx,\n valuation,\n });\n }\n\n for (const x of assetBalancesApi.data || []) {\n positions.push(\n makeSpotPosition({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n product_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n volume: +x.bal,\n free_volume: +x.bal,\n closable_price: getSpotPrice(x.ccy),\n }),\n );\n }\n\n for (const offer of offersApi.data || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n volume: +offer.amt,\n free_volume: +offer.amt,\n closable_price: getSpotPrice(offer.ccy),\n }),\n );\n }\n\n for (const loan of flexibleLoanInfoApi.data?.[0]?.loanData || []) {\n positions.push({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n product_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n volume: +loan.amt,\n free_volume: +loan.amt,\n direction: 'SHORT',\n position_price: 0,\n closable_price: getSpotPrice(loan.ccy),\n floating_profit: -getSpotPrice(loan.ccy) * +loan.amt,\n valuation: getSpotPrice(loan.ccy) * +loan.amt,\n });\n }\n\n for (const collateral of flexibleLoanInfoApi.data?.[0]?.collateralData || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n volume: +collateral.amt,\n free_volume: +collateral.amt,\n closable_price: getSpotPrice(collateral.ccy),\n }),\n );\n }\n\n return positions;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getPositions.d.ts","sourceRoot":"","sources":["../../src/experimental/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAML,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,eAAO,MAAM,YAAY,eAAsB,WAAW,KAAG,QAAQ,SAAS,EAAE,CAiH/E,CAAC"}
1
+ {"version":3,"file":"getPositions.d.ts","sourceRoot":"","sources":["../../src/experimental/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAML,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,eAAO,MAAM,YAAY,eAAsB,WAAW,KAAG,QAAQ,SAAS,EAAE,CAkH/E,CAAC"}
@@ -52,6 +52,7 @@ const getPositions = async (credential) => {
52
52
  closable_price,
53
53
  position_price: +x.avgPx,
54
54
  floating_profit: +x.upl,
55
+ liquidation_price: x.liqPx,
55
56
  valuation,
56
57
  });
57
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getPositions.js","sourceRoot":"","sources":["../../src/experimental/getPositions.ts"],"names":[],"mappings":"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","sourcesContent":["import { IPosition, makeSpotPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { getSpotPrice } from '../accountInfos/trading';\nimport {\n getAccountBalance,\n getAccountPositions,\n getAssetBalances,\n getFinanceSavingsBalance,\n getFlexibleLoanInfo,\n ICredential,\n} from '../api/private-api';\nimport { productCache } from './product';\n\nexport const getPositions = async (credential: ICredential): Promise<IPosition[]> => {\n const positions: IPosition[] = [];\n\n const [positionsApi, balanceApi, assetBalancesApi, offersApi, flexibleLoanInfoApi] = await Promise.all([\n // Trading Accounts\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n // Funding Accounts\n getAssetBalances(credential, {}),\n // Earning Accounts\n getFinanceSavingsBalance(credential, {}),\n // Loan Accounts\n getFlexibleLoanInfo(credential),\n ]);\n\n // 现货头寸\n for (const detail of balanceApi.data?.[0]?.details || []) {\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('OKX', '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 for (const x of positionsApi.data || []) {\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('OKX', x.instType, x.instId);\n const closable_price = +x.last;\n const theProduct = await productCache.query(product_id);\n const valuation = (theProduct?.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\n for (const x of assetBalancesApi.data || []) {\n positions.push(\n makeSpotPosition({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n product_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n volume: +x.bal,\n free_volume: +x.bal,\n closable_price: getSpotPrice(x.ccy),\n }),\n );\n }\n\n for (const offer of offersApi.data || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n volume: +offer.amt,\n free_volume: +offer.amt,\n closable_price: getSpotPrice(offer.ccy),\n }),\n );\n }\n\n for (const loan of flexibleLoanInfoApi.data?.[0]?.loanData || []) {\n positions.push({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n product_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n volume: +loan.amt,\n free_volume: +loan.amt,\n direction: 'SHORT',\n position_price: 0,\n closable_price: getSpotPrice(loan.ccy),\n floating_profit: -getSpotPrice(loan.ccy) * +loan.amt,\n valuation: getSpotPrice(loan.ccy) * +loan.amt,\n });\n }\n\n for (const collateral of flexibleLoanInfoApi.data?.[0]?.collateralData || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n volume: +collateral.amt,\n free_volume: +collateral.amt,\n closable_price: getSpotPrice(collateral.ccy),\n }),\n );\n }\n\n return positions;\n};\n"]}
1
+ {"version":3,"file":"getPositions.js","sourceRoot":"","sources":["../../src/experimental/getPositions.ts"],"names":[],"mappings":"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","sourcesContent":["import { IPosition, makeSpotPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { getSpotPrice } from '../accountInfos/trading';\nimport {\n getAccountBalance,\n getAccountPositions,\n getAssetBalances,\n getFinanceSavingsBalance,\n getFlexibleLoanInfo,\n ICredential,\n} from '../api/private-api';\nimport { productCache } from './product';\n\nexport const getPositions = async (credential: ICredential): Promise<IPosition[]> => {\n const positions: IPosition[] = [];\n\n const [positionsApi, balanceApi, assetBalancesApi, offersApi, flexibleLoanInfoApi] = await Promise.all([\n // Trading Accounts\n getAccountPositions(credential, {}),\n getAccountBalance(credential, {}),\n // Funding Accounts\n getAssetBalances(credential, {}),\n // Earning Accounts\n getFinanceSavingsBalance(credential, {}),\n // Loan Accounts\n getFlexibleLoanInfo(credential),\n ]);\n\n // 现货头寸\n for (const detail of balanceApi.data?.[0]?.details || []) {\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('OKX', '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 for (const x of positionsApi.data || []) {\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('OKX', x.instType, x.instId);\n const closable_price = +x.last;\n const theProduct = await productCache.query(product_id);\n const valuation = (theProduct?.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 liquidation_price: x.liqPx,\n valuation,\n });\n }\n\n for (const x of assetBalancesApi.data || []) {\n positions.push(\n makeSpotPosition({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n product_id: encodePath('OKX', 'FUNDING-ASSET', `${x.ccy}`),\n volume: +x.bal,\n free_volume: +x.bal,\n closable_price: getSpotPrice(x.ccy),\n }),\n );\n }\n\n for (const offer of offersApi.data || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'EARNING-ASSET', `${offer.ccy}`),\n volume: +offer.amt,\n free_volume: +offer.amt,\n closable_price: getSpotPrice(offer.ccy),\n }),\n );\n }\n\n for (const loan of flexibleLoanInfoApi.data?.[0]?.loanData || []) {\n positions.push({\n datasource_id: 'OKX',\n position_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n product_id: encodePath('OKX', 'LOAN', `${loan.ccy}`),\n volume: +loan.amt,\n free_volume: +loan.amt,\n direction: 'SHORT',\n position_price: 0,\n closable_price: getSpotPrice(loan.ccy),\n floating_profit: -getSpotPrice(loan.ccy) * +loan.amt,\n valuation: getSpotPrice(loan.ccy) * +loan.amt,\n });\n }\n\n for (const collateral of flexibleLoanInfoApi.data?.[0]?.collateralData || []) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'COLLATERAL', `${collateral.ccy}`),\n volume: +collateral.amt,\n free_volume: +collateral.amt,\n closable_price: getSpotPrice(collateral.ccy),\n }),\n );\n }\n\n return positions;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-okx",
3
- "version": "0.29.11",
3
+ "version": "0.29.12",
4
4
  "main": "lib/index.js",
5
5
  "files": [
6
6
  "dist",
@@ -1,13 +1,13 @@
1
1
  {
2
- "apps/vendor-okx/CHANGELOG.json": "b0ba7384b240141f0c874eb4201fe7d58bff3b18",
3
- "apps/vendor-okx/CHANGELOG.md": "a6885d3a01801148b950043b4fd70330cd093e45",
2
+ "apps/vendor-okx/CHANGELOG.json": "2c1be394fd415553470426085d26582a38d774ea",
3
+ "apps/vendor-okx/CHANGELOG.md": "649c75138642fdfa8711d6b355f9983f0b8312b9",
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": "39df78830a4aa02a7cc97c6cee361ff695ca0e13",
10
+ "apps/vendor-okx/package.json": "4ae8f4a5a64c8c0e8df6b4a72df43bac6ed81706",
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",
@@ -23,7 +23,7 @@
23
23
  "apps/vendor-okx/src/api/public-api.ts": "05b9cddafd09b5c9f65ce4eaeab42832e7d60449",
24
24
  "apps/vendor-okx/src/experimental/exchange.ts": "df5c9dc9e4d4210be7367f1c23dc63dc4d82cb6f",
25
25
  "apps/vendor-okx/src/experimental/getOrders.ts": "f89b8334fa55163a78f91cf675cea8c7c869d4a7",
26
- "apps/vendor-okx/src/experimental/getPositions.ts": "1cbbe0873a4dc1358eb43e5a1f62cc132bcd58e2",
26
+ "apps/vendor-okx/src/experimental/getPositions.ts": "5fe0bd5ebc3db151be7ae897aaad256dea878122",
27
27
  "apps/vendor-okx/src/experimental/product.ts": "808bb037c1559ead2260a6b1eb2552f246da45c6",
28
28
  "apps/vendor-okx/src/index.ts": "4bad32deb2845ce1314dd849bbd2780619b296f3",
29
29
  "apps/vendor-okx/src/order-actions-with-credential.ts": "f58b164c57a776db0fd0ad3a9f7197603ab2f66e",