@yuants/vendor-okx 0.30.0 → 0.30.2
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.
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { setMetricsQuoteState } from '@yuants/data-quote';
|
|
1
2
|
import { Terminal } from '@yuants/protocol';
|
|
2
3
|
import { writeToSQL } from '@yuants/sql';
|
|
3
4
|
import { decodePath, encodePath, formatTime, listWatch } from '@yuants/utils';
|
|
@@ -181,7 +182,7 @@ if (process.env.WRITE_QUOTE_TO_SQL === 'true') {
|
|
|
181
182
|
return quote$.pipe(filter((x) => x.product_id === product_id));
|
|
182
183
|
});
|
|
183
184
|
quote$
|
|
184
|
-
.pipe(writeToSQL({
|
|
185
|
+
.pipe(setMetricsQuoteState(terminal.terminal_id), writeToSQL({
|
|
185
186
|
terminal,
|
|
186
187
|
writeInterval: 1000,
|
|
187
188
|
tableName: 'quote',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-quote.js","sourceRoot":"","sources":["../../src/public-data/new-quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { IQuote } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime, listWatch } from '@yuants/utils';\nimport {\n catchError,\n concatMap,\n defer,\n distinctUntilChanged,\n EMPTY,\n filter,\n first,\n firstValueFrom,\n from,\n groupBy,\n map,\n merge,\n mergeMap,\n reduce,\n repeat,\n retry,\n scan,\n share,\n shareReplay,\n switchMap,\n tap,\n toArray,\n} from 'rxjs';\nimport {\n getFundingRate,\n getInstruments,\n getMarketTickers,\n getOpenInterest,\n getPositionTiers,\n} from '../api/public-api';\nimport { useOpenInterest, useTicker } from '../ws';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst swapInstruments$ = defer(() => getInstruments({ instType: 'SWAP' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\nconst spotInstruments$ = defer(() => getInstruments({ instType: 'SPOT' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\n\nconst shallowEqual = (a: string[], b: string[]) => a.length === b.length && a.every((v, i) => v === b[i]);\n\nconst spotInstIds$ = spotInstruments$.pipe(\n map((items) => items.map((item) => item.instId)),\n distinctUntilChanged(shallowEqual),\n shareReplay(1),\n);\n\nconst spotTickers$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\n// depend by SubmitOrders\nexport const spotMarketTickers$ = defer(() => spotTickers$).pipe(\n mergeMap((x) =>\n from(x.data).pipe(\n map((x) => [x.instId, x] as const),\n toArray(),\n map((x) => Object.fromEntries(x)),\n ),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nconst spotTicker$ = spotInstruments$.pipe(\n tap((x) => {\n console.info('SPOT INSTRUMENTS', x.length);\n }),\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n share(),\n);\n\nconst quoteOfSwapFromRest$ = defer(() => getMarketTickers({ instType: 'SWAP' })).pipe(\n mergeMap((x) => x.data || []),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', x.instType, x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n }),\n ),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSpotAndMarginFromRest$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n mergeMap((x) => x.data || []),\n mergeMap((x): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n ]),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSwapFromWs$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n }),\n ),\n);\n\nconst quoteOfSpotAndMarginFromWs$ = spotTicker$.pipe(\n mergeMap((ticker): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n ]),\n);\n\nconst swapOpenInterests$ = defer(() => getOpenInterest({ instType: 'SWAP' })).pipe(\n repeat({ delay: 10_000 }),\n retry({ delay: 10_000 }),\n shareReplay(1),\n);\n\nconst openInterestOfSwapFromWS$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useOpenInterest(x.instId),\n () => true,\n ),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', x[0].instId),\n open_interest: x[0].oi,\n }),\n ),\n share(),\n);\n\n// const interestRateOfSwapFromWS$ = swapInstruments$.pipe(\n// listWatch(\n// (x) => x.instId,\n// (x) => useFundingRate(x.instId),\n// () => true,\n// ),\n// map(\n// (x): Partial<IQuote> => ({\n// datasource_id: 'OKX',\n// product_id: encodePath('OKX', 'SWAP', x[0].instId),\n// interest_rate_long: `-${x[0].fundingRate}`,\n// interest_rate_short: x[0].fundingRate,\n// interest_rate_next_settled_at: x[0].fundingTime,\n// }),\n// ),\n// share(),\n// );\n\ntype PositionTiersResponse = Awaited<ReturnType<typeof getPositionTiers>>;\ntype PositionTiersEntry = PositionTiersResponse['data'];\n\nconst marginPositionTiersMap$ = defer(() =>\n spotInstIds$.pipe(\n first(),\n map((instIds) => instIds.filter((id) => id.endsWith('USDT') || id.endsWith('USDC'))),\n switchMap((instIds) => {\n const total = instIds.length;\n let processed = 0;\n return from(instIds).pipe(\n concatMap((instId) =>\n defer(async () => {\n const tiers = await terminal.client.requestForResponseData<\n { instType: string; tdMode: string; instId: string },\n PositionTiersResponse\n >('OKX/PositionTiers', {\n instType: 'MARGIN',\n tdMode: 'cross',\n instId,\n });\n if (!tiers?.data) {\n throw new Error(`Failed to load position tiers for ${instId}: ${tiers.msg}`);\n }\n return {\n instId,\n tiers,\n };\n }).pipe(retry({ delay: 2000 })),\n ),\n reduce((map, { instId, tiers }) => {\n processed += 1;\n console.info(\n formatTime(Date.now()),\n `Loaded margin position tiers ${processed}/${total} (${instId})`,\n );\n if (tiers?.data) {\n map.set(instId, tiers.data);\n }\n return map;\n }, new Map<string, PositionTiersEntry>()),\n );\n }),\n ),\n).pipe(\n //\n retry({ delay: 60_000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\n// Margin 的 open interest 只依赖 position-tier:\n// 1) 启动时先拉全量 MARGIN 仓位档位并缓存,下次直接命中;\n// 2) 档位内只保留同 tier 杠杆最高的记录;\n// 3) 当前策略只使用 tier=1 的 quoteMaxLoan 作为持仓上限,不再混合 /account/max-size;\n// 4) 每个 instId 60 秒刷新一次,并在接口报错时 10 秒重试。\nconst marginOpenInterest$ = spotInstIds$.pipe(\n mergeMap((instIds) =>\n from(instIds).pipe(\n mergeMap((instId) =>\n defer(async () => {\n const tiersMap = await firstValueFrom(marginPositionTiersMap$);\n const tiers = tiersMap.get(instId);\n if (!tiers?.length) {\n return null;\n }\n\n const tierByLevel = tiers\n .filter((tier) => !tier.instId || tier.instId === instId)\n .reduce((mapTierToTierInfo, tierInfo) => {\n const existing = mapTierToTierInfo.get(tierInfo.tier);\n if (!existing || +tierInfo.maxLever > +existing.maxLever) {\n mapTierToTierInfo.set(tierInfo.tier, tierInfo);\n }\n return mapTierToTierInfo;\n }, new Map<string, (typeof tiers)[number]>());\n // 获取一级杠杆的最大可借贷额度作为持仓量\n const openInterest = +(tierByLevel.get('1')?.quoteMaxLoan || 0);\n\n return {\n instId,\n openInterest,\n };\n }).pipe(retry({ delay: 10_000 }), repeat({ delay: 60_000 })),\n ),\n ),\n ),\n filter((result): result is { instId: string; openInterest: number } => result !== null),\n map(({ instId, openInterest }) => {\n const partial: Partial<IQuote> = {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', instId),\n };\n if (typeof openInterest === 'number' && Number.isFinite(openInterest)) {\n partial.open_interest = `${openInterest}`;\n }\n return partial;\n }),\n share(),\n);\n\nconst fundingRate$ = defer(() => getFundingRate({ instId: 'ANY' })).pipe(\n map((data) => data.data),\n repeat({ delay: 50_000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Convert funding rate data to quote format\nconst interestRateOfSwap$ = fundingRate$.pipe(\n mergeMap((premiumDataArray) => premiumDataArray),\n map(\n (premiumData): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', premiumData.instId),\n interest_rate_long: premiumData.fundingRate ? `${-+premiumData.fundingRate}` : undefined,\n interest_rate_short: premiumData.fundingRate,\n interest_rate_next_settled_at: formatTime(+premiumData.fundingTime),\n }),\n ),\n);\n\nconst quoteSources$ = [\n quoteOfSwapFromWs$,\n openInterestOfSwapFromWS$,\n quoteOfSwapFromRest$,\n quoteOfSpotAndMarginFromWs$,\n quoteOfSpotAndMarginFromRest$,\n marginOpenInterest$,\n interestRateOfSwap$,\n];\n\nconst quote$ = defer(() =>\n merge(\n ...quoteSources$.map((x$) =>\n defer(() => x$).pipe(\n // 防止单个流关闭导致整体关闭\n catchError(() => EMPTY),\n ),\n ),\n ),\n).pipe(\n groupBy((x) => encodePath(x.datasource_id, x.product_id)),\n mergeMap((group$) => {\n return group$.pipe(\n //\n scan((acc, cur) => Object.assign(acc, cur), {} as Partial<IQuote>),\n );\n }),\n share(),\n);\n\n// 合并不同来源的数据并进行合并,避免死锁\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n terminal.channel.publishChannel('quote', { pattern: `^OKX/` }, (channel_id) => {\n const [datasource_id, product_id] = decodePath(channel_id);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n return quote$.pipe(filter((x) => x.product_id === product_id));\n });\n\n quote$\n .pipe(\n writeToSQL({\n terminal,\n writeInterval: 1000,\n tableName: 'quote',\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n}\n\nexport const swapOpenInterest$ = defer(() => swapOpenInterests$).pipe(\n map((x) => new Map(x.data.map((x) => [x.instId, +x.oi] as const))),\n shareReplay(1),\n);\n"]}
|
|
1
|
+
{"version":3,"file":"new-quote.js","sourceRoot":"","sources":["../../src/public-data/new-quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { IQuote, setMetricsQuoteState } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime, listWatch } from '@yuants/utils';\nimport {\n catchError,\n concatMap,\n defer,\n distinctUntilChanged,\n EMPTY,\n filter,\n first,\n firstValueFrom,\n from,\n groupBy,\n map,\n merge,\n mergeMap,\n reduce,\n repeat,\n retry,\n scan,\n share,\n shareReplay,\n switchMap,\n tap,\n toArray,\n} from 'rxjs';\nimport {\n getFundingRate,\n getInstruments,\n getMarketTickers,\n getOpenInterest,\n getPositionTiers,\n} from '../api/public-api';\nimport { useOpenInterest, useTicker } from '../ws';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst swapInstruments$ = defer(() => getInstruments({ instType: 'SWAP' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\nconst spotInstruments$ = defer(() => getInstruments({ instType: 'SPOT' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\n\nconst shallowEqual = (a: string[], b: string[]) => a.length === b.length && a.every((v, i) => v === b[i]);\n\nconst spotInstIds$ = spotInstruments$.pipe(\n map((items) => items.map((item) => item.instId)),\n distinctUntilChanged(shallowEqual),\n shareReplay(1),\n);\n\nconst spotTickers$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\n// depend by SubmitOrders\nexport const spotMarketTickers$ = defer(() => spotTickers$).pipe(\n mergeMap((x) =>\n from(x.data).pipe(\n map((x) => [x.instId, x] as const),\n toArray(),\n map((x) => Object.fromEntries(x)),\n ),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nconst spotTicker$ = spotInstruments$.pipe(\n tap((x) => {\n console.info('SPOT INSTRUMENTS', x.length);\n }),\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n share(),\n);\n\nconst quoteOfSwapFromRest$ = defer(() => getMarketTickers({ instType: 'SWAP' })).pipe(\n mergeMap((x) => x.data || []),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', x.instType, x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n }),\n ),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSpotAndMarginFromRest$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n mergeMap((x) => x.data || []),\n mergeMap((x): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n ]),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSwapFromWs$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n }),\n ),\n);\n\nconst quoteOfSpotAndMarginFromWs$ = spotTicker$.pipe(\n mergeMap((ticker): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n ]),\n);\n\nconst swapOpenInterests$ = defer(() => getOpenInterest({ instType: 'SWAP' })).pipe(\n repeat({ delay: 10_000 }),\n retry({ delay: 10_000 }),\n shareReplay(1),\n);\n\nconst openInterestOfSwapFromWS$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useOpenInterest(x.instId),\n () => true,\n ),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', x[0].instId),\n open_interest: x[0].oi,\n }),\n ),\n share(),\n);\n\n// const interestRateOfSwapFromWS$ = swapInstruments$.pipe(\n// listWatch(\n// (x) => x.instId,\n// (x) => useFundingRate(x.instId),\n// () => true,\n// ),\n// map(\n// (x): Partial<IQuote> => ({\n// datasource_id: 'OKX',\n// product_id: encodePath('OKX', 'SWAP', x[0].instId),\n// interest_rate_long: `-${x[0].fundingRate}`,\n// interest_rate_short: x[0].fundingRate,\n// interest_rate_next_settled_at: x[0].fundingTime,\n// }),\n// ),\n// share(),\n// );\n\ntype PositionTiersResponse = Awaited<ReturnType<typeof getPositionTiers>>;\ntype PositionTiersEntry = PositionTiersResponse['data'];\n\nconst marginPositionTiersMap$ = defer(() =>\n spotInstIds$.pipe(\n first(),\n map((instIds) => instIds.filter((id) => id.endsWith('USDT') || id.endsWith('USDC'))),\n switchMap((instIds) => {\n const total = instIds.length;\n let processed = 0;\n return from(instIds).pipe(\n concatMap((instId) =>\n defer(async () => {\n const tiers = await terminal.client.requestForResponseData<\n { instType: string; tdMode: string; instId: string },\n PositionTiersResponse\n >('OKX/PositionTiers', {\n instType: 'MARGIN',\n tdMode: 'cross',\n instId,\n });\n if (!tiers?.data) {\n throw new Error(`Failed to load position tiers for ${instId}: ${tiers.msg}`);\n }\n return {\n instId,\n tiers,\n };\n }).pipe(retry({ delay: 2000 })),\n ),\n reduce((map, { instId, tiers }) => {\n processed += 1;\n console.info(\n formatTime(Date.now()),\n `Loaded margin position tiers ${processed}/${total} (${instId})`,\n );\n if (tiers?.data) {\n map.set(instId, tiers.data);\n }\n return map;\n }, new Map<string, PositionTiersEntry>()),\n );\n }),\n ),\n).pipe(\n //\n retry({ delay: 60_000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\n// Margin 的 open interest 只依赖 position-tier:\n// 1) 启动时先拉全量 MARGIN 仓位档位并缓存,下次直接命中;\n// 2) 档位内只保留同 tier 杠杆最高的记录;\n// 3) 当前策略只使用 tier=1 的 quoteMaxLoan 作为持仓上限,不再混合 /account/max-size;\n// 4) 每个 instId 60 秒刷新一次,并在接口报错时 10 秒重试。\nconst marginOpenInterest$ = spotInstIds$.pipe(\n mergeMap((instIds) =>\n from(instIds).pipe(\n mergeMap((instId) =>\n defer(async () => {\n const tiersMap = await firstValueFrom(marginPositionTiersMap$);\n const tiers = tiersMap.get(instId);\n if (!tiers?.length) {\n return null;\n }\n\n const tierByLevel = tiers\n .filter((tier) => !tier.instId || tier.instId === instId)\n .reduce((mapTierToTierInfo, tierInfo) => {\n const existing = mapTierToTierInfo.get(tierInfo.tier);\n if (!existing || +tierInfo.maxLever > +existing.maxLever) {\n mapTierToTierInfo.set(tierInfo.tier, tierInfo);\n }\n return mapTierToTierInfo;\n }, new Map<string, (typeof tiers)[number]>());\n // 获取一级杠杆的最大可借贷额度作为持仓量\n const openInterest = +(tierByLevel.get('1')?.quoteMaxLoan || 0);\n\n return {\n instId,\n openInterest,\n };\n }).pipe(retry({ delay: 10_000 }), repeat({ delay: 60_000 })),\n ),\n ),\n ),\n filter((result): result is { instId: string; openInterest: number } => result !== null),\n map(({ instId, openInterest }) => {\n const partial: Partial<IQuote> = {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', instId),\n };\n if (typeof openInterest === 'number' && Number.isFinite(openInterest)) {\n partial.open_interest = `${openInterest}`;\n }\n return partial;\n }),\n share(),\n);\n\nconst fundingRate$ = defer(() => getFundingRate({ instId: 'ANY' })).pipe(\n map((data) => data.data),\n repeat({ delay: 50_000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Convert funding rate data to quote format\nconst interestRateOfSwap$ = fundingRate$.pipe(\n mergeMap((premiumDataArray) => premiumDataArray),\n map(\n (premiumData): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', premiumData.instId),\n interest_rate_long: premiumData.fundingRate ? `${-+premiumData.fundingRate}` : undefined,\n interest_rate_short: premiumData.fundingRate,\n interest_rate_next_settled_at: formatTime(+premiumData.fundingTime),\n }),\n ),\n);\n\nconst quoteSources$ = [\n quoteOfSwapFromWs$,\n openInterestOfSwapFromWS$,\n quoteOfSwapFromRest$,\n quoteOfSpotAndMarginFromWs$,\n quoteOfSpotAndMarginFromRest$,\n marginOpenInterest$,\n interestRateOfSwap$,\n];\n\nconst quote$ = defer(() =>\n merge(\n ...quoteSources$.map((x$) =>\n defer(() => x$).pipe(\n // 防止单个流关闭导致整体关闭\n catchError(() => EMPTY),\n ),\n ),\n ),\n).pipe(\n groupBy((x) => encodePath(x.datasource_id, x.product_id)),\n mergeMap((group$) => {\n return group$.pipe(\n //\n scan((acc, cur) => Object.assign(acc, cur), {} as Partial<IQuote>),\n );\n }),\n share(),\n);\n\n// 合并不同来源的数据并进行合并,避免死锁\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n terminal.channel.publishChannel('quote', { pattern: `^OKX/` }, (channel_id) => {\n const [datasource_id, product_id] = decodePath(channel_id);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n return quote$.pipe(filter((x) => x.product_id === product_id));\n });\n\n quote$\n .pipe(\n setMetricsQuoteState(terminal.terminal_id),\n writeToSQL({\n terminal,\n writeInterval: 1000,\n tableName: 'quote',\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n}\n\nexport const swapOpenInterest$ = defer(() => swapOpenInterests$).pipe(\n map((x) => new Map(x.data.map((x) => [x.instId, +x.oi] as const))),\n shareReplay(1),\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-quote.d.ts","sourceRoot":"","sources":["../../src/public-data/new-quote.ts"],"names":[],"mappings":"AAmEA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;EAW9B,CAAC;
|
|
1
|
+
{"version":3,"file":"new-quote.d.ts","sourceRoot":"","sources":["../../src/public-data/new-quote.ts"],"names":[],"mappings":"AAmEA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;EAW9B,CAAC;AA6TF,eAAO,MAAM,iBAAiB,gDAG7B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.swapOpenInterest$ = exports.spotMarketTickers$ = void 0;
|
|
4
|
+
const data_quote_1 = require("@yuants/data-quote");
|
|
4
5
|
const protocol_1 = require("@yuants/protocol");
|
|
5
6
|
const sql_1 = require("@yuants/sql");
|
|
6
7
|
const utils_1 = require("@yuants/utils");
|
|
@@ -184,7 +185,7 @@ if (process.env.WRITE_QUOTE_TO_SQL === 'true') {
|
|
|
184
185
|
return quote$.pipe((0, rxjs_1.filter)((x) => x.product_id === product_id));
|
|
185
186
|
});
|
|
186
187
|
quote$
|
|
187
|
-
.pipe((0, sql_1.writeToSQL)({
|
|
188
|
+
.pipe((0, data_quote_1.setMetricsQuoteState)(terminal.terminal_id), (0, sql_1.writeToSQL)({
|
|
188
189
|
terminal,
|
|
189
190
|
writeInterval: 1000,
|
|
190
191
|
tableName: 'quote',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-quote.js","sourceRoot":"","sources":["../../src/public-data/new-quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { IQuote } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime, listWatch } from '@yuants/utils';\nimport {\n catchError,\n concatMap,\n defer,\n distinctUntilChanged,\n EMPTY,\n filter,\n first,\n firstValueFrom,\n from,\n groupBy,\n map,\n merge,\n mergeMap,\n reduce,\n repeat,\n retry,\n scan,\n share,\n shareReplay,\n switchMap,\n tap,\n toArray,\n} from 'rxjs';\nimport {\n getFundingRate,\n getInstruments,\n getMarketTickers,\n getOpenInterest,\n getPositionTiers,\n} from '../api/public-api';\nimport { useOpenInterest, useTicker } from '../ws';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst swapInstruments$ = defer(() => getInstruments({ instType: 'SWAP' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\nconst spotInstruments$ = defer(() => getInstruments({ instType: 'SPOT' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\n\nconst shallowEqual = (a: string[], b: string[]) => a.length === b.length && a.every((v, i) => v === b[i]);\n\nconst spotInstIds$ = spotInstruments$.pipe(\n map((items) => items.map((item) => item.instId)),\n distinctUntilChanged(shallowEqual),\n shareReplay(1),\n);\n\nconst spotTickers$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\n// depend by SubmitOrders\nexport const spotMarketTickers$ = defer(() => spotTickers$).pipe(\n mergeMap((x) =>\n from(x.data).pipe(\n map((x) => [x.instId, x] as const),\n toArray(),\n map((x) => Object.fromEntries(x)),\n ),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nconst spotTicker$ = spotInstruments$.pipe(\n tap((x) => {\n console.info('SPOT INSTRUMENTS', x.length);\n }),\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n share(),\n);\n\nconst quoteOfSwapFromRest$ = defer(() => getMarketTickers({ instType: 'SWAP' })).pipe(\n mergeMap((x) => x.data || []),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', x.instType, x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n }),\n ),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSpotAndMarginFromRest$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n mergeMap((x) => x.data || []),\n mergeMap((x): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n ]),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSwapFromWs$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n }),\n ),\n);\n\nconst quoteOfSpotAndMarginFromWs$ = spotTicker$.pipe(\n mergeMap((ticker): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n ]),\n);\n\nconst swapOpenInterests$ = defer(() => getOpenInterest({ instType: 'SWAP' })).pipe(\n repeat({ delay: 10_000 }),\n retry({ delay: 10_000 }),\n shareReplay(1),\n);\n\nconst openInterestOfSwapFromWS$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useOpenInterest(x.instId),\n () => true,\n ),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', x[0].instId),\n open_interest: x[0].oi,\n }),\n ),\n share(),\n);\n\n// const interestRateOfSwapFromWS$ = swapInstruments$.pipe(\n// listWatch(\n// (x) => x.instId,\n// (x) => useFundingRate(x.instId),\n// () => true,\n// ),\n// map(\n// (x): Partial<IQuote> => ({\n// datasource_id: 'OKX',\n// product_id: encodePath('OKX', 'SWAP', x[0].instId),\n// interest_rate_long: `-${x[0].fundingRate}`,\n// interest_rate_short: x[0].fundingRate,\n// interest_rate_next_settled_at: x[0].fundingTime,\n// }),\n// ),\n// share(),\n// );\n\ntype PositionTiersResponse = Awaited<ReturnType<typeof getPositionTiers>>;\ntype PositionTiersEntry = PositionTiersResponse['data'];\n\nconst marginPositionTiersMap$ = defer(() =>\n spotInstIds$.pipe(\n first(),\n map((instIds) => instIds.filter((id) => id.endsWith('USDT') || id.endsWith('USDC'))),\n switchMap((instIds) => {\n const total = instIds.length;\n let processed = 0;\n return from(instIds).pipe(\n concatMap((instId) =>\n defer(async () => {\n const tiers = await terminal.client.requestForResponseData<\n { instType: string; tdMode: string; instId: string },\n PositionTiersResponse\n >('OKX/PositionTiers', {\n instType: 'MARGIN',\n tdMode: 'cross',\n instId,\n });\n if (!tiers?.data) {\n throw new Error(`Failed to load position tiers for ${instId}: ${tiers.msg}`);\n }\n return {\n instId,\n tiers,\n };\n }).pipe(retry({ delay: 2000 })),\n ),\n reduce((map, { instId, tiers }) => {\n processed += 1;\n console.info(\n formatTime(Date.now()),\n `Loaded margin position tiers ${processed}/${total} (${instId})`,\n );\n if (tiers?.data) {\n map.set(instId, tiers.data);\n }\n return map;\n }, new Map<string, PositionTiersEntry>()),\n );\n }),\n ),\n).pipe(\n //\n retry({ delay: 60_000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\n// Margin 的 open interest 只依赖 position-tier:\n// 1) 启动时先拉全量 MARGIN 仓位档位并缓存,下次直接命中;\n// 2) 档位内只保留同 tier 杠杆最高的记录;\n// 3) 当前策略只使用 tier=1 的 quoteMaxLoan 作为持仓上限,不再混合 /account/max-size;\n// 4) 每个 instId 60 秒刷新一次,并在接口报错时 10 秒重试。\nconst marginOpenInterest$ = spotInstIds$.pipe(\n mergeMap((instIds) =>\n from(instIds).pipe(\n mergeMap((instId) =>\n defer(async () => {\n const tiersMap = await firstValueFrom(marginPositionTiersMap$);\n const tiers = tiersMap.get(instId);\n if (!tiers?.length) {\n return null;\n }\n\n const tierByLevel = tiers\n .filter((tier) => !tier.instId || tier.instId === instId)\n .reduce((mapTierToTierInfo, tierInfo) => {\n const existing = mapTierToTierInfo.get(tierInfo.tier);\n if (!existing || +tierInfo.maxLever > +existing.maxLever) {\n mapTierToTierInfo.set(tierInfo.tier, tierInfo);\n }\n return mapTierToTierInfo;\n }, new Map<string, (typeof tiers)[number]>());\n // 获取一级杠杆的最大可借贷额度作为持仓量\n const openInterest = +(tierByLevel.get('1')?.quoteMaxLoan || 0);\n\n return {\n instId,\n openInterest,\n };\n }).pipe(retry({ delay: 10_000 }), repeat({ delay: 60_000 })),\n ),\n ),\n ),\n filter((result): result is { instId: string; openInterest: number } => result !== null),\n map(({ instId, openInterest }) => {\n const partial: Partial<IQuote> = {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', instId),\n };\n if (typeof openInterest === 'number' && Number.isFinite(openInterest)) {\n partial.open_interest = `${openInterest}`;\n }\n return partial;\n }),\n share(),\n);\n\nconst fundingRate$ = defer(() => getFundingRate({ instId: 'ANY' })).pipe(\n map((data) => data.data),\n repeat({ delay: 50_000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Convert funding rate data to quote format\nconst interestRateOfSwap$ = fundingRate$.pipe(\n mergeMap((premiumDataArray) => premiumDataArray),\n map(\n (premiumData): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', premiumData.instId),\n interest_rate_long: premiumData.fundingRate ? `${-+premiumData.fundingRate}` : undefined,\n interest_rate_short: premiumData.fundingRate,\n interest_rate_next_settled_at: formatTime(+premiumData.fundingTime),\n }),\n ),\n);\n\nconst quoteSources$ = [\n quoteOfSwapFromWs$,\n openInterestOfSwapFromWS$,\n quoteOfSwapFromRest$,\n quoteOfSpotAndMarginFromWs$,\n quoteOfSpotAndMarginFromRest$,\n marginOpenInterest$,\n interestRateOfSwap$,\n];\n\nconst quote$ = defer(() =>\n merge(\n ...quoteSources$.map((x$) =>\n defer(() => x$).pipe(\n // 防止单个流关闭导致整体关闭\n catchError(() => EMPTY),\n ),\n ),\n ),\n).pipe(\n groupBy((x) => encodePath(x.datasource_id, x.product_id)),\n mergeMap((group$) => {\n return group$.pipe(\n //\n scan((acc, cur) => Object.assign(acc, cur), {} as Partial<IQuote>),\n );\n }),\n share(),\n);\n\n// 合并不同来源的数据并进行合并,避免死锁\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n terminal.channel.publishChannel('quote', { pattern: `^OKX/` }, (channel_id) => {\n const [datasource_id, product_id] = decodePath(channel_id);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n return quote$.pipe(filter((x) => x.product_id === product_id));\n });\n\n quote$\n .pipe(\n writeToSQL({\n terminal,\n writeInterval: 1000,\n tableName: 'quote',\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n}\n\nexport const swapOpenInterest$ = defer(() => swapOpenInterests$).pipe(\n map((x) => new Map(x.data.map((x) => [x.instId, +x.oi] as const))),\n shareReplay(1),\n);\n"]}
|
|
1
|
+
{"version":3,"file":"new-quote.js","sourceRoot":"","sources":["../../src/public-data/new-quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { IQuote, setMetricsQuoteState } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime, listWatch } from '@yuants/utils';\nimport {\n catchError,\n concatMap,\n defer,\n distinctUntilChanged,\n EMPTY,\n filter,\n first,\n firstValueFrom,\n from,\n groupBy,\n map,\n merge,\n mergeMap,\n reduce,\n repeat,\n retry,\n scan,\n share,\n shareReplay,\n switchMap,\n tap,\n toArray,\n} from 'rxjs';\nimport {\n getFundingRate,\n getInstruments,\n getMarketTickers,\n getOpenInterest,\n getPositionTiers,\n} from '../api/public-api';\nimport { useOpenInterest, useTicker } from '../ws';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst swapInstruments$ = defer(() => getInstruments({ instType: 'SWAP' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\nconst spotInstruments$ = defer(() => getInstruments({ instType: 'SPOT' })).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 10_000 }),\n map((x) => x.data),\n shareReplay(1),\n);\n\nconst shallowEqual = (a: string[], b: string[]) => a.length === b.length && a.every((v, i) => v === b[i]);\n\nconst spotInstIds$ = spotInstruments$.pipe(\n map((items) => items.map((item) => item.instId)),\n distinctUntilChanged(shallowEqual),\n shareReplay(1),\n);\n\nconst spotTickers$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\n// depend by SubmitOrders\nexport const spotMarketTickers$ = defer(() => spotTickers$).pipe(\n mergeMap((x) =>\n from(x.data).pipe(\n map((x) => [x.instId, x] as const),\n toArray(),\n map((x) => Object.fromEntries(x)),\n ),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n);\n\nconst spotTicker$ = spotInstruments$.pipe(\n tap((x) => {\n console.info('SPOT INSTRUMENTS', x.length);\n }),\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n share(),\n);\n\nconst quoteOfSwapFromRest$ = defer(() => getMarketTickers({ instType: 'SWAP' })).pipe(\n mergeMap((x) => x.data || []),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', x.instType, x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n }),\n ),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSpotAndMarginFromRest$ = defer(() => getMarketTickers({ instType: 'SPOT' })).pipe(\n mergeMap((x) => x.data || []),\n mergeMap((x): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', x.instId),\n last_price: x.last,\n ask_price: x.askPx,\n bid_price: x.bidPx,\n ask_volume: x.askSz,\n bid_volume: x.bidSz,\n },\n ]),\n repeat({ delay: 1000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteOfSwapFromWs$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useTicker(x.instId),\n () => true,\n ),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n }),\n ),\n);\n\nconst quoteOfSpotAndMarginFromWs$ = spotTicker$.pipe(\n mergeMap((ticker): Partial<IQuote>[] => [\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SPOT', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', ticker[0].instId),\n last_price: ticker[0].last,\n ask_price: ticker[0].askPx,\n bid_price: ticker[0].bidPx,\n ask_volume: ticker[0].askSz,\n bid_volume: ticker[0].bidSz,\n },\n ]),\n);\n\nconst swapOpenInterests$ = defer(() => getOpenInterest({ instType: 'SWAP' })).pipe(\n repeat({ delay: 10_000 }),\n retry({ delay: 10_000 }),\n shareReplay(1),\n);\n\nconst openInterestOfSwapFromWS$ = swapInstruments$.pipe(\n listWatch(\n (x) => x.instId,\n (x) => useOpenInterest(x.instId),\n () => true,\n ),\n map(\n (x): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', x[0].instId),\n open_interest: x[0].oi,\n }),\n ),\n share(),\n);\n\n// const interestRateOfSwapFromWS$ = swapInstruments$.pipe(\n// listWatch(\n// (x) => x.instId,\n// (x) => useFundingRate(x.instId),\n// () => true,\n// ),\n// map(\n// (x): Partial<IQuote> => ({\n// datasource_id: 'OKX',\n// product_id: encodePath('OKX', 'SWAP', x[0].instId),\n// interest_rate_long: `-${x[0].fundingRate}`,\n// interest_rate_short: x[0].fundingRate,\n// interest_rate_next_settled_at: x[0].fundingTime,\n// }),\n// ),\n// share(),\n// );\n\ntype PositionTiersResponse = Awaited<ReturnType<typeof getPositionTiers>>;\ntype PositionTiersEntry = PositionTiersResponse['data'];\n\nconst marginPositionTiersMap$ = defer(() =>\n spotInstIds$.pipe(\n first(),\n map((instIds) => instIds.filter((id) => id.endsWith('USDT') || id.endsWith('USDC'))),\n switchMap((instIds) => {\n const total = instIds.length;\n let processed = 0;\n return from(instIds).pipe(\n concatMap((instId) =>\n defer(async () => {\n const tiers = await terminal.client.requestForResponseData<\n { instType: string; tdMode: string; instId: string },\n PositionTiersResponse\n >('OKX/PositionTiers', {\n instType: 'MARGIN',\n tdMode: 'cross',\n instId,\n });\n if (!tiers?.data) {\n throw new Error(`Failed to load position tiers for ${instId}: ${tiers.msg}`);\n }\n return {\n instId,\n tiers,\n };\n }).pipe(retry({ delay: 2000 })),\n ),\n reduce((map, { instId, tiers }) => {\n processed += 1;\n console.info(\n formatTime(Date.now()),\n `Loaded margin position tiers ${processed}/${total} (${instId})`,\n );\n if (tiers?.data) {\n map.set(instId, tiers.data);\n }\n return map;\n }, new Map<string, PositionTiersEntry>()),\n );\n }),\n ),\n).pipe(\n //\n retry({ delay: 60_000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\n// Margin 的 open interest 只依赖 position-tier:\n// 1) 启动时先拉全量 MARGIN 仓位档位并缓存,下次直接命中;\n// 2) 档位内只保留同 tier 杠杆最高的记录;\n// 3) 当前策略只使用 tier=1 的 quoteMaxLoan 作为持仓上限,不再混合 /account/max-size;\n// 4) 每个 instId 60 秒刷新一次,并在接口报错时 10 秒重试。\nconst marginOpenInterest$ = spotInstIds$.pipe(\n mergeMap((instIds) =>\n from(instIds).pipe(\n mergeMap((instId) =>\n defer(async () => {\n const tiersMap = await firstValueFrom(marginPositionTiersMap$);\n const tiers = tiersMap.get(instId);\n if (!tiers?.length) {\n return null;\n }\n\n const tierByLevel = tiers\n .filter((tier) => !tier.instId || tier.instId === instId)\n .reduce((mapTierToTierInfo, tierInfo) => {\n const existing = mapTierToTierInfo.get(tierInfo.tier);\n if (!existing || +tierInfo.maxLever > +existing.maxLever) {\n mapTierToTierInfo.set(tierInfo.tier, tierInfo);\n }\n return mapTierToTierInfo;\n }, new Map<string, (typeof tiers)[number]>());\n // 获取一级杠杆的最大可借贷额度作为持仓量\n const openInterest = +(tierByLevel.get('1')?.quoteMaxLoan || 0);\n\n return {\n instId,\n openInterest,\n };\n }).pipe(retry({ delay: 10_000 }), repeat({ delay: 60_000 })),\n ),\n ),\n ),\n filter((result): result is { instId: string; openInterest: number } => result !== null),\n map(({ instId, openInterest }) => {\n const partial: Partial<IQuote> = {\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'MARGIN', instId),\n };\n if (typeof openInterest === 'number' && Number.isFinite(openInterest)) {\n partial.open_interest = `${openInterest}`;\n }\n return partial;\n }),\n share(),\n);\n\nconst fundingRate$ = defer(() => getFundingRate({ instId: 'ANY' })).pipe(\n map((data) => data.data),\n repeat({ delay: 50_000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Convert funding rate data to quote format\nconst interestRateOfSwap$ = fundingRate$.pipe(\n mergeMap((premiumDataArray) => premiumDataArray),\n map(\n (premiumData): Partial<IQuote> => ({\n datasource_id: 'OKX',\n product_id: encodePath('OKX', 'SWAP', premiumData.instId),\n interest_rate_long: premiumData.fundingRate ? `${-+premiumData.fundingRate}` : undefined,\n interest_rate_short: premiumData.fundingRate,\n interest_rate_next_settled_at: formatTime(+premiumData.fundingTime),\n }),\n ),\n);\n\nconst quoteSources$ = [\n quoteOfSwapFromWs$,\n openInterestOfSwapFromWS$,\n quoteOfSwapFromRest$,\n quoteOfSpotAndMarginFromWs$,\n quoteOfSpotAndMarginFromRest$,\n marginOpenInterest$,\n interestRateOfSwap$,\n];\n\nconst quote$ = defer(() =>\n merge(\n ...quoteSources$.map((x$) =>\n defer(() => x$).pipe(\n // 防止单个流关闭导致整体关闭\n catchError(() => EMPTY),\n ),\n ),\n ),\n).pipe(\n groupBy((x) => encodePath(x.datasource_id, x.product_id)),\n mergeMap((group$) => {\n return group$.pipe(\n //\n scan((acc, cur) => Object.assign(acc, cur), {} as Partial<IQuote>),\n );\n }),\n share(),\n);\n\n// 合并不同来源的数据并进行合并,避免死锁\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n terminal.channel.publishChannel('quote', { pattern: `^OKX/` }, (channel_id) => {\n const [datasource_id, product_id] = decodePath(channel_id);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n return quote$.pipe(filter((x) => x.product_id === product_id));\n });\n\n quote$\n .pipe(\n setMetricsQuoteState(terminal.terminal_id),\n writeToSQL({\n terminal,\n writeInterval: 1000,\n tableName: 'quote',\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n}\n\nexport const swapOpenInterest$ = defer(() => swapOpenInterests$).pipe(\n map((x) => new Map(x.data.map((x) => [x.instId, +x.oi] as const))),\n shareReplay(1),\n);\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-okx",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.2",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -8,20 +8,20 @@
|
|
|
8
8
|
"temp"
|
|
9
9
|
],
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@yuants/protocol": "0.53.
|
|
12
|
-
"@yuants/transfer": "0.2.
|
|
13
|
-
"@yuants/data-account": "0.10.
|
|
14
|
-
"@yuants/data-order": "0.7.
|
|
15
|
-
"@yuants/utils": "0.
|
|
16
|
-
"@yuants/cache": "0.3.
|
|
17
|
-
"@yuants/sql": "0.9.
|
|
18
|
-
"@yuants/data-series": "0.3.
|
|
19
|
-
"@yuants/data-product": "0.5.
|
|
20
|
-
"@yuants/data-ohlc": "0.4.
|
|
21
|
-
"@yuants/data-interest-rate": "0.1.
|
|
22
|
-
"@yuants/data-quote": "0.3.
|
|
23
|
-
"@yuants/data-trade": "0.1.
|
|
24
|
-
"@yuants/exchange": "0.6.
|
|
11
|
+
"@yuants/protocol": "0.53.3",
|
|
12
|
+
"@yuants/transfer": "0.2.40",
|
|
13
|
+
"@yuants/data-account": "0.10.2",
|
|
14
|
+
"@yuants/data-order": "0.7.1",
|
|
15
|
+
"@yuants/utils": "0.15.0",
|
|
16
|
+
"@yuants/cache": "0.3.4",
|
|
17
|
+
"@yuants/sql": "0.9.31",
|
|
18
|
+
"@yuants/data-series": "0.3.53",
|
|
19
|
+
"@yuants/data-product": "0.5.1",
|
|
20
|
+
"@yuants/data-ohlc": "0.4.23",
|
|
21
|
+
"@yuants/data-interest-rate": "0.1.49",
|
|
22
|
+
"@yuants/data-quote": "0.3.1",
|
|
23
|
+
"@yuants/data-trade": "0.1.22",
|
|
24
|
+
"@yuants/exchange": "0.6.1",
|
|
25
25
|
"rxjs": "~7.5.6",
|
|
26
26
|
"ws": "~8.8.1"
|
|
27
27
|
},
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"@rushstack/heft-node-rig": "~1.10.7",
|
|
33
33
|
"@types/heft-jest": "1.0.3",
|
|
34
34
|
"@types/node": "22",
|
|
35
|
-
"@yuants/extension": "0.2.
|
|
35
|
+
"@yuants/extension": "0.2.32",
|
|
36
36
|
"@yuants/tool-kit": "0.2.1",
|
|
37
37
|
"typescript": "~4.7.4",
|
|
38
38
|
"ts-node": "~10.9.2",
|
package/temp/package-deps.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"apps/vendor-okx/CHANGELOG.json": "
|
|
3
|
-
"apps/vendor-okx/CHANGELOG.md": "
|
|
2
|
+
"apps/vendor-okx/CHANGELOG.json": "eb2971a77700512bbf30d2483f6e90293e5eac19",
|
|
3
|
+
"apps/vendor-okx/CHANGELOG.md": "d1171e01de2935a6feb7c0d5ee91958a3603866c",
|
|
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": "
|
|
10
|
+
"apps/vendor-okx/package.json": "ff2a542b3010352ce6c6ee5efe2d8c995d83cec4",
|
|
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",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"apps/vendor-okx/src/orders/submitOrder.ts": "626ff6d2f14d22e0b3a3ffa447d33a78d9d0a38b",
|
|
36
36
|
"apps/vendor-okx/src/public-data/interest_rate.ts": "f3171f2753955d500ae00ce7e263ea26e05e5421",
|
|
37
37
|
"apps/vendor-okx/src/public-data/market-order.ts": "c7269e9fe1f339b320e8b4cd98652854446a245c",
|
|
38
|
-
"apps/vendor-okx/src/public-data/new-quote.ts": "
|
|
38
|
+
"apps/vendor-okx/src/public-data/new-quote.ts": "1f49de0f24902b5ff921478b65126e4b2a9ec1c4",
|
|
39
39
|
"apps/vendor-okx/src/public-data/ohlc.ts": "0b5a568e30b3070f74b0e64614e8c1cc9ba507fb",
|
|
40
40
|
"apps/vendor-okx/src/public-data/product.ts": "9caa1b0d9fa621800870ef47086767f6f5810ad9",
|
|
41
41
|
"apps/vendor-okx/src/public-data/quote.ts": "da471098f6c59376f7221bf6fc3d2625eeacecee",
|
|
@@ -49,20 +49,20 @@
|
|
|
49
49
|
"apps/vendor-okx/src/ws.ts": "5e8fe8c97c7da92c08ddf07ab47faf7976433ca3",
|
|
50
50
|
"apps/vendor-okx/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
51
51
|
"apps/vendor-okx/.rush/temp/shrinkwrap-deps.json": "c9b5d11ff2d36318a68aca38e2baeffbaf3bfc4c",
|
|
52
|
-
"libraries/protocol/temp/package-deps.json": "
|
|
53
|
-
"libraries/transfer/temp/package-deps.json": "
|
|
54
|
-
"libraries/data-account/temp/package-deps.json": "
|
|
55
|
-
"libraries/data-order/temp/package-deps.json": "
|
|
56
|
-
"libraries/utils/temp/package-deps.json": "
|
|
57
|
-
"libraries/cache/temp/package-deps.json": "
|
|
58
|
-
"libraries/sql/temp/package-deps.json": "
|
|
59
|
-
"libraries/data-series/temp/package-deps.json": "
|
|
60
|
-
"libraries/data-product/temp/package-deps.json": "
|
|
61
|
-
"libraries/data-ohlc/temp/package-deps.json": "
|
|
62
|
-
"libraries/data-interest-rate/temp/package-deps.json": "
|
|
63
|
-
"libraries/data-quote/temp/package-deps.json": "
|
|
64
|
-
"libraries/data-trade/temp/package-deps.json": "
|
|
65
|
-
"libraries/exchange/temp/package-deps.json": "
|
|
66
|
-
"libraries/extension/temp/package-deps.json": "
|
|
52
|
+
"libraries/protocol/temp/package-deps.json": "c94931cb0eab7180d90a06d740c1a97c0ac0c6b6",
|
|
53
|
+
"libraries/transfer/temp/package-deps.json": "7b0db8291734d10d4f1d9c2c25d9e3918cabc79e",
|
|
54
|
+
"libraries/data-account/temp/package-deps.json": "61641a5eb18cbaceedb085230d86589ea8d076ae",
|
|
55
|
+
"libraries/data-order/temp/package-deps.json": "8aa3e27ff80629d417bfe920e85d8525fbb52f42",
|
|
56
|
+
"libraries/utils/temp/package-deps.json": "7f1eab07acae68df931b001594a522f050ace396",
|
|
57
|
+
"libraries/cache/temp/package-deps.json": "e1f94620bc6245add32a4f9d379ed2901129d818",
|
|
58
|
+
"libraries/sql/temp/package-deps.json": "041074e0102f9a01820c0fddcf82b9eaee226c79",
|
|
59
|
+
"libraries/data-series/temp/package-deps.json": "a94e2f373c448a6205ee6c47e41d9283a76ee352",
|
|
60
|
+
"libraries/data-product/temp/package-deps.json": "899bba8ace3f04b2035488ff9059e40732ef1d97",
|
|
61
|
+
"libraries/data-ohlc/temp/package-deps.json": "8415ee90c49d7e84faaa2565cc1122fdacf73dab",
|
|
62
|
+
"libraries/data-interest-rate/temp/package-deps.json": "5a1011b097b18b96c2d8c932d874f69472621efd",
|
|
63
|
+
"libraries/data-quote/temp/package-deps.json": "272c0fe62ababfa66a7589139c31231a6fdce2b4",
|
|
64
|
+
"libraries/data-trade/temp/package-deps.json": "95dcb14d4678f4a4165dd214ae5286bb8fd94eaf",
|
|
65
|
+
"libraries/exchange/temp/package-deps.json": "3928985332795cb9b230ced140003ccf2287af41",
|
|
66
|
+
"libraries/extension/temp/package-deps.json": "3e0a81b0c863c2daf342dfaf284b8fd7d18c8562",
|
|
67
67
|
"tools/toolkit/temp/package-deps.json": "23e053490eb8feade23e4d45de4e54883e322711"
|
|
68
68
|
}
|