@yuants/vendor-binance 0.6.39 → 0.7.0
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/api.js +1 -0
- package/dist/api.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy_index.js +118 -40
- package/dist/legacy_index.js.map +1 -1
- package/dist/quote.js +42 -0
- package/dist/quote.js.map +1 -0
- package/lib/api.d.ts +21 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +1 -0
- package/lib/api.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/legacy_index.js +118 -40
- package/lib/legacy_index.js.map +1 -1
- package/lib/quote.d.ts +2 -0
- package/lib/quote.d.ts.map +1 -0
- package/lib/quote.js +44 -0
- package/lib/quote.js.map +1 -0
- package/package.json +2 -1
- package/temp/package-deps.json +9 -7
package/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { PromRegistry } from '@yuants/protocol';\nimport { formatTime } from '@yuants/utils';\n// @ts-ignore\nimport CryptoJS from 'crypto-js';\n\nconst MetricBinanceApiUsedWeight = PromRegistry.create('gauge', 'binance_api_used_weight');\n\ninterface errorResult {\n code: number;\n msg: string;\n}\n\nexport const isError = <T>(x: T | errorResult): x is errorResult => (x as errorResult).code !== undefined;\n\n/**\n * Binance 币安 API\n *\n * https://developers.binance.com/docs/zh-CN/binance-spot-api-docs/CHANGELOG\n */\nexport class ApiClient {\n constructor(\n public config: {\n auth?: {\n public_key: string;\n secret_key: string;\n };\n },\n ) {}\n\n async request(method: string, path: string, params: any = {}) {\n const url = new URL(path);\n params.recvWindow = 5000;\n params.timestamp = Date.now();\n for (const key in params) {\n if (params[key] === undefined) continue;\n url.searchParams.set(key, params[key]);\n }\n if (!this.config.auth) {\n console.info(formatTime(Date.now()), method, url.href);\n const res = await fetch(url.href, { method });\n console.info(formatTime(Date.now()), 'response', method, url.href, res.status);\n const usedWeight1M = res.headers.get('x-mbx-used-weight-1m');\n if (usedWeight1M) {\n // console.info('usedWeight1M', method, url.href, usedWeight1M);\n MetricBinanceApiUsedWeight.set(+usedWeight1M, {});\n }\n return res.json();\n }\n const secret_key = this.config.auth.secret_key;\n const signData = url.search.slice(1);\n const str = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n url.searchParams.set('signature', str);\n\n const headers = {\n 'Content-Type': 'application/json;charset=utf-8',\n 'X-MBX-APIKEY': this.config.auth.public_key!,\n };\n\n console.info(\n formatTime(Date.now()),\n method,\n url.href,\n JSON.stringify(headers),\n url.searchParams.toString(),\n signData,\n );\n const res = await fetch(url.href, {\n method,\n headers,\n });\n const usedWeight1M = res.headers.get('x-mbx-used-weight-1m');\n console.info(formatTime(Date.now()), 'response', method, url.href, res.status);\n if (usedWeight1M) {\n // console.info('usedWeight1M', method, url.href, res.status, usedWeight1M);\n MetricBinanceApiUsedWeight.set(+usedWeight1M, {});\n }\n return res.json();\n }\n\n /**\n * 获取交易规则和交易对\n *\n * https://binance-docs.github.io/apidocs/futures/cn/#0f3f2d5ee7\n */\n getFutureExchangeInfo = (): Promise<{\n timezone: string;\n serverTime: number;\n futuresType: string;\n rateLimits: {\n rateLimitType: string;\n interval: string;\n intervalNum: number;\n limit: number;\n }[];\n exchangeFilters: any[];\n assets: {\n asset: string;\n marginAvailable: boolean;\n autoAssetExchange: string;\n }[];\n symbols: {\n symbol: string;\n pair: string;\n contractType: string;\n deliveryDate: number;\n onboardDate: number;\n status: string;\n maintMarginPercent: string;\n requiredMarginPercent: string;\n baseAsset: string;\n quoteAsset: string;\n marginAsset: string;\n pricePrecision: number;\n quantityPrecision: number;\n baseAssetPrecision: number;\n quotePrecision: number;\n underlyingType: string;\n underlyingSubType: string[];\n settlePlan: number;\n triggerProtect: string;\n liquidationFee: string;\n marketTakeBound: string;\n maxMoveOrderLimit: number;\n filters: {\n filterType: string;\n maxPrice?: string;\n minPrice?: string;\n tickSize?: string;\n maxQty?: string;\n stepSize?: string;\n minQty?: string;\n limit?: number;\n notional?: string;\n multiplierDecimal?: string;\n multiplierUp?: string;\n multiplierDown?: string;\n }[];\n orderTypes: string[];\n timeInForce: string[];\n }[];\n }> => this.request('GET', 'https://fapi.binance.com/fapi/v1/exchangeInfo');\n\n /**\n * 查询资金费率历史\n *\n * https://binance-docs.github.io/apidocs/futures/cn/#31dbeb24c4\n */\n getFutureFundingRate = (params: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<\n {\n symbol: string;\n fundingTime: number;\n fundingRate: string;\n markPrice: string;\n }[]\n > => this.request('GET', 'https://fapi.binance.com/fapi/v1/fundingRate', params);\n\n /**\n * 最新标记价格和资金费率\n *\n * 采集各大交易所数据加权平均\n *\n * 权重: 带symbol为1;不带symbol为10\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Mark-Price\n */\n getFuturePremiumIndex = (params: {\n symbol?: string;\n }): Promise<\n {\n symbol: string;\n markPrice: string;\n indexPrice: string;\n estimatedSettlePrice: string;\n lastFundingRate: string;\n interestRate: string;\n nextFundingTime: number;\n time: number;\n }[]\n > => this.request('GET', 'https://fapi.binance.com/fapi/v1/premiumIndex', params);\n\n /**\n * 当前最优挂单\n *\n * 返回当前最优的挂单(最高买单,最低卖单)\n *\n * 权重: 单交易对2,无交易对5\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Symbol-Order-Book-Ticker\n */\n getFutureBookTicker = (params?: {\n symbol?: string;\n }): Promise<\n {\n symbol: string;\n bidPrice: string;\n bidQty: string;\n askPrice: string;\n askQty: string;\n time: number;\n }[]\n > => this.request('GET', 'https://fapi.binance.com/fapi/v1/ticker/bookTicker', params);\n\n /**\n * 获取未平仓合约数\n *\n * 权重: 1\n *\n * 更新速率: 3s\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Open-Interest\n */\n getFutureOpenInterest = (params: {\n symbol: string;\n }): Promise<{\n openInterest: string;\n symbol: string;\n time: number;\n }> => this.request('GET', 'https://fapi.binance.com/fapi/v1/openInterest', params);\n\n /**\n * 查询账户信息(USER_DATA)\n *\n * 查询账户信息\n *\n * 权重: 20\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Account-Information\n */\n getUnifiedAccountInfo = (): Promise<\n | {\n uniMMR: string;\n accountEquity: string;\n actualEquity: string;\n accountInitialMargin: string;\n accountMaintMargin: string;\n accountStatus: string;\n virtualMaxWithdrawAmount: string;\n totalAvailableBalance: string;\n totalMarginOpenLoss: string;\n updateTime: number;\n }\n | errorResult\n > => this.request('GET', 'https://papi.binance.com/papi/v1/account');\n\n /**\n * 获取UM账户信息\n *\n * 现有UM账户资产和仓位信息\n *\n * 权重: 5\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Get-UM-Account-Detail\n */\n getUnifiedUmAccount = (): Promise<\n | {\n assets: {\n asset: string;\n crossWalletBalance: string;\n crossUnPnl: string;\n maintMargin: string;\n initialMargin: string;\n positionInitialMargin: string;\n openOrderInitialMargin: string;\n updateTime: number;\n }[];\n positions: {\n symbol: string;\n initialMargin: string;\n maintMargin: string;\n unrealizedProfit: string;\n positionInitialMargin: string;\n openOrderInitialMargin: string;\n leverage: string;\n entryPrice: string;\n maxNotional: string;\n bidNotional: string;\n askNotional: string;\n positionSide: string;\n positionAmt: string;\n updateTime: number;\n }[];\n }\n | errorResult\n > => this.request('GET', 'https://papi.binance.com/papi/v1/um/account');\n\n /**\n * 查看当前全部UM挂单(USER_DATA)\n *\n * 查看当前全部UM挂单,请小心使用不带symbol参数的调用\n *\n * 权重: 带symbol 1 - 不带 40\n */\n getUnifiedUmOpenOrders = (params?: {\n symbol?: string;\n }): Promise<\n {\n avgPrice: string;\n clientOrderId: string;\n cumQuote: string;\n executedQty: string;\n orderId: number;\n origQty: string;\n origType: string;\n price: string;\n reduceOnly: boolean;\n side: string;\n positionSide: string;\n status: string;\n symbol: string;\n time: number;\n timeInForce: string;\n type: string;\n updateTime: number;\n selfTradePreventionMode: string;\n goodTillDate: number;\n }[]\n > => this.request('GET', 'https://papi.binance.com/papi/v1/um/openOrders', params);\n\n /**\n * 查询账户余额(USER_DATA)\n *\n * 查询账户余额\n *\n * 权重: 20\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Account-Balance\n */\n getUnifiedAccountBalance = (params?: {\n assets?: string;\n }): Promise<\n | {\n asset: string;\n totalWalletBalance: string;\n crossMarginAsset: string;\n crossMarginBorrowed: string;\n crossMarginFree: string;\n crossMarginInterest: string;\n crossMarginLocked: string;\n umWalletBalance: string;\n umUnrealizedPNL: string;\n cmWalletBalance: string;\n cmUnrealizedPNL: string;\n updateTime: number;\n }[]\n | errorResult\n > => this.request('GET', 'https://papi.binance.com/papi/v1/balance', params);\n\n /**\n * 账户信息 (USER_DATA)\n *\n * 权重: 20\n *\n * https://developers.binance.com/docs/zh-CN/binance-spot-api-docs/rest-api#%E8%B4%A6%E6%88%B7%E4%BF%A1%E6%81%AF-user_data\n */\n getSpotAccountInfo = (params?: {\n omitZeroBalances?: boolean;\n }): Promise<\n | {\n makerCommission: number;\n takerCommission: number;\n buyerCommission: number;\n sellerCommission: number;\n commissionRates: {\n maker: string;\n taker: string;\n buyer: string;\n seller: string;\n };\n canTrade: boolean;\n canWithdraw: boolean;\n canDeposit: boolean;\n brokered: boolean;\n requireSelfTradePrevention: boolean;\n preventSor: boolean;\n updateTime: number;\n balances: {\n asset: string;\n free: string;\n locked: string;\n }[];\n permissions: string[];\n uid: number;\n }\n | errorResult\n > => this.request('GET', 'https://api.binance.com/api/v3/account', params);\n\n /**\n * 用户万向划转(USER_DATA)\n *\n * 用户万向划转\n *\n * 您需要开通api key 允许万向划转权限来调用此接口。\n *\n * 权重: 900\n *\n * https://developers.binance.com/docs/zh-CN/wallet/asset/user-universal-transfer\n */\n postAssetTransfer = (params: {\n type: string;\n asset: string;\n amount: number;\n fromSymbol?: string;\n toSymbol?: string;\n }): Promise<\n | {\n tranId: number;\n }\n | errorResult\n > => this.request('POST', 'https://api.binance.com/sapi/v1/asset/transfer', params);\n\n /**\n * 统一账户资金归集(TRADE)\n *\n * 资金归集到统一账户钱包\n *\n * 权重: 750\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Fund-Auto-collection\n *\n * ISSUE(2024-07-18): 目前这是唯一能够将资金从原 U 本位合约账户转入统一账户的接口。\n */\n postUnifiedAccountAutoCollection = (): Promise<{\n msg: string;\n }> => this.request('POST', 'https://papi.binance.com/papi/v1/auto-collection');\n\n /**\n * 获取充值地址(支持多网络)(USER_DATA)\n *\n * 获取充值地址\n *\n * 权重: 10\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/deposite-address\n */\n getDepositAddress = (params: {\n coin: string;\n network?: string;\n amount?: number;\n }): Promise<{\n address: string;\n coin: string;\n tag: string;\n url: string;\n }> => this.request('GET', 'https://api.binance.com/sapi/v1/capital/deposit/address', params);\n\n /**\n * 查询子账户列表(适用主账户)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/sub_account/account-management/Query-Sub-account-List\n */\n getSubAccountList = (params?: {\n email?: string;\n isFreeze?: number;\n page?: number;\n limit?: number;\n }): Promise<\n | {\n subAccounts: {\n email: string;\n isFreeze: boolean;\n createTime: number;\n isManagedSubAccount: boolean;\n isAssetManagementSubAccount: boolean;\n }[];\n }\n | errorResult\n > => this.request('GET', 'https://api.binance.com/sapi/v1/sub-account/list');\n\n /**\n * 提币(USER_DATA)\n *\n * 权重: 600\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/withdraw\n */\n postWithdraw = (\n params:\n | {\n coin: string;\n withdrawOrderId?: string;\n network?: string;\n address: string;\n addressTag?: string;\n amount: number;\n transactionFeeFlag?: boolean;\n name?: string;\n walletType?: number;\n }\n | errorResult,\n ): Promise<{\n id: string;\n }> => this.request('POST', 'https://api.binance.com/sapi/v1/capital/withdraw/apply', params);\n\n /**\n * 获取提币历史(支持多网络)(USER_DATA)\n *\n * 获取提币历史 (支持多网络)\n *\n * 请求权重(IP)#\n * 18000 请求限制: 每秒10次\n *\n * 本接口特别采用每秒UID速率限制,用户的总秒级 UID 速率限制为180000/秒。从该接口收到的响应包含key X-SAPI-USED-UID-WEIGHT-1S,该key定义了当前 UID 使用的权重\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/withdraw-history\n */\n getWithdrawHistory = (params?: {\n coin?: string;\n withdrawOrderId?: string;\n status?: number;\n offset?: number;\n limit?: number;\n startTime?: number;\n endTime?: number;\n }): Promise<\n {\n id: string;\n amount: string;\n transactionFee: string;\n coin: string;\n status: number;\n address: string;\n txId: string;\n applyTime: Date;\n network: string;\n transferType: number;\n info: string;\n confirmNo: number;\n walletType: number;\n txKey: string;\n completeTime: Date;\n }[]\n > => this.request('GET', 'https://api.binance.com/sapi/v1/capital/withdraw/history', params);\n\n /**\n * 获取充值历史(支持多网络)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/deposite-history\n */\n getDepositHistory = (params?: {\n includeSource?: boolean;\n coin?: string;\n status?: number;\n startTime?: number;\n endTime?: number;\n offset?: number;\n limit?: number;\n txId?: string;\n }): Promise<\n {\n id: string;\n amount: string;\n coin: string;\n network: string;\n status: number;\n address: string;\n addressTag: string;\n txId: string;\n insertTime: number;\n transferType: number;\n confirmTimes: string;\n unlockConfirm: number;\n walletType: number;\n }[]\n > => this.request('GET', 'https://api.binance.com/sapi/v1/capital/deposit/hisrec', params);\n\n /**\n * UM下单(TRADE)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/trade/New-UM-Order\n */\n postUmOrder = (params: {\n symbol: string;\n side: string;\n positionSide?: string;\n type: string;\n timeInForce?: string;\n quantity: number;\n reduceOnly?: string;\n price?: number;\n newClientOrderId?: string;\n newOrderRespType?: string;\n selfTradePreventionMode?: string;\n goodTillDate?: number;\n }): Promise<\n | {\n clientOrderId: string;\n cumQty: string;\n cumQuote: string;\n executedQty: string;\n orderId: number;\n avgPrice: string;\n origQty: string;\n price: string;\n reduceOnly: boolean;\n side: string;\n positionSide: string;\n status: string;\n symbol: string;\n timeInForce: string;\n type: string;\n selfTradePreventionMode: string;\n goodTillDate: number;\n updateTime: number;\n }\n | errorResult\n > => this.request('POST', 'https://papi.binance.com/papi/v1/um/order', params);\n\n /**\n * 获取所有全仓杠杆交易对(MARKET_DATA)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/margin_trading/market-data/Get-All-Cross-Margin-Pairs\n */\n getMarginAllPairs = (params?: {\n symbol?: string;\n }): Promise<\n {\n id: string;\n symbol: string;\n base: string;\n quote: string;\n isMarginTrade: boolean;\n isBuyAllowed: boolean;\n isSellAllowed: boolean;\n }[]\n > => this.request('GET', 'https://api.binance.com/sapi/v1/margin/allPairs', params);\n\n /**\n * 获取UM损益资金流水(USER_DATA)\n *\n * 权重: 30\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Get-UM-Income-History\n */\n getUMIncome = (params?: {\n symbol?: string;\n incomeType?: string;\n startTime?: number;\n endTime?: number;\n recvWindow?: number;\n limit?: number;\n timestamp: number;\n }): Promise<\n {\n symbol: string; // 交易对,仅针对涉及交易对的资金流\n incomeType: string; // 资金流类型\n income: string; // 资金流数量,正数代表流入,负数代表流出\n asset: string; // 资产内容\n info: string; // 备注信息,取决于流水类型\n time: number;\n tranId: string; // 划转ID\n tradeId: string; // 引起流水产生的原始交易ID\n }[]\n > => this.request('GET', 'https://api.binance.com/papi/v1/um/income', params);\n}\nexport const client = new ApiClient({\n auth: process.env.PUBLIC_ONLY\n ? undefined\n : {\n public_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAgD;AAChD,yCAA2C;AAC3C,aAAa;AACb,0DAAiC;AAEjC,MAAM,0BAA0B,GAAG,uBAAY,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;AAOpF,MAAM,OAAO,GAAG,CAAI,CAAkB,EAAoB,EAAE,CAAE,CAAiB,CAAC,IAAI,KAAK,SAAS,CAAC;AAA7F,QAAA,OAAO,WAAsF;AAE1G;;;;GAIG;AACH,MAAa,SAAS;IACpB,YACS,MAKN;QALM,WAAM,GAAN,MAAM,CAKZ;QAqDH;;;;WAIG;QACH,0BAAqB,GAAG,GAwDrB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC;QAE3E;;;;WAIG;QACH,yBAAoB,GAAG,CAAC,MAKvB,EAOC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,8CAA8C,EAAE,MAAM,CAAC,CAAC;QAEjF;;;;;;;;WAQG;QACH,0BAAqB,GAAG,CAAC,MAExB,EAWC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,+CAA+C,EAAE,MAAM,CAAC,CAAC;QAElF;;;;;;;;WAQG;QACH,wBAAmB,GAAG,CAAC,MAEtB,EASC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,oDAAoD,EAAE,MAAM,CAAC,CAAC;QAEvF;;;;;;;;WAQG;QACH,0BAAqB,GAAG,CAAC,MAExB,EAIE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,+CAA+C,EAAE,MAAM,CAAC,CAAC;QAEnF;;;;;;;;WAQG;QACH,0BAAqB,GAAG,GActB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC;QAErE;;;;;;;;WAQG;QACH,wBAAmB,GAAG,GA8BpB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC;QAExE;;;;;;WAMG;QACH,2BAAsB,GAAG,CAAC,MAEzB,EAsBC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,gDAAgD,EAAE,MAAM,CAAC,CAAC;QAEnF;;;;;;;;WAQG;QACH,6BAAwB,GAAG,CAAC,MAE3B,EAgBC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,0CAA0C,EAAE,MAAM,CAAC,CAAC;QAE7E;;;;;;WAMG;QACH,uBAAkB,GAAG,CAAC,MAErB,EA4BC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,wCAAwC,EAAE,MAAM,CAAC,CAAC;QAE3E;;;;;;;;;;WAUG;QACH,sBAAiB,GAAG,CAAC,MAMpB,EAKC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,gDAAgD,EAAE,MAAM,CAAC,CAAC;QAEpF;;;;;;;;;;WAUG;QACH,qCAAgC,GAAG,GAEhC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;QAE/E;;;;;;;;WAQG;QACH,sBAAiB,GAAG,CAAC,MAIpB,EAKE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,yDAAyD,EAAE,MAAM,CAAC,CAAC;QAE7F;;;;;;WAMG;QACH,sBAAiB,GAAG,CAAC,MAKpB,EAWC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kDAAkD,CAAC,CAAC;QAE7E;;;;;;WAMG;QACH,iBAAY,GAAG,CACb,MAYe,EAGd,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,wDAAwD,EAAE,MAAM,CAAC,CAAC;QAE7F;;;;;;;;;;;WAWG;QACH,uBAAkB,GAAG,CAAC,MAQrB,EAkBC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,0DAA0D,EAAE,MAAM,CAAC,CAAC;QAE7F;;;;;;WAMG;QACH,sBAAiB,GAAG,CAAC,MASpB,EAgBC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,wDAAwD,EAAE,MAAM,CAAC,CAAC;QAE3F;;;;;;WAMG;QACH,gBAAW,GAAG,CAAC,MAad,EAsBC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,2CAA2C,EAAE,MAAM,CAAC,CAAC;QAE/E,kBAAa,GAAG,CAAC,MAIhB,EAmBC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,2CAA2C,EAAE,MAAM,CAAC,CAAC;QAEjF;;;;;;WAMG;QACH,sBAAiB,GAAG,CAAC,MAEpB,EAUC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,iDAAiD,EAAE,MAAM,CAAC,CAAC;QAEpF;;;;;;WAMG;QACH,gBAAW,GAAG,CAAC,MAQd,EAWC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,2CAA2C,EAAE,MAAM,CAAC,CAAC;IAvpB3E,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAY,EAAE,SAAc,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,SAAS;YACxC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YAC7D,IAAI,YAAY,EAAE;gBAChB,gEAAgE;gBAChE,0BAA0B,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;aACnD;YACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;SACnB;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,mBAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QAClF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG;YACd,cAAc,EAAE,gCAAgC;YAChD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAW;SAC7C,CAAC;QAEF,OAAO,CAAC,IAAI,CACV,IAAA,kBAAU,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EACtB,MAAM,EACN,GAAG,CAAC,IAAI,EACR,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EACvB,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,EAC3B,QAAQ,CACT,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;YAChC,MAAM;YACN,OAAO;SACR,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/E,IAAI,YAAY,EAAE;YAChB,4EAA4E;YAC5E,0BAA0B,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;SACnD;QACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CAsmBF;AAhqBD,8BAgqBC;AACY,QAAA,MAAM,GAAG,IAAI,SAAS,CAAC;IAClC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QAC3B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC;YACE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;YACnC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;SACpC;CACN,CAAC,CAAC","sourcesContent":["import { PromRegistry } from '@yuants/protocol';\nimport { formatTime } from '@yuants/utils';\n// @ts-ignore\nimport CryptoJS from 'crypto-js';\n\nconst MetricBinanceApiUsedWeight = PromRegistry.create('gauge', 'binance_api_used_weight');\n\ninterface errorResult {\n code: number;\n msg: string;\n}\n\nexport const isError = <T>(x: T | errorResult): x is errorResult => (x as errorResult).code !== undefined;\n\n/**\n * Binance 币安 API\n *\n * https://developers.binance.com/docs/zh-CN/binance-spot-api-docs/CHANGELOG\n */\nexport class ApiClient {\n constructor(\n public config: {\n auth?: {\n public_key: string;\n secret_key: string;\n };\n },\n ) {}\n\n async request(method: string, path: string, params: any = {}) {\n const url = new URL(path);\n params.recvWindow = 5000;\n params.timestamp = Date.now();\n for (const key in params) {\n if (params[key] === undefined) continue;\n url.searchParams.set(key, params[key]);\n }\n if (!this.config.auth) {\n console.info(formatTime(Date.now()), method, url.href);\n const res = await fetch(url.href, { method });\n console.info(formatTime(Date.now()), 'response', method, url.href, res.status);\n const usedWeight1M = res.headers.get('x-mbx-used-weight-1m');\n if (usedWeight1M) {\n // console.info('usedWeight1M', method, url.href, usedWeight1M);\n MetricBinanceApiUsedWeight.set(+usedWeight1M, {});\n }\n return res.json();\n }\n const secret_key = this.config.auth.secret_key;\n const signData = url.search.slice(1);\n const str = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n url.searchParams.set('signature', str);\n\n const headers = {\n 'Content-Type': 'application/json;charset=utf-8',\n 'X-MBX-APIKEY': this.config.auth.public_key!,\n };\n\n console.info(\n formatTime(Date.now()),\n method,\n url.href,\n JSON.stringify(headers),\n url.searchParams.toString(),\n signData,\n );\n const res = await fetch(url.href, {\n method,\n headers,\n });\n const usedWeight1M = res.headers.get('x-mbx-used-weight-1m');\n console.info(formatTime(Date.now()), 'response', method, url.href, res.status);\n if (usedWeight1M) {\n // console.info('usedWeight1M', method, url.href, res.status, usedWeight1M);\n MetricBinanceApiUsedWeight.set(+usedWeight1M, {});\n }\n return res.json();\n }\n\n /**\n * 获取交易规则和交易对\n *\n * https://binance-docs.github.io/apidocs/futures/cn/#0f3f2d5ee7\n */\n getFutureExchangeInfo = (): Promise<{\n timezone: string;\n serverTime: number;\n futuresType: string;\n rateLimits: {\n rateLimitType: string;\n interval: string;\n intervalNum: number;\n limit: number;\n }[];\n exchangeFilters: any[];\n assets: {\n asset: string;\n marginAvailable: boolean;\n autoAssetExchange: string;\n }[];\n symbols: {\n symbol: string;\n pair: string;\n contractType: string;\n deliveryDate: number;\n onboardDate: number;\n status: string;\n maintMarginPercent: string;\n requiredMarginPercent: string;\n baseAsset: string;\n quoteAsset: string;\n marginAsset: string;\n pricePrecision: number;\n quantityPrecision: number;\n baseAssetPrecision: number;\n quotePrecision: number;\n underlyingType: string;\n underlyingSubType: string[];\n settlePlan: number;\n triggerProtect: string;\n liquidationFee: string;\n marketTakeBound: string;\n maxMoveOrderLimit: number;\n filters: {\n filterType: string;\n maxPrice?: string;\n minPrice?: string;\n tickSize?: string;\n maxQty?: string;\n stepSize?: string;\n minQty?: string;\n limit?: number;\n notional?: string;\n multiplierDecimal?: string;\n multiplierUp?: string;\n multiplierDown?: string;\n }[];\n orderTypes: string[];\n timeInForce: string[];\n }[];\n }> => this.request('GET', 'https://fapi.binance.com/fapi/v1/exchangeInfo');\n\n /**\n * 查询资金费率历史\n *\n * https://binance-docs.github.io/apidocs/futures/cn/#31dbeb24c4\n */\n getFutureFundingRate = (params: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<\n {\n symbol: string;\n fundingTime: number;\n fundingRate: string;\n markPrice: string;\n }[]\n > => this.request('GET', 'https://fapi.binance.com/fapi/v1/fundingRate', params);\n\n /**\n * 最新标记价格和资金费率\n *\n * 采集各大交易所数据加权平均\n *\n * 权重: 带symbol为1;不带symbol为10\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Mark-Price\n */\n getFuturePremiumIndex = (params: {\n symbol?: string;\n }): Promise<\n {\n symbol: string;\n markPrice: string;\n indexPrice: string;\n estimatedSettlePrice: string;\n lastFundingRate: string;\n interestRate: string;\n nextFundingTime: number;\n time: number;\n }[]\n > => this.request('GET', 'https://fapi.binance.com/fapi/v1/premiumIndex', params);\n\n /**\n * 当前最优挂单\n *\n * 返回当前最优的挂单(最高买单,最低卖单)\n *\n * 权重: 单交易对2,无交易对5\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Symbol-Order-Book-Ticker\n */\n getFutureBookTicker = (params?: {\n symbol?: string;\n }): Promise<\n {\n symbol: string;\n bidPrice: string;\n bidQty: string;\n askPrice: string;\n askQty: string;\n time: number;\n }[]\n > => this.request('GET', 'https://fapi.binance.com/fapi/v1/ticker/bookTicker', params);\n\n /**\n * 获取未平仓合约数\n *\n * 权重: 1\n *\n * 更新速率: 3s\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/usds-margined-futures/market-data/rest-api/Open-Interest\n */\n getFutureOpenInterest = (params: {\n symbol: string;\n }): Promise<{\n openInterest: string;\n symbol: string;\n time: number;\n }> => this.request('GET', 'https://fapi.binance.com/fapi/v1/openInterest', params);\n\n /**\n * 查询账户信息(USER_DATA)\n *\n * 查询账户信息\n *\n * 权重: 20\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Account-Information\n */\n getUnifiedAccountInfo = (): Promise<\n | {\n uniMMR: string;\n accountEquity: string;\n actualEquity: string;\n accountInitialMargin: string;\n accountMaintMargin: string;\n accountStatus: string;\n virtualMaxWithdrawAmount: string;\n totalAvailableBalance: string;\n totalMarginOpenLoss: string;\n updateTime: number;\n }\n | errorResult\n > => this.request('GET', 'https://papi.binance.com/papi/v1/account');\n\n /**\n * 获取UM账户信息\n *\n * 现有UM账户资产和仓位信息\n *\n * 权重: 5\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Get-UM-Account-Detail\n */\n getUnifiedUmAccount = (): Promise<\n | {\n assets: {\n asset: string;\n crossWalletBalance: string;\n crossUnPnl: string;\n maintMargin: string;\n initialMargin: string;\n positionInitialMargin: string;\n openOrderInitialMargin: string;\n updateTime: number;\n }[];\n positions: {\n symbol: string;\n initialMargin: string;\n maintMargin: string;\n unrealizedProfit: string;\n positionInitialMargin: string;\n openOrderInitialMargin: string;\n leverage: string;\n entryPrice: string;\n maxNotional: string;\n bidNotional: string;\n askNotional: string;\n positionSide: string;\n positionAmt: string;\n updateTime: number;\n }[];\n }\n | errorResult\n > => this.request('GET', 'https://papi.binance.com/papi/v1/um/account');\n\n /**\n * 查看当前全部UM挂单(USER_DATA)\n *\n * 查看当前全部UM挂单,请小心使用不带symbol参数的调用\n *\n * 权重: 带symbol 1 - 不带 40\n */\n getUnifiedUmOpenOrders = (params?: {\n symbol?: string;\n }): Promise<\n {\n avgPrice: string;\n clientOrderId: string;\n cumQuote: string;\n executedQty: string;\n orderId: number;\n origQty: string;\n origType: string;\n price: string;\n reduceOnly: boolean;\n side: string;\n positionSide: string;\n status: string;\n symbol: string;\n time: number;\n timeInForce: string;\n type: string;\n updateTime: number;\n selfTradePreventionMode: string;\n goodTillDate: number;\n }[]\n > => this.request('GET', 'https://papi.binance.com/papi/v1/um/openOrders', params);\n\n /**\n * 查询账户余额(USER_DATA)\n *\n * 查询账户余额\n *\n * 权重: 20\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Account-Balance\n */\n getUnifiedAccountBalance = (params?: {\n assets?: string;\n }): Promise<\n | {\n asset: string;\n totalWalletBalance: string;\n crossMarginAsset: string;\n crossMarginBorrowed: string;\n crossMarginFree: string;\n crossMarginInterest: string;\n crossMarginLocked: string;\n umWalletBalance: string;\n umUnrealizedPNL: string;\n cmWalletBalance: string;\n cmUnrealizedPNL: string;\n updateTime: number;\n }[]\n | errorResult\n > => this.request('GET', 'https://papi.binance.com/papi/v1/balance', params);\n\n /**\n * 账户信息 (USER_DATA)\n *\n * 权重: 20\n *\n * https://developers.binance.com/docs/zh-CN/binance-spot-api-docs/rest-api#%E8%B4%A6%E6%88%B7%E4%BF%A1%E6%81%AF-user_data\n */\n getSpotAccountInfo = (params?: {\n omitZeroBalances?: boolean;\n }): Promise<\n | {\n makerCommission: number;\n takerCommission: number;\n buyerCommission: number;\n sellerCommission: number;\n commissionRates: {\n maker: string;\n taker: string;\n buyer: string;\n seller: string;\n };\n canTrade: boolean;\n canWithdraw: boolean;\n canDeposit: boolean;\n brokered: boolean;\n requireSelfTradePrevention: boolean;\n preventSor: boolean;\n updateTime: number;\n balances: {\n asset: string;\n free: string;\n locked: string;\n }[];\n permissions: string[];\n uid: number;\n }\n | errorResult\n > => this.request('GET', 'https://api.binance.com/api/v3/account', params);\n\n /**\n * 用户万向划转(USER_DATA)\n *\n * 用户万向划转\n *\n * 您需要开通api key 允许万向划转权限来调用此接口。\n *\n * 权重: 900\n *\n * https://developers.binance.com/docs/zh-CN/wallet/asset/user-universal-transfer\n */\n postAssetTransfer = (params: {\n type: string;\n asset: string;\n amount: number;\n fromSymbol?: string;\n toSymbol?: string;\n }): Promise<\n | {\n tranId: number;\n }\n | errorResult\n > => this.request('POST', 'https://api.binance.com/sapi/v1/asset/transfer', params);\n\n /**\n * 统一账户资金归集(TRADE)\n *\n * 资金归集到统一账户钱包\n *\n * 权重: 750\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Fund-Auto-collection\n *\n * ISSUE(2024-07-18): 目前这是唯一能够将资金从原 U 本位合约账户转入统一账户的接口。\n */\n postUnifiedAccountAutoCollection = (): Promise<{\n msg: string;\n }> => this.request('POST', 'https://papi.binance.com/papi/v1/auto-collection');\n\n /**\n * 获取充值地址(支持多网络)(USER_DATA)\n *\n * 获取充值地址\n *\n * 权重: 10\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/deposite-address\n */\n getDepositAddress = (params: {\n coin: string;\n network?: string;\n amount?: number;\n }): Promise<{\n address: string;\n coin: string;\n tag: string;\n url: string;\n }> => this.request('GET', 'https://api.binance.com/sapi/v1/capital/deposit/address', params);\n\n /**\n * 查询子账户列表(适用主账户)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/sub_account/account-management/Query-Sub-account-List\n */\n getSubAccountList = (params?: {\n email?: string;\n isFreeze?: number;\n page?: number;\n limit?: number;\n }): Promise<\n | {\n subAccounts: {\n email: string;\n isFreeze: boolean;\n createTime: number;\n isManagedSubAccount: boolean;\n isAssetManagementSubAccount: boolean;\n }[];\n }\n | errorResult\n > => this.request('GET', 'https://api.binance.com/sapi/v1/sub-account/list');\n\n /**\n * 提币(USER_DATA)\n *\n * 权重: 600\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/withdraw\n */\n postWithdraw = (\n params:\n | {\n coin: string;\n withdrawOrderId?: string;\n network?: string;\n address: string;\n addressTag?: string;\n amount: number;\n transactionFeeFlag?: boolean;\n name?: string;\n walletType?: number;\n }\n | errorResult,\n ): Promise<{\n id: string;\n }> => this.request('POST', 'https://api.binance.com/sapi/v1/capital/withdraw/apply', params);\n\n /**\n * 获取提币历史(支持多网络)(USER_DATA)\n *\n * 获取提币历史 (支持多网络)\n *\n * 请求权重(IP)#\n * 18000 请求限制: 每秒10次\n *\n * 本接口特别采用每秒UID速率限制,用户的总秒级 UID 速率限制为180000/秒。从该接口收到的响应包含key X-SAPI-USED-UID-WEIGHT-1S,该key定义了当前 UID 使用的权重\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/withdraw-history\n */\n getWithdrawHistory = (params?: {\n coin?: string;\n withdrawOrderId?: string;\n status?: number;\n offset?: number;\n limit?: number;\n startTime?: number;\n endTime?: number;\n }): Promise<\n {\n id: string;\n amount: string;\n transactionFee: string;\n coin: string;\n status: number;\n address: string;\n txId: string;\n applyTime: Date;\n network: string;\n transferType: number;\n info: string;\n confirmNo: number;\n walletType: number;\n txKey: string;\n completeTime: Date;\n }[]\n > => this.request('GET', 'https://api.binance.com/sapi/v1/capital/withdraw/history', params);\n\n /**\n * 获取充值历史(支持多网络)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/wallet/capital/deposite-history\n */\n getDepositHistory = (params?: {\n includeSource?: boolean;\n coin?: string;\n status?: number;\n startTime?: number;\n endTime?: number;\n offset?: number;\n limit?: number;\n txId?: string;\n }): Promise<\n {\n id: string;\n amount: string;\n coin: string;\n network: string;\n status: number;\n address: string;\n addressTag: string;\n txId: string;\n insertTime: number;\n transferType: number;\n confirmTimes: string;\n unlockConfirm: number;\n walletType: number;\n }[]\n > => this.request('GET', 'https://api.binance.com/sapi/v1/capital/deposit/hisrec', params);\n\n /**\n * UM下单(TRADE)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/trade/New-UM-Order\n */\n postUmOrder = (params: {\n symbol: string;\n side: string;\n positionSide?: string;\n type: string;\n timeInForce?: string;\n quantity: number;\n reduceOnly?: string;\n price?: number;\n newClientOrderId?: string;\n newOrderRespType?: string;\n selfTradePreventionMode?: string;\n goodTillDate?: number;\n }): Promise<\n | {\n clientOrderId: string;\n cumQty: string;\n cumQuote: string;\n executedQty: string;\n orderId: number;\n avgPrice: string;\n origQty: string;\n price: string;\n reduceOnly: boolean;\n side: string;\n positionSide: string;\n status: string;\n symbol: string;\n timeInForce: string;\n type: string;\n selfTradePreventionMode: string;\n goodTillDate: number;\n updateTime: number;\n }\n | errorResult\n > => this.request('POST', 'https://papi.binance.com/papi/v1/um/order', params);\n\n deleteUmOrder = (params: {\n symbol: string;\n orderId?: string | number;\n origClientOrderId?: string;\n }): Promise<\n | {\n clientOrderId: string;\n cumQty: string;\n cumQuote: string;\n executedQty: string;\n orderId: number;\n origQty: string;\n price: string;\n reduceOnly: boolean;\n side: string;\n positionSide: string;\n status: string;\n symbol: string;\n timeInForce: string;\n type: string;\n updateTime: number;\n }\n | errorResult\n > => this.request('DELETE', 'https://papi.binance.com/papi/v1/um/order', params);\n\n /**\n * 获取所有全仓杠杆交易对(MARKET_DATA)\n *\n * 权重: 1\n *\n * https://developers.binance.com/docs/zh-CN/margin_trading/market-data/Get-All-Cross-Margin-Pairs\n */\n getMarginAllPairs = (params?: {\n symbol?: string;\n }): Promise<\n {\n id: string;\n symbol: string;\n base: string;\n quote: string;\n isMarginTrade: boolean;\n isBuyAllowed: boolean;\n isSellAllowed: boolean;\n }[]\n > => this.request('GET', 'https://api.binance.com/sapi/v1/margin/allPairs', params);\n\n /**\n * 获取UM损益资金流水(USER_DATA)\n *\n * 权重: 30\n *\n * https://developers.binance.com/docs/zh-CN/derivatives/portfolio-margin/account/Get-UM-Income-History\n */\n getUMIncome = (params?: {\n symbol?: string;\n incomeType?: string;\n startTime?: number;\n endTime?: number;\n recvWindow?: number;\n limit?: number;\n timestamp: number;\n }): Promise<\n {\n symbol: string; // 交易对,仅针对涉及交易对的资金流\n incomeType: string; // 资金流类型\n income: string; // 资金流数量,正数代表流入,负数代表流出\n asset: string; // 资产内容\n info: string; // 备注信息,取决于流水类型\n time: number;\n tranId: string; // 划转ID\n tradeId: string; // 引起流水产生的原始交易ID\n }[]\n > => this.request('GET', 'https://api.binance.com/papi/v1/um/income', params);\n}\nexport const client = new ApiClient({\n auth: process.env.PUBLIC_ONLY\n ? undefined\n : {\n public_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n },\n});\n"]}
|
package/lib/index.d.ts
CHANGED
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AACzB,OAAO,gBAAgB,CAAC;AACxB,OAAO,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AACzB,OAAO,SAAS,CAAC;AACjB,OAAO,gBAAgB,CAAC;AACxB,OAAO,WAAW,CAAC"}
|
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,2BAAyB;AACzB,0BAAwB;AACxB,qBAAmB","sourcesContent":["import './interest_rate';\nimport './legacy_index';\nimport './product';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,2BAAyB;AACzB,mBAAiB;AACjB,0BAAwB;AACxB,qBAAmB","sourcesContent":["import './interest_rate';\nimport './quote';\nimport './legacy_index';\nimport './product';\n"]}
|
package/lib/legacy_index.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const data_account_1 = require("@yuants/data-account");
|
|
4
|
+
const data_order_1 = require("@yuants/data-order");
|
|
4
5
|
const protocol_1 = require("@yuants/protocol");
|
|
5
6
|
const transfer_1 = require("@yuants/transfer");
|
|
6
7
|
const utils_1 = require("@yuants/utils");
|
|
7
|
-
const
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
8
9
|
const api_1 = require("./api");
|
|
9
10
|
const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
10
|
-
const memoizeMap = (fn) => {
|
|
11
|
-
const cache = {};
|
|
12
|
-
return ((...params) => { var _a; var _b; return ((_a = cache[_b = (0, utils_1.encodePath)(params)]) !== null && _a !== void 0 ? _a : (cache[_b] = fn(...params))); });
|
|
13
|
-
};
|
|
14
|
-
const mapSymbolToFuturePremiumIndex$ = (0, rxjs_1.defer)(() => api_1.client.getFuturePremiumIndex({})).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 30000 }), (0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x).pipe((0, rxjs_1.map)((v) => [v.symbol, v]), (0, rxjs_1.toArray)(), (0, rxjs_1.map)((v) => new Map(v)))), (0, rxjs_1.shareReplay)(1));
|
|
15
|
-
const mapSymbolToFutureBookTicker$ = (0, rxjs_1.defer)(() => api_1.client.getFutureBookTicker({})).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 30000 }), (0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x).pipe((0, rxjs_1.map)((v) => [v.symbol, v]), (0, rxjs_1.toArray)(), (0, rxjs_1.map)((v) => new Map(v)))), (0, rxjs_1.shareReplay)(1));
|
|
16
11
|
const _mapSymbolToOpenInterest = {};
|
|
17
12
|
const getOpenInterest = async (symbol) => {
|
|
18
13
|
const expired_at = Date.now() - 600000; // 10min expired
|
|
@@ -27,6 +22,75 @@ const getOpenInterest = async (symbol) => {
|
|
|
27
22
|
_mapSymbolToOpenInterest[symbol] = { value, updated_at: Date.now() };
|
|
28
23
|
return value;
|
|
29
24
|
};
|
|
25
|
+
const mapOrderDirectionToSide = (direction) => {
|
|
26
|
+
switch (direction) {
|
|
27
|
+
case 'OPEN_LONG':
|
|
28
|
+
case 'CLOSE_SHORT':
|
|
29
|
+
return 'BUY';
|
|
30
|
+
case 'OPEN_SHORT':
|
|
31
|
+
case 'CLOSE_LONG':
|
|
32
|
+
return 'SELL';
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`Unknown direction: ${direction}`);
|
|
35
|
+
};
|
|
36
|
+
const mapOrderDirectionToPosSide = (direction) => {
|
|
37
|
+
switch (direction) {
|
|
38
|
+
case 'OPEN_LONG':
|
|
39
|
+
case 'CLOSE_LONG':
|
|
40
|
+
return 'LONG';
|
|
41
|
+
case 'OPEN_SHORT':
|
|
42
|
+
case 'CLOSE_SHORT':
|
|
43
|
+
return 'SHORT';
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`Unknown direction: ${direction}`);
|
|
46
|
+
};
|
|
47
|
+
const mapOrderTypeToOrdType = (order_type) => {
|
|
48
|
+
switch (order_type) {
|
|
49
|
+
case 'LIMIT':
|
|
50
|
+
case 'MAKER':
|
|
51
|
+
return 'LIMIT';
|
|
52
|
+
case 'MARKET':
|
|
53
|
+
return 'MARKET';
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`Unknown order type: ${order_type}`);
|
|
56
|
+
};
|
|
57
|
+
const mapBinanceOrderTypeToYuants = (binanceType) => {
|
|
58
|
+
switch (binanceType) {
|
|
59
|
+
case 'LIMIT':
|
|
60
|
+
return 'LIMIT';
|
|
61
|
+
case 'MARKET':
|
|
62
|
+
return 'MARKET';
|
|
63
|
+
default:
|
|
64
|
+
return 'LIMIT';
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const mapBinanceSideToYuantsDirection = (side, positionSide) => {
|
|
68
|
+
if (!side || !positionSide) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
if (positionSide === 'LONG') {
|
|
72
|
+
return side === 'BUY' ? 'OPEN_LONG' : 'CLOSE_LONG';
|
|
73
|
+
}
|
|
74
|
+
if (positionSide === 'SHORT') {
|
|
75
|
+
return side === 'SELL' ? 'OPEN_SHORT' : 'CLOSE_SHORT';
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
};
|
|
79
|
+
const deriveClientOrderId = (order) => {
|
|
80
|
+
if (order.order_id)
|
|
81
|
+
return `${order.order_id}`;
|
|
82
|
+
if (order.comment)
|
|
83
|
+
return order.comment;
|
|
84
|
+
const payload = JSON.stringify({
|
|
85
|
+
account_id: order.account_id,
|
|
86
|
+
product_id: order.product_id,
|
|
87
|
+
order_direction: order.order_direction,
|
|
88
|
+
order_type: order.order_type,
|
|
89
|
+
price: order.price,
|
|
90
|
+
volume: order.volume,
|
|
91
|
+
});
|
|
92
|
+
return `YUANTS${(0, crypto_1.createHash)('sha256').update(payload).digest('hex').slice(0, 24)}`;
|
|
93
|
+
};
|
|
30
94
|
// provideTicks(terminal, 'binance', (product_id) => {
|
|
31
95
|
// const [instType, symbol] = decodePath(product_id);
|
|
32
96
|
// if (instType === 'usdt-future') {
|
|
@@ -241,6 +305,26 @@ const getOpenInterest = async (symbol) => {
|
|
|
241
305
|
}
|
|
242
306
|
// order related
|
|
243
307
|
{
|
|
308
|
+
(0, data_order_1.providePendingOrdersService)(terminal, UNIFIED_ACCOUNT_ID, async () => {
|
|
309
|
+
const openOrders = await api_1.client.getUnifiedUmOpenOrders();
|
|
310
|
+
return openOrders.map((order) => {
|
|
311
|
+
var _a;
|
|
312
|
+
const order_direction = (_a = mapBinanceSideToYuantsDirection(order.side, order.positionSide)) !== null && _a !== void 0 ? _a : 'OPEN_LONG';
|
|
313
|
+
return {
|
|
314
|
+
order_id: `${order.orderId}`,
|
|
315
|
+
account_id: UNIFIED_ACCOUNT_ID,
|
|
316
|
+
product_id: (0, utils_1.encodePath)('usdt-future', order.symbol),
|
|
317
|
+
order_type: mapBinanceOrderTypeToYuants(order.type),
|
|
318
|
+
order_direction,
|
|
319
|
+
volume: +order.origQty,
|
|
320
|
+
traded_volume: +order.executedQty,
|
|
321
|
+
price: order.price === undefined ? undefined : +order.price,
|
|
322
|
+
submit_at: order.time,
|
|
323
|
+
updated_at: new Date(order.updateTime).toISOString(),
|
|
324
|
+
order_status: order.status,
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
}, { auto_refresh_interval: 1000 });
|
|
244
328
|
terminal.server.provideService('SubmitOrder', {
|
|
245
329
|
required: ['account_id'],
|
|
246
330
|
properties: {
|
|
@@ -251,46 +335,15 @@ const getOpenInterest = async (symbol) => {
|
|
|
251
335
|
const order = msg.req;
|
|
252
336
|
const [instType, symbol] = (0, utils_1.decodePath)(order.product_id);
|
|
253
337
|
if (instType === 'usdt-future') {
|
|
254
|
-
const mapOrderDirectionToSide = (direction) => {
|
|
255
|
-
switch (direction) {
|
|
256
|
-
case 'OPEN_LONG':
|
|
257
|
-
case 'CLOSE_SHORT':
|
|
258
|
-
return 'BUY';
|
|
259
|
-
case 'OPEN_SHORT':
|
|
260
|
-
case 'CLOSE_LONG':
|
|
261
|
-
return 'SELL';
|
|
262
|
-
}
|
|
263
|
-
throw new Error(`Unknown direction: ${direction}`);
|
|
264
|
-
};
|
|
265
|
-
const mapOrderDirectionToPosSide = (direction) => {
|
|
266
|
-
switch (direction) {
|
|
267
|
-
case 'OPEN_LONG':
|
|
268
|
-
case 'CLOSE_LONG':
|
|
269
|
-
return 'LONG';
|
|
270
|
-
case 'CLOSE_SHORT':
|
|
271
|
-
case 'OPEN_SHORT':
|
|
272
|
-
return 'SHORT';
|
|
273
|
-
}
|
|
274
|
-
throw new Error(`Unknown direction: ${direction}`);
|
|
275
|
-
};
|
|
276
|
-
const mapOrderTypeToOrdType = (order_type) => {
|
|
277
|
-
switch (order_type) {
|
|
278
|
-
case 'LIMIT':
|
|
279
|
-
return 'LIMIT';
|
|
280
|
-
case 'MARKET':
|
|
281
|
-
return 'MARKET';
|
|
282
|
-
}
|
|
283
|
-
throw new Error(`Unknown order type: ${order_type}`);
|
|
284
|
-
};
|
|
285
|
-
// return
|
|
286
338
|
const params = {
|
|
287
339
|
symbol,
|
|
288
340
|
side: mapOrderDirectionToSide(order.order_direction),
|
|
289
341
|
positionSide: mapOrderDirectionToPosSide(order.order_direction),
|
|
290
342
|
type: mapOrderTypeToOrdType(order.order_type),
|
|
291
|
-
timeInForce: order.order_type === 'LIMIT' ? 'GTC' : undefined,
|
|
343
|
+
timeInForce: order.order_type === 'MAKER' ? 'GTX' : order.order_type === 'LIMIT' ? 'GTC' : undefined,
|
|
292
344
|
quantity: order.volume,
|
|
293
345
|
price: order.price,
|
|
346
|
+
newClientOrderId: deriveClientOrderId(order),
|
|
294
347
|
};
|
|
295
348
|
console.info((0, utils_1.formatTime)(Date.now()), 'SubmitOrder', 'params', JSON.stringify(params));
|
|
296
349
|
const orderResult = await api_1.client.postUmOrder(params);
|
|
@@ -302,5 +355,30 @@ const getOpenInterest = async (symbol) => {
|
|
|
302
355
|
return { res: { code: 400, message: `unsupported type: ${instType}` } };
|
|
303
356
|
});
|
|
304
357
|
}
|
|
358
|
+
{
|
|
359
|
+
terminal.server.provideService('CancelOrder', {
|
|
360
|
+
required: ['account_id', 'order_id', 'product_id'],
|
|
361
|
+
properties: {
|
|
362
|
+
account_id: { const: UNIFIED_ACCOUNT_ID },
|
|
363
|
+
},
|
|
364
|
+
}, async (msg) => {
|
|
365
|
+
const order = msg.req;
|
|
366
|
+
if (!order.order_id) {
|
|
367
|
+
return { res: { code: 400, message: 'order_id is required' } };
|
|
368
|
+
}
|
|
369
|
+
const [instType, symbol] = (0, utils_1.decodePath)(order.product_id);
|
|
370
|
+
if (instType !== 'usdt-future') {
|
|
371
|
+
return { res: { code: 400, message: `unsupported type: ${instType}` } };
|
|
372
|
+
}
|
|
373
|
+
const cancelResult = await api_1.client.deleteUmOrder({
|
|
374
|
+
symbol,
|
|
375
|
+
orderId: order.order_id,
|
|
376
|
+
});
|
|
377
|
+
if ((0, api_1.isError)(cancelResult)) {
|
|
378
|
+
return { res: { code: cancelResult.code, message: cancelResult.msg } };
|
|
379
|
+
}
|
|
380
|
+
return { res: { code: 0, message: 'OK' } };
|
|
381
|
+
});
|
|
382
|
+
}
|
|
305
383
|
})();
|
|
306
384
|
//# sourceMappingURL=legacy_index.js.map
|
package/lib/legacy_index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy_index.js","sourceRoot":"","sources":["../src/legacy_index.ts"],"names":[],"mappings":";;AAAA,uDAA8F;AAE9F,+CAA4C;AAC5C,+CAA6D;AAC7D,yCAAmE;AACnE,+BAAuF;AACvF,+BAAwC;AAExC,MAAM,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,MAAM,UAAU,GAAG,CAAsC,EAAK,EAAK,EAAE;IACnE,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,OAAO,CAAC,CAAC,GAAG,MAAa,EAAE,EAAE,mBAAC,OAAA,OAAC,KAAK,MAAC,IAAA,kBAAU,EAAC,MAAM,CAAC,qCAAxB,KAAK,OAAyB,EAAE,CAAC,GAAG,MAAM,CAAC,EAAC,CAAA,EAAA,CAAM,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,YAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CACvF,IAAA,aAAM,EAAC,EAAE,KAAK,EAAE,IAAK,EAAE,CAAC,EACxB,IAAA,YAAK,EAAC,EAAE,KAAK,EAAE,KAAM,EAAE,CAAC,EACxB,IAAA,eAAQ,EAAC,CAAC,CAAC,EAAE,EAAE,CACb,IAAA,WAAI,EAAC,CAAC,CAAC,CAAC,IAAI,CACV,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAU,CAAC,EAClC,IAAA,cAAO,GAAE,EACT,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CACvB,CACF,EACD,IAAA,kBAAW,EAAC,CAAC,CAAC,CACf,CAAC;AAEF,MAAM,4BAA4B,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,YAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CACnF,IAAA,aAAM,EAAC,EAAE,KAAK,EAAE,IAAK,EAAE,CAAC,EACxB,IAAA,YAAK,EAAC,EAAE,KAAK,EAAE,KAAM,EAAE,CAAC,EACxB,IAAA,eAAQ,EAAC,CAAC,CAAC,EAAE,EAAE,CACb,IAAA,WAAI,EAAC,CAAC,CAAC,CAAC,IAAI,CACV,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAU,CAAC,EAClC,IAAA,cAAO,GAAE,EACT,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CACvB,CACF,EACD,IAAA,kBAAW,EAAC,CAAC,CAAC,CACf,CAAC;AAEF,MAAM,wBAAwB,GAA0D,EAAE,CAAC;AAC3F,MAAM,eAAe,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAO,CAAC,CAAC,gBAAgB;IACzD,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE;QACT,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE;YACjC,OAAO,KAAK,CAAC,KAAK,CAAC;SACpB;KACF;IACD,MAAM,IAAI,GAAG,MAAM,YAAM,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;IACtC,wBAAwB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,sDAAsD;AACtD,uDAAuD;AACvD,sCAAsC;AACtC,iGAAiG;AACjG,iEAAiE;AACjE,6GAA6G;AAC7G,0EAA0E;AAC1E,sEAAsE;AACtE,+BAA+B;AAC/B,mEAAmE;AACnE,YAAY;AACZ,6BAA6B;AAC7B,iEAAiE;AACjE,YAAY;AACZ,mBAAmB;AACnB,sCAAsC;AACtC,wBAAwB;AACxB,oCAAoC;AACpC,4CAA4C;AAC5C,uCAAuC;AACvC,uCAAuC;AACvC,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;AACnE,+CAA+C;AAC/C,aAAa;AACb,YAAY;AACZ,SAAS;AACT,MAAM;AACN,kBAAkB;AAClB,MAAM;AAEN,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,eAAe,GAAG,MAAM,YAAM,CAAC,kBAAkB,EAAE,CAAC;IAC1D,IAAI,IAAA,aAAO,EAAC,eAAe,CAAC,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;KACtC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC;IAEhC,MAAM,eAAe,GAAG,WAAW,GAAG,YAAY,CAAC;IACnD,MAAM,kBAAkB,GAAG,WAAW,GAAG,eAAe,CAAC;IAEzD;QACE,sBAAsB;QAEtB,IAAA,wCAAyB,EACvB,QAAQ,EACR,kBAAkB,EAClB,KAAK,IAAI,EAAE;YACT,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACzD,YAAM,CAAC,wBAAwB,EAAE;gBACjC,YAAM,CAAC,mBAAmB,EAAE;aAC7B,CAAC,CAAC;YACH,IAAI,IAAA,aAAO,EAAC,aAAa,CAAC,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;aACpC;YACD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;YACjE,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;aACnC;YACD,IAAI,IAAA,aAAO,EAAC,eAAe,CAAC,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;aACtC;YACD,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;YAC5E,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;aACtC;YACD,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,kBAAkB,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;YAC5E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC;YAElD,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS;iBACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC;iBACnC,GAAG,CAAC,CAAC,CAAC,EAAa,EAAE;gBACpB,OAAO;oBACL,WAAW,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE;oBAC5C,aAAa,EAAE,SAAS;oBACxB,UAAU,EAAE,IAAA,kBAAU,EAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;oBAC/C,SAAS,EAAE,CAAC,CAAC,YAAY;oBACzB,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW;oBACtB,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW;oBAC3B,cAAc,EAAE,CAAC,CAAC,CAAC,UAAU;oBAC7B,cAAc,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,WAAW;oBACpE,eAAe,EAAE,CAAC,CAAC,CAAC,gBAAgB;oBACpC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;iBACnF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEL,OAAO;gBACL,KAAK,EAAE;oBACL,QAAQ,EAAE,MAAM;oBAChB,MAAM;oBACN,IAAI;iBACL;gBACD,SAAS;aACV,CAAC;QACJ,CAAC,EACD,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAChC,CAAC;QAEF,IAAA,+BAAgB,EAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;KAC9F;IAED;QACE,oBAAoB;QAEpB,IAAA,wCAAyB,EAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,iBAAiB,GAAG,MAAM,YAAM,CAAC,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,IAAI,IAAA,aAAO,EAAC,iBAAiB,CAAC,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;aACxC;YACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;YAC9E,OAAO;gBACL,KAAK,EAAE;oBACL,QAAQ,EAAE,MAAM;oBAChB,MAAM,EAAE,CAAC,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,KAAI,CAAC,CAAC;oBAChC,IAAI,EAAE,CAAC,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,KAAI,CAAC,CAAC;iBAC/B;gBACD,SAAS,EAAE,EAAE;aACd,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,+BAAgB,EAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;KACxF;IAED,WAAW;IACX;QACE,kBAAkB;QAClB,MAAM,uBAAuB,GAAG,WAAW,GAAG,eAAe,CAAC;QAC9D,IAAA,oCAAyB,EAAC;YACxB,QAAQ;YACR,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,uBAAuB;YACnC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE;gBACP,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACpB,MAAM,cAAc,GAAG,MAAM,YAAM,CAAC,iBAAiB,CAAC;wBACpD,IAAI,EAAE,uBAAuB;wBAC7B,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,KAAK,CAAC,cAAe;qBAC9B,CAAC,CAAC;oBACH,IAAI,IAAA,aAAO,EAAC,cAAc,CAAC,EAAE;wBAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC;qBACvD;oBACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC3E,CAAC;aACF;YACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACtE,CAAC;SACF,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAA,oCAAyB,EAAC;YACxB,QAAQ;YACR,UAAU,EAAE,kBAAkB;YAC9B,UAAU,EAAE,uBAAuB;YACnC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,MAAM;YACf,OAAO,EAAE;gBACP,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACpB,MAAM,cAAc,GAAG,MAAM,YAAM,CAAC,iBAAiB,CAAC;wBACpD,IAAI,EAAE,uBAAuB;wBAC7B,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,KAAK,CAAC,cAAe;qBAC9B,CAAC,CAAC;oBACH,IAAI,IAAA,aAAO,EAAC,cAAc,CAAC,EAAE;wBAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC;qBACvD;oBACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC3E,CAAC;aACF;YACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACtE,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAG,MAAM,YAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,CAAC,IAAA,aAAO,EAAC,iBAAiB,CAAC,CAAC;QAC3C,cAAc;QACd,UAAU;QAEV,aAAa;QACb,IAAI,MAAM,EAAE;YACV,MAAM,oBAAoB,GAAG,MAAM,YAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9F,IAAA,oCAAyB,EAAC;gBACxB,QAAQ;gBACR,UAAU,EAAE,eAAe;gBAC3B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,oBAAoB,CAAC,OAAO;gBACrC,OAAO,EAAE;oBACP,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;wBACpB,MAAM,cAAc,GAAG,MAAM,YAAM,CAAC,YAAY,CAAC;4BAC/C,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,KAAK,CAAC,kBAAmB;4BAClC,MAAM,EAAE,KAAK,CAAC,cAAe;yBAC9B,CAAC,CAAC;wBACH,IAAI,IAAA,aAAO,EAAC,cAAc,CAAC,EAAE;4BAC3B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC;yBACxD;wBACD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC;wBAC/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBAC7C,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;wBACvB,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC;wBACtC,MAAM,cAAc,GAAG,MAAM,YAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;wBACzE,MAAM,MAAM,GAAG,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;wBAC1D,MAAM,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC;wBAC1B,IAAI,CAAC,IAAI,EAAE;4BACT,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yBAC5C;wBACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;oBACrD,CAAC;iBACF;gBACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;oBACtB,MAAM,WAAW,GAAG,MAAM,YAAM,CAAC,iBAAiB,CAAC;wBACjD,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,KAAK,CAAC,sBAAsB;qBACnC,CAAC,CAAC;oBACH,IAAI,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,CAAC,CAAC,0CAAE,MAAM,MAAK,CAAC,EAAE;wBAClC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;qBAC7B;oBACD,MAAM,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC/C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;gBAChD,CAAC;aACF,CAAC,CAAC;SACJ;KACF;IAED,gBAAgB;IAChB;QACE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAC5B,aAAa,EACb;YACE,QAAQ,EAAE,CAAC,YAAY,CAAC;YACxB,UAAU,EAAE;gBACV,UAAU,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;aAC1C;SACF,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;YACtB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,QAAQ,KAAK,aAAa,EAAE;gBAC9B,MAAM,uBAAuB,GAAG,CAAC,SAAkB,EAAE,EAAE;oBACrD,QAAQ,SAAS,EAAE;wBACjB,KAAK,WAAW,CAAC;wBACjB,KAAK,aAAa;4BAChB,OAAO,KAAK,CAAC;wBACf,KAAK,YAAY,CAAC;wBAClB,KAAK,YAAY;4BACf,OAAO,MAAM,CAAC;qBACjB;oBACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;gBACrD,CAAC,CAAC;gBACF,MAAM,0BAA0B,GAAG,CAAC,SAAkB,EAAE,EAAE;oBACxD,QAAQ,SAAS,EAAE;wBACjB,KAAK,WAAW,CAAC;wBACjB,KAAK,YAAY;4BACf,OAAO,MAAM,CAAC;wBAChB,KAAK,aAAa,CAAC;wBACnB,KAAK,YAAY;4BACf,OAAO,OAAO,CAAC;qBAClB;oBACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;gBACrD,CAAC,CAAC;gBACF,MAAM,qBAAqB,GAAG,CAAC,UAAmB,EAAE,EAAE;oBACpD,QAAQ,UAAU,EAAE;wBAClB,KAAK,OAAO;4BACV,OAAO,OAAO,CAAC;wBACjB,KAAK,QAAQ;4BACX,OAAO,QAAQ,CAAC;qBACnB;oBACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;gBACvD,CAAC,CAAC;gBACF,SAAS;gBACT,MAAM,MAAM,GAAG;oBACb,MAAM;oBACN,IAAI,EAAE,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC;oBACpD,YAAY,EAAE,0BAA0B,CAAC,KAAK,CAAC,eAAe,CAAC;oBAC/D,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC;oBAC7C,WAAW,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;oBAC7D,QAAQ,EAAE,KAAK,CAAC,MAAM;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtF,MAAM,WAAW,GAAG,MAAM,YAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,IAAA,aAAO,EAAC,WAAW,CAAC,EAAE;oBACxB,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC;iBACtE;gBACD,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;aAC3E;YACD,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,qBAAqB,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC1E,CAAC,CACF,CAAC;KACH;AACH,CAAC,CAAC,EAAE,CAAC","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { defer, from, map, mergeMap, repeat, retry, shareReplay, toArray } from 'rxjs';\nimport { client, isError } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst memoizeMap = <T extends (...params: any[]) => any>(fn: T): T => {\n const cache: Record<string, any> = {};\n return ((...params: any[]) => (cache[encodePath(params)] ??= fn(...params))) as T;\n};\n\nconst mapSymbolToFuturePremiumIndex$ = defer(() => client.getFuturePremiumIndex({})).pipe(\n repeat({ delay: 1_000 }),\n retry({ delay: 30_000 }),\n mergeMap((x) =>\n from(x).pipe(\n map((v) => [v.symbol, v] as const),\n toArray(),\n map((v) => new Map(v)),\n ),\n ),\n shareReplay(1),\n);\n\nconst mapSymbolToFutureBookTicker$ = defer(() => client.getFutureBookTicker({})).pipe(\n repeat({ delay: 1_000 }),\n retry({ delay: 30_000 }),\n mergeMap((x) =>\n from(x).pipe(\n map((v) => [v.symbol, v] as const),\n toArray(),\n map((v) => new Map(v)),\n ),\n ),\n shareReplay(1),\n);\n\nconst _mapSymbolToOpenInterest: Record<string, { value: number; updated_at: number }> = {};\nconst getOpenInterest = async (symbol: string) => {\n const expired_at = Date.now() - 600_000; // 10min expired\n const cache = _mapSymbolToOpenInterest[symbol];\n if (cache) {\n if (cache.updated_at > expired_at) {\n return cache.value;\n }\n }\n const data = await client.getFutureOpenInterest({ symbol });\n const value = +data.openInterest || 0;\n _mapSymbolToOpenInterest[symbol] = { value, updated_at: Date.now() };\n return value;\n};\n\n// provideTicks(terminal, 'binance', (product_id) => {\n// const [instType, symbol] = decodePath(product_id);\n// if (instType === 'usdt-future') {\n// return combineLatest([mapSymbolToFuturePremiumIndex$, mapSymbolToFutureBookTicker$]).pipe(\n// combineLatestWith(defer(() => getOpenInterest(symbol))),\n// map(([[mapSymbolToFuturePremiumIndex, mapSymbolToFutureBookTicker], openInterestVolume]): ITick => {\n// const premiumIndex = mapSymbolToFuturePremiumIndex.get(symbol);\n// const bookTicker = mapSymbolToFutureBookTicker.get(symbol);\n// if (!premiumIndex) {\n// throw new Error(`Premium Index Not Found: ${symbol}`);\n// }\n// if (!bookTicker) {\n// throw new Error(`Book Ticker Not Found: ${symbol}`);\n// }\n// return {\n// datasource_id: 'binance',\n// product_id,\n// updated_at: Date.now(),\n// price: +premiumIndex.markPrice,\n// ask: +bookTicker.askPrice,\n// bid: +bookTicker.bidPrice,\n// interest_rate_for_long: -+premiumIndex.lastFundingRate,\n// interest_rate_for_short: +premiumIndex.lastFundingRate,\n// settlement_scheduled_at: premiumIndex.nextFundingTime,\n// open_interest: openInterestVolume,\n// };\n// }),\n// );\n// }\n// return EMPTY;\n// });\n\n(async () => {\n const spotAccountInfo = await client.getSpotAccountInfo();\n if (isError(spotAccountInfo)) {\n throw new Error(spotAccountInfo.msg);\n }\n const uid = spotAccountInfo.uid;\n\n const SPOT_ACCOUNT_ID = `binance/${uid}/spot/usdt`;\n const UNIFIED_ACCOUNT_ID = `binance/${uid}/unified/usdt`;\n\n {\n // unified accountInfo\n\n provideAccountInfoService(\n terminal,\n UNIFIED_ACCOUNT_ID,\n async () => {\n const [accountResult, umAccountResult] = await Promise.all([\n client.getUnifiedAccountBalance(),\n client.getUnifiedUmAccount(),\n ]);\n if (isError(accountResult)) {\n throw new Error(accountResult.msg);\n }\n const usdtAssets = accountResult.find((v) => v.asset === 'USDT');\n if (!usdtAssets) {\n throw new Error('USDT not found');\n }\n if (isError(umAccountResult)) {\n throw new Error(umAccountResult.msg);\n }\n const usdtUmAssets = umAccountResult.assets.find((v) => v.asset === 'USDT');\n if (!usdtUmAssets) {\n throw new Error('um USDT not found');\n }\n const equity = +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL;\n const free = equity - +usdtUmAssets.initialMargin;\n\n const positions = umAccountResult.positions\n .filter((v) => +v.positionAmt !== 0)\n .map((v): IPosition => {\n return {\n position_id: `${v.symbol}/${v.positionSide}`,\n datasource_id: 'BINANCE',\n product_id: encodePath('usdt-future', v.symbol),\n direction: v.positionSide,\n volume: +v.positionAmt,\n free_volume: +v.positionAmt,\n position_price: +v.entryPrice,\n closable_price: +v.entryPrice + +v.unrealizedProfit / +v.positionAmt,\n floating_profit: +v.unrealizedProfit,\n valuation: +v.positionAmt * (+v.entryPrice + +v.unrealizedProfit / +v.positionAmt),\n };\n });\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });\n }\n\n {\n // spot account info\n\n provideAccountInfoService(terminal, SPOT_ACCOUNT_ID, async () => {\n const spotAccountResult = await client.getSpotAccountInfo({ omitZeroBalances: true });\n if (isError(spotAccountResult)) {\n throw new Error(spotAccountResult.msg);\n }\n const usdtAssets = spotAccountResult.balances.find((v) => v.asset === 'USDT');\n return {\n money: {\n currency: 'USDT',\n equity: +(usdtAssets?.free || 0),\n free: +(usdtAssets?.free || 0),\n },\n positions: [],\n };\n });\n\n addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'BINANCE/SPOT' });\n }\n\n // transfer\n {\n // spot -> unified\n const SPOT_UNIFIED_NETWORK_ID = `binance/${uid}/spot/unified`;\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n network_id: SPOT_UNIFIED_NETWORK_ID,\n currency: 'USDT',\n address: `unified`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postAssetTransfer({\n type: 'MAIN_PORTFOLIO_MARGIN',\n asset: 'USDT',\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'INIT', message: transferResult.msg };\n }\n return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };\n },\n },\n onEval: async (order) => {\n return { state: 'COMPLETE', received_amount: order.current_amount };\n },\n });\n\n // unified -> spot\n addAccountTransferAddress({\n terminal,\n account_id: UNIFIED_ACCOUNT_ID,\n network_id: SPOT_UNIFIED_NETWORK_ID,\n currency: 'USDT',\n address: `spot`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postAssetTransfer({\n type: 'PORTFOLIO_MARGIN_MAIN',\n asset: 'USDT',\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'INIT', message: transferResult.msg };\n }\n return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };\n },\n },\n onEval: async (order) => {\n return { state: 'COMPLETE', received_amount: order.current_amount };\n },\n });\n\n const subAccountsResult = await client.getSubAccountList();\n const isMain = !isError(subAccountsResult);\n // main -> sub\n // TODO...\n\n // blockchain\n if (isMain) {\n const depositAddressResult = await client.getDepositAddress({ coin: 'USDT', network: 'TRX' });\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n network_id: 'TRC20',\n currency: 'USDT',\n address: depositAddressResult.address,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postWithdraw({\n coin: 'USDT',\n network: 'TRX',\n address: order.current_rx_address!,\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'ERROR', message: transferResult.msg };\n }\n const wdId = transferResult.id;\n return { state: 'PENDING', context: wdId };\n },\n PENDING: async (order) => {\n const wdId = order.current_tx_context;\n const withdrawResult = await client.getWithdrawHistory({ coin: 'USDT' });\n const record = withdrawResult?.find((v) => v.id === wdId);\n const txId = record?.txId;\n if (!txId) {\n return { state: 'PENDING', context: wdId };\n }\n return { state: 'COMPLETE', transaction_id: txId };\n },\n },\n onEval: async (order) => {\n const checkResult = await client.getDepositHistory({\n coin: 'USDT',\n txId: order.current_transaction_id,\n });\n if (checkResult?.[0]?.status !== 1) {\n return { state: 'PENDING' };\n }\n const received_amount = +checkResult[0].amount;\n return { state: 'COMPLETE', received_amount };\n },\n });\n }\n }\n\n // order related\n {\n terminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: { const: UNIFIED_ACCOUNT_ID },\n },\n },\n async (msg) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', msg.req);\n const order = msg.req;\n const [instType, symbol] = decodePath(order.product_id);\n if (instType === 'usdt-future') {\n const mapOrderDirectionToSide = (direction?: string) => {\n switch (direction) {\n case 'OPEN_LONG':\n case 'CLOSE_SHORT':\n return 'BUY';\n case 'OPEN_SHORT':\n case 'CLOSE_LONG':\n return 'SELL';\n }\n throw new Error(`Unknown direction: ${direction}`);\n };\n const mapOrderDirectionToPosSide = (direction?: string) => {\n switch (direction) {\n case 'OPEN_LONG':\n case 'CLOSE_LONG':\n return 'LONG';\n case 'CLOSE_SHORT':\n case 'OPEN_SHORT':\n return 'SHORT';\n }\n throw new Error(`Unknown direction: ${direction}`);\n };\n const mapOrderTypeToOrdType = (order_type?: string) => {\n switch (order_type) {\n case 'LIMIT':\n return 'LIMIT';\n case 'MARKET':\n return 'MARKET';\n }\n throw new Error(`Unknown order type: ${order_type}`);\n };\n // return\n const params = {\n symbol,\n side: mapOrderDirectionToSide(order.order_direction),\n positionSide: mapOrderDirectionToPosSide(order.order_direction),\n type: mapOrderTypeToOrdType(order.order_type),\n timeInForce: order.order_type === 'LIMIT' ? 'GTC' : undefined,\n quantity: order.volume,\n price: order.price,\n };\n\n console.info(formatTime(Date.now()), 'SubmitOrder', 'params', JSON.stringify(params));\n const orderResult = await client.postUmOrder(params);\n if (isError(orderResult)) {\n return { res: { code: orderResult.code, message: orderResult.msg } };\n }\n return { res: { code: 0, message: 'OK', order_id: orderResult.orderId } };\n }\n return { res: { code: 400, message: `unsupported type: ${instType}` } };\n },\n );\n }\n})();\n"]}
|
|
1
|
+
{"version":3,"file":"legacy_index.js","sourceRoot":"","sources":["../src/legacy_index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder, providePendingOrdersService } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { defer, from, map, mergeMap, repeat, retry, shareReplay, toArray } from 'rxjs';\nimport { createHash } from 'crypto';\nimport { client, isError } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst _mapSymbolToOpenInterest: Record<string, { value: number; updated_at: number }> = {};\nconst getOpenInterest = async (symbol: string) => {\n const expired_at = Date.now() - 600_000; // 10min expired\n const cache = _mapSymbolToOpenInterest[symbol];\n if (cache) {\n if (cache.updated_at > expired_at) {\n return cache.value;\n }\n }\n const data = await client.getFutureOpenInterest({ symbol });\n const value = +data.openInterest || 0;\n _mapSymbolToOpenInterest[symbol] = { value, updated_at: Date.now() };\n return value;\n};\n\nconst mapOrderDirectionToSide = (direction?: string) => {\n switch (direction) {\n case 'OPEN_LONG':\n case 'CLOSE_SHORT':\n return 'BUY';\n case 'OPEN_SHORT':\n case 'CLOSE_LONG':\n return 'SELL';\n }\n throw new Error(`Unknown direction: ${direction}`);\n};\n\nconst mapOrderDirectionToPosSide = (direction?: string) => {\n switch (direction) {\n case 'OPEN_LONG':\n case 'CLOSE_LONG':\n return 'LONG';\n case 'OPEN_SHORT':\n case 'CLOSE_SHORT':\n return 'SHORT';\n }\n throw new Error(`Unknown direction: ${direction}`);\n};\n\nconst mapOrderTypeToOrdType = (order_type?: string) => {\n switch (order_type) {\n case 'LIMIT':\n case 'MAKER':\n return 'LIMIT';\n case 'MARKET':\n return 'MARKET';\n }\n throw new Error(`Unknown order type: ${order_type}`);\n};\n\nconst mapBinanceOrderTypeToYuants = (binanceType?: string): IOrder['order_type'] => {\n switch (binanceType) {\n case 'LIMIT':\n return 'LIMIT';\n case 'MARKET':\n return 'MARKET';\n default:\n return 'LIMIT';\n }\n};\n\nconst mapBinanceSideToYuantsDirection = (\n side?: string,\n positionSide?: string,\n): IOrder['order_direction'] | undefined => {\n if (!side || !positionSide) {\n return undefined;\n }\n if (positionSide === 'LONG') {\n return side === 'BUY' ? 'OPEN_LONG' : 'CLOSE_LONG';\n }\n if (positionSide === 'SHORT') {\n return side === 'SELL' ? 'OPEN_SHORT' : 'CLOSE_SHORT';\n }\n return undefined;\n};\n\nconst deriveClientOrderId = (order: IOrder) => {\n if (order.order_id) return `${order.order_id}`;\n if (order.comment) return order.comment;\n const payload = JSON.stringify({\n account_id: order.account_id,\n product_id: order.product_id,\n order_direction: order.order_direction,\n order_type: order.order_type,\n price: order.price,\n volume: order.volume,\n });\n return `YUANTS${createHash('sha256').update(payload).digest('hex').slice(0, 24)}`;\n};\n\n// provideTicks(terminal, 'binance', (product_id) => {\n// const [instType, symbol] = decodePath(product_id);\n// if (instType === 'usdt-future') {\n// return combineLatest([mapSymbolToFuturePremiumIndex$, mapSymbolToFutureBookTicker$]).pipe(\n// combineLatestWith(defer(() => getOpenInterest(symbol))),\n// map(([[mapSymbolToFuturePremiumIndex, mapSymbolToFutureBookTicker], openInterestVolume]): ITick => {\n// const premiumIndex = mapSymbolToFuturePremiumIndex.get(symbol);\n// const bookTicker = mapSymbolToFutureBookTicker.get(symbol);\n// if (!premiumIndex) {\n// throw new Error(`Premium Index Not Found: ${symbol}`);\n// }\n// if (!bookTicker) {\n// throw new Error(`Book Ticker Not Found: ${symbol}`);\n// }\n// return {\n// datasource_id: 'binance',\n// product_id,\n// updated_at: Date.now(),\n// price: +premiumIndex.markPrice,\n// ask: +bookTicker.askPrice,\n// bid: +bookTicker.bidPrice,\n// interest_rate_for_long: -+premiumIndex.lastFundingRate,\n// interest_rate_for_short: +premiumIndex.lastFundingRate,\n// settlement_scheduled_at: premiumIndex.nextFundingTime,\n// open_interest: openInterestVolume,\n// };\n// }),\n// );\n// }\n// return EMPTY;\n// });\n\n(async () => {\n const spotAccountInfo = await client.getSpotAccountInfo();\n if (isError(spotAccountInfo)) {\n throw new Error(spotAccountInfo.msg);\n }\n const uid = spotAccountInfo.uid;\n\n const SPOT_ACCOUNT_ID = `binance/${uid}/spot/usdt`;\n const UNIFIED_ACCOUNT_ID = `binance/${uid}/unified/usdt`;\n\n {\n // unified accountInfo\n\n provideAccountInfoService(\n terminal,\n UNIFIED_ACCOUNT_ID,\n async () => {\n const [accountResult, umAccountResult] = await Promise.all([\n client.getUnifiedAccountBalance(),\n client.getUnifiedUmAccount(),\n ]);\n if (isError(accountResult)) {\n throw new Error(accountResult.msg);\n }\n const usdtAssets = accountResult.find((v) => v.asset === 'USDT');\n if (!usdtAssets) {\n throw new Error('USDT not found');\n }\n if (isError(umAccountResult)) {\n throw new Error(umAccountResult.msg);\n }\n const usdtUmAssets = umAccountResult.assets.find((v) => v.asset === 'USDT');\n if (!usdtUmAssets) {\n throw new Error('um USDT not found');\n }\n const equity = +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL;\n const free = equity - +usdtUmAssets.initialMargin;\n\n const positions = umAccountResult.positions\n .filter((v) => +v.positionAmt !== 0)\n .map((v): IPosition => {\n return {\n position_id: `${v.symbol}/${v.positionSide}`,\n datasource_id: 'BINANCE',\n product_id: encodePath('usdt-future', v.symbol),\n direction: v.positionSide,\n volume: +v.positionAmt,\n free_volume: +v.positionAmt,\n position_price: +v.entryPrice,\n closable_price: +v.entryPrice + +v.unrealizedProfit / +v.positionAmt,\n floating_profit: +v.unrealizedProfit,\n valuation: +v.positionAmt * (+v.entryPrice + +v.unrealizedProfit / +v.positionAmt),\n };\n });\n\n return {\n money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });\n }\n\n {\n // spot account info\n\n provideAccountInfoService(terminal, SPOT_ACCOUNT_ID, async () => {\n const spotAccountResult = await client.getSpotAccountInfo({ omitZeroBalances: true });\n if (isError(spotAccountResult)) {\n throw new Error(spotAccountResult.msg);\n }\n const usdtAssets = spotAccountResult.balances.find((v) => v.asset === 'USDT');\n return {\n money: {\n currency: 'USDT',\n equity: +(usdtAssets?.free || 0),\n free: +(usdtAssets?.free || 0),\n },\n positions: [],\n };\n });\n\n addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'BINANCE/SPOT' });\n }\n\n // transfer\n {\n // spot -> unified\n const SPOT_UNIFIED_NETWORK_ID = `binance/${uid}/spot/unified`;\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n network_id: SPOT_UNIFIED_NETWORK_ID,\n currency: 'USDT',\n address: `unified`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postAssetTransfer({\n type: 'MAIN_PORTFOLIO_MARGIN',\n asset: 'USDT',\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'INIT', message: transferResult.msg };\n }\n return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };\n },\n },\n onEval: async (order) => {\n return { state: 'COMPLETE', received_amount: order.current_amount };\n },\n });\n\n // unified -> spot\n addAccountTransferAddress({\n terminal,\n account_id: UNIFIED_ACCOUNT_ID,\n network_id: SPOT_UNIFIED_NETWORK_ID,\n currency: 'USDT',\n address: `spot`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postAssetTransfer({\n type: 'PORTFOLIO_MARGIN_MAIN',\n asset: 'USDT',\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'INIT', message: transferResult.msg };\n }\n return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };\n },\n },\n onEval: async (order) => {\n return { state: 'COMPLETE', received_amount: order.current_amount };\n },\n });\n\n const subAccountsResult = await client.getSubAccountList();\n const isMain = !isError(subAccountsResult);\n // main -> sub\n // TODO...\n\n // blockchain\n if (isMain) {\n const depositAddressResult = await client.getDepositAddress({ coin: 'USDT', network: 'TRX' });\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n network_id: 'TRC20',\n currency: 'USDT',\n address: depositAddressResult.address,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postWithdraw({\n coin: 'USDT',\n network: 'TRX',\n address: order.current_rx_address!,\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'ERROR', message: transferResult.msg };\n }\n const wdId = transferResult.id;\n return { state: 'PENDING', context: wdId };\n },\n PENDING: async (order) => {\n const wdId = order.current_tx_context;\n const withdrawResult = await client.getWithdrawHistory({ coin: 'USDT' });\n const record = withdrawResult?.find((v) => v.id === wdId);\n const txId = record?.txId;\n if (!txId) {\n return { state: 'PENDING', context: wdId };\n }\n return { state: 'COMPLETE', transaction_id: txId };\n },\n },\n onEval: async (order) => {\n const checkResult = await client.getDepositHistory({\n coin: 'USDT',\n txId: order.current_transaction_id,\n });\n if (checkResult?.[0]?.status !== 1) {\n return { state: 'PENDING' };\n }\n const received_amount = +checkResult[0].amount;\n return { state: 'COMPLETE', received_amount };\n },\n });\n }\n }\n\n // order related\n {\n providePendingOrdersService(\n terminal,\n UNIFIED_ACCOUNT_ID,\n async () => {\n const openOrders = await client.getUnifiedUmOpenOrders();\n return openOrders.map((order): IOrder => {\n const order_direction =\n mapBinanceSideToYuantsDirection(order.side, order.positionSide) ?? 'OPEN_LONG';\n return {\n order_id: `${order.orderId}`,\n account_id: UNIFIED_ACCOUNT_ID,\n product_id: encodePath('usdt-future', order.symbol),\n order_type: mapBinanceOrderTypeToYuants(order.type),\n order_direction,\n volume: +order.origQty,\n traded_volume: +order.executedQty,\n price: order.price === undefined ? undefined : +order.price,\n submit_at: order.time,\n updated_at: new Date(order.updateTime).toISOString(),\n order_status: order.status,\n };\n });\n },\n { auto_refresh_interval: 1000 },\n );\n\n terminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: { const: UNIFIED_ACCOUNT_ID },\n },\n },\n async (msg) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', msg.req);\n const order = msg.req;\n const [instType, symbol] = decodePath(order.product_id);\n if (instType === 'usdt-future') {\n const params = {\n symbol,\n side: mapOrderDirectionToSide(order.order_direction),\n positionSide: mapOrderDirectionToPosSide(order.order_direction),\n type: mapOrderTypeToOrdType(order.order_type),\n timeInForce:\n order.order_type === 'MAKER' ? 'GTX' : order.order_type === 'LIMIT' ? 'GTC' : undefined,\n quantity: order.volume,\n price: order.price,\n newClientOrderId: deriveClientOrderId(order),\n };\n\n console.info(formatTime(Date.now()), 'SubmitOrder', 'params', JSON.stringify(params));\n const orderResult = await client.postUmOrder(params);\n if (isError(orderResult)) {\n return { res: { code: orderResult.code, message: orderResult.msg } };\n }\n return { res: { code: 0, message: 'OK', order_id: orderResult.orderId } };\n }\n return { res: { code: 400, message: `unsupported type: ${instType}` } };\n },\n );\n }\n\n {\n terminal.server.provideService<IOrder>(\n 'CancelOrder',\n {\n required: ['account_id', 'order_id', 'product_id'],\n properties: {\n account_id: { const: UNIFIED_ACCOUNT_ID },\n },\n },\n async (msg) => {\n const order = msg.req;\n if (!order.order_id) {\n return { res: { code: 400, message: 'order_id is required' } };\n }\n const [instType, symbol] = decodePath(order.product_id);\n if (instType !== 'usdt-future') {\n return { res: { code: 400, message: `unsupported type: ${instType}` } };\n }\n const cancelResult = await client.deleteUmOrder({\n symbol,\n orderId: order.order_id,\n });\n if (isError(cancelResult)) {\n return { res: { code: cancelResult.code, message: cancelResult.msg } };\n }\n return { res: { code: 0, message: 'OK' } };\n },\n );\n }\n})();\n"]}
|
package/lib/quote.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":""}
|
package/lib/quote.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const protocol_1 = require("@yuants/protocol");
|
|
4
|
+
const sql_1 = require("@yuants/sql");
|
|
5
|
+
const utils_1 = require("@yuants/utils");
|
|
6
|
+
const rxjs_1 = require("rxjs");
|
|
7
|
+
const api_1 = require("./api");
|
|
8
|
+
const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
9
|
+
const mapSymbolToFuturePremiumIndex$ = (0, rxjs_1.defer)(() => api_1.client.getFuturePremiumIndex({})).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 30000 }), (0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x).pipe((0, rxjs_1.map)((v) => [v.symbol, v]), (0, rxjs_1.toArray)(), (0, rxjs_1.map)((v) => new Map(v)))), (0, rxjs_1.shareReplay)({ bufferSize: 1, refCount: true }));
|
|
10
|
+
const mapSymbolToFutureBookTicker$ = (0, rxjs_1.defer)(() => api_1.client.getFutureBookTicker({})).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 30000 }), (0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x).pipe((0, rxjs_1.map)((v) => [v.symbol, v]), (0, rxjs_1.toArray)(), (0, rxjs_1.map)((v) => new Map(v)))), (0, rxjs_1.shareReplay)({ bufferSize: 1, refCount: true }));
|
|
11
|
+
const quote$ = (0, rxjs_1.combineLatest)([mapSymbolToFuturePremiumIndex$, mapSymbolToFutureBookTicker$]).pipe((0, rxjs_1.mergeMap)(([premiumIndexMap, bookTickerMap]) => (0, rxjs_1.from)([...bookTickerMap.entries()].map(([symbol, ticker]) => ({
|
|
12
|
+
symbol,
|
|
13
|
+
ticker,
|
|
14
|
+
premium: premiumIndexMap.get(symbol),
|
|
15
|
+
})))), (0, rxjs_1.map)(({ symbol, ticker, premium }) => {
|
|
16
|
+
var _a, _b, _c, _d;
|
|
17
|
+
const updatedAt = new Date((_b = (_a = ticker === null || ticker === void 0 ? void 0 : ticker.time) !== null && _a !== void 0 ? _a : premium === null || premium === void 0 ? void 0 : premium.time) !== null && _b !== void 0 ? _b : Date.now()).toISOString();
|
|
18
|
+
return {
|
|
19
|
+
datasource_id: 'BINANCE',
|
|
20
|
+
product_id: (0, utils_1.encodePath)('usdt-future', symbol),
|
|
21
|
+
last_price: (_d = (_c = premium === null || premium === void 0 ? void 0 : premium.markPrice) !== null && _c !== void 0 ? _c : ticker.bidPrice) !== null && _d !== void 0 ? _d : ticker.askPrice,
|
|
22
|
+
bid_price: ticker.bidPrice,
|
|
23
|
+
ask_price: ticker.askPrice,
|
|
24
|
+
updated_at: updatedAt,
|
|
25
|
+
};
|
|
26
|
+
}), (0, rxjs_1.shareReplay)({ bufferSize: 1, refCount: true }));
|
|
27
|
+
if (process.env.WRITE_QUOTE_TO_SQL === 'true') {
|
|
28
|
+
quote$
|
|
29
|
+
.pipe((0, sql_1.writeToSQL)({
|
|
30
|
+
terminal,
|
|
31
|
+
tableName: 'quote',
|
|
32
|
+
writeInterval: 1000,
|
|
33
|
+
conflictKeys: ['datasource_id', 'product_id'],
|
|
34
|
+
}))
|
|
35
|
+
.subscribe();
|
|
36
|
+
terminal.channel.publishChannel('quote', { pattern: '^BINANCE/' }, (channel_id) => {
|
|
37
|
+
const [datasourceId, productId] = (0, utils_1.decodePath)(channel_id);
|
|
38
|
+
if (!datasourceId || !productId) {
|
|
39
|
+
throw new Error(`Invalid channel_id: ${channel_id}`);
|
|
40
|
+
}
|
|
41
|
+
return quote$.pipe((0, rxjs_1.filter)((quote) => quote.product_id === productId));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=quote.js.map
|
package/lib/quote.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/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 } from '@yuants/utils';\nimport { combineLatest, defer, filter, from, map, mergeMap, repeat, retry, shareReplay, toArray } from 'rxjs';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst mapSymbolToFuturePremiumIndex$ = defer(() => client.getFuturePremiumIndex({})).pipe(\n repeat({ delay: 1_000 }),\n retry({ delay: 30_000 }),\n mergeMap((x) =>\n from(x).pipe(\n map((v) => [v.symbol, v] as const),\n toArray(),\n map((v) => new Map(v)),\n ),\n ),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst mapSymbolToFutureBookTicker$ = defer(() => client.getFutureBookTicker({})).pipe(\n repeat({ delay: 1_000 }),\n retry({ delay: 30_000 }),\n mergeMap((x) =>\n from(x).pipe(\n map((v) => [v.symbol, v] as const),\n toArray(),\n map((v) => new Map(v)),\n ),\n ),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst quote$ = combineLatest([mapSymbolToFuturePremiumIndex$, mapSymbolToFutureBookTicker$]).pipe(\n mergeMap(([premiumIndexMap, bookTickerMap]) =>\n from(\n [...bookTickerMap.entries()].map(([symbol, ticker]) => ({\n symbol,\n ticker,\n premium: premiumIndexMap.get(symbol),\n })),\n ),\n ),\n map(({ symbol, ticker, premium }): Partial<IQuote> => {\n const updatedAt = new Date(ticker?.time ?? premium?.time ?? Date.now()).toISOString();\n return {\n datasource_id: 'BINANCE',\n product_id: encodePath('usdt-future', symbol),\n last_price: premium?.markPrice ?? ticker.bidPrice ?? ticker.askPrice,\n bid_price: ticker.bidPrice,\n ask_price: ticker.askPrice,\n updated_at: updatedAt,\n };\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n quote$\n .pipe(\n writeToSQL({\n terminal,\n tableName: 'quote',\n writeInterval: 1_000,\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n\n terminal.channel.publishChannel('quote', { pattern: '^BINANCE/' }, (channel_id) => {\n const [datasourceId, productId] = decodePath(channel_id);\n if (!datasourceId || !productId) {\n throw new Error(`Invalid channel_id: ${channel_id}`);\n }\n return quote$.pipe(filter((quote) => quote.product_id === productId));\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-binance",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"bin": "lib/cli.js",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@yuants/protocol": "0.50.1",
|
|
13
13
|
"@yuants/data-account": "0.6.11",
|
|
14
|
+
"@yuants/data-quote": "0.2.34",
|
|
14
15
|
"@yuants/utils": "0.10.1",
|
|
15
16
|
"@yuants/data-series": "0.3.42",
|
|
16
17
|
"@yuants/sql": "0.9.21",
|
package/temp/package-deps.json
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
"apps/vendor-binance/CHANGELOG.json": "
|
|
3
|
-
"apps/vendor-binance/CHANGELOG.md": "
|
|
2
|
+
"apps/vendor-binance/CHANGELOG.json": "c3d6d7a191e1defbbb448c06b223e085c7cd356a",
|
|
3
|
+
"apps/vendor-binance/CHANGELOG.md": "6b868bb815b5ea6b2d7dddd6a43dc2176f0cc14e",
|
|
4
4
|
"apps/vendor-binance/README.md": "4ab94c08b3d07398aee74c3264a4f87d554d20fa",
|
|
5
5
|
"apps/vendor-binance/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
|
|
6
6
|
"apps/vendor-binance/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
|
|
7
7
|
"apps/vendor-binance/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
|
|
8
8
|
"apps/vendor-binance/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
|
|
9
9
|
"apps/vendor-binance/etc/vendor-binance.api.md": "2094b84e9b5e7503f5c42b31fffee8d7db47fe7b",
|
|
10
|
-
"apps/vendor-binance/package.json": "
|
|
11
|
-
"apps/vendor-binance/src/api.ts": "
|
|
10
|
+
"apps/vendor-binance/package.json": "34d18f882704bbe3dd02249bf711c9a4f00026e6",
|
|
11
|
+
"apps/vendor-binance/src/api.ts": "d66f2c51d13d902085259b80ecd7c421264bf552",
|
|
12
12
|
"apps/vendor-binance/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
|
|
13
|
-
"apps/vendor-binance/src/index.ts": "
|
|
13
|
+
"apps/vendor-binance/src/index.ts": "7573aa8600e289793c2e834dee11fef5a664efae",
|
|
14
14
|
"apps/vendor-binance/src/interest_rate.ts": "ee82ea130495c151b67850a8b90ca972cb8a8d84",
|
|
15
|
-
"apps/vendor-binance/src/legacy_index.ts": "
|
|
15
|
+
"apps/vendor-binance/src/legacy_index.ts": "4a240f03ae64527d1e73ab56af4056529b217ce5",
|
|
16
16
|
"apps/vendor-binance/src/product.ts": "ea88fc2e6d0e57ee01d13131b26eb052d8f29fb7",
|
|
17
|
+
"apps/vendor-binance/src/quote.ts": "781169084d2f95640cc9b9d6421d448e7e587242",
|
|
17
18
|
"apps/vendor-binance/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
18
|
-
"apps/vendor-binance/.rush/temp/shrinkwrap-deps.json": "
|
|
19
|
+
"apps/vendor-binance/.rush/temp/shrinkwrap-deps.json": "979c02b8a8095cd2f0d9ddf068380821e850278f",
|
|
19
20
|
"libraries/protocol/temp/package-deps.json": "0b032cee3e535748f6b18aafc53ebb5d22b93b39",
|
|
20
21
|
"libraries/data-account/temp/package-deps.json": "db21ad5308b662aeb4080aeab2ea1b3ce707fbc3",
|
|
22
|
+
"libraries/data-quote/temp/package-deps.json": "dac628dcc28baf1810f38a9fb293269f943231ea",
|
|
21
23
|
"libraries/utils/temp/package-deps.json": "cb0a4bb6018bb4723b41538c5d8de701976651a9",
|
|
22
24
|
"libraries/data-series/temp/package-deps.json": "705e60258cd1b672ccd5bbd397f96e915dd041fe",
|
|
23
25
|
"libraries/sql/temp/package-deps.json": "9b6f844923fb0890c6b6b340148c36c0c509529f",
|