@yuants/vendor-okx 0.27.3 → 0.27.5
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.
- package/dist/account-actions-with-credential.js +6 -6
- package/dist/account-actions-with-credential.js.map +1 -1
- package/dist/account.js +4 -4
- package/dist/account.js.map +1 -1
- package/dist/accountInfos/earning.js +12 -10
- package/dist/accountInfos/earning.js.map +1 -1
- package/dist/accountInfos/funding.js +11 -41
- package/dist/accountInfos/funding.js.map +1 -1
- package/dist/accountInfos/loan.js +16 -23
- package/dist/accountInfos/loan.js.map +1 -1
- package/dist/accountInfos/strategy.js +1 -8
- package/dist/accountInfos/strategy.js.map +1 -1
- package/dist/accountInfos/trading.js +26 -26
- package/dist/accountInfos/trading.js.map +1 -1
- package/dist/accountInfos/uid.js +2 -0
- package/dist/accountInfos/uid.js.map +1 -1
- package/dist/strategy-account.js +2 -2
- package/dist/strategy-account.js.map +1 -1
- package/lib/account-actions-with-credential.js +6 -6
- package/lib/account-actions-with-credential.js.map +1 -1
- package/lib/account.d.ts.map +1 -1
- package/lib/account.js +4 -4
- package/lib/account.js.map +1 -1
- package/lib/accountInfos/earning.d.ts +2 -2
- package/lib/accountInfos/earning.d.ts.map +1 -1
- package/lib/accountInfos/earning.js +12 -10
- package/lib/accountInfos/earning.js.map +1 -1
- package/lib/accountInfos/funding.d.ts +2 -2
- package/lib/accountInfos/funding.d.ts.map +1 -1
- package/lib/accountInfos/funding.js +10 -40
- package/lib/accountInfos/funding.js.map +1 -1
- package/lib/accountInfos/loan.d.ts +2 -2
- package/lib/accountInfos/loan.d.ts.map +1 -1
- package/lib/accountInfos/loan.js +16 -23
- package/lib/accountInfos/loan.js.map +1 -1
- package/lib/accountInfos/strategy.d.ts +2 -2
- package/lib/accountInfos/strategy.d.ts.map +1 -1
- package/lib/accountInfos/strategy.js +1 -8
- package/lib/accountInfos/strategy.js.map +1 -1
- package/lib/accountInfos/trading.d.ts +3 -2
- package/lib/accountInfos/trading.d.ts.map +1 -1
- package/lib/accountInfos/trading.js +28 -27
- package/lib/accountInfos/trading.js.map +1 -1
- package/lib/accountInfos/uid.d.ts.map +1 -1
- package/lib/accountInfos/uid.js +2 -0
- package/lib/accountInfos/uid.js.map +1 -1
- package/lib/strategy-account.js +2 -2
- package/lib/strategy-account.js.map +1 -1
- package/package.json +2 -2
- package/temp/package-deps.json +13 -13
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { provideAccountActionsWithCredential } from '@yuants/data-account';
|
|
2
2
|
import { Terminal } from '@yuants/protocol';
|
|
3
|
-
import { getAccountIds } from './accountInfos/uid';
|
|
4
3
|
import { getEarningAccountInfo, getFundingAccountInfo, getLoanAccountInfo, getStrategyAccountInfo, getTradingAccountInfo, } from './accountInfos';
|
|
4
|
+
import { getAccountIds } from './accountInfos/uid';
|
|
5
5
|
provideAccountActionsWithCredential(Terminal.fromNodeEnv(), 'OKX', {
|
|
6
6
|
type: 'object',
|
|
7
7
|
required: ['access_key', 'secret_key', 'passphrase'],
|
|
@@ -23,15 +23,15 @@ provideAccountActionsWithCredential(Terminal.fromNodeEnv(), 'OKX', {
|
|
|
23
23
|
throw new Error('Failed to get account IDs');
|
|
24
24
|
switch (account_id) {
|
|
25
25
|
case accountIds.trading:
|
|
26
|
-
return getTradingAccountInfo(credential);
|
|
26
|
+
return getTradingAccountInfo(credential, account_id);
|
|
27
27
|
case accountIds.funding:
|
|
28
|
-
return getFundingAccountInfo(credential);
|
|
28
|
+
return getFundingAccountInfo(credential, account_id);
|
|
29
29
|
case accountIds.earning:
|
|
30
|
-
return getEarningAccountInfo(credential);
|
|
30
|
+
return getEarningAccountInfo(credential, account_id);
|
|
31
31
|
case accountIds.loan:
|
|
32
|
-
return getLoanAccountInfo(credential);
|
|
32
|
+
return getLoanAccountInfo(credential, account_id);
|
|
33
33
|
case accountIds.strategy:
|
|
34
|
-
return getStrategyAccountInfo(credential);
|
|
34
|
+
return getStrategyAccountInfo(credential, account_id);
|
|
35
35
|
}
|
|
36
36
|
throw new Error(`Unsupported account_id: ${account_id}`);
|
|
37
37
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-actions-with-credential.js","sourceRoot":"","sources":["../src/account-actions-with-credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"account-actions-with-credential.js","sourceRoot":"","sources":["../src/account-actions-with-credential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,mCAAmC,CACjC,QAAQ,CAAC,WAAW,EAAE,EACtB,KAAK,EACL;IACE,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;IACpD,UAAU,EAAE;QACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/B;CACF,EACD;IACE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;QAC/C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC9D,QAAQ,UAAU,EAAE;YAClB,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,UAAU,CAAC,IAAI;gBAClB,OAAO,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACpD,KAAK,UAAU,CAAC,QAAQ;gBACtB,OAAO,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SACzD;QACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CACF,CAAC","sourcesContent":["import { provideAccountActionsWithCredential } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport {\n getEarningAccountInfo,\n getFundingAccountInfo,\n getLoanAccountInfo,\n getStrategyAccountInfo,\n getTradingAccountInfo,\n} from './accountInfos';\nimport { getAccountIds } from './accountInfos/uid';\nimport { ICredential } from './api/private-api';\n\nprovideAccountActionsWithCredential<ICredential>(\n Terminal.fromNodeEnv(),\n 'OKX',\n {\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 listAccounts: async (credential) => {\n const accountIds = await getAccountIds(credential);\n if (!accountIds) throw new Error('Failed to get account IDs');\n return Object.values(accountIds).map((account_id) => ({ account_id }));\n },\n getAccountInfo: async (credential, account_id) => {\n const accountIds = await getAccountIds(credential);\n if (!accountIds) throw new Error('Failed to get account IDs');\n switch (account_id) {\n case accountIds.trading:\n return getTradingAccountInfo(credential, account_id);\n case accountIds.funding:\n return getFundingAccountInfo(credential, account_id);\n case accountIds.earning:\n return getEarningAccountInfo(credential, account_id);\n case accountIds.loan:\n return getLoanAccountInfo(credential, account_id);\n case accountIds.strategy:\n return getStrategyAccountInfo(credential, account_id);\n }\n throw new Error(`Unsupported account_id: ${account_id}`);\n },\n },\n);\n"]}
|
package/dist/account.js
CHANGED
|
@@ -17,25 +17,25 @@ defer(async () => {
|
|
|
17
17
|
defer(async () => {
|
|
18
18
|
const tradingAccountId = await getTradingAccountId(credential);
|
|
19
19
|
addAccountMarket(terminal, { account_id: tradingAccountId, market_id: 'OKX' });
|
|
20
|
-
provideAccountInfoService(terminal, tradingAccountId, () => getTradingAccountInfo(credential), {
|
|
20
|
+
provideAccountInfoService(terminal, tradingAccountId, () => getTradingAccountInfo(credential, tradingAccountId), {
|
|
21
21
|
auto_refresh_interval: 1000,
|
|
22
22
|
});
|
|
23
23
|
}).subscribe();
|
|
24
24
|
defer(async () => {
|
|
25
25
|
const fundingAccountId = await getFundingAccountId(credential);
|
|
26
|
-
provideAccountInfoService(terminal, fundingAccountId, () => getFundingAccountInfo(credential), {
|
|
26
|
+
provideAccountInfoService(terminal, fundingAccountId, () => getFundingAccountInfo(credential, fundingAccountId), {
|
|
27
27
|
auto_refresh_interval: 1000,
|
|
28
28
|
});
|
|
29
29
|
}).subscribe();
|
|
30
30
|
defer(async () => {
|
|
31
31
|
const earningAccountId = await getEarningAccountId(credential);
|
|
32
|
-
provideAccountInfoService(terminal, earningAccountId, () => getEarningAccountInfo(credential), {
|
|
32
|
+
provideAccountInfoService(terminal, earningAccountId, () => getEarningAccountInfo(credential, earningAccountId), {
|
|
33
33
|
auto_refresh_interval: 5000,
|
|
34
34
|
});
|
|
35
35
|
}).subscribe();
|
|
36
36
|
defer(async () => {
|
|
37
37
|
const loanAccountId = await getLoanAccountId(credential);
|
|
38
|
-
provideAccountInfoService(Terminal.fromNodeEnv(), loanAccountId, () => getLoanAccountInfo(credential), {
|
|
38
|
+
provideAccountInfoService(Terminal.fromNodeEnv(), loanAccountId, () => getLoanAccountInfo(credential, loanAccountId), {
|
|
39
39
|
auto_refresh_interval: 1000,
|
|
40
40
|
});
|
|
41
41
|
}).subscribe();
|
package/dist/account.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;AAE1C,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzD,2BAA2B,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;QAChG,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAEf,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/D,gBAAgB,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/E,yBAAyB,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;AAE1C,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzD,2BAA2B,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;QAChG,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAEf,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/D,gBAAgB,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/E,yBAAyB,CACvB,QAAQ,EACR,gBAAgB,EAChB,GAAG,EAAE,CAAC,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EACzD;QACE,qBAAqB,EAAE,IAAI;KAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAEf,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAE/D,yBAAyB,CACvB,QAAQ,EACR,gBAAgB,EAChB,GAAG,EAAE,CAAC,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EACzD;QACE,qBAAqB,EAAE,IAAI;KAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAEf,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/D,yBAAyB,CACvB,QAAQ,EACR,gBAAgB,EAChB,GAAG,EAAE,CAAC,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EACzD;QACE,qBAAqB,EAAE,IAAI;KAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAEf,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACzD,yBAAyB,CACvB,QAAQ,CAAC,WAAW,EAAE,EACtB,aAAa,EACb,GAAG,EAAE,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,EACnD;QACE,qBAAqB,EAAE,IAAI;KAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAEf,oCAAoC;AACpC,OAAO,EAAE,sBAAsB,EAAE,CAAC","sourcesContent":["import { addAccountMarket, provideAccountInfoService } from '@yuants/data-account';\nimport { providePendingOrdersService } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { defer } from 'rxjs';\nimport {\n getEarningAccountInfo,\n getFundingAccountInfo,\n getLoanAccountInfo,\n getTradingAccountInfo,\n marketIndexTickerUSDT$,\n} from './accountInfos';\nimport {\n getEarningAccountId,\n getFundingAccountId,\n getLoanAccountId,\n getTradingAccountId,\n} from './accountInfos/uid';\nimport { getDefaultCredential } from './api/private-api';\nimport { listOrders } from './orders/listOrders';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst credential = getDefaultCredential();\n\ndefer(async () => {\n const account_id = await getTradingAccountId(credential);\n providePendingOrdersService(terminal, account_id, async () => listOrders(credential, account_id), {\n auto_refresh_interval: 5000,\n });\n}).subscribe();\n\ndefer(async () => {\n const tradingAccountId = await getTradingAccountId(credential);\n addAccountMarket(terminal, { account_id: tradingAccountId, market_id: 'OKX' });\n\n provideAccountInfoService(\n terminal,\n tradingAccountId,\n () => getTradingAccountInfo(credential, tradingAccountId),\n {\n auto_refresh_interval: 1000,\n },\n );\n}).subscribe();\n\ndefer(async () => {\n const fundingAccountId = await getFundingAccountId(credential);\n\n provideAccountInfoService(\n terminal,\n fundingAccountId,\n () => getFundingAccountInfo(credential, fundingAccountId),\n {\n auto_refresh_interval: 1000,\n },\n );\n}).subscribe();\n\ndefer(async () => {\n const earningAccountId = await getEarningAccountId(credential);\n provideAccountInfoService(\n terminal,\n earningAccountId,\n () => getEarningAccountInfo(credential, earningAccountId),\n {\n auto_refresh_interval: 5000,\n },\n );\n}).subscribe();\n\ndefer(async () => {\n const loanAccountId = await getLoanAccountId(credential);\n provideAccountInfoService(\n Terminal.fromNodeEnv(),\n loanAccountId,\n () => getLoanAccountInfo(credential, loanAccountId),\n {\n auto_refresh_interval: 1000,\n },\n );\n}).subscribe();\n\n// 导出 marketIndexTickerUSDT$ 供其他模块使用\nexport { marketIndexTickerUSDT$ };\n"]}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import { makeSpotPosition } from '@yuants/data-account';
|
|
1
2
|
import { getFinanceSavingsBalance } from '../api/private-api';
|
|
3
|
+
import { getSpotPrice } from './trading';
|
|
2
4
|
export const getEarningAccountInfo = async (credential) => {
|
|
3
5
|
const offers = await getFinanceSavingsBalance(credential, {});
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
6
|
+
return offers.data.map((offer) => {
|
|
7
|
+
return makeSpotPosition({
|
|
8
|
+
position_id: `earning/${offer.ccy}`,
|
|
9
|
+
datasource_id: 'OKX',
|
|
10
|
+
product_id: `earning/${offer.ccy}`,
|
|
11
|
+
volume: +offer.amt,
|
|
12
|
+
free_volume: +offer.amt,
|
|
13
|
+
closable_price: getSpotPrice(offer.ccy),
|
|
14
|
+
});
|
|
15
|
+
});
|
|
14
16
|
};
|
|
15
17
|
//# sourceMappingURL=earning.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"earning.js","sourceRoot":"","sources":["../../src/accountInfos/earning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"earning.js","sourceRoot":"","sources":["../../src/accountInfos/earning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAe,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAA0B,MAAM,WAAW,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAgD,KAAK,EAAE,UAAU,EAAE,EAAE;IACrG,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,OAAO,gBAAgB,CAAC;YACtB,WAAW,EAAE,WAAW,KAAK,CAAC,GAAG,EAAE;YACnC,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,WAAW,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG;YAClB,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG;YACvB,cAAc,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;SACxC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import { IActionHandlerOfGetAccountInfo, makeSpotPosition } from '@yuants/data-account';\nimport { firstValueFrom } from 'rxjs';\nimport { ICredential, getFinanceSavingsBalance } from '../api/private-api';\nimport { getSpotPrice, marketIndexTickerUSDT$ } from './trading';\n\nexport const getEarningAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\n const offers = await getFinanceSavingsBalance(credential, {});\n\n return offers.data.map((offer) => {\n return makeSpotPosition({\n position_id: `earning/${offer.ccy}`,\n datasource_id: 'OKX',\n product_id: `earning/${offer.ccy}`,\n volume: +offer.amt,\n free_volume: +offer.amt,\n closable_price: getSpotPrice(offer.ccy),\n });\n });\n};\n"]}
|
|
@@ -1,46 +1,16 @@
|
|
|
1
|
+
import { makeSpotPosition } from '@yuants/data-account';
|
|
1
2
|
import { encodePath } from '@yuants/utils';
|
|
2
|
-
import { firstValueFrom } from 'rxjs';
|
|
3
3
|
import { getAssetBalances } from '../api/private-api';
|
|
4
|
-
import {
|
|
4
|
+
import { getSpotPrice } from './trading';
|
|
5
5
|
export const getFundingAccountInfo = async (credential) => {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const balance = +x.bal;
|
|
16
|
-
equity += balance;
|
|
17
|
-
free += balance;
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
const price = marketIndexTickerUSDT.get(`${x.ccy}-USDT`) || 0;
|
|
21
|
-
const valuation = price * +x.bal || 0;
|
|
22
|
-
const productId = encodePath('SPOT', `${x.ccy}-USDT`);
|
|
23
|
-
positions.push({
|
|
24
|
-
datasource_id: 'OKX',
|
|
25
|
-
position_id: productId,
|
|
26
|
-
product_id: productId,
|
|
27
|
-
direction: 'LONG',
|
|
28
|
-
volume: +x.bal,
|
|
29
|
-
free_volume: +x.bal,
|
|
30
|
-
position_price: price,
|
|
31
|
-
floating_profit: 0,
|
|
32
|
-
closable_price: price,
|
|
33
|
-
valuation,
|
|
34
|
-
});
|
|
35
|
-
equity += valuation;
|
|
36
|
-
});
|
|
37
|
-
return {
|
|
38
|
-
money: {
|
|
39
|
-
currency: 'USDT',
|
|
40
|
-
equity,
|
|
41
|
-
free,
|
|
42
|
-
},
|
|
43
|
-
positions,
|
|
44
|
-
};
|
|
6
|
+
const assetBalances = await getAssetBalances(credential, {});
|
|
7
|
+
return assetBalances.data.map((x) => makeSpotPosition({
|
|
8
|
+
datasource_id: 'OKX',
|
|
9
|
+
position_id: encodePath('SPOT', `${x.ccy}-USDT`),
|
|
10
|
+
product_id: encodePath('SPOT', `${x.ccy}-USDT`),
|
|
11
|
+
volume: +x.bal,
|
|
12
|
+
free_volume: +x.bal,
|
|
13
|
+
closable_price: getSpotPrice(x.ccy),
|
|
14
|
+
}));
|
|
45
15
|
};
|
|
46
16
|
//# sourceMappingURL=funding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/accountInfos/funding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/accountInfos/funding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAe,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,qBAAqB,GAAgD,KAAK,EAAE,UAAU,EAAE,EAAE;IACrG,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE7D,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,gBAAgB,CAAC;QACf,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAChD,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAC/C,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;QACd,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG;QACnB,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;KACpC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IActionHandlerOfGetAccountInfo, makeSpotPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { ICredential, getAssetBalances } from '../api/private-api';\nimport { getSpotPrice } from './trading';\n\nexport const getFundingAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\n const assetBalances = await getAssetBalances(credential, {});\n\n return assetBalances.data.map((x) =>\n makeSpotPosition({\n datasource_id: 'OKX',\n position_id: encodePath('SPOT', `${x.ccy}-USDT`),\n product_id: encodePath('SPOT', `${x.ccy}-USDT`),\n volume: +x.bal,\n free_volume: +x.bal,\n closable_price: getSpotPrice(x.ccy),\n }),\n );\n};\n"]}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import { makeSpotPosition } from '@yuants/data-account';
|
|
1
2
|
import { encodePath } from '@yuants/utils';
|
|
2
3
|
import { getFlexibleLoanInfo } from '../api/private-api';
|
|
4
|
+
import { getSpotPrice } from './trading';
|
|
3
5
|
export const getLoanAccountInfo = async (credential) => {
|
|
4
6
|
const res = await getFlexibleLoanInfo(credential);
|
|
5
7
|
const data = res.data[0];
|
|
8
|
+
if (!data)
|
|
9
|
+
return [];
|
|
6
10
|
const positions = [];
|
|
7
|
-
|
|
11
|
+
const loanData = data.loanData || [];
|
|
12
|
+
for (const loan of loanData) {
|
|
8
13
|
positions.push({
|
|
9
14
|
datasource_id: 'OKX',
|
|
10
15
|
product_id: `SPOT/${loan.ccy}-USDT`,
|
|
@@ -13,34 +18,22 @@ export const getLoanAccountInfo = async (credential) => {
|
|
|
13
18
|
position_id: encodePath('loan', loan.ccy),
|
|
14
19
|
direction: 'SHORT',
|
|
15
20
|
position_price: 0,
|
|
16
|
-
closable_price:
|
|
17
|
-
floating_profit:
|
|
18
|
-
valuation:
|
|
21
|
+
closable_price: getSpotPrice(loan.ccy),
|
|
22
|
+
floating_profit: -getSpotPrice(loan.ccy) * +loan.amt,
|
|
23
|
+
valuation: getSpotPrice(loan.ccy) * +loan.amt,
|
|
19
24
|
});
|
|
20
25
|
}
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
const collateralData = data.collateralData || [];
|
|
27
|
+
for (const collateral of collateralData) {
|
|
28
|
+
positions.push(makeSpotPosition({
|
|
29
|
+
position_id: encodePath('collateral', collateral.ccy),
|
|
23
30
|
datasource_id: 'OKX',
|
|
24
31
|
product_id: `SPOT/${collateral.ccy}-USDT`,
|
|
25
32
|
volume: +collateral.amt,
|
|
26
33
|
free_volume: +collateral.amt,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
position_price: 0,
|
|
30
|
-
closable_price: 0,
|
|
31
|
-
floating_profit: 0,
|
|
32
|
-
valuation: 0,
|
|
33
|
-
});
|
|
34
|
+
closable_price: getSpotPrice(collateral.ccy),
|
|
35
|
+
}));
|
|
34
36
|
}
|
|
35
|
-
|
|
36
|
-
const free = equity - +data.collateralNotionalUsd;
|
|
37
|
-
return {
|
|
38
|
-
money: {
|
|
39
|
-
currency: 'USDT',
|
|
40
|
-
equity,
|
|
41
|
-
free,
|
|
42
|
-
},
|
|
43
|
-
positions,
|
|
44
|
-
};
|
|
37
|
+
return positions;
|
|
45
38
|
};
|
|
46
39
|
//# sourceMappingURL=loan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loan.js","sourceRoot":"","sources":["../../src/accountInfos/loan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loan.js","sourceRoot":"","sources":["../../src/accountInfos/loan.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAe,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,kBAAkB,GAAgD,KAAK,EAAE,UAAU,EAAE,EAAE;IAClG,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,SAAS,GAAgB,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;QAC3B,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,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;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;IACjD,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE;QACvC,SAAS,CAAC,IAAI,CACZ,gBAAgB,CAAC;YACf,WAAW,EAAE,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC;YACrD,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,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;SAC7C,CAAC,CACH,CAAC;KACH;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC","sourcesContent":["import { IActionHandlerOfGetAccountInfo, IPosition, makeSpotPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { ICredential, getFlexibleLoanInfo } from '../api/private-api';\nimport { getSpotPrice } from './trading';\n\nexport const getLoanAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\n const res = await getFlexibleLoanInfo(credential);\n const data = res.data[0];\n if (!data) return [];\n\n const positions: IPosition[] = [];\n\n const loanData = data.loanData || [];\n for (const loan of 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: getSpotPrice(loan.ccy),\n floating_profit: -getSpotPrice(loan.ccy) * +loan.amt,\n valuation: getSpotPrice(loan.ccy) * +loan.amt,\n });\n }\n const collateralData = data.collateralData || [];\n for (const collateral of collateralData) {\n positions.push(\n makeSpotPosition({\n position_id: encodePath('collateral', collateral.ccy),\n datasource_id: 'OKX',\n product_id: `SPOT/${collateral.ccy}-USDT`,\n volume: +collateral.amt,\n free_volume: +collateral.amt,\n closable_price: getSpotPrice(collateral.ccy),\n }),\n );\n }\n\n return positions;\n};\n"]}
|
|
@@ -44,13 +44,6 @@ export const getStrategyAccountInfo = async (credential) => {
|
|
|
44
44
|
totalEquity += positionValuation / leverage;
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
|
-
return
|
|
48
|
-
money: {
|
|
49
|
-
currency: 'USDT',
|
|
50
|
-
equity: totalEquity,
|
|
51
|
-
free: 0, // TODO: 累计策略的可提取资金作为 free
|
|
52
|
-
},
|
|
53
|
-
positions,
|
|
54
|
-
};
|
|
47
|
+
return positions;
|
|
55
48
|
};
|
|
56
49
|
//# sourceMappingURL=strategy.js.map
|
|
@@ -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,oBAAoB,CAAC;
|
|
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;AAE7F,MAAM,CAAC,MAAM,sBAAsB,GAAgD,KAAK,EAAE,UAAU,EAAE,EAAE;IACtG,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,SAAS,CAAC;AACnB,CAAC,CAAC","sourcesContent":["import { IActionHandlerOfGetAccountInfo, IPosition } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { ICredential, getGridOrdersAlgoPending, getGridPositions } from '../api/private-api';\n\nexport const getStrategyAccountInfo: IActionHandlerOfGetAccountInfo<ICredential> = async (credential) => {\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 positions;\n};\n"]}
|
|
@@ -1,24 +1,33 @@
|
|
|
1
|
+
import { makeSpotPosition } from '@yuants/data-account';
|
|
1
2
|
import { encodePath } from '@yuants/utils';
|
|
2
3
|
import { defer, firstValueFrom, map, repeat, retry, shareReplay } from 'rxjs';
|
|
3
4
|
import { getAccountBalance, getAccountPositions } from '../api/private-api';
|
|
4
5
|
import { getMarketIndexTicker } from '../api/public-api';
|
|
5
6
|
import { productService } from '../public-data/product';
|
|
7
|
+
const priceCache = new Map();
|
|
6
8
|
export const marketIndexTickerUSDT$ = defer(() => getMarketIndexTicker({ quoteCcy: 'USDT' })).pipe(map((x) => {
|
|
7
9
|
const mapInstIdToPrice = new Map();
|
|
8
|
-
x.data.forEach((inst) =>
|
|
10
|
+
x.data.forEach((inst) => {
|
|
11
|
+
mapInstIdToPrice.set(inst.instId, Number(inst.idxPx));
|
|
12
|
+
priceCache.set(inst.instId, Number(inst.idxPx));
|
|
13
|
+
});
|
|
9
14
|
return mapInstIdToPrice;
|
|
10
15
|
}), repeat({ delay: 1000 }), retry({ delay: 5000 }), shareReplay(1));
|
|
16
|
+
marketIndexTickerUSDT$.subscribe();
|
|
17
|
+
export const getSpotPrice = (ccy) => {
|
|
18
|
+
if (ccy === 'USDT')
|
|
19
|
+
return 1;
|
|
20
|
+
return priceCache.get(`${ccy}-USDT`) || 0;
|
|
21
|
+
};
|
|
11
22
|
export const getTradingAccountInfo = async (credential) => {
|
|
12
23
|
var _a;
|
|
13
|
-
const [positionsApi, balanceApi, mapProductIdToProduct
|
|
24
|
+
const [positionsApi, balanceApi, mapProductIdToProduct] = await Promise.all([
|
|
14
25
|
getAccountPositions(credential, {}),
|
|
15
26
|
getAccountBalance(credential, {}),
|
|
16
27
|
firstValueFrom(productService.mapProductIdToProduct$),
|
|
17
|
-
firstValueFrom(marketIndexTickerUSDT$),
|
|
18
28
|
]);
|
|
19
|
-
let totalEquity = 0;
|
|
20
|
-
let totalFree = 0;
|
|
21
29
|
const positions = [];
|
|
30
|
+
// 现货头寸
|
|
22
31
|
(_a = balanceApi.data[0]) === null || _a === void 0 ? void 0 : _a.details.forEach((detail) => {
|
|
23
32
|
var _a, _b, _c, _d, _e, _f;
|
|
24
33
|
if (detail.ccy === 'USDT') {
|
|
@@ -26,30 +35,28 @@ export const getTradingAccountInfo = async (credential) => {
|
|
|
26
35
|
const free = Math.min(balance, // free should no more than balance if there is much profits
|
|
27
36
|
+((_b = detail.availEq) !== null && _b !== void 0 ? _b : 0));
|
|
28
37
|
const equity = +((_c = detail.eq) !== null && _c !== void 0 ? _c : 0) - +((_d = detail.stgyEq) !== null && _d !== void 0 ? _d : 0);
|
|
29
|
-
|
|
30
|
-
|
|
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
|
+
}));
|
|
31
46
|
}
|
|
32
47
|
else {
|
|
33
48
|
const volume = +((_e = detail.cashBal) !== null && _e !== void 0 ? _e : 0);
|
|
34
49
|
const free_volume = Math.min(volume, // free should no more than balance if there is much profits
|
|
35
50
|
+((_f = detail.availEq) !== null && _f !== void 0 ? _f : 0));
|
|
36
|
-
const closable_price = marketIndexTickerUSDT.get(detail.ccy + '-USDT') || 0;
|
|
37
|
-
const delta_equity = volume * closable_price || 0;
|
|
38
|
-
const delta_profit = +detail.totalPnl || 0;
|
|
39
51
|
const product_id = encodePath('SPOT', `${detail.ccy}-USDT`);
|
|
40
|
-
positions.push({
|
|
52
|
+
positions.push(makeSpotPosition({
|
|
41
53
|
position_id: product_id,
|
|
42
54
|
datasource_id: 'OKX',
|
|
43
55
|
product_id: product_id,
|
|
44
|
-
direction: 'LONG',
|
|
45
56
|
volume: volume,
|
|
46
57
|
free_volume: free_volume,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
closable_price: closable_price,
|
|
50
|
-
valuation: delta_equity,
|
|
51
|
-
});
|
|
52
|
-
totalEquity += delta_equity;
|
|
58
|
+
closable_price: getSpotPrice(detail.ccy),
|
|
59
|
+
}));
|
|
53
60
|
}
|
|
54
61
|
});
|
|
55
62
|
positionsApi.data.forEach((x) => {
|
|
@@ -72,13 +79,6 @@ export const getTradingAccountInfo = async (credential) => {
|
|
|
72
79
|
valuation,
|
|
73
80
|
});
|
|
74
81
|
});
|
|
75
|
-
return
|
|
76
|
-
money: {
|
|
77
|
-
currency: 'USDT',
|
|
78
|
-
equity: totalEquity,
|
|
79
|
-
free: totalFree,
|
|
80
|
-
},
|
|
81
|
-
positions: positions,
|
|
82
|
-
};
|
|
82
|
+
return positions;
|
|
83
83
|
};
|
|
84
84
|
//# sourceMappingURL=trading.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/accountInfos/trading.ts"],"names":[],"mappings":"
|
|
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"]}
|
package/dist/accountInfos/uid.js
CHANGED
|
@@ -10,6 +10,8 @@ const accountUidCache = createCache(async (key) => {
|
|
|
10
10
|
});
|
|
11
11
|
const accountIdCache = createCache(async (key) => {
|
|
12
12
|
const uid = await accountUidCache.query(key);
|
|
13
|
+
if (!uid)
|
|
14
|
+
throw new Error('Failed to get UID');
|
|
13
15
|
return {
|
|
14
16
|
trading: `okx/${uid}/trading`,
|
|
15
17
|
strategy: `okx/${uid}/strategy`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uid.js","sourceRoot":"","sources":["../../src/accountInfos/uid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAe,MAAM,oBAAoB,CAAC;AAEnE,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;IACjF,MAAM,EAAE,MAAO;IACf,QAAQ,EAAE,KAAM;CACjB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC/C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,OAAO,EAAE,OAAO,GAAG,UAAU;QAC7B,QAAQ,EAAE,OAAO,GAAG,WAAW;QAC/B,IAAI,EAAE,OAAO,GAAG,YAAY;QAC5B,OAAO,EAAE,OAAO,GAAG,eAAe;QAClC,OAAO,EAAE,OAAO,GAAG,eAAe;KACnC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE;IACtD,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE;IAC7D,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACnE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACpE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CAChE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACnE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACnE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC","sourcesContent":["import { createCache } from '@yuants/cache';\nimport { getAccountConfig, ICredential } from '../api/private-api';\n\nconst accountConfigCache = createCache((key) => getAccountConfig(JSON.parse(key)), {\n expire: 100_000,\n swrAfter: 10_000,\n});\n\nconst accountUidCache = createCache(async (key) => {\n const config = await accountConfigCache.query(key);\n return config?.data[0].uid;\n});\n\nconst accountIdCache = createCache(async (key) => {\n const uid = await accountUidCache.query(key);\n return {\n trading: `okx/${uid}/trading`,\n strategy: `okx/${uid}/strategy`,\n loan: `okx/${uid}/loan/USDT`,\n earning: `okx/${uid}/earning/USDT`,\n funding: `okx/${uid}/funding/USDT`,\n };\n});\n\nexport const getUid = async (credential: ICredential) => {\n return accountUidCache.query(JSON.stringify(credential));\n};\n\nexport const getAccountIds = async (credential: ICredential) => {\n return accountIdCache.query(JSON.stringify(credential));\n};\n\nexport const getTradingAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.trading);\n\nexport const getStrategyAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.strategy);\n\nexport const getLoanAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.loan);\n\nexport const getEarningAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.earning);\n\nexport const getFundingAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.funding);\n"]}
|
|
1
|
+
{"version":3,"file":"uid.js","sourceRoot":"","sources":["../../src/accountInfos/uid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAe,MAAM,oBAAoB,CAAC;AAEnE,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;IACjF,MAAM,EAAE,MAAO;IACf,QAAQ,EAAE,KAAM;CACjB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC/C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/C,OAAO;QACL,OAAO,EAAE,OAAO,GAAG,UAAU;QAC7B,QAAQ,EAAE,OAAO,GAAG,WAAW;QAC/B,IAAI,EAAE,OAAO,GAAG,YAAY;QAC5B,OAAO,EAAE,OAAO,GAAG,eAAe;QAClC,OAAO,EAAE,OAAO,GAAG,eAAe;KACnC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE;IACtD,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE;IAC7D,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACnE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACpE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CAChE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACnE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,CACnE,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC","sourcesContent":["import { createCache } from '@yuants/cache';\nimport { getAccountConfig, ICredential } from '../api/private-api';\n\nconst accountConfigCache = createCache((key) => getAccountConfig(JSON.parse(key)), {\n expire: 100_000,\n swrAfter: 10_000,\n});\n\nconst accountUidCache = createCache(async (key) => {\n const config = await accountConfigCache.query(key);\n return config?.data[0].uid;\n});\n\nconst accountIdCache = createCache(async (key) => {\n const uid = await accountUidCache.query(key);\n if (!uid) throw new Error('Failed to get UID');\n return {\n trading: `okx/${uid}/trading`,\n strategy: `okx/${uid}/strategy`,\n loan: `okx/${uid}/loan/USDT`,\n earning: `okx/${uid}/earning/USDT`,\n funding: `okx/${uid}/funding/USDT`,\n };\n});\n\nexport const getUid = async (credential: ICredential) => {\n return accountUidCache.query(JSON.stringify(credential));\n};\n\nexport const getAccountIds = async (credential: ICredential) => {\n return accountIdCache.query(JSON.stringify(credential));\n};\n\nexport const getTradingAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.trading);\n\nexport const getStrategyAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.strategy);\n\nexport const getLoanAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.loan);\n\nexport const getEarningAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.earning);\n\nexport const getFundingAccountId = async (credential: ICredential) =>\n getAccountIds(credential).then((x) => x!.funding);\n"]}
|
package/dist/strategy-account.js
CHANGED
|
@@ -2,8 +2,8 @@ import { addAccountMarket, provideAccountInfoService } from '@yuants/data-accoun
|
|
|
2
2
|
import { Terminal } from '@yuants/protocol';
|
|
3
3
|
import { defer } from 'rxjs';
|
|
4
4
|
import { getStrategyAccountInfo } from './accountInfos';
|
|
5
|
-
import { getDefaultCredential, getGridPositions } from './api/private-api';
|
|
6
5
|
import { getStrategyAccountId } from './accountInfos/uid';
|
|
6
|
+
import { getDefaultCredential, getGridPositions } from './api/private-api';
|
|
7
7
|
const terminal = Terminal.fromNodeEnv();
|
|
8
8
|
const credential = getDefaultCredential();
|
|
9
9
|
defer(async () => {
|
|
@@ -28,7 +28,7 @@ defer(async () => {
|
|
|
28
28
|
egress_token_capacity: 20,
|
|
29
29
|
egress_token_refill_interval: 4000, // 每 4 秒恢复 20 个令牌 (双倍冗余限流)
|
|
30
30
|
});
|
|
31
|
-
provideAccountInfoService(terminal, strategyAccountId, () => getStrategyAccountInfo(credential), {
|
|
31
|
+
provideAccountInfoService(terminal, strategyAccountId, () => getStrategyAccountInfo(credential, strategyAccountId), {
|
|
32
32
|
auto_refresh_interval: 5000,
|
|
33
33
|
});
|
|
34
34
|
}).subscribe();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy-account.js","sourceRoot":"","sources":["../src/strategy-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"strategy-account.js","sourceRoot":"","sources":["../src/strategy-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AACxC,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;AAE1C,KAAK,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEjE,gBAAgB,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAEhF,QAAQ,CAAC,MAAM,CAAC,cAAc,CAI5B,wBAAwB,EACxB;QACE,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;QAClC,UAAU,EAAE;YACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE;YACxD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC3B;KACF,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;QACZ,EAAE;QACF,OAAO;YACL,GAAG,EAAE;gBACH,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM,gBAAgB,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;aACnG;SACF,CAAC;IACJ,CAAC,EACD;QACE,qBAAqB,EAAE,EAAE;QACzB,4BAA4B,EAAE,IAAI,EAAE,0BAA0B;KAC/D,CACF,CAAC;IAEF,yBAAyB,CACvB,QAAQ,EACR,iBAAiB,EACjB,GAAG,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAC3D;QACE,qBAAqB,EAAE,IAAI;KAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC","sourcesContent":["import { addAccountMarket, provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { defer } from 'rxjs';\nimport { getStrategyAccountInfo } from './accountInfos';\nimport { getStrategyAccountId } from './accountInfos/uid';\nimport { getDefaultCredential, getGridPositions } from './api/private-api';\n\nconst terminal = Terminal.fromNodeEnv();\nconst credential = getDefaultCredential();\n\ndefer(async () => {\n const strategyAccountId = await getStrategyAccountId(credential);\n\n addAccountMarket(terminal, { account_id: strategyAccountId, market_id: 'OKX' });\n\n terminal.server.provideService<\n { account_id: string; algoId: string },\n Awaited<ReturnType<typeof getGridPositions>>\n >(\n `OKX/QueryGridPositions`,\n {\n required: ['account_id', 'algoId'],\n properties: {\n account_id: { type: 'string', const: strategyAccountId },\n algoId: { type: 'string' },\n },\n },\n async (msg) => {\n //\n return {\n res: {\n code: 0,\n message: 'OK',\n data: await getGridPositions(credential, { algoOrdType: 'contract_grid', algoId: msg.req.algoId }),\n },\n };\n },\n {\n egress_token_capacity: 20,\n egress_token_refill_interval: 4000, // 每 4 秒恢复 20 个令牌 (双倍冗余限流)\n },\n );\n\n provideAccountInfoService(\n terminal,\n strategyAccountId,\n () => getStrategyAccountInfo(credential, strategyAccountId),\n {\n auto_refresh_interval: 5000,\n },\n );\n}).subscribe();\n"]}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const data_account_1 = require("@yuants/data-account");
|
|
4
4
|
const protocol_1 = require("@yuants/protocol");
|
|
5
|
-
const uid_1 = require("./accountInfos/uid");
|
|
6
5
|
const accountInfos_1 = require("./accountInfos");
|
|
6
|
+
const uid_1 = require("./accountInfos/uid");
|
|
7
7
|
(0, data_account_1.provideAccountActionsWithCredential)(protocol_1.Terminal.fromNodeEnv(), 'OKX', {
|
|
8
8
|
type: 'object',
|
|
9
9
|
required: ['access_key', 'secret_key', 'passphrase'],
|
|
@@ -25,15 +25,15 @@ const accountInfos_1 = require("./accountInfos");
|
|
|
25
25
|
throw new Error('Failed to get account IDs');
|
|
26
26
|
switch (account_id) {
|
|
27
27
|
case accountIds.trading:
|
|
28
|
-
return (0, accountInfos_1.getTradingAccountInfo)(credential);
|
|
28
|
+
return (0, accountInfos_1.getTradingAccountInfo)(credential, account_id);
|
|
29
29
|
case accountIds.funding:
|
|
30
|
-
return (0, accountInfos_1.getFundingAccountInfo)(credential);
|
|
30
|
+
return (0, accountInfos_1.getFundingAccountInfo)(credential, account_id);
|
|
31
31
|
case accountIds.earning:
|
|
32
|
-
return (0, accountInfos_1.getEarningAccountInfo)(credential);
|
|
32
|
+
return (0, accountInfos_1.getEarningAccountInfo)(credential, account_id);
|
|
33
33
|
case accountIds.loan:
|
|
34
|
-
return (0, accountInfos_1.getLoanAccountInfo)(credential);
|
|
34
|
+
return (0, accountInfos_1.getLoanAccountInfo)(credential, account_id);
|
|
35
35
|
case accountIds.strategy:
|
|
36
|
-
return (0, accountInfos_1.getStrategyAccountInfo)(credential);
|
|
36
|
+
return (0, accountInfos_1.getStrategyAccountInfo)(credential, account_id);
|
|
37
37
|
}
|
|
38
38
|
throw new Error(`Unsupported account_id: ${account_id}`);
|
|
39
39
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-actions-with-credential.js","sourceRoot":"","sources":["../src/account-actions-with-credential.ts"],"names":[],"mappings":";;AAAA,uDAA2E;AAC3E,+CAA4C;
|
|
1
|
+
{"version":3,"file":"account-actions-with-credential.js","sourceRoot":"","sources":["../src/account-actions-with-credential.ts"],"names":[],"mappings":";;AAAA,uDAA2E;AAC3E,+CAA4C;AAC5C,iDAMwB;AACxB,4CAAmD;AAGnD,IAAA,kDAAmC,EACjC,mBAAQ,CAAC,WAAW,EAAE,EACtB,KAAK,EACL;IACE,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;IACpD,UAAU,EAAE;QACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/B;CACF,EACD;IACE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,MAAM,IAAA,mBAAa,EAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;QAC/C,MAAM,UAAU,GAAG,MAAM,IAAA,mBAAa,EAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC9D,QAAQ,UAAU,EAAE;YAClB,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,IAAA,oCAAqB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,IAAA,oCAAqB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,IAAA,oCAAqB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,KAAK,UAAU,CAAC,IAAI;gBAClB,OAAO,IAAA,iCAAkB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACpD,KAAK,UAAU,CAAC,QAAQ;gBACtB,OAAO,IAAA,qCAAsB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SACzD;QACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CACF,CAAC","sourcesContent":["import { provideAccountActionsWithCredential } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport {\n getEarningAccountInfo,\n getFundingAccountInfo,\n getLoanAccountInfo,\n getStrategyAccountInfo,\n getTradingAccountInfo,\n} from './accountInfos';\nimport { getAccountIds } from './accountInfos/uid';\nimport { ICredential } from './api/private-api';\n\nprovideAccountActionsWithCredential<ICredential>(\n Terminal.fromNodeEnv(),\n 'OKX',\n {\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 listAccounts: async (credential) => {\n const accountIds = await getAccountIds(credential);\n if (!accountIds) throw new Error('Failed to get account IDs');\n return Object.values(accountIds).map((account_id) => ({ account_id }));\n },\n getAccountInfo: async (credential, account_id) => {\n const accountIds = await getAccountIds(credential);\n if (!accountIds) throw new Error('Failed to get account IDs');\n switch (account_id) {\n case accountIds.trading:\n return getTradingAccountInfo(credential, account_id);\n case accountIds.funding:\n return getFundingAccountInfo(credential, account_id);\n case accountIds.earning:\n return getEarningAccountInfo(credential, account_id);\n case accountIds.loan:\n return getLoanAccountInfo(credential, account_id);\n case accountIds.strategy:\n return getStrategyAccountInfo(credential, account_id);\n }\n throw new Error(`Unsupported account_id: ${account_id}`);\n },\n },\n);\n"]}
|