@yuants/vendor-huobi 0.11.13 → 0.11.15
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/index.js +11 -30
- package/dist/index.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -29
- package/lib/index.js.map +1 -1
- package/package.json +11 -11
- package/temp/package-deps.json +14 -14
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addAccountMarket,
|
|
1
|
+
import { addAccountMarket, provideAccountInfoService } from '@yuants/data-account';
|
|
2
2
|
import { Terminal } from '@yuants/protocol';
|
|
3
3
|
import { addAccountTransferAddress } from '@yuants/transfer';
|
|
4
4
|
import { formatTime, roundToStep } from '@yuants/utils';
|
|
@@ -31,7 +31,7 @@ const terminal = Terminal.fromNodeEnv();
|
|
|
31
31
|
const isMainAccount = subUsersRes.ok;
|
|
32
32
|
console.info(formatTime(Date.now()), 'subAccounts', JSON.stringify(subAccounts));
|
|
33
33
|
const mapProductIdToPerpetualProduct$ = perpetualContractProducts$.pipe(map((x) => new Map(x.map((v) => [v.product_id, v]))), shareReplay(1));
|
|
34
|
-
|
|
34
|
+
provideAccountInfoService(terminal, SWAP_ACCOUNT_ID, async () => {
|
|
35
35
|
// balance
|
|
36
36
|
const balance = await client.getUnifiedAccountInfo();
|
|
37
37
|
if (!balance.data) {
|
|
@@ -111,18 +111,11 @@ const terminal = Terminal.fromNodeEnv();
|
|
|
111
111
|
// orders.push(...pageOrders);
|
|
112
112
|
// page_index++;
|
|
113
113
|
// }
|
|
114
|
-
|
|
115
|
-
updated_at: Date.now(),
|
|
116
|
-
account_id: SWAP_ACCOUNT_ID,
|
|
114
|
+
return {
|
|
117
115
|
money: money,
|
|
118
116
|
positions,
|
|
119
117
|
};
|
|
120
|
-
|
|
121
|
-
}).pipe(repeat({ delay: 1000 }), tap({
|
|
122
|
-
error: (e) => {
|
|
123
|
-
console.error(formatTime(Date.now()), 'perpetualContractAccountInfo', e);
|
|
124
|
-
},
|
|
125
|
-
}), retry({ delay: 1000 }), shareReplay(1));
|
|
118
|
+
}, { auto_refresh_interval: 1000 });
|
|
126
119
|
const superMarginUnifiedRawAccountBalance$ = defer(() => client.getSpotAccountBalance(superMarginAccountUid)).pipe(
|
|
127
120
|
//
|
|
128
121
|
map((res) => res.data), repeat({ delay: 1000 }), tap({
|
|
@@ -155,7 +148,7 @@ const terminal = Terminal.fromNodeEnv();
|
|
|
155
148
|
subscriptions.add(symbol);
|
|
156
149
|
}
|
|
157
150
|
});
|
|
158
|
-
|
|
151
|
+
provideAccountInfoService(terminal, SUPER_MARGIN_ACCOUNT_ID, async () => {
|
|
159
152
|
var _a;
|
|
160
153
|
// get account balance
|
|
161
154
|
const accountBalance = await client.getSpotAccountBalance(superMarginAccountUid);
|
|
@@ -226,21 +219,14 @@ const terminal = Terminal.fromNodeEnv();
|
|
|
226
219
|
free: equity,
|
|
227
220
|
used: 0,
|
|
228
221
|
};
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
account_id: SUPER_MARGIN_ACCOUNT_ID,
|
|
232
|
-
money: money,
|
|
222
|
+
return {
|
|
223
|
+
money,
|
|
233
224
|
positions,
|
|
234
225
|
};
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
error: (e) => {
|
|
238
|
-
console.error(formatTime(Date.now()), 'superMarginAccountInfo', e);
|
|
239
|
-
},
|
|
240
|
-
}), retry({ delay: 5000 }), shareReplay(1));
|
|
241
|
-
const spotRawBalance$ = defer(() => client.getSpotAccountBalance(spotAccountUid)).pipe(repeat({ delay: 1000 }), retry({ delay: 5000 }), shareReplay(1));
|
|
242
|
-
const spotAccountInfo$ = spotRawBalance$.pipe(map((spotBalance) => {
|
|
226
|
+
}, { auto_refresh_interval: 1000 });
|
|
227
|
+
provideAccountInfoService(terminal, SPOT_ACCOUNT_ID, async () => {
|
|
243
228
|
var _a, _b;
|
|
229
|
+
const spotBalance = await client.getSpotAccountBalance(spotAccountUid);
|
|
244
230
|
const balance = +((_b = (_a = spotBalance.data.list.find((v) => v.currency === 'usdt')) === null || _a === void 0 ? void 0 : _a.balance) !== null && _b !== void 0 ? _b : 0);
|
|
245
231
|
const equity = balance;
|
|
246
232
|
const free = equity;
|
|
@@ -253,17 +239,12 @@ const terminal = Terminal.fromNodeEnv();
|
|
|
253
239
|
used: 0,
|
|
254
240
|
};
|
|
255
241
|
return {
|
|
256
|
-
updated_at: Date.now(),
|
|
257
|
-
account_id: SPOT_ACCOUNT_ID,
|
|
258
242
|
money: money,
|
|
259
243
|
positions: [],
|
|
260
244
|
};
|
|
261
|
-
}
|
|
262
|
-
publishAccountInfo(terminal, SPOT_ACCOUNT_ID, spotAccountInfo$);
|
|
245
|
+
}, { auto_refresh_interval: 1000 });
|
|
263
246
|
addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'HUOBI/SPOT' });
|
|
264
|
-
publishAccountInfo(terminal, SUPER_MARGIN_ACCOUNT_ID, superMarginAccountInfo$);
|
|
265
247
|
addAccountMarket(terminal, { account_id: SUPER_MARGIN_ACCOUNT_ID, market_id: 'HUOBI/SUPER-MARGIN' });
|
|
266
|
-
publishAccountInfo(terminal, SWAP_ACCOUNT_ID, perpetualContractAccountInfo$);
|
|
267
248
|
addAccountMarket(terminal, { account_id: SWAP_ACCOUNT_ID, market_id: 'HUOBI/SWAP' });
|
|
268
249
|
// Submit order
|
|
269
250
|
terminal.server.provideService('SubmitOrder', {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addAccountMarket,\n IAccountInfo,\n IAccountMoney,\n IPosition,\n publishAccountInfo,\n} from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { formatTime, roundToStep } from '@yuants/utils';\nimport {\n catchError,\n combineLatestWith,\n defer,\n distinct,\n filter,\n first,\n firstValueFrom,\n from,\n map,\n mergeMap,\n of,\n reduce,\n repeat,\n retry,\n shareReplay,\n tap,\n timeout,\n toArray,\n} from 'rxjs';\nimport { client } from './api';\nimport './interest_rate';\nimport { perpetualContractProducts$, spotProducts$ } from './product';\nimport './quote';\n\nconst terminal = Terminal.fromNodeEnv();\n\n(async () => {\n const swapAccountTypeRes = await client.getSwapUnifiedAccountType();\n if (swapAccountTypeRes.data?.account_type === 1) {\n console.info(\n formatTime(Date.now()),\n 'SwitchingAccountType',\n `previous: ${swapAccountTypeRes.data.account_type}, switching to 2 (unified account)`,\n );\n const switchRes = await client.postSwapSwitchAccountType({ account_type: 2 });\n console.info(formatTime(Date.now()), 'SwitchingAccountType', `current: ${switchRes.data.account_type}`);\n }\n\n const huobiUid: number = (await client.getUid()).data;\n console.info(formatTime(Date.now()), 'UID', huobiUid);\n\n const huobiAccounts = await client.getAccount();\n const superMarginAccountUid = huobiAccounts.data.find((v) => v.type === 'super-margin')?.id!;\n const spotAccountUid = huobiAccounts.data.find((v) => v.type === 'spot')?.id!;\n console.info(formatTime(Date.now()), 'huobiAccount', JSON.stringify(huobiAccounts));\n\n const account_id = `huobi/${huobiUid}`;\n const SPOT_ACCOUNT_ID = `${account_id}/spot/usdt`;\n const SUPER_MARGIN_ACCOUNT_ID = `${account_id}/super-margin`;\n const SWAP_ACCOUNT_ID = `${account_id}/swap`;\n\n const subUsersRes = await client.getSubUserList();\n const subAccounts = subUsersRes.data;\n const isMainAccount = subUsersRes.ok;\n console.info(formatTime(Date.now()), 'subAccounts', JSON.stringify(subAccounts));\n\n const mapProductIdToPerpetualProduct$ = perpetualContractProducts$.pipe(\n map((x) => new Map(x.map((v) => [v.product_id, v]))),\n shareReplay(1),\n );\n\n const perpetualContractAccountInfo$ = defer(async () => {\n // balance\n const balance = await client.getUnifiedAccountInfo();\n if (!balance.data) {\n throw new Error('Failed to get unified account info');\n }\n const balanceData = balance.data.find((v) => v.margin_asset === 'USDT');\n if (!balanceData) {\n throw new Error('No USDT balance found in unified account');\n }\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: balanceData.cross_margin_static,\n equity: balanceData.margin_balance,\n profit: balanceData.cross_profit_unreal,\n free: balanceData.withdraw_available,\n used: balanceData.margin_balance - balanceData.withdraw_available,\n };\n\n // positions\n const positionsRes = await client.getSwapCrossPositionInfo();\n const mapProductIdToPerpetualProduct = await firstValueFrom(mapProductIdToPerpetualProduct$);\n const positions: IPosition[] = (positionsRes.data || []).map((v): IPosition => {\n const product_id = v.contract_code;\n const theProduct = mapProductIdToPerpetualProduct?.get(product_id);\n const valuation = v.volume * v.last_price * (theProduct?.value_scale || 1);\n return {\n position_id: `${v.contract_code}/${v.contract_type}/${v.direction}/${v.margin_mode}`,\n datasource_id: 'HUOBI-SWAP',\n product_id,\n direction: v.direction === 'buy' ? 'LONG' : 'SHORT',\n volume: v.volume,\n free_volume: v.available,\n position_price: v.cost_hold,\n closable_price: v.last_price,\n floating_profit: v.profit_unreal,\n valuation,\n };\n });\n\n // orders\n // const orders: IOrder[] = [];\n // let page_index = 1;\n // const page_size = 50;\n\n // while (true) {\n // const ordersRes = await client.getSwapOpenOrders({ page_index, page_size });\n // if (!ordersRes.data?.orders || ordersRes.data.orders.length === 0) {\n // break;\n // }\n\n // const pageOrders: IOrder[] = ordersRes.data.orders.map((v): IOrder => {\n // return {\n // order_id: v.order_id_str,\n // account_id: SWAP_ACCOUNT_ID,\n // product_id: v.contract_code,\n // order_type: ['lightning'].includes(v.order_price_type)\n // ? 'MARKET'\n // : ['limit', 'opponent', 'post_only', 'optimal_5', 'optimal_10', 'optimal_20'].includes(\n // v.order_price_type,\n // )\n // ? 'LIMIT'\n // : ['fok'].includes(v.order_price_type)\n // ? 'FOK'\n // : v.order_price_type.includes('ioc')\n // ? 'IOC'\n // : 'STOP', // unreachable code\n // order_direction:\n // v.direction === 'open'\n // ? v.offset === 'buy'\n // ? 'OPEN_LONG'\n // : 'OPEN_SHORT'\n // : v.offset === 'buy'\n // ? 'CLOSE_SHORT'\n // : 'CLOSE_LONG',\n // volume: v.volume,\n // submit_at: v.created_at,\n // price: v.price,\n // traded_volume: v.trade_volume,\n // };\n // });\n\n // orders.push(...pageOrders);\n // page_index++;\n // }\n\n const accountInfo: IAccountInfo = {\n updated_at: Date.now(),\n account_id: SWAP_ACCOUNT_ID,\n money: money,\n positions,\n };\n\n return accountInfo;\n }).pipe(\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'perpetualContractAccountInfo', e);\n },\n }),\n retry({ delay: 1000 }),\n shareReplay(1),\n );\n\n const superMarginUnifiedRawAccountBalance$ = defer(() =>\n client.getSpotAccountBalance(superMarginAccountUid),\n ).pipe(\n //\n map((res) => res.data),\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'unifiedRaw', e);\n },\n }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const subscriptions: Set<string> = new Set();\n from(client.spot_ws.connection$).subscribe(() => {\n subscriptions.clear();\n });\n // subscribe the symbols of positions we held\n superMarginUnifiedRawAccountBalance$\n .pipe(\n //\n mergeMap((res) =>\n from(res?.list || []).pipe(\n filter((v) => v.currency !== 'usdt'),\n map((v) => v.currency),\n distinct(),\n toArray(),\n map((v) => new Set(v)),\n ),\n ),\n )\n .subscribe((v: Set<string>) => {\n const toUnsubscribe = [...subscriptions].filter((x) => !v.has(x));\n const toSubscribe = [...v].filter((x) => !subscriptions.has(x));\n\n for (const symbol of toUnsubscribe) {\n client.spot_ws.output$.next({\n unsub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.delete(symbol);\n }\n for (const symbol of toSubscribe) {\n client.spot_ws.output$.next({\n sub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.add(symbol);\n }\n });\n\n const superMarginAccountInfo$ = defer(async () => {\n // get account balance\n const accountBalance = await client.getSpotAccountBalance(superMarginAccountUid);\n const balanceList = accountBalance.data?.list || [];\n\n // calculate usdt balance\n const usdtBalance = balanceList\n .filter((v) => v.currency === 'usdt')\n .reduce((acc, cur) => acc + +cur.balance, 0);\n\n // get positions (non-usdt currencies)\n const positions: IPosition[] = [];\n const nonUsdtCurrencies = balanceList\n .filter((v) => v.currency !== 'usdt')\n .reduce((acc, cur) => {\n const existing = acc.find((item) => item.currency === cur.currency);\n if (existing) {\n existing.balance += +cur.balance;\n } else {\n acc.push({ currency: cur.currency, balance: +cur.balance });\n }\n return acc;\n }, [] as { currency: string; balance: number }[]);\n\n // get prices and create positions\n for (const currencyData of nonUsdtCurrencies) {\n if (currencyData.balance > 0) {\n try {\n // get current price from websocket or fallback to REST API\n let price: number;\n try {\n const tickPrice = await firstValueFrom(\n client.spot_ws.input$.pipe(\n //\n first((v) => v.ch?.includes('ticker') && v.ch?.includes(currencyData.currency) && v.tick),\n map((v): number => v.tick.bid),\n timeout(5000),\n tap({\n error: (e) => {\n subscriptions.clear();\n },\n }),\n ),\n );\n price = tickPrice;\n } catch {\n // fallback to REST API\n const tickerRes = await client.getSpotTick({ symbol: `${currencyData.currency}usdt` });\n price = tickerRes.tick.close;\n }\n\n positions.push({\n position_id: `${currencyData.currency}/usdt/spot`,\n product_id: `${currencyData.currency}usdt`,\n direction: 'LONG',\n volume: currencyData.balance,\n free_volume: currencyData.balance,\n position_price: price,\n closable_price: price,\n floating_profit: 0,\n valuation: currencyData.balance * price,\n });\n } catch (error) {\n console.warn(formatTime(Date.now()), `Failed to get price for ${currencyData.currency}:`, error);\n }\n }\n }\n\n // calculate equity\n const equity = positions.reduce((acc, cur) => acc + cur.closable_price * cur.volume, 0) + usdtBalance;\n\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: equity,\n equity: equity,\n profit: 0,\n free: equity,\n used: 0,\n };\n\n const accountInfo: IAccountInfo = {\n updated_at: Date.now(),\n account_id: SUPER_MARGIN_ACCOUNT_ID,\n money: money,\n positions,\n };\n\n return accountInfo;\n }).pipe(\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'superMarginAccountInfo', e);\n },\n }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const spotRawBalance$ = defer(() => client.getSpotAccountBalance(spotAccountUid)).pipe(\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const spotAccountInfo$ = spotRawBalance$.pipe(\n map((spotBalance): IAccountInfo => {\n const balance = +(spotBalance.data.list.find((v) => v.currency === 'usdt')?.balance ?? 0);\n const equity = balance;\n const free = equity;\n const money: IAccountMoney = {\n currency: 'USDT',\n balance,\n equity,\n profit: 0,\n free,\n used: 0,\n };\n return {\n updated_at: Date.now(),\n account_id: SPOT_ACCOUNT_ID,\n money: money,\n positions: [],\n };\n }),\n shareReplay(1),\n );\n\n publishAccountInfo(terminal, SPOT_ACCOUNT_ID, spotAccountInfo$);\n addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'HUOBI/SPOT' });\n publishAccountInfo(terminal, SUPER_MARGIN_ACCOUNT_ID, superMarginAccountInfo$);\n addAccountMarket(terminal, { account_id: SUPER_MARGIN_ACCOUNT_ID, market_id: 'HUOBI/SUPER-MARGIN' });\n publishAccountInfo(terminal, SWAP_ACCOUNT_ID, perpetualContractAccountInfo$);\n addAccountMarket(terminal, { account_id: SWAP_ACCOUNT_ID, market_id: 'HUOBI/SWAP' });\n\n // Submit order\n terminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: {\n enum: [SUPER_MARGIN_ACCOUNT_ID, SWAP_ACCOUNT_ID],\n },\n },\n },\n (msg) => {\n const { account_id: req_account_id } = msg.req;\n console.info(formatTime(Date.now()), `SubmitOrder for ${account_id}`, JSON.stringify(msg));\n\n if (req_account_id === SWAP_ACCOUNT_ID) {\n return defer(() => client.getSwapCrossPositionInfo()).pipe(\n mergeMap((res) => res.data),\n map((v) => [v.contract_code, v.lever_rate]),\n toArray(),\n map((v) => Object.fromEntries(v)),\n mergeMap((mapContractCodeToRate) => {\n const lever_rate = mapContractCodeToRate[msg.req.product_id] ?? 20;\n const params = {\n contract_code: msg.req.product_id,\n contract_type: 'swap',\n price: msg.req.price,\n volume: msg.req.volume,\n offset:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'OPEN_SHORT'\n ? 'open'\n : 'close',\n direction:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell',\n // dynamically adjust the leverage\n lever_rate,\n order_price_type: msg.req.order_type === 'MARKET' ? 'market' : 'limit',\n };\n return client.postSwapOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.status !== 'ok') {\n return { res: { code: 500, message: v.status } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n }\n // for super-margin orders, we need to denote the amount of usdt to borrow, therefore we need to:\n // 1. get the loanable amount\n // 2. get the current balance\n // 3. get the current price\n // 4. combine the information to submit the order\n return defer(() => client.getCrossMarginLoanInfo()).pipe(\n //\n mergeMap((res) => res.data),\n first((v) => v.currency === 'usdt'),\n map((v) => +v['loanable-amt']),\n combineLatestWith(\n superMarginUnifiedRawAccountBalance$.pipe(\n first(),\n mergeMap((res) =>\n from(res.list).pipe(\n // we only need the amount of usdt that can be used to trade\n filter((v) => v.currency === 'usdt' && v.type === 'trade'),\n reduce((acc, cur) => acc + +cur.balance, 0),\n ),\n ),\n ),\n ),\n combineLatestWith(spotProducts$.pipe(first())),\n mergeMap(async ([[loanable, balance], products]) => {\n const priceRes = await client.getSpotTick({ symbol: msg.req.product_id });\n const theProduct = products.find((v) => v.product_id === msg.req.product_id);\n const price: number = priceRes.tick.close;\n const borrow_amount =\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? Math.max(Math.min(loanable, msg.req.volume * price - balance), 0)\n : undefined;\n const params = {\n symbol: msg.req.product_id,\n 'account-id': '' + superMarginAccountUid,\n // amount: msg.req.type === OrderType.MARKET ? 0 : '' + msg.req.volume,\n // 'market-amount': msg.req.type === OrderType.MARKET ? '' + msg.req.volume : undefined,\n amount:\n '' +\n (msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? roundToStep(msg.req.volume * price, theProduct?.volume_step!)\n : msg.req.volume),\n 'borrow-amount': '' + borrow_amount,\n type: `${\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell'\n }-${'LIMIT' === msg.req.order_type ? 'limit' : 'market'}`,\n 'trade-purpose':\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? '1' // auto borrow\n : '2', // auto repay\n price: msg.req.order_type === 'MARKET' ? undefined : '' + msg.req.price,\n source: 'super-margin-api',\n };\n return client.postSpotOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.success === false) {\n return { res: { code: v.code, message: v.message } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n },\n );\n\n // Update Spot TRC20 Addresses (Only Main Account)\n if (isMainAccount) {\n const res = await client.getSpotAccountDepositAddresses({ currency: 'usdt' });\n const addresses = res.data.filter((v) => v.chain === 'trc20usdt').map((v) => v.address);\n\n for (const address of addresses) {\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n address: address,\n network_id: 'TRC20',\n onApply: {\n INIT: async (order) => {\n const res0 = await client.getV2ReferenceCurrencies({ currency: 'usdt' });\n const fee = res0.data\n .find((v) => v.currency === 'usdt')\n ?.chains.find((v) => v.chain === 'trc20usdt')?.transactFeeWithdraw;\n if (!fee) {\n return { state: 'ERROR', message: 'MISSING FEE' };\n }\n const res = await client.postWithdraw({\n address: order.current_rx_address!,\n amount: '' + (order.expected_amount - +fee),\n currency: 'usdt',\n fee: fee,\n chain: 'trc20usdt',\n });\n if (res.status != 'ok') {\n return { state: 'INIT', message: `${res.status}` };\n }\n return { state: 'PENDING', context: `${res.data}` };\n },\n PENDING: async (order) => {\n if (!order.current_tx_context) {\n return { state: 'ERROR', message: 'MISSING CONTEXT' };\n }\n const wdId = +order.current_tx_context;\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'withdraw',\n from: `${wdId}`,\n });\n const txId = res.data.find((v) => v.id === wdId)?.['tx-hash'];\n if (!txId) {\n return { state: 'PENDING', context: `${wdId}` };\n }\n return {\n state: 'COMPLETE',\n transaction_id: txId,\n };\n },\n },\n onEval: async (order) => {\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'deposit',\n direct: 'next',\n });\n\n const theItem = res.data.find(\n (v) => v['tx-hash'] === order.current_transaction_id && v.state === 'safe',\n );\n if (!theItem) {\n return { state: 'PENDING' };\n }\n return { received_amount: +theItem.amount, state: 'COMPLETE' };\n },\n });\n }\n }\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferInResult = await client.postSuperMarginAccountTransferIn({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferInResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SUPER_MARGIN_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SUPER_MARGIN',\n onApply: {\n INIT: async (order) => {\n const transferOutResult = await client.postSuperMarginAccountTransferOut({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferOutResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'spot',\n to: 'linear-swap',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SWAP_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SWAP',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'linear-swap',\n to: 'spot',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n if (isMainAccount) {\n for (const subAccount of subAccounts) {\n const SPOT_SUB_ACCOUNT_ID = `huobi/${subAccount.uid}/spot/usdt`;\n\n const SUB_ACCOUNT_NETWORK_ID = `Huobi/${huobiUid}/SubAccount/${subAccount.uid}`;\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: '#main',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_rx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-out',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_SUB_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: `${subAccount.uid}`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_tx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-in',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n }\n }\n})();\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { formatTime, roundToStep } from '@yuants/utils';\nimport {\n catchError,\n combineLatestWith,\n defer,\n distinct,\n filter,\n first,\n firstValueFrom,\n from,\n map,\n mergeMap,\n of,\n reduce,\n repeat,\n retry,\n shareReplay,\n tap,\n timeout,\n toArray,\n} from 'rxjs';\nimport { client } from './api';\nimport './interest_rate';\nimport { perpetualContractProducts$, spotProducts$ } from './product';\nimport './quote';\n\nconst terminal = Terminal.fromNodeEnv();\n\n(async () => {\n const swapAccountTypeRes = await client.getSwapUnifiedAccountType();\n if (swapAccountTypeRes.data?.account_type === 1) {\n console.info(\n formatTime(Date.now()),\n 'SwitchingAccountType',\n `previous: ${swapAccountTypeRes.data.account_type}, switching to 2 (unified account)`,\n );\n const switchRes = await client.postSwapSwitchAccountType({ account_type: 2 });\n console.info(formatTime(Date.now()), 'SwitchingAccountType', `current: ${switchRes.data.account_type}`);\n }\n\n const huobiUid: number = (await client.getUid()).data;\n console.info(formatTime(Date.now()), 'UID', huobiUid);\n\n const huobiAccounts = await client.getAccount();\n const superMarginAccountUid = huobiAccounts.data.find((v) => v.type === 'super-margin')?.id!;\n const spotAccountUid = huobiAccounts.data.find((v) => v.type === 'spot')?.id!;\n console.info(formatTime(Date.now()), 'huobiAccount', JSON.stringify(huobiAccounts));\n\n const account_id = `huobi/${huobiUid}`;\n const SPOT_ACCOUNT_ID = `${account_id}/spot/usdt`;\n const SUPER_MARGIN_ACCOUNT_ID = `${account_id}/super-margin`;\n const SWAP_ACCOUNT_ID = `${account_id}/swap`;\n\n const subUsersRes = await client.getSubUserList();\n const subAccounts = subUsersRes.data;\n const isMainAccount = subUsersRes.ok;\n console.info(formatTime(Date.now()), 'subAccounts', JSON.stringify(subAccounts));\n\n const mapProductIdToPerpetualProduct$ = perpetualContractProducts$.pipe(\n map((x) => new Map(x.map((v) => [v.product_id, v]))),\n shareReplay(1),\n );\n\n provideAccountInfoService(\n terminal,\n SWAP_ACCOUNT_ID,\n async () => {\n // balance\n const balance = await client.getUnifiedAccountInfo();\n if (!balance.data) {\n throw new Error('Failed to get unified account info');\n }\n const balanceData = balance.data.find((v) => v.margin_asset === 'USDT');\n if (!balanceData) {\n throw new Error('No USDT balance found in unified account');\n }\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: balanceData.cross_margin_static,\n equity: balanceData.margin_balance,\n profit: balanceData.cross_profit_unreal,\n free: balanceData.withdraw_available,\n used: balanceData.margin_balance - balanceData.withdraw_available,\n };\n\n // positions\n const positionsRes = await client.getSwapCrossPositionInfo();\n const mapProductIdToPerpetualProduct = await firstValueFrom(mapProductIdToPerpetualProduct$);\n const positions: IPosition[] = (positionsRes.data || []).map((v): IPosition => {\n const product_id = v.contract_code;\n const theProduct = mapProductIdToPerpetualProduct?.get(product_id);\n const valuation = v.volume * v.last_price * (theProduct?.value_scale || 1);\n return {\n position_id: `${v.contract_code}/${v.contract_type}/${v.direction}/${v.margin_mode}`,\n datasource_id: 'HUOBI-SWAP',\n product_id,\n direction: v.direction === 'buy' ? 'LONG' : 'SHORT',\n volume: v.volume,\n free_volume: v.available,\n position_price: v.cost_hold,\n closable_price: v.last_price,\n floating_profit: v.profit_unreal,\n valuation,\n };\n });\n\n // orders\n // const orders: IOrder[] = [];\n // let page_index = 1;\n // const page_size = 50;\n\n // while (true) {\n // const ordersRes = await client.getSwapOpenOrders({ page_index, page_size });\n // if (!ordersRes.data?.orders || ordersRes.data.orders.length === 0) {\n // break;\n // }\n\n // const pageOrders: IOrder[] = ordersRes.data.orders.map((v): IOrder => {\n // return {\n // order_id: v.order_id_str,\n // account_id: SWAP_ACCOUNT_ID,\n // product_id: v.contract_code,\n // order_type: ['lightning'].includes(v.order_price_type)\n // ? 'MARKET'\n // : ['limit', 'opponent', 'post_only', 'optimal_5', 'optimal_10', 'optimal_20'].includes(\n // v.order_price_type,\n // )\n // ? 'LIMIT'\n // : ['fok'].includes(v.order_price_type)\n // ? 'FOK'\n // : v.order_price_type.includes('ioc')\n // ? 'IOC'\n // : 'STOP', // unreachable code\n // order_direction:\n // v.direction === 'open'\n // ? v.offset === 'buy'\n // ? 'OPEN_LONG'\n // : 'OPEN_SHORT'\n // : v.offset === 'buy'\n // ? 'CLOSE_SHORT'\n // : 'CLOSE_LONG',\n // volume: v.volume,\n // submit_at: v.created_at,\n // price: v.price,\n // traded_volume: v.trade_volume,\n // };\n // });\n\n // orders.push(...pageOrders);\n // page_index++;\n // }\n\n return {\n money: money,\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n const superMarginUnifiedRawAccountBalance$ = defer(() =>\n client.getSpotAccountBalance(superMarginAccountUid),\n ).pipe(\n //\n map((res) => res.data),\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'unifiedRaw', e);\n },\n }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const subscriptions: Set<string> = new Set();\n from(client.spot_ws.connection$).subscribe(() => {\n subscriptions.clear();\n });\n // subscribe the symbols of positions we held\n superMarginUnifiedRawAccountBalance$\n .pipe(\n //\n mergeMap((res) =>\n from(res?.list || []).pipe(\n filter((v) => v.currency !== 'usdt'),\n map((v) => v.currency),\n distinct(),\n toArray(),\n map((v) => new Set(v)),\n ),\n ),\n )\n .subscribe((v: Set<string>) => {\n const toUnsubscribe = [...subscriptions].filter((x) => !v.has(x));\n const toSubscribe = [...v].filter((x) => !subscriptions.has(x));\n\n for (const symbol of toUnsubscribe) {\n client.spot_ws.output$.next({\n unsub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.delete(symbol);\n }\n for (const symbol of toSubscribe) {\n client.spot_ws.output$.next({\n sub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.add(symbol);\n }\n });\n\n provideAccountInfoService(\n terminal,\n SUPER_MARGIN_ACCOUNT_ID,\n async () => {\n // get account balance\n const accountBalance = await client.getSpotAccountBalance(superMarginAccountUid);\n const balanceList = accountBalance.data?.list || [];\n\n // calculate usdt balance\n const usdtBalance = balanceList\n .filter((v) => v.currency === 'usdt')\n .reduce((acc, cur) => acc + +cur.balance, 0);\n\n // get positions (non-usdt currencies)\n const positions: IPosition[] = [];\n const nonUsdtCurrencies = balanceList\n .filter((v) => v.currency !== 'usdt')\n .reduce((acc, cur) => {\n const existing = acc.find((item) => item.currency === cur.currency);\n if (existing) {\n existing.balance += +cur.balance;\n } else {\n acc.push({ currency: cur.currency, balance: +cur.balance });\n }\n return acc;\n }, [] as { currency: string; balance: number }[]);\n\n // get prices and create positions\n for (const currencyData of nonUsdtCurrencies) {\n if (currencyData.balance > 0) {\n try {\n // get current price from websocket or fallback to REST API\n let price: number;\n try {\n const tickPrice = await firstValueFrom(\n client.spot_ws.input$.pipe(\n //\n first((v) => v.ch?.includes('ticker') && v.ch?.includes(currencyData.currency) && v.tick),\n map((v): number => v.tick.bid),\n timeout(5000),\n tap({\n error: (e) => {\n subscriptions.clear();\n },\n }),\n ),\n );\n price = tickPrice;\n } catch {\n // fallback to REST API\n const tickerRes = await client.getSpotTick({ symbol: `${currencyData.currency}usdt` });\n price = tickerRes.tick.close;\n }\n\n positions.push({\n position_id: `${currencyData.currency}/usdt/spot`,\n product_id: `${currencyData.currency}usdt`,\n direction: 'LONG',\n volume: currencyData.balance,\n free_volume: currencyData.balance,\n position_price: price,\n closable_price: price,\n floating_profit: 0,\n valuation: currencyData.balance * price,\n });\n } catch (error) {\n console.warn(formatTime(Date.now()), `Failed to get price for ${currencyData.currency}:`, error);\n }\n }\n }\n\n // calculate equity\n const equity = positions.reduce((acc, cur) => acc + cur.closable_price * cur.volume, 0) + usdtBalance;\n\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: equity,\n equity: equity,\n profit: 0,\n free: equity,\n used: 0,\n };\n\n return {\n money,\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n provideAccountInfoService(\n terminal,\n SPOT_ACCOUNT_ID,\n async () => {\n const spotBalance = await client.getSpotAccountBalance(spotAccountUid);\n\n const balance = +(spotBalance.data.list.find((v) => v.currency === 'usdt')?.balance ?? 0);\n const equity = balance;\n const free = equity;\n const money: IAccountMoney = {\n currency: 'USDT',\n balance,\n equity,\n profit: 0,\n free,\n used: 0,\n };\n return {\n money: money,\n positions: [],\n };\n },\n { auto_refresh_interval: 1000 },\n );\n addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'HUOBI/SPOT' });\n addAccountMarket(terminal, { account_id: SUPER_MARGIN_ACCOUNT_ID, market_id: 'HUOBI/SUPER-MARGIN' });\n addAccountMarket(terminal, { account_id: SWAP_ACCOUNT_ID, market_id: 'HUOBI/SWAP' });\n\n // Submit order\n terminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: {\n enum: [SUPER_MARGIN_ACCOUNT_ID, SWAP_ACCOUNT_ID],\n },\n },\n },\n (msg) => {\n const { account_id: req_account_id } = msg.req;\n console.info(formatTime(Date.now()), `SubmitOrder for ${account_id}`, JSON.stringify(msg));\n\n if (req_account_id === SWAP_ACCOUNT_ID) {\n return defer(() => client.getSwapCrossPositionInfo()).pipe(\n mergeMap((res) => res.data),\n map((v) => [v.contract_code, v.lever_rate]),\n toArray(),\n map((v) => Object.fromEntries(v)),\n mergeMap((mapContractCodeToRate) => {\n const lever_rate = mapContractCodeToRate[msg.req.product_id] ?? 20;\n const params = {\n contract_code: msg.req.product_id,\n contract_type: 'swap',\n price: msg.req.price,\n volume: msg.req.volume,\n offset:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'OPEN_SHORT'\n ? 'open'\n : 'close',\n direction:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell',\n // dynamically adjust the leverage\n lever_rate,\n order_price_type: msg.req.order_type === 'MARKET' ? 'market' : 'limit',\n };\n return client.postSwapOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.status !== 'ok') {\n return { res: { code: 500, message: v.status } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n }\n // for super-margin orders, we need to denote the amount of usdt to borrow, therefore we need to:\n // 1. get the loanable amount\n // 2. get the current balance\n // 3. get the current price\n // 4. combine the information to submit the order\n return defer(() => client.getCrossMarginLoanInfo()).pipe(\n //\n mergeMap((res) => res.data),\n first((v) => v.currency === 'usdt'),\n map((v) => +v['loanable-amt']),\n combineLatestWith(\n superMarginUnifiedRawAccountBalance$.pipe(\n first(),\n mergeMap((res) =>\n from(res.list).pipe(\n // we only need the amount of usdt that can be used to trade\n filter((v) => v.currency === 'usdt' && v.type === 'trade'),\n reduce((acc, cur) => acc + +cur.balance, 0),\n ),\n ),\n ),\n ),\n combineLatestWith(spotProducts$.pipe(first())),\n mergeMap(async ([[loanable, balance], products]) => {\n const priceRes = await client.getSpotTick({ symbol: msg.req.product_id });\n const theProduct = products.find((v) => v.product_id === msg.req.product_id);\n const price: number = priceRes.tick.close;\n const borrow_amount =\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? Math.max(Math.min(loanable, msg.req.volume * price - balance), 0)\n : undefined;\n const params = {\n symbol: msg.req.product_id,\n 'account-id': '' + superMarginAccountUid,\n // amount: msg.req.type === OrderType.MARKET ? 0 : '' + msg.req.volume,\n // 'market-amount': msg.req.type === OrderType.MARKET ? '' + msg.req.volume : undefined,\n amount:\n '' +\n (msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? roundToStep(msg.req.volume * price, theProduct?.volume_step!)\n : msg.req.volume),\n 'borrow-amount': '' + borrow_amount,\n type: `${\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell'\n }-${'LIMIT' === msg.req.order_type ? 'limit' : 'market'}`,\n 'trade-purpose':\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? '1' // auto borrow\n : '2', // auto repay\n price: msg.req.order_type === 'MARKET' ? undefined : '' + msg.req.price,\n source: 'super-margin-api',\n };\n return client.postSpotOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.success === false) {\n return { res: { code: v.code, message: v.message } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n },\n );\n\n // Update Spot TRC20 Addresses (Only Main Account)\n if (isMainAccount) {\n const res = await client.getSpotAccountDepositAddresses({ currency: 'usdt' });\n const addresses = res.data.filter((v) => v.chain === 'trc20usdt').map((v) => v.address);\n\n for (const address of addresses) {\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n address: address,\n network_id: 'TRC20',\n onApply: {\n INIT: async (order) => {\n const res0 = await client.getV2ReferenceCurrencies({ currency: 'usdt' });\n const fee = res0.data\n .find((v) => v.currency === 'usdt')\n ?.chains.find((v) => v.chain === 'trc20usdt')?.transactFeeWithdraw;\n if (!fee) {\n return { state: 'ERROR', message: 'MISSING FEE' };\n }\n const res = await client.postWithdraw({\n address: order.current_rx_address!,\n amount: '' + (order.expected_amount - +fee),\n currency: 'usdt',\n fee: fee,\n chain: 'trc20usdt',\n });\n if (res.status != 'ok') {\n return { state: 'INIT', message: `${res.status}` };\n }\n return { state: 'PENDING', context: `${res.data}` };\n },\n PENDING: async (order) => {\n if (!order.current_tx_context) {\n return { state: 'ERROR', message: 'MISSING CONTEXT' };\n }\n const wdId = +order.current_tx_context;\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'withdraw',\n from: `${wdId}`,\n });\n const txId = res.data.find((v) => v.id === wdId)?.['tx-hash'];\n if (!txId) {\n return { state: 'PENDING', context: `${wdId}` };\n }\n return {\n state: 'COMPLETE',\n transaction_id: txId,\n };\n },\n },\n onEval: async (order) => {\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'deposit',\n direct: 'next',\n });\n\n const theItem = res.data.find(\n (v) => v['tx-hash'] === order.current_transaction_id && v.state === 'safe',\n );\n if (!theItem) {\n return { state: 'PENDING' };\n }\n return { received_amount: +theItem.amount, state: 'COMPLETE' };\n },\n });\n }\n }\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferInResult = await client.postSuperMarginAccountTransferIn({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferInResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SUPER_MARGIN_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SUPER_MARGIN',\n onApply: {\n INIT: async (order) => {\n const transferOutResult = await client.postSuperMarginAccountTransferOut({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferOutResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'spot',\n to: 'linear-swap',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SWAP_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SWAP',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'linear-swap',\n to: 'spot',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n if (isMainAccount) {\n for (const subAccount of subAccounts) {\n const SPOT_SUB_ACCOUNT_ID = `huobi/${subAccount.uid}/spot/usdt`;\n\n const SUB_ACCOUNT_NETWORK_ID = `Huobi/${huobiUid}/SubAccount/${subAccount.uid}`;\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: '#main',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_rx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-out',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_SUB_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: `${subAccount.uid}`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_tx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-in',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n }\n }\n})();\n"]}
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA0BA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,SAAS,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -33,7 +33,7 @@ const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
|
33
33
|
const isMainAccount = subUsersRes.ok;
|
|
34
34
|
console.info((0, utils_1.formatTime)(Date.now()), 'subAccounts', JSON.stringify(subAccounts));
|
|
35
35
|
const mapProductIdToPerpetualProduct$ = product_1.perpetualContractProducts$.pipe((0, rxjs_1.map)((x) => new Map(x.map((v) => [v.product_id, v]))), (0, rxjs_1.shareReplay)(1));
|
|
36
|
-
|
|
36
|
+
(0, data_account_1.provideAccountInfoService)(terminal, SWAP_ACCOUNT_ID, async () => {
|
|
37
37
|
// balance
|
|
38
38
|
const balance = await api_1.client.getUnifiedAccountInfo();
|
|
39
39
|
if (!balance.data) {
|
|
@@ -113,18 +113,11 @@ const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
|
113
113
|
// orders.push(...pageOrders);
|
|
114
114
|
// page_index++;
|
|
115
115
|
// }
|
|
116
|
-
|
|
117
|
-
updated_at: Date.now(),
|
|
118
|
-
account_id: SWAP_ACCOUNT_ID,
|
|
116
|
+
return {
|
|
119
117
|
money: money,
|
|
120
118
|
positions,
|
|
121
119
|
};
|
|
122
|
-
|
|
123
|
-
}).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.tap)({
|
|
124
|
-
error: (e) => {
|
|
125
|
-
console.error((0, utils_1.formatTime)(Date.now()), 'perpetualContractAccountInfo', e);
|
|
126
|
-
},
|
|
127
|
-
}), (0, rxjs_1.retry)({ delay: 1000 }), (0, rxjs_1.shareReplay)(1));
|
|
120
|
+
}, { auto_refresh_interval: 1000 });
|
|
128
121
|
const superMarginUnifiedRawAccountBalance$ = (0, rxjs_1.defer)(() => api_1.client.getSpotAccountBalance(superMarginAccountUid)).pipe(
|
|
129
122
|
//
|
|
130
123
|
(0, rxjs_1.map)((res) => res.data), (0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.tap)({
|
|
@@ -157,7 +150,7 @@ const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
|
157
150
|
subscriptions.add(symbol);
|
|
158
151
|
}
|
|
159
152
|
});
|
|
160
|
-
|
|
153
|
+
(0, data_account_1.provideAccountInfoService)(terminal, SUPER_MARGIN_ACCOUNT_ID, async () => {
|
|
161
154
|
var _a;
|
|
162
155
|
// get account balance
|
|
163
156
|
const accountBalance = await api_1.client.getSpotAccountBalance(superMarginAccountUid);
|
|
@@ -228,21 +221,14 @@ const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
|
228
221
|
free: equity,
|
|
229
222
|
used: 0,
|
|
230
223
|
};
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
account_id: SUPER_MARGIN_ACCOUNT_ID,
|
|
234
|
-
money: money,
|
|
224
|
+
return {
|
|
225
|
+
money,
|
|
235
226
|
positions,
|
|
236
227
|
};
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
error: (e) => {
|
|
240
|
-
console.error((0, utils_1.formatTime)(Date.now()), 'superMarginAccountInfo', e);
|
|
241
|
-
},
|
|
242
|
-
}), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.shareReplay)(1));
|
|
243
|
-
const spotRawBalance$ = (0, rxjs_1.defer)(() => api_1.client.getSpotAccountBalance(spotAccountUid)).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.shareReplay)(1));
|
|
244
|
-
const spotAccountInfo$ = spotRawBalance$.pipe((0, rxjs_1.map)((spotBalance) => {
|
|
228
|
+
}, { auto_refresh_interval: 1000 });
|
|
229
|
+
(0, data_account_1.provideAccountInfoService)(terminal, SPOT_ACCOUNT_ID, async () => {
|
|
245
230
|
var _a, _b;
|
|
231
|
+
const spotBalance = await api_1.client.getSpotAccountBalance(spotAccountUid);
|
|
246
232
|
const balance = +((_b = (_a = spotBalance.data.list.find((v) => v.currency === 'usdt')) === null || _a === void 0 ? void 0 : _a.balance) !== null && _b !== void 0 ? _b : 0);
|
|
247
233
|
const equity = balance;
|
|
248
234
|
const free = equity;
|
|
@@ -255,17 +241,12 @@ const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
|
255
241
|
used: 0,
|
|
256
242
|
};
|
|
257
243
|
return {
|
|
258
|
-
updated_at: Date.now(),
|
|
259
|
-
account_id: SPOT_ACCOUNT_ID,
|
|
260
244
|
money: money,
|
|
261
245
|
positions: [],
|
|
262
246
|
};
|
|
263
|
-
}
|
|
264
|
-
(0, data_account_1.publishAccountInfo)(terminal, SPOT_ACCOUNT_ID, spotAccountInfo$);
|
|
247
|
+
}, { auto_refresh_interval: 1000 });
|
|
265
248
|
(0, data_account_1.addAccountMarket)(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'HUOBI/SPOT' });
|
|
266
|
-
(0, data_account_1.publishAccountInfo)(terminal, SUPER_MARGIN_ACCOUNT_ID, superMarginAccountInfo$);
|
|
267
249
|
(0, data_account_1.addAccountMarket)(terminal, { account_id: SUPER_MARGIN_ACCOUNT_ID, market_id: 'HUOBI/SUPER-MARGIN' });
|
|
268
|
-
(0, data_account_1.publishAccountInfo)(terminal, SWAP_ACCOUNT_ID, perpetualContractAccountInfo$);
|
|
269
250
|
(0, data_account_1.addAccountMarket)(terminal, { account_id: SWAP_ACCOUNT_ID, market_id: 'HUOBI/SWAP' });
|
|
270
251
|
// Submit order
|
|
271
252
|
terminal.server.provideService('SubmitOrder', {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addAccountMarket,\n IAccountInfo,\n IAccountMoney,\n IPosition,\n publishAccountInfo,\n} from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { formatTime, roundToStep } from '@yuants/utils';\nimport {\n catchError,\n combineLatestWith,\n defer,\n distinct,\n filter,\n first,\n firstValueFrom,\n from,\n map,\n mergeMap,\n of,\n reduce,\n repeat,\n retry,\n shareReplay,\n tap,\n timeout,\n toArray,\n} from 'rxjs';\nimport { client } from './api';\nimport './interest_rate';\nimport { perpetualContractProducts$, spotProducts$ } from './product';\nimport './quote';\n\nconst terminal = Terminal.fromNodeEnv();\n\n(async () => {\n const swapAccountTypeRes = await client.getSwapUnifiedAccountType();\n if (swapAccountTypeRes.data?.account_type === 1) {\n console.info(\n formatTime(Date.now()),\n 'SwitchingAccountType',\n `previous: ${swapAccountTypeRes.data.account_type}, switching to 2 (unified account)`,\n );\n const switchRes = await client.postSwapSwitchAccountType({ account_type: 2 });\n console.info(formatTime(Date.now()), 'SwitchingAccountType', `current: ${switchRes.data.account_type}`);\n }\n\n const huobiUid: number = (await client.getUid()).data;\n console.info(formatTime(Date.now()), 'UID', huobiUid);\n\n const huobiAccounts = await client.getAccount();\n const superMarginAccountUid = huobiAccounts.data.find((v) => v.type === 'super-margin')?.id!;\n const spotAccountUid = huobiAccounts.data.find((v) => v.type === 'spot')?.id!;\n console.info(formatTime(Date.now()), 'huobiAccount', JSON.stringify(huobiAccounts));\n\n const account_id = `huobi/${huobiUid}`;\n const SPOT_ACCOUNT_ID = `${account_id}/spot/usdt`;\n const SUPER_MARGIN_ACCOUNT_ID = `${account_id}/super-margin`;\n const SWAP_ACCOUNT_ID = `${account_id}/swap`;\n\n const subUsersRes = await client.getSubUserList();\n const subAccounts = subUsersRes.data;\n const isMainAccount = subUsersRes.ok;\n console.info(formatTime(Date.now()), 'subAccounts', JSON.stringify(subAccounts));\n\n const mapProductIdToPerpetualProduct$ = perpetualContractProducts$.pipe(\n map((x) => new Map(x.map((v) => [v.product_id, v]))),\n shareReplay(1),\n );\n\n const perpetualContractAccountInfo$ = defer(async () => {\n // balance\n const balance = await client.getUnifiedAccountInfo();\n if (!balance.data) {\n throw new Error('Failed to get unified account info');\n }\n const balanceData = balance.data.find((v) => v.margin_asset === 'USDT');\n if (!balanceData) {\n throw new Error('No USDT balance found in unified account');\n }\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: balanceData.cross_margin_static,\n equity: balanceData.margin_balance,\n profit: balanceData.cross_profit_unreal,\n free: balanceData.withdraw_available,\n used: balanceData.margin_balance - balanceData.withdraw_available,\n };\n\n // positions\n const positionsRes = await client.getSwapCrossPositionInfo();\n const mapProductIdToPerpetualProduct = await firstValueFrom(mapProductIdToPerpetualProduct$);\n const positions: IPosition[] = (positionsRes.data || []).map((v): IPosition => {\n const product_id = v.contract_code;\n const theProduct = mapProductIdToPerpetualProduct?.get(product_id);\n const valuation = v.volume * v.last_price * (theProduct?.value_scale || 1);\n return {\n position_id: `${v.contract_code}/${v.contract_type}/${v.direction}/${v.margin_mode}`,\n datasource_id: 'HUOBI-SWAP',\n product_id,\n direction: v.direction === 'buy' ? 'LONG' : 'SHORT',\n volume: v.volume,\n free_volume: v.available,\n position_price: v.cost_hold,\n closable_price: v.last_price,\n floating_profit: v.profit_unreal,\n valuation,\n };\n });\n\n // orders\n // const orders: IOrder[] = [];\n // let page_index = 1;\n // const page_size = 50;\n\n // while (true) {\n // const ordersRes = await client.getSwapOpenOrders({ page_index, page_size });\n // if (!ordersRes.data?.orders || ordersRes.data.orders.length === 0) {\n // break;\n // }\n\n // const pageOrders: IOrder[] = ordersRes.data.orders.map((v): IOrder => {\n // return {\n // order_id: v.order_id_str,\n // account_id: SWAP_ACCOUNT_ID,\n // product_id: v.contract_code,\n // order_type: ['lightning'].includes(v.order_price_type)\n // ? 'MARKET'\n // : ['limit', 'opponent', 'post_only', 'optimal_5', 'optimal_10', 'optimal_20'].includes(\n // v.order_price_type,\n // )\n // ? 'LIMIT'\n // : ['fok'].includes(v.order_price_type)\n // ? 'FOK'\n // : v.order_price_type.includes('ioc')\n // ? 'IOC'\n // : 'STOP', // unreachable code\n // order_direction:\n // v.direction === 'open'\n // ? v.offset === 'buy'\n // ? 'OPEN_LONG'\n // : 'OPEN_SHORT'\n // : v.offset === 'buy'\n // ? 'CLOSE_SHORT'\n // : 'CLOSE_LONG',\n // volume: v.volume,\n // submit_at: v.created_at,\n // price: v.price,\n // traded_volume: v.trade_volume,\n // };\n // });\n\n // orders.push(...pageOrders);\n // page_index++;\n // }\n\n const accountInfo: IAccountInfo = {\n updated_at: Date.now(),\n account_id: SWAP_ACCOUNT_ID,\n money: money,\n positions,\n };\n\n return accountInfo;\n }).pipe(\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'perpetualContractAccountInfo', e);\n },\n }),\n retry({ delay: 1000 }),\n shareReplay(1),\n );\n\n const superMarginUnifiedRawAccountBalance$ = defer(() =>\n client.getSpotAccountBalance(superMarginAccountUid),\n ).pipe(\n //\n map((res) => res.data),\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'unifiedRaw', e);\n },\n }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const subscriptions: Set<string> = new Set();\n from(client.spot_ws.connection$).subscribe(() => {\n subscriptions.clear();\n });\n // subscribe the symbols of positions we held\n superMarginUnifiedRawAccountBalance$\n .pipe(\n //\n mergeMap((res) =>\n from(res?.list || []).pipe(\n filter((v) => v.currency !== 'usdt'),\n map((v) => v.currency),\n distinct(),\n toArray(),\n map((v) => new Set(v)),\n ),\n ),\n )\n .subscribe((v: Set<string>) => {\n const toUnsubscribe = [...subscriptions].filter((x) => !v.has(x));\n const toSubscribe = [...v].filter((x) => !subscriptions.has(x));\n\n for (const symbol of toUnsubscribe) {\n client.spot_ws.output$.next({\n unsub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.delete(symbol);\n }\n for (const symbol of toSubscribe) {\n client.spot_ws.output$.next({\n sub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.add(symbol);\n }\n });\n\n const superMarginAccountInfo$ = defer(async () => {\n // get account balance\n const accountBalance = await client.getSpotAccountBalance(superMarginAccountUid);\n const balanceList = accountBalance.data?.list || [];\n\n // calculate usdt balance\n const usdtBalance = balanceList\n .filter((v) => v.currency === 'usdt')\n .reduce((acc, cur) => acc + +cur.balance, 0);\n\n // get positions (non-usdt currencies)\n const positions: IPosition[] = [];\n const nonUsdtCurrencies = balanceList\n .filter((v) => v.currency !== 'usdt')\n .reduce((acc, cur) => {\n const existing = acc.find((item) => item.currency === cur.currency);\n if (existing) {\n existing.balance += +cur.balance;\n } else {\n acc.push({ currency: cur.currency, balance: +cur.balance });\n }\n return acc;\n }, [] as { currency: string; balance: number }[]);\n\n // get prices and create positions\n for (const currencyData of nonUsdtCurrencies) {\n if (currencyData.balance > 0) {\n try {\n // get current price from websocket or fallback to REST API\n let price: number;\n try {\n const tickPrice = await firstValueFrom(\n client.spot_ws.input$.pipe(\n //\n first((v) => v.ch?.includes('ticker') && v.ch?.includes(currencyData.currency) && v.tick),\n map((v): number => v.tick.bid),\n timeout(5000),\n tap({\n error: (e) => {\n subscriptions.clear();\n },\n }),\n ),\n );\n price = tickPrice;\n } catch {\n // fallback to REST API\n const tickerRes = await client.getSpotTick({ symbol: `${currencyData.currency}usdt` });\n price = tickerRes.tick.close;\n }\n\n positions.push({\n position_id: `${currencyData.currency}/usdt/spot`,\n product_id: `${currencyData.currency}usdt`,\n direction: 'LONG',\n volume: currencyData.balance,\n free_volume: currencyData.balance,\n position_price: price,\n closable_price: price,\n floating_profit: 0,\n valuation: currencyData.balance * price,\n });\n } catch (error) {\n console.warn(formatTime(Date.now()), `Failed to get price for ${currencyData.currency}:`, error);\n }\n }\n }\n\n // calculate equity\n const equity = positions.reduce((acc, cur) => acc + cur.closable_price * cur.volume, 0) + usdtBalance;\n\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: equity,\n equity: equity,\n profit: 0,\n free: equity,\n used: 0,\n };\n\n const accountInfo: IAccountInfo = {\n updated_at: Date.now(),\n account_id: SUPER_MARGIN_ACCOUNT_ID,\n money: money,\n positions,\n };\n\n return accountInfo;\n }).pipe(\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'superMarginAccountInfo', e);\n },\n }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const spotRawBalance$ = defer(() => client.getSpotAccountBalance(spotAccountUid)).pipe(\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const spotAccountInfo$ = spotRawBalance$.pipe(\n map((spotBalance): IAccountInfo => {\n const balance = +(spotBalance.data.list.find((v) => v.currency === 'usdt')?.balance ?? 0);\n const equity = balance;\n const free = equity;\n const money: IAccountMoney = {\n currency: 'USDT',\n balance,\n equity,\n profit: 0,\n free,\n used: 0,\n };\n return {\n updated_at: Date.now(),\n account_id: SPOT_ACCOUNT_ID,\n money: money,\n positions: [],\n };\n }),\n shareReplay(1),\n );\n\n publishAccountInfo(terminal, SPOT_ACCOUNT_ID, spotAccountInfo$);\n addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'HUOBI/SPOT' });\n publishAccountInfo(terminal, SUPER_MARGIN_ACCOUNT_ID, superMarginAccountInfo$);\n addAccountMarket(terminal, { account_id: SUPER_MARGIN_ACCOUNT_ID, market_id: 'HUOBI/SUPER-MARGIN' });\n publishAccountInfo(terminal, SWAP_ACCOUNT_ID, perpetualContractAccountInfo$);\n addAccountMarket(terminal, { account_id: SWAP_ACCOUNT_ID, market_id: 'HUOBI/SWAP' });\n\n // Submit order\n terminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: {\n enum: [SUPER_MARGIN_ACCOUNT_ID, SWAP_ACCOUNT_ID],\n },\n },\n },\n (msg) => {\n const { account_id: req_account_id } = msg.req;\n console.info(formatTime(Date.now()), `SubmitOrder for ${account_id}`, JSON.stringify(msg));\n\n if (req_account_id === SWAP_ACCOUNT_ID) {\n return defer(() => client.getSwapCrossPositionInfo()).pipe(\n mergeMap((res) => res.data),\n map((v) => [v.contract_code, v.lever_rate]),\n toArray(),\n map((v) => Object.fromEntries(v)),\n mergeMap((mapContractCodeToRate) => {\n const lever_rate = mapContractCodeToRate[msg.req.product_id] ?? 20;\n const params = {\n contract_code: msg.req.product_id,\n contract_type: 'swap',\n price: msg.req.price,\n volume: msg.req.volume,\n offset:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'OPEN_SHORT'\n ? 'open'\n : 'close',\n direction:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell',\n // dynamically adjust the leverage\n lever_rate,\n order_price_type: msg.req.order_type === 'MARKET' ? 'market' : 'limit',\n };\n return client.postSwapOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.status !== 'ok') {\n return { res: { code: 500, message: v.status } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n }\n // for super-margin orders, we need to denote the amount of usdt to borrow, therefore we need to:\n // 1. get the loanable amount\n // 2. get the current balance\n // 3. get the current price\n // 4. combine the information to submit the order\n return defer(() => client.getCrossMarginLoanInfo()).pipe(\n //\n mergeMap((res) => res.data),\n first((v) => v.currency === 'usdt'),\n map((v) => +v['loanable-amt']),\n combineLatestWith(\n superMarginUnifiedRawAccountBalance$.pipe(\n first(),\n mergeMap((res) =>\n from(res.list).pipe(\n // we only need the amount of usdt that can be used to trade\n filter((v) => v.currency === 'usdt' && v.type === 'trade'),\n reduce((acc, cur) => acc + +cur.balance, 0),\n ),\n ),\n ),\n ),\n combineLatestWith(spotProducts$.pipe(first())),\n mergeMap(async ([[loanable, balance], products]) => {\n const priceRes = await client.getSpotTick({ symbol: msg.req.product_id });\n const theProduct = products.find((v) => v.product_id === msg.req.product_id);\n const price: number = priceRes.tick.close;\n const borrow_amount =\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? Math.max(Math.min(loanable, msg.req.volume * price - balance), 0)\n : undefined;\n const params = {\n symbol: msg.req.product_id,\n 'account-id': '' + superMarginAccountUid,\n // amount: msg.req.type === OrderType.MARKET ? 0 : '' + msg.req.volume,\n // 'market-amount': msg.req.type === OrderType.MARKET ? '' + msg.req.volume : undefined,\n amount:\n '' +\n (msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? roundToStep(msg.req.volume * price, theProduct?.volume_step!)\n : msg.req.volume),\n 'borrow-amount': '' + borrow_amount,\n type: `${\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell'\n }-${'LIMIT' === msg.req.order_type ? 'limit' : 'market'}`,\n 'trade-purpose':\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? '1' // auto borrow\n : '2', // auto repay\n price: msg.req.order_type === 'MARKET' ? undefined : '' + msg.req.price,\n source: 'super-margin-api',\n };\n return client.postSpotOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.success === false) {\n return { res: { code: v.code, message: v.message } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n },\n );\n\n // Update Spot TRC20 Addresses (Only Main Account)\n if (isMainAccount) {\n const res = await client.getSpotAccountDepositAddresses({ currency: 'usdt' });\n const addresses = res.data.filter((v) => v.chain === 'trc20usdt').map((v) => v.address);\n\n for (const address of addresses) {\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n address: address,\n network_id: 'TRC20',\n onApply: {\n INIT: async (order) => {\n const res0 = await client.getV2ReferenceCurrencies({ currency: 'usdt' });\n const fee = res0.data\n .find((v) => v.currency === 'usdt')\n ?.chains.find((v) => v.chain === 'trc20usdt')?.transactFeeWithdraw;\n if (!fee) {\n return { state: 'ERROR', message: 'MISSING FEE' };\n }\n const res = await client.postWithdraw({\n address: order.current_rx_address!,\n amount: '' + (order.expected_amount - +fee),\n currency: 'usdt',\n fee: fee,\n chain: 'trc20usdt',\n });\n if (res.status != 'ok') {\n return { state: 'INIT', message: `${res.status}` };\n }\n return { state: 'PENDING', context: `${res.data}` };\n },\n PENDING: async (order) => {\n if (!order.current_tx_context) {\n return { state: 'ERROR', message: 'MISSING CONTEXT' };\n }\n const wdId = +order.current_tx_context;\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'withdraw',\n from: `${wdId}`,\n });\n const txId = res.data.find((v) => v.id === wdId)?.['tx-hash'];\n if (!txId) {\n return { state: 'PENDING', context: `${wdId}` };\n }\n return {\n state: 'COMPLETE',\n transaction_id: txId,\n };\n },\n },\n onEval: async (order) => {\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'deposit',\n direct: 'next',\n });\n\n const theItem = res.data.find(\n (v) => v['tx-hash'] === order.current_transaction_id && v.state === 'safe',\n );\n if (!theItem) {\n return { state: 'PENDING' };\n }\n return { received_amount: +theItem.amount, state: 'COMPLETE' };\n },\n });\n }\n }\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferInResult = await client.postSuperMarginAccountTransferIn({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferInResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SUPER_MARGIN_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SUPER_MARGIN',\n onApply: {\n INIT: async (order) => {\n const transferOutResult = await client.postSuperMarginAccountTransferOut({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferOutResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'spot',\n to: 'linear-swap',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SWAP_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SWAP',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'linear-swap',\n to: 'spot',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n if (isMainAccount) {\n for (const subAccount of subAccounts) {\n const SPOT_SUB_ACCOUNT_ID = `huobi/${subAccount.uid}/spot/usdt`;\n\n const SUB_ACCOUNT_NETWORK_ID = `Huobi/${huobiUid}/SubAccount/${subAccount.uid}`;\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: '#main',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_rx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-out',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_SUB_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: `${subAccount.uid}`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_tx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-in',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n }\n }\n})();\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { formatTime, roundToStep } from '@yuants/utils';\nimport {\n catchError,\n combineLatestWith,\n defer,\n distinct,\n filter,\n first,\n firstValueFrom,\n from,\n map,\n mergeMap,\n of,\n reduce,\n repeat,\n retry,\n shareReplay,\n tap,\n timeout,\n toArray,\n} from 'rxjs';\nimport { client } from './api';\nimport './interest_rate';\nimport { perpetualContractProducts$, spotProducts$ } from './product';\nimport './quote';\n\nconst terminal = Terminal.fromNodeEnv();\n\n(async () => {\n const swapAccountTypeRes = await client.getSwapUnifiedAccountType();\n if (swapAccountTypeRes.data?.account_type === 1) {\n console.info(\n formatTime(Date.now()),\n 'SwitchingAccountType',\n `previous: ${swapAccountTypeRes.data.account_type}, switching to 2 (unified account)`,\n );\n const switchRes = await client.postSwapSwitchAccountType({ account_type: 2 });\n console.info(formatTime(Date.now()), 'SwitchingAccountType', `current: ${switchRes.data.account_type}`);\n }\n\n const huobiUid: number = (await client.getUid()).data;\n console.info(formatTime(Date.now()), 'UID', huobiUid);\n\n const huobiAccounts = await client.getAccount();\n const superMarginAccountUid = huobiAccounts.data.find((v) => v.type === 'super-margin')?.id!;\n const spotAccountUid = huobiAccounts.data.find((v) => v.type === 'spot')?.id!;\n console.info(formatTime(Date.now()), 'huobiAccount', JSON.stringify(huobiAccounts));\n\n const account_id = `huobi/${huobiUid}`;\n const SPOT_ACCOUNT_ID = `${account_id}/spot/usdt`;\n const SUPER_MARGIN_ACCOUNT_ID = `${account_id}/super-margin`;\n const SWAP_ACCOUNT_ID = `${account_id}/swap`;\n\n const subUsersRes = await client.getSubUserList();\n const subAccounts = subUsersRes.data;\n const isMainAccount = subUsersRes.ok;\n console.info(formatTime(Date.now()), 'subAccounts', JSON.stringify(subAccounts));\n\n const mapProductIdToPerpetualProduct$ = perpetualContractProducts$.pipe(\n map((x) => new Map(x.map((v) => [v.product_id, v]))),\n shareReplay(1),\n );\n\n provideAccountInfoService(\n terminal,\n SWAP_ACCOUNT_ID,\n async () => {\n // balance\n const balance = await client.getUnifiedAccountInfo();\n if (!balance.data) {\n throw new Error('Failed to get unified account info');\n }\n const balanceData = balance.data.find((v) => v.margin_asset === 'USDT');\n if (!balanceData) {\n throw new Error('No USDT balance found in unified account');\n }\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: balanceData.cross_margin_static,\n equity: balanceData.margin_balance,\n profit: balanceData.cross_profit_unreal,\n free: balanceData.withdraw_available,\n used: balanceData.margin_balance - balanceData.withdraw_available,\n };\n\n // positions\n const positionsRes = await client.getSwapCrossPositionInfo();\n const mapProductIdToPerpetualProduct = await firstValueFrom(mapProductIdToPerpetualProduct$);\n const positions: IPosition[] = (positionsRes.data || []).map((v): IPosition => {\n const product_id = v.contract_code;\n const theProduct = mapProductIdToPerpetualProduct?.get(product_id);\n const valuation = v.volume * v.last_price * (theProduct?.value_scale || 1);\n return {\n position_id: `${v.contract_code}/${v.contract_type}/${v.direction}/${v.margin_mode}`,\n datasource_id: 'HUOBI-SWAP',\n product_id,\n direction: v.direction === 'buy' ? 'LONG' : 'SHORT',\n volume: v.volume,\n free_volume: v.available,\n position_price: v.cost_hold,\n closable_price: v.last_price,\n floating_profit: v.profit_unreal,\n valuation,\n };\n });\n\n // orders\n // const orders: IOrder[] = [];\n // let page_index = 1;\n // const page_size = 50;\n\n // while (true) {\n // const ordersRes = await client.getSwapOpenOrders({ page_index, page_size });\n // if (!ordersRes.data?.orders || ordersRes.data.orders.length === 0) {\n // break;\n // }\n\n // const pageOrders: IOrder[] = ordersRes.data.orders.map((v): IOrder => {\n // return {\n // order_id: v.order_id_str,\n // account_id: SWAP_ACCOUNT_ID,\n // product_id: v.contract_code,\n // order_type: ['lightning'].includes(v.order_price_type)\n // ? 'MARKET'\n // : ['limit', 'opponent', 'post_only', 'optimal_5', 'optimal_10', 'optimal_20'].includes(\n // v.order_price_type,\n // )\n // ? 'LIMIT'\n // : ['fok'].includes(v.order_price_type)\n // ? 'FOK'\n // : v.order_price_type.includes('ioc')\n // ? 'IOC'\n // : 'STOP', // unreachable code\n // order_direction:\n // v.direction === 'open'\n // ? v.offset === 'buy'\n // ? 'OPEN_LONG'\n // : 'OPEN_SHORT'\n // : v.offset === 'buy'\n // ? 'CLOSE_SHORT'\n // : 'CLOSE_LONG',\n // volume: v.volume,\n // submit_at: v.created_at,\n // price: v.price,\n // traded_volume: v.trade_volume,\n // };\n // });\n\n // orders.push(...pageOrders);\n // page_index++;\n // }\n\n return {\n money: money,\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n const superMarginUnifiedRawAccountBalance$ = defer(() =>\n client.getSpotAccountBalance(superMarginAccountUid),\n ).pipe(\n //\n map((res) => res.data),\n repeat({ delay: 1000 }),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'unifiedRaw', e);\n },\n }),\n retry({ delay: 5000 }),\n shareReplay(1),\n );\n\n const subscriptions: Set<string> = new Set();\n from(client.spot_ws.connection$).subscribe(() => {\n subscriptions.clear();\n });\n // subscribe the symbols of positions we held\n superMarginUnifiedRawAccountBalance$\n .pipe(\n //\n mergeMap((res) =>\n from(res?.list || []).pipe(\n filter((v) => v.currency !== 'usdt'),\n map((v) => v.currency),\n distinct(),\n toArray(),\n map((v) => new Set(v)),\n ),\n ),\n )\n .subscribe((v: Set<string>) => {\n const toUnsubscribe = [...subscriptions].filter((x) => !v.has(x));\n const toSubscribe = [...v].filter((x) => !subscriptions.has(x));\n\n for (const symbol of toUnsubscribe) {\n client.spot_ws.output$.next({\n unsub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.delete(symbol);\n }\n for (const symbol of toSubscribe) {\n client.spot_ws.output$.next({\n sub: `market.${symbol}usdt.ticker`,\n });\n subscriptions.add(symbol);\n }\n });\n\n provideAccountInfoService(\n terminal,\n SUPER_MARGIN_ACCOUNT_ID,\n async () => {\n // get account balance\n const accountBalance = await client.getSpotAccountBalance(superMarginAccountUid);\n const balanceList = accountBalance.data?.list || [];\n\n // calculate usdt balance\n const usdtBalance = balanceList\n .filter((v) => v.currency === 'usdt')\n .reduce((acc, cur) => acc + +cur.balance, 0);\n\n // get positions (non-usdt currencies)\n const positions: IPosition[] = [];\n const nonUsdtCurrencies = balanceList\n .filter((v) => v.currency !== 'usdt')\n .reduce((acc, cur) => {\n const existing = acc.find((item) => item.currency === cur.currency);\n if (existing) {\n existing.balance += +cur.balance;\n } else {\n acc.push({ currency: cur.currency, balance: +cur.balance });\n }\n return acc;\n }, [] as { currency: string; balance: number }[]);\n\n // get prices and create positions\n for (const currencyData of nonUsdtCurrencies) {\n if (currencyData.balance > 0) {\n try {\n // get current price from websocket or fallback to REST API\n let price: number;\n try {\n const tickPrice = await firstValueFrom(\n client.spot_ws.input$.pipe(\n //\n first((v) => v.ch?.includes('ticker') && v.ch?.includes(currencyData.currency) && v.tick),\n map((v): number => v.tick.bid),\n timeout(5000),\n tap({\n error: (e) => {\n subscriptions.clear();\n },\n }),\n ),\n );\n price = tickPrice;\n } catch {\n // fallback to REST API\n const tickerRes = await client.getSpotTick({ symbol: `${currencyData.currency}usdt` });\n price = tickerRes.tick.close;\n }\n\n positions.push({\n position_id: `${currencyData.currency}/usdt/spot`,\n product_id: `${currencyData.currency}usdt`,\n direction: 'LONG',\n volume: currencyData.balance,\n free_volume: currencyData.balance,\n position_price: price,\n closable_price: price,\n floating_profit: 0,\n valuation: currencyData.balance * price,\n });\n } catch (error) {\n console.warn(formatTime(Date.now()), `Failed to get price for ${currencyData.currency}:`, error);\n }\n }\n }\n\n // calculate equity\n const equity = positions.reduce((acc, cur) => acc + cur.closable_price * cur.volume, 0) + usdtBalance;\n\n const money: IAccountMoney = {\n currency: 'USDT',\n balance: equity,\n equity: equity,\n profit: 0,\n free: equity,\n used: 0,\n };\n\n return {\n money,\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n provideAccountInfoService(\n terminal,\n SPOT_ACCOUNT_ID,\n async () => {\n const spotBalance = await client.getSpotAccountBalance(spotAccountUid);\n\n const balance = +(spotBalance.data.list.find((v) => v.currency === 'usdt')?.balance ?? 0);\n const equity = balance;\n const free = equity;\n const money: IAccountMoney = {\n currency: 'USDT',\n balance,\n equity,\n profit: 0,\n free,\n used: 0,\n };\n return {\n money: money,\n positions: [],\n };\n },\n { auto_refresh_interval: 1000 },\n );\n addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'HUOBI/SPOT' });\n addAccountMarket(terminal, { account_id: SUPER_MARGIN_ACCOUNT_ID, market_id: 'HUOBI/SUPER-MARGIN' });\n addAccountMarket(terminal, { account_id: SWAP_ACCOUNT_ID, market_id: 'HUOBI/SWAP' });\n\n // Submit order\n terminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: {\n enum: [SUPER_MARGIN_ACCOUNT_ID, SWAP_ACCOUNT_ID],\n },\n },\n },\n (msg) => {\n const { account_id: req_account_id } = msg.req;\n console.info(formatTime(Date.now()), `SubmitOrder for ${account_id}`, JSON.stringify(msg));\n\n if (req_account_id === SWAP_ACCOUNT_ID) {\n return defer(() => client.getSwapCrossPositionInfo()).pipe(\n mergeMap((res) => res.data),\n map((v) => [v.contract_code, v.lever_rate]),\n toArray(),\n map((v) => Object.fromEntries(v)),\n mergeMap((mapContractCodeToRate) => {\n const lever_rate = mapContractCodeToRate[msg.req.product_id] ?? 20;\n const params = {\n contract_code: msg.req.product_id,\n contract_type: 'swap',\n price: msg.req.price,\n volume: msg.req.volume,\n offset:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'OPEN_SHORT'\n ? 'open'\n : 'close',\n direction:\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell',\n // dynamically adjust the leverage\n lever_rate,\n order_price_type: msg.req.order_type === 'MARKET' ? 'market' : 'limit',\n };\n return client.postSwapOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.status !== 'ok') {\n return { res: { code: 500, message: v.status } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n }\n // for super-margin orders, we need to denote the amount of usdt to borrow, therefore we need to:\n // 1. get the loanable amount\n // 2. get the current balance\n // 3. get the current price\n // 4. combine the information to submit the order\n return defer(() => client.getCrossMarginLoanInfo()).pipe(\n //\n mergeMap((res) => res.data),\n first((v) => v.currency === 'usdt'),\n map((v) => +v['loanable-amt']),\n combineLatestWith(\n superMarginUnifiedRawAccountBalance$.pipe(\n first(),\n mergeMap((res) =>\n from(res.list).pipe(\n // we only need the amount of usdt that can be used to trade\n filter((v) => v.currency === 'usdt' && v.type === 'trade'),\n reduce((acc, cur) => acc + +cur.balance, 0),\n ),\n ),\n ),\n ),\n combineLatestWith(spotProducts$.pipe(first())),\n mergeMap(async ([[loanable, balance], products]) => {\n const priceRes = await client.getSpotTick({ symbol: msg.req.product_id });\n const theProduct = products.find((v) => v.product_id === msg.req.product_id);\n const price: number = priceRes.tick.close;\n const borrow_amount =\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? Math.max(Math.min(loanable, msg.req.volume * price - balance), 0)\n : undefined;\n const params = {\n symbol: msg.req.product_id,\n 'account-id': '' + superMarginAccountUid,\n // amount: msg.req.type === OrderType.MARKET ? 0 : '' + msg.req.volume,\n // 'market-amount': msg.req.type === OrderType.MARKET ? '' + msg.req.volume : undefined,\n amount:\n '' +\n (msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? roundToStep(msg.req.volume * price, theProduct?.volume_step!)\n : msg.req.volume),\n 'borrow-amount': '' + borrow_amount,\n type: `${\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? 'buy'\n : 'sell'\n }-${'LIMIT' === msg.req.order_type ? 'limit' : 'market'}`,\n 'trade-purpose':\n msg.req.order_direction === 'OPEN_LONG' || msg.req.order_direction === 'CLOSE_SHORT'\n ? '1' // auto borrow\n : '2', // auto repay\n price: msg.req.order_type === 'MARKET' ? undefined : '' + msg.req.price,\n source: 'super-margin-api',\n };\n return client.postSpotOrder(params).then((v) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(v), JSON.stringify(params));\n return v;\n });\n }),\n map((v) => {\n if (v.success === false) {\n return { res: { code: v.code, message: v.message } };\n }\n return { res: { code: 0, message: 'OK' } };\n }),\n catchError((e) => {\n console.error(formatTime(Date.now()), 'SubmitOrder', e);\n return of({ res: { code: 500, message: `${e}` } });\n }),\n );\n },\n );\n\n // Update Spot TRC20 Addresses (Only Main Account)\n if (isMainAccount) {\n const res = await client.getSpotAccountDepositAddresses({ currency: 'usdt' });\n const addresses = res.data.filter((v) => v.chain === 'trc20usdt').map((v) => v.address);\n\n for (const address of addresses) {\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n address: address,\n network_id: 'TRC20',\n onApply: {\n INIT: async (order) => {\n const res0 = await client.getV2ReferenceCurrencies({ currency: 'usdt' });\n const fee = res0.data\n .find((v) => v.currency === 'usdt')\n ?.chains.find((v) => v.chain === 'trc20usdt')?.transactFeeWithdraw;\n if (!fee) {\n return { state: 'ERROR', message: 'MISSING FEE' };\n }\n const res = await client.postWithdraw({\n address: order.current_rx_address!,\n amount: '' + (order.expected_amount - +fee),\n currency: 'usdt',\n fee: fee,\n chain: 'trc20usdt',\n });\n if (res.status != 'ok') {\n return { state: 'INIT', message: `${res.status}` };\n }\n return { state: 'PENDING', context: `${res.data}` };\n },\n PENDING: async (order) => {\n if (!order.current_tx_context) {\n return { state: 'ERROR', message: 'MISSING CONTEXT' };\n }\n const wdId = +order.current_tx_context;\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'withdraw',\n from: `${wdId}`,\n });\n const txId = res.data.find((v) => v.id === wdId)?.['tx-hash'];\n if (!txId) {\n return { state: 'PENDING', context: `${wdId}` };\n }\n return {\n state: 'COMPLETE',\n transaction_id: txId,\n };\n },\n },\n onEval: async (order) => {\n const res = await client.getDepositWithdrawHistory({\n currency: 'usdt',\n type: 'deposit',\n direct: 'next',\n });\n\n const theItem = res.data.find(\n (v) => v['tx-hash'] === order.current_transaction_id && v.state === 'safe',\n );\n if (!theItem) {\n return { state: 'PENDING' };\n }\n return { received_amount: +theItem.amount, state: 'COMPLETE' };\n },\n });\n }\n }\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferInResult = await client.postSuperMarginAccountTransferIn({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferInResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SUPER_MARGIN_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SUPER_MARGIN`,\n address: 'SUPER_MARGIN',\n onApply: {\n INIT: async (order) => {\n const transferOutResult = await client.postSuperMarginAccountTransferOut({\n currency: 'usdt',\n amount: '' + (order.current_amount || order.expected_amount),\n });\n if (transferOutResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SPOT',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'spot',\n to: 'linear-swap',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n addAccountTransferAddress({\n terminal,\n account_id: SWAP_ACCOUNT_ID,\n currency: 'USDT',\n network_id: `Huobi/${huobiUid}/SPOT-SWAP`,\n address: 'SWAP',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSpotAccountTransfer({\n from: 'linear-swap',\n to: 'spot',\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n 'margin-account': 'USDT',\n });\n if (!transferResult.success) {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n\n if (isMainAccount) {\n for (const subAccount of subAccounts) {\n const SPOT_SUB_ACCOUNT_ID = `huobi/${subAccount.uid}/spot/usdt`;\n\n const SUB_ACCOUNT_NETWORK_ID = `Huobi/${huobiUid}/SubAccount/${subAccount.uid}`;\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: '#main',\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_rx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-out',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_SUB_ACCOUNT_ID,\n currency: 'USDT',\n network_id: SUB_ACCOUNT_NETWORK_ID,\n address: `${subAccount.uid}`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postSubUserTransfer({\n 'sub-uid': +order.current_tx_address!,\n currency: 'usdt',\n amount: order.current_amount || order.expected_amount,\n type: 'master-transfer-in',\n });\n if (transferResult.status !== 'ok') {\n return { state: 'INIT' };\n }\n return { state: 'COMPLETE' };\n },\n },\n onEval: async (order) => {\n return { received_amount: order.current_amount || order.expected_amount, state: 'COMPLETE' };\n },\n });\n }\n }\n})();\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-huobi",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.15",
|
|
4
4
|
"bin": "lib/cli.js",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -9,18 +9,18 @@
|
|
|
9
9
|
"temp"
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@yuants/protocol": "0.
|
|
13
|
-
"@yuants/data-account": "0.4.
|
|
14
|
-
"@yuants/data-order": "0.2.
|
|
15
|
-
"@yuants/transfer": "0.2.
|
|
12
|
+
"@yuants/protocol": "0.43.0",
|
|
13
|
+
"@yuants/data-account": "0.4.4",
|
|
14
|
+
"@yuants/data-order": "0.2.12",
|
|
15
|
+
"@yuants/transfer": "0.2.15",
|
|
16
16
|
"@yuants/utils": "0.8.0",
|
|
17
17
|
"@yuants/cache": "0.1.7",
|
|
18
|
-
"@yuants/sql": "0.9.
|
|
19
|
-
"@yuants/data-product": "0.2.
|
|
20
|
-
"@yuants/data-series": "0.3.
|
|
21
|
-
"@yuants/data-interest-rate": "0.1.
|
|
22
|
-
"@yuants/data-quote": "0.2.
|
|
23
|
-
"@yuants/secret": "0.2.
|
|
18
|
+
"@yuants/sql": "0.9.6",
|
|
19
|
+
"@yuants/data-product": "0.2.16",
|
|
20
|
+
"@yuants/data-series": "0.3.27",
|
|
21
|
+
"@yuants/data-interest-rate": "0.1.24",
|
|
22
|
+
"@yuants/data-quote": "0.2.19",
|
|
23
|
+
"@yuants/secret": "0.2.10",
|
|
24
24
|
"rxjs": "~7.5.6",
|
|
25
25
|
"crypto-js": "^4.2.0"
|
|
26
26
|
},
|
package/temp/package-deps.json
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
{
|
|
2
|
-
"apps/vendor-huobi/CHANGELOG.json": "
|
|
3
|
-
"apps/vendor-huobi/CHANGELOG.md": "
|
|
2
|
+
"apps/vendor-huobi/CHANGELOG.json": "9d8f49bf8b9cbe3fa7bc1e1465205d23e69487d3",
|
|
3
|
+
"apps/vendor-huobi/CHANGELOG.md": "015a3c83f33929832725957d3b9d38e6fcaacb53",
|
|
4
4
|
"apps/vendor-huobi/README.md": "d7bf0149513114eab5500a6b5c9e7cba10565572",
|
|
5
5
|
"apps/vendor-huobi/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
|
|
6
6
|
"apps/vendor-huobi/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
|
|
7
7
|
"apps/vendor-huobi/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
|
|
8
8
|
"apps/vendor-huobi/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
|
|
9
9
|
"apps/vendor-huobi/etc/vendor-huobi.api.md": "dc8cbf2a044a227b30a4ee9701b0c97328244724",
|
|
10
|
-
"apps/vendor-huobi/package.json": "
|
|
10
|
+
"apps/vendor-huobi/package.json": "9cabeab597ecf09ca18bb01886b6a9dca750d987",
|
|
11
11
|
"apps/vendor-huobi/src/api.ts": "7f13d45da5c3600276cdf4e734e086358d96b348",
|
|
12
12
|
"apps/vendor-huobi/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
|
|
13
13
|
"apps/vendor-huobi/src/cluster.ts": "f58a96d9c89e29e4fcf7cedd8ea9cb1dc920540b",
|
|
14
|
-
"apps/vendor-huobi/src/index.ts": "
|
|
14
|
+
"apps/vendor-huobi/src/index.ts": "53674760f8680d15b68b6ced2792d30ad0d9856b",
|
|
15
15
|
"apps/vendor-huobi/src/interest_rate.ts": "1ada272b47f382533368928758b35176442d957f",
|
|
16
16
|
"apps/vendor-huobi/src/logger.ts": "d25d427e74f46819a601e0cb17d5358b22c8db7b",
|
|
17
17
|
"apps/vendor-huobi/src/product.ts": "5085b9262651dc574627e82723f862724124e6ea",
|
|
18
18
|
"apps/vendor-huobi/src/quote.ts": "d772d64897c765a8157dac1a9abc0f3f488eaa1d",
|
|
19
19
|
"apps/vendor-huobi/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
20
20
|
"apps/vendor-huobi/.rush/temp/shrinkwrap-deps.json": "d9fc97de6643d551cb315ce28c6deca42698705c",
|
|
21
|
-
"libraries/protocol/temp/package-deps.json": "
|
|
22
|
-
"libraries/data-account/temp/package-deps.json": "
|
|
23
|
-
"libraries/data-order/temp/package-deps.json": "
|
|
24
|
-
"libraries/transfer/temp/package-deps.json": "
|
|
21
|
+
"libraries/protocol/temp/package-deps.json": "3b8c7d38aeee5cc1b2858530c0bff8904d8326e4",
|
|
22
|
+
"libraries/data-account/temp/package-deps.json": "5eb844c54c6c70d8cdde8bceb2e3ce337ebbe061",
|
|
23
|
+
"libraries/data-order/temp/package-deps.json": "52b60ad284690709bdd3a1b922b50321e54faa81",
|
|
24
|
+
"libraries/transfer/temp/package-deps.json": "55b5e0be5042b445bf9cf2be5b4087baf93de46b",
|
|
25
25
|
"libraries/utils/temp/package-deps.json": "c0ccd6946461153e7eb1b04a3061e075788fad2a",
|
|
26
26
|
"libraries/cache/temp/package-deps.json": "7fe9a4cf5cb23ebd4de9f237e4ffdff34429b205",
|
|
27
|
-
"libraries/sql/temp/package-deps.json": "
|
|
28
|
-
"libraries/data-product/temp/package-deps.json": "
|
|
29
|
-
"libraries/data-series/temp/package-deps.json": "
|
|
30
|
-
"libraries/data-interest-rate/temp/package-deps.json": "
|
|
31
|
-
"libraries/data-quote/temp/package-deps.json": "
|
|
32
|
-
"libraries/secret/temp/package-deps.json": "
|
|
27
|
+
"libraries/sql/temp/package-deps.json": "58c2368f516d411e6849e82620f1969f34db381e",
|
|
28
|
+
"libraries/data-product/temp/package-deps.json": "54454b1f541b962b2e87f66459d3a2f0cd524d4d",
|
|
29
|
+
"libraries/data-series/temp/package-deps.json": "f26c0a0e5ae88682a502ccaa50da5c33dc32aa2c",
|
|
30
|
+
"libraries/data-interest-rate/temp/package-deps.json": "2eb39b7c4946bd07e168d2f8729fd843eddca04a",
|
|
31
|
+
"libraries/data-quote/temp/package-deps.json": "70a7d00b2fb1a8353113d4469528617fc77cbdce",
|
|
32
|
+
"libraries/secret/temp/package-deps.json": "6284a85c9598187bbed2c9c2d83ee17a23fefed4",
|
|
33
33
|
"libraries/extension/temp/package-deps.json": "abcd1ce716b9fd88f33173d01f02c4c3a9462009",
|
|
34
34
|
"tools/toolkit/temp/package-deps.json": "3bef053db16659f0cdaceea64c8a8580c0131633"
|
|
35
35
|
}
|