@yuants/vendor-gate 0.4.16 → 0.4.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/public-api.js +1 -1
- package/dist/api/public-api.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/services/markets/quote.js +70 -0
- package/dist/services/markets/quote.js.map +1 -0
- package/lib/api/public-api.d.ts +1 -1
- package/lib/api/public-api.js +1 -1
- package/lib/api/public-api.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/services/markets/quote.d.ts +2 -0
- package/lib/services/markets/quote.d.ts.map +1 -0
- package/lib/services/markets/quote.js +72 -0
- package/lib/services/markets/quote.js.map +1 -0
- package/package.json +2 -1
- package/temp/package-deps.json +8 -6
package/dist/api/public-api.js
CHANGED
|
@@ -31,7 +31,7 @@ export const getFuturesTickers = (settle, params) => requestPublic('GET', `/api/
|
|
|
31
31
|
/**
|
|
32
32
|
* 获取交易对 ticker 信息
|
|
33
33
|
*
|
|
34
|
-
* https://www.gate.
|
|
34
|
+
* https://www.gate.com/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E4%BA%A4%E6%98%93%E5%AF%B9-ticker-%E4%BF%A1%E6%81%AF
|
|
35
35
|
*/
|
|
36
36
|
export const getSpotTickers = (params) => requestPublic('GET', `/api/v4/spot/tickers`, params);
|
|
37
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAc,EACd,MAA4C,EA8C5C,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC;AAEzE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAc,EACd,MAA4C,EAM5C,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAc,EACd,MAKC,EAaA,EAAE,CACH,WAAW,CAAC,QAAQ,CAAC,sBAAsB,MAAM,EAAE,EAAE,GAAG,EAAE,KAAM,EAAE,GAAG,EAAE,CACrE,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,aAAa,EAAE,MAAM,CAAC,CACrE,CAAC;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAAc,EACd,MAA8B,EAyB9B,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,UAAU,EAAE,MAAM,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAG9B,EAoBC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAqBlC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC","sourcesContent":["import { rateLimiter } from './rate-limiter';\nimport { requestPublic } from './http-client';\n\n/**\n * 查询所有的合约信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E6%89%80%E6%9C%89%E7%9A%84%E5%90%88%E7%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesContracts = (\n settle: string,\n params?: { limit?: number; offset?: number },\n): Promise<\n {\n name: string;\n type: string;\n quanto_multiplier: string;\n ref_discount_rate: string;\n order_price_deviate: string;\n maintenance_rate: string;\n mark_type: string;\n last_price: string;\n mark_price: string;\n index_price: string;\n funding_rate_indicative: string;\n mark_price_round: string;\n funding_offset: number;\n in_delisting: boolean;\n risk_limit_base: string;\n interest_rate: string;\n order_price_round: string;\n order_size_min: number;\n ref_rebate_rate: string;\n funding_interval: number;\n risk_limit_step: string;\n leverage_min: string;\n leverage_max: string;\n risk_limit_max: string;\n maker_fee_rate: string;\n taker_fee_rate: string;\n funding_rate: string;\n order_size_max: number;\n funding_next_apply: number;\n short_users: number;\n config_change_time: number;\n trade_size: number;\n position_size: number;\n long_users: number;\n funding_impact_value: string;\n orders_limit: number;\n trade_id: number;\n orderbook_id: number;\n enable_bonus: boolean;\n enable_credit: boolean;\n create_time: number;\n funding_cap_ratio: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/contracts`, params);\n\n/**\n * 合约市场历史资金费率\n *\n * - Note: 该接口返回的数据是按照时间倒序排列的\n * - Note: limit 参数最大值为 1000\n * - Note: t 字段为秒级时间戳 (Unix Second),r 字段为资金费率 (0-1 单位)\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E5%8E%86%E5%8F%B2%E8%B5%84%E9%87%91%E8%B4%B9%E7%8E%87\n */\nexport const getFutureFundingRate = (\n settle: string,\n params: { contract: string; limit?: number },\n): Promise<\n {\n t: number;\n r: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/funding_rate`, params);\n\n/**\n * 查询合约市场深度信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E6%B7%B1%E5%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesOrderBook = async (\n settle: string,\n params: {\n contract: string;\n interval?: string;\n limit?: number;\n with_id?: boolean;\n },\n): Promise<{\n id: number;\n current: number;\n update: number;\n asks: {\n p: string;\n s: string;\n }[];\n bids: {\n p: string;\n s: string;\n }[];\n}> =>\n rateLimiter.schedule(`futures-order-book:${settle}`, 200, 10_000, () =>\n requestPublic('GET', `/api/v4/futures/${settle}/order_book`, params),\n );\n\n/**\n * 获取所有合约交易行情统计\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E6%89%80%E6%9C%89%E5%90%88%E7%BA%A6%E4%BA%A4%E6%98%93%E8%A1%8C%E6%83%85%E7%BB%9F%E8%AE%A1\n */\nexport const getFuturesTickers = (\n settle: string,\n params?: { contract?: string },\n): Promise<\n {\n contract: string;\n last: string;\n change_percentage: string;\n total_size: string;\n low_24h: string;\n high_24h: string;\n volume_24h: string;\n volume_24h_btc: string;\n volume_24h_usd: string;\n volume_24h_base: string;\n volume_24h_quote: string;\n volume_24h_settle: string;\n mark_price: string;\n funding_rate: string;\n funding_rate_indicative: string;\n index_price: string;\n quanto_base_rate: string;\n basis_rate: string;\n basis_value: string;\n lowest_ask: string;\n highest_bid: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/tickers`, params);\n\n/**\n * 获取交易对 ticker 信息\n *\n * https://www.gate.
|
|
1
|
+
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAc,EACd,MAA4C,EA8C5C,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC;AAEzE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAc,EACd,MAA4C,EAM5C,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAc,EACd,MAKC,EAaA,EAAE,CACH,WAAW,CAAC,QAAQ,CAAC,sBAAsB,MAAM,EAAE,EAAE,GAAG,EAAE,KAAM,EAAE,GAAG,EAAE,CACrE,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,aAAa,EAAE,MAAM,CAAC,CACrE,CAAC;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAAc,EACd,MAA8B,EAyB9B,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,MAAM,UAAU,EAAE,MAAM,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAG9B,EAoBC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAqBlC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC","sourcesContent":["import { rateLimiter } from './rate-limiter';\nimport { requestPublic } from './http-client';\n\n/**\n * 查询所有的合约信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E6%89%80%E6%9C%89%E7%9A%84%E5%90%88%E7%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesContracts = (\n settle: string,\n params?: { limit?: number; offset?: number },\n): Promise<\n {\n name: string;\n type: string;\n quanto_multiplier: string;\n ref_discount_rate: string;\n order_price_deviate: string;\n maintenance_rate: string;\n mark_type: string;\n last_price: string;\n mark_price: string;\n index_price: string;\n funding_rate_indicative: string;\n mark_price_round: string;\n funding_offset: number;\n in_delisting: boolean;\n risk_limit_base: string;\n interest_rate: string;\n order_price_round: string;\n order_size_min: number;\n ref_rebate_rate: string;\n funding_interval: number;\n risk_limit_step: string;\n leverage_min: string;\n leverage_max: string;\n risk_limit_max: string;\n maker_fee_rate: string;\n taker_fee_rate: string;\n funding_rate: string;\n order_size_max: number;\n funding_next_apply: number;\n short_users: number;\n config_change_time: number;\n trade_size: number;\n position_size: number;\n long_users: number;\n funding_impact_value: string;\n orders_limit: number;\n trade_id: number;\n orderbook_id: number;\n enable_bonus: boolean;\n enable_credit: boolean;\n create_time: number;\n funding_cap_ratio: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/contracts`, params);\n\n/**\n * 合约市场历史资金费率\n *\n * - Note: 该接口返回的数据是按照时间倒序排列的\n * - Note: limit 参数最大值为 1000\n * - Note: t 字段为秒级时间戳 (Unix Second),r 字段为资金费率 (0-1 单位)\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E5%8E%86%E5%8F%B2%E8%B5%84%E9%87%91%E8%B4%B9%E7%8E%87\n */\nexport const getFutureFundingRate = (\n settle: string,\n params: { contract: string; limit?: number },\n): Promise<\n {\n t: number;\n r: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/funding_rate`, params);\n\n/**\n * 查询合约市场深度信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E6%B7%B1%E5%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesOrderBook = async (\n settle: string,\n params: {\n contract: string;\n interval?: string;\n limit?: number;\n with_id?: boolean;\n },\n): Promise<{\n id: number;\n current: number;\n update: number;\n asks: {\n p: string;\n s: string;\n }[];\n bids: {\n p: string;\n s: string;\n }[];\n}> =>\n rateLimiter.schedule(`futures-order-book:${settle}`, 200, 10_000, () =>\n requestPublic('GET', `/api/v4/futures/${settle}/order_book`, params),\n );\n\n/**\n * 获取所有合约交易行情统计\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E6%89%80%E6%9C%89%E5%90%88%E7%BA%A6%E4%BA%A4%E6%98%93%E8%A1%8C%E6%83%85%E7%BB%9F%E8%AE%A1\n */\nexport const getFuturesTickers = (\n settle: string,\n params?: { contract?: string },\n): Promise<\n {\n contract: string;\n last: string;\n change_percentage: string;\n total_size: string;\n low_24h: string;\n high_24h: string;\n volume_24h: string;\n volume_24h_btc: string;\n volume_24h_usd: string;\n volume_24h_base: string;\n volume_24h_quote: string;\n volume_24h_settle: string;\n mark_price: string;\n funding_rate: string;\n funding_rate_indicative: string;\n index_price: string;\n quanto_base_rate: string;\n basis_rate: string;\n basis_value: string;\n lowest_ask: string;\n highest_bid: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/tickers`, params);\n\n/**\n * 获取交易对 ticker 信息\n *\n * https://www.gate.com/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E4%BA%A4%E6%98%93%E5%AF%B9-ticker-%E4%BF%A1%E6%81%AF\n */\nexport const getSpotTickers = (params: {\n currency_pair?: string;\n timezone?: string;\n}): Promise<\n Array<{\n currency_pair: string;\n last: string;\n lowest_ask: string;\n lowest_size: string;\n highest_bid: string;\n highest_size: string;\n change_percentage: string;\n change_utc0: string;\n change_utc8: string;\n base_volume: string;\n quote_volume: string;\n high_24h: string;\n low_24h: string;\n etf_net_value: string;\n etf_pre_net_value: string;\n etf_pre_timestamp: string;\n etf_leverage: string;\n }>\n> => requestPublic('GET', `/api/v4/spot/tickers`, params);\n\n/**\n * 查询支持的所有现货交易对\n * https://www.gate.com/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E6%94%AF%E6%8C%81%E7%9A%84%E6%89%80%E6%9C%89%E4%BA%A4%E6%98%93%E5%AF%B9\n */\nexport const getSpotCurrencyPairs = (): Promise<\n Array<{\n id: string;\n base: string;\n base_name: string;\n quote: string;\n quote_name: string;\n fee: string;\n min_base_amount: string;\n min_quote_amount: string;\n max_base_amount: string;\n max_quote_amount: string;\n amount_precision: Number;\n precision: Number;\n trade_status: string;\n sell_start: Number;\n buy_start: number;\n delisting_time: number;\n trade_url: string;\n st_tag: boolean;\n }>\n> => requestPublic('GET', `/spot/currency_pairs`);\n"]}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;AACpC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC","sourcesContent":["import './services/markets/product';\nimport './services/markets/interest-rate';\nimport './services/transfer';\nimport './services/exchange';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;AACpC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,0BAA0B,CAAC","sourcesContent":["import './services/markets/product';\nimport './services/markets/interest-rate';\nimport './services/transfer';\nimport './services/exchange';\nimport './services/markets/quote';\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Terminal } from '@yuants/protocol';
|
|
2
|
+
import { writeToSQL } from '@yuants/sql';
|
|
3
|
+
import { decodePath, encodePath } from '@yuants/utils';
|
|
4
|
+
import { defer, filter, map, mergeMap, repeat, retry, shareReplay, merge, catchError, EMPTY, groupBy, scan, share, } from 'rxjs';
|
|
5
|
+
import { getFuturesTickers, getFuturesContracts, getSpotTickers } from '../../api/public-api';
|
|
6
|
+
const terminal = Terminal.fromNodeEnv();
|
|
7
|
+
// 获取所有USDT永续合约
|
|
8
|
+
const usdtFutureContracts$ = defer(() => getFuturesContracts('usdt', {})).pipe(repeat({ delay: 3600000 }), retry({ delay: 60000 }), shareReplay(1));
|
|
9
|
+
// 从tickers获取价格和交易量数据
|
|
10
|
+
const quoteFromTickers$ = defer(() => getFuturesTickers('usdt', {})).pipe(mergeMap((tickers) => tickers), map((ticker) => ({
|
|
11
|
+
datasource_id: 'GATE',
|
|
12
|
+
product_id: encodePath('GATE', 'FUTURE', ticker.contract),
|
|
13
|
+
last_price: ticker.last,
|
|
14
|
+
ask_price: ticker.lowest_ask,
|
|
15
|
+
bid_price: ticker.highest_bid,
|
|
16
|
+
// GATE API doesn't provide bid/ask volumes in tickers endpoint
|
|
17
|
+
// We'll need to use order book for that if required
|
|
18
|
+
ask_volume: '0',
|
|
19
|
+
bid_volume: '0',
|
|
20
|
+
// total_size is the open interest
|
|
21
|
+
open_interest: ticker.total_size,
|
|
22
|
+
// funding_rate is the current funding rate
|
|
23
|
+
interest_rate_long: ticker.funding_rate ? `${-parseFloat(ticker.funding_rate)}` : undefined,
|
|
24
|
+
interest_rate_short: ticker.funding_rate,
|
|
25
|
+
})), repeat({ delay: 5000 }), retry({ delay: 1000 }));
|
|
26
|
+
// 从现货tickers获取价格和交易量数据
|
|
27
|
+
const quoteFromSpotTickers$ = defer(() => getSpotTickers({})).pipe(mergeMap((tickers) => tickers), map((ticker) => {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
return ({
|
|
30
|
+
datasource_id: 'GATE',
|
|
31
|
+
product_id: encodePath('GATE', 'SPOT', ticker.currency_pair),
|
|
32
|
+
last_price: ticker.last,
|
|
33
|
+
ask_price: ticker.lowest_ask,
|
|
34
|
+
bid_price: ticker.highest_bid,
|
|
35
|
+
ask_volume: (_a = ticker.lowest_size) !== null && _a !== void 0 ? _a : '0',
|
|
36
|
+
bid_volume: (_b = ticker.highest_size) !== null && _b !== void 0 ? _b : '0',
|
|
37
|
+
// 现货没有持仓量的概念,设置为0
|
|
38
|
+
open_interest: '0',
|
|
39
|
+
});
|
|
40
|
+
}), repeat({ delay: 5000 }), retry({ delay: 1000 }));
|
|
41
|
+
const quoteSources$ = [quoteFromTickers$, quoteFromSpotTickers$];
|
|
42
|
+
const quote$ = defer(() => merge(...quoteSources$.map((x$) => defer(() => x$).pipe(
|
|
43
|
+
// 防止单个流关闭导致整体关闭
|
|
44
|
+
catchError(() => EMPTY))))).pipe(groupBy((x) => encodePath(x.datasource_id, x.product_id)), mergeMap((group$) => {
|
|
45
|
+
return group$.pipe(
|
|
46
|
+
//
|
|
47
|
+
scan((acc, cur) => Object.assign(acc, cur), {}));
|
|
48
|
+
}), share());
|
|
49
|
+
// 写入数据库
|
|
50
|
+
if (process.env.WRITE_QUOTE_TO_SQL === 'true') {
|
|
51
|
+
terminal.channel.publishChannel('quote', { pattern: `^GATE/` }, (channel_id) => {
|
|
52
|
+
const [datasource_id, product_id] = decodePath(channel_id);
|
|
53
|
+
if (!datasource_id) {
|
|
54
|
+
throw 'datasource_id is required';
|
|
55
|
+
}
|
|
56
|
+
if (!product_id) {
|
|
57
|
+
throw 'product_id is required';
|
|
58
|
+
}
|
|
59
|
+
return quote$.pipe(filter((x) => x.product_id === product_id));
|
|
60
|
+
});
|
|
61
|
+
quote$
|
|
62
|
+
.pipe(writeToSQL({
|
|
63
|
+
terminal,
|
|
64
|
+
writeInterval: 1000,
|
|
65
|
+
tableName: 'quote',
|
|
66
|
+
conflictKeys: ['datasource_id', 'product_id'],
|
|
67
|
+
}))
|
|
68
|
+
.subscribe();
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=quote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/services/markets/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { IQuote } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport {\n defer,\n filter,\n from,\n map,\n mergeMap,\n repeat,\n retry,\n shareReplay,\n merge,\n catchError,\n EMPTY,\n groupBy,\n scan,\n share,\n tap,\n} from 'rxjs';\nimport { getFuturesTickers, getFuturesContracts, getSpotTickers } from '../../api/public-api';\n\nconst terminal = Terminal.fromNodeEnv();\n\n// 获取所有USDT永续合约\nconst usdtFutureContracts$ = defer(() => getFuturesContracts('usdt', {})).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 60_000 }),\n shareReplay(1),\n);\n\n// 从tickers获取价格和交易量数据\nconst quoteFromTickers$ = defer(() => getFuturesTickers('usdt', {})).pipe(\n mergeMap((tickers) => tickers),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'GATE',\n product_id: encodePath('GATE', 'FUTURE', ticker.contract),\n last_price: ticker.last,\n ask_price: ticker.lowest_ask,\n bid_price: ticker.highest_bid,\n // GATE API doesn't provide bid/ask volumes in tickers endpoint\n // We'll need to use order book for that if required\n ask_volume: '0',\n bid_volume: '0',\n // total_size is the open interest\n open_interest: ticker.total_size,\n // funding_rate is the current funding rate\n interest_rate_long: ticker.funding_rate ? `${-parseFloat(ticker.funding_rate)}` : undefined,\n interest_rate_short: ticker.funding_rate,\n }),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 1000 }),\n);\n\n// 从现货tickers获取价格和交易量数据\nconst quoteFromSpotTickers$ = defer(() => getSpotTickers({})).pipe(\n mergeMap((tickers) => tickers),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'GATE',\n product_id: encodePath('GATE', 'SPOT', ticker.currency_pair),\n last_price: ticker.last,\n ask_price: ticker.lowest_ask,\n bid_price: ticker.highest_bid,\n ask_volume: ticker.lowest_size ?? '0',\n bid_volume: ticker.highest_size ?? '0',\n // 现货没有持仓量的概念,设置为0\n open_interest: '0',\n }),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteSources$ = [quoteFromTickers$, quoteFromSpotTickers$];\n\nconst quote$ = defer(() =>\n merge(\n ...quoteSources$.map((x$) =>\n defer(() => x$).pipe(\n // 防止单个流关闭导致整体关闭\n catchError(() => EMPTY),\n ),\n ),\n ),\n).pipe(\n groupBy((x) => encodePath(x.datasource_id, x.product_id)),\n mergeMap((group$) => {\n return group$.pipe(\n //\n scan((acc, cur) => Object.assign(acc, cur), {} as Partial<IQuote>),\n );\n }),\n share(),\n);\n\n// 写入数据库\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n terminal.channel.publishChannel('quote', { pattern: `^GATE/` }, (channel_id) => {\n const [datasource_id, product_id] = decodePath(channel_id);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n return quote$.pipe(filter((x) => x.product_id === product_id));\n });\n quote$\n .pipe(\n writeToSQL({\n terminal,\n writeInterval: 1000,\n tableName: 'quote',\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n}\n"]}
|
package/lib/api/public-api.d.ts
CHANGED
|
@@ -122,7 +122,7 @@ export declare const getFuturesTickers: (settle: string, params?: {
|
|
|
122
122
|
/**
|
|
123
123
|
* 获取交易对 ticker 信息
|
|
124
124
|
*
|
|
125
|
-
* https://www.gate.
|
|
125
|
+
* https://www.gate.com/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E4%BA%A4%E6%98%93%E5%AF%B9-ticker-%E4%BF%A1%E6%81%AF
|
|
126
126
|
*/
|
|
127
127
|
export declare const getSpotTickers: (params: {
|
|
128
128
|
currency_pair?: string;
|
package/lib/api/public-api.js
CHANGED
|
@@ -38,7 +38,7 @@ exports.getFuturesTickers = getFuturesTickers;
|
|
|
38
38
|
/**
|
|
39
39
|
* 获取交易对 ticker 信息
|
|
40
40
|
*
|
|
41
|
-
* https://www.gate.
|
|
41
|
+
* https://www.gate.com/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E4%BA%A4%E6%98%93%E5%AF%B9-ticker-%E4%BF%A1%E6%81%AF
|
|
42
42
|
*/
|
|
43
43
|
const getSpotTickers = (params) => (0, http_client_1.requestPublic)('GET', `/api/v4/spot/tickers`, params);
|
|
44
44
|
exports.getSpotTickers = getSpotTickers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAC7C,+CAA8C;AAE9C;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,CACjC,MAAc,EACd,MAA4C,EA8C5C,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC;AAhD5D,QAAA,mBAAmB,uBAgDyC;AAEzE;;;;;;;;GAQG;AACI,MAAM,oBAAoB,GAAG,CAClC,MAAc,EACd,MAA4C,EAM5C,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC;AAR/D,QAAA,oBAAoB,wBAQ2C;AAE5E;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAc,EACd,MAKC,EAaA,EAAE,CACH,0BAAW,CAAC,QAAQ,CAAC,sBAAsB,MAAM,EAAE,EAAE,GAAG,EAAE,KAAM,EAAE,GAAG,EAAE,CACrE,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,aAAa,EAAE,MAAM,CAAC,CACrE,CAAC;AAvBS,QAAA,mBAAmB,uBAuB5B;AAEJ;;;;GAIG;AACI,MAAM,iBAAiB,GAAG,CAC/B,MAAc,EACd,MAA8B,EAyB9B,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,UAAU,EAAE,MAAM,CAAC,CAAC;AA3B1D,QAAA,iBAAiB,qBA2ByC;AAEvE;;;;GAIG;AACI,MAAM,cAAc,GAAG,CAAC,MAG9B,EAoBC,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAvB7C,QAAA,cAAc,kBAuB+B;AAE1D;;;GAGG;AACI,MAAM,oBAAoB,GAAG,GAqBlC,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AArBrC,QAAA,oBAAoB,wBAqBiB","sourcesContent":["import { rateLimiter } from './rate-limiter';\nimport { requestPublic } from './http-client';\n\n/**\n * 查询所有的合约信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E6%89%80%E6%9C%89%E7%9A%84%E5%90%88%E7%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesContracts = (\n settle: string,\n params?: { limit?: number; offset?: number },\n): Promise<\n {\n name: string;\n type: string;\n quanto_multiplier: string;\n ref_discount_rate: string;\n order_price_deviate: string;\n maintenance_rate: string;\n mark_type: string;\n last_price: string;\n mark_price: string;\n index_price: string;\n funding_rate_indicative: string;\n mark_price_round: string;\n funding_offset: number;\n in_delisting: boolean;\n risk_limit_base: string;\n interest_rate: string;\n order_price_round: string;\n order_size_min: number;\n ref_rebate_rate: string;\n funding_interval: number;\n risk_limit_step: string;\n leverage_min: string;\n leverage_max: string;\n risk_limit_max: string;\n maker_fee_rate: string;\n taker_fee_rate: string;\n funding_rate: string;\n order_size_max: number;\n funding_next_apply: number;\n short_users: number;\n config_change_time: number;\n trade_size: number;\n position_size: number;\n long_users: number;\n funding_impact_value: string;\n orders_limit: number;\n trade_id: number;\n orderbook_id: number;\n enable_bonus: boolean;\n enable_credit: boolean;\n create_time: number;\n funding_cap_ratio: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/contracts`, params);\n\n/**\n * 合约市场历史资金费率\n *\n * - Note: 该接口返回的数据是按照时间倒序排列的\n * - Note: limit 参数最大值为 1000\n * - Note: t 字段为秒级时间戳 (Unix Second),r 字段为资金费率 (0-1 单位)\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E5%8E%86%E5%8F%B2%E8%B5%84%E9%87%91%E8%B4%B9%E7%8E%87\n */\nexport const getFutureFundingRate = (\n settle: string,\n params: { contract: string; limit?: number },\n): Promise<\n {\n t: number;\n r: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/funding_rate`, params);\n\n/**\n * 查询合约市场深度信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E6%B7%B1%E5%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesOrderBook = async (\n settle: string,\n params: {\n contract: string;\n interval?: string;\n limit?: number;\n with_id?: boolean;\n },\n): Promise<{\n id: number;\n current: number;\n update: number;\n asks: {\n p: string;\n s: string;\n }[];\n bids: {\n p: string;\n s: string;\n }[];\n}> =>\n rateLimiter.schedule(`futures-order-book:${settle}`, 200, 10_000, () =>\n requestPublic('GET', `/api/v4/futures/${settle}/order_book`, params),\n );\n\n/**\n * 获取所有合约交易行情统计\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E6%89%80%E6%9C%89%E5%90%88%E7%BA%A6%E4%BA%A4%E6%98%93%E8%A1%8C%E6%83%85%E7%BB%9F%E8%AE%A1\n */\nexport const getFuturesTickers = (\n settle: string,\n params?: { contract?: string },\n): Promise<\n {\n contract: string;\n last: string;\n change_percentage: string;\n total_size: string;\n low_24h: string;\n high_24h: string;\n volume_24h: string;\n volume_24h_btc: string;\n volume_24h_usd: string;\n volume_24h_base: string;\n volume_24h_quote: string;\n volume_24h_settle: string;\n mark_price: string;\n funding_rate: string;\n funding_rate_indicative: string;\n index_price: string;\n quanto_base_rate: string;\n basis_rate: string;\n basis_value: string;\n lowest_ask: string;\n highest_bid: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/tickers`, params);\n\n/**\n * 获取交易对 ticker 信息\n *\n * https://www.gate.
|
|
1
|
+
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/api/public-api.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAC7C,+CAA8C;AAE9C;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,CACjC,MAAc,EACd,MAA4C,EA8C5C,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC;AAhD5D,QAAA,mBAAmB,uBAgDyC;AAEzE;;;;;;;;GAQG;AACI,MAAM,oBAAoB,GAAG,CAClC,MAAc,EACd,MAA4C,EAM5C,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC;AAR/D,QAAA,oBAAoB,wBAQ2C;AAE5E;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAc,EACd,MAKC,EAaA,EAAE,CACH,0BAAW,CAAC,QAAQ,CAAC,sBAAsB,MAAM,EAAE,EAAE,GAAG,EAAE,KAAM,EAAE,GAAG,EAAE,CACrE,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,aAAa,EAAE,MAAM,CAAC,CACrE,CAAC;AAvBS,QAAA,mBAAmB,uBAuB5B;AAEJ;;;;GAIG;AACI,MAAM,iBAAiB,GAAG,CAC/B,MAAc,EACd,MAA8B,EAyB9B,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,mBAAmB,MAAM,UAAU,EAAE,MAAM,CAAC,CAAC;AA3B1D,QAAA,iBAAiB,qBA2ByC;AAEvE;;;;GAIG;AACI,MAAM,cAAc,GAAG,CAAC,MAG9B,EAoBC,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAvB7C,QAAA,cAAc,kBAuB+B;AAE1D;;;GAGG;AACI,MAAM,oBAAoB,GAAG,GAqBlC,EAAE,CAAC,IAAA,2BAAa,EAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AArBrC,QAAA,oBAAoB,wBAqBiB","sourcesContent":["import { rateLimiter } from './rate-limiter';\nimport { requestPublic } from './http-client';\n\n/**\n * 查询所有的合约信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E6%89%80%E6%9C%89%E7%9A%84%E5%90%88%E7%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesContracts = (\n settle: string,\n params?: { limit?: number; offset?: number },\n): Promise<\n {\n name: string;\n type: string;\n quanto_multiplier: string;\n ref_discount_rate: string;\n order_price_deviate: string;\n maintenance_rate: string;\n mark_type: string;\n last_price: string;\n mark_price: string;\n index_price: string;\n funding_rate_indicative: string;\n mark_price_round: string;\n funding_offset: number;\n in_delisting: boolean;\n risk_limit_base: string;\n interest_rate: string;\n order_price_round: string;\n order_size_min: number;\n ref_rebate_rate: string;\n funding_interval: number;\n risk_limit_step: string;\n leverage_min: string;\n leverage_max: string;\n risk_limit_max: string;\n maker_fee_rate: string;\n taker_fee_rate: string;\n funding_rate: string;\n order_size_max: number;\n funding_next_apply: number;\n short_users: number;\n config_change_time: number;\n trade_size: number;\n position_size: number;\n long_users: number;\n funding_impact_value: string;\n orders_limit: number;\n trade_id: number;\n orderbook_id: number;\n enable_bonus: boolean;\n enable_credit: boolean;\n create_time: number;\n funding_cap_ratio: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/contracts`, params);\n\n/**\n * 合约市场历史资金费率\n *\n * - Note: 该接口返回的数据是按照时间倒序排列的\n * - Note: limit 参数最大值为 1000\n * - Note: t 字段为秒级时间戳 (Unix Second),r 字段为资金费率 (0-1 单位)\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E5%8E%86%E5%8F%B2%E8%B5%84%E9%87%91%E8%B4%B9%E7%8E%87\n */\nexport const getFutureFundingRate = (\n settle: string,\n params: { contract: string; limit?: number },\n): Promise<\n {\n t: number;\n r: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/funding_rate`, params);\n\n/**\n * 查询合约市场深度信息\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E5%90%88%E7%BA%A6%E5%B8%82%E5%9C%BA%E6%B7%B1%E5%BA%A6%E4%BF%A1%E6%81%AF\n */\nexport const getFuturesOrderBook = async (\n settle: string,\n params: {\n contract: string;\n interval?: string;\n limit?: number;\n with_id?: boolean;\n },\n): Promise<{\n id: number;\n current: number;\n update: number;\n asks: {\n p: string;\n s: string;\n }[];\n bids: {\n p: string;\n s: string;\n }[];\n}> =>\n rateLimiter.schedule(`futures-order-book:${settle}`, 200, 10_000, () =>\n requestPublic('GET', `/api/v4/futures/${settle}/order_book`, params),\n );\n\n/**\n * 获取所有合约交易行情统计\n *\n * https://www.gate.io/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E6%89%80%E6%9C%89%E5%90%88%E7%BA%A6%E4%BA%A4%E6%98%93%E8%A1%8C%E6%83%85%E7%BB%9F%E8%AE%A1\n */\nexport const getFuturesTickers = (\n settle: string,\n params?: { contract?: string },\n): Promise<\n {\n contract: string;\n last: string;\n change_percentage: string;\n total_size: string;\n low_24h: string;\n high_24h: string;\n volume_24h: string;\n volume_24h_btc: string;\n volume_24h_usd: string;\n volume_24h_base: string;\n volume_24h_quote: string;\n volume_24h_settle: string;\n mark_price: string;\n funding_rate: string;\n funding_rate_indicative: string;\n index_price: string;\n quanto_base_rate: string;\n basis_rate: string;\n basis_value: string;\n lowest_ask: string;\n highest_bid: string;\n }[]\n> => requestPublic('GET', `/api/v4/futures/${settle}/tickers`, params);\n\n/**\n * 获取交易对 ticker 信息\n *\n * https://www.gate.com/docs/developers/apiv4/zh_CN/#%E8%8E%B7%E5%8F%96%E4%BA%A4%E6%98%93%E5%AF%B9-ticker-%E4%BF%A1%E6%81%AF\n */\nexport const getSpotTickers = (params: {\n currency_pair?: string;\n timezone?: string;\n}): Promise<\n Array<{\n currency_pair: string;\n last: string;\n lowest_ask: string;\n lowest_size: string;\n highest_bid: string;\n highest_size: string;\n change_percentage: string;\n change_utc0: string;\n change_utc8: string;\n base_volume: string;\n quote_volume: string;\n high_24h: string;\n low_24h: string;\n etf_net_value: string;\n etf_pre_net_value: string;\n etf_pre_timestamp: string;\n etf_leverage: string;\n }>\n> => requestPublic('GET', `/api/v4/spot/tickers`, params);\n\n/**\n * 查询支持的所有现货交易对\n * https://www.gate.com/docs/developers/apiv4/zh_CN/#%E6%9F%A5%E8%AF%A2%E6%94%AF%E6%8C%81%E7%9A%84%E6%89%80%E6%9C%89%E4%BA%A4%E6%98%93%E5%AF%B9\n */\nexport const getSpotCurrencyPairs = (): Promise<\n Array<{\n id: string;\n base: string;\n base_name: string;\n quote: string;\n quote_name: string;\n fee: string;\n min_base_amount: string;\n min_quote_amount: string;\n max_base_amount: string;\n max_quote_amount: string;\n amount_precision: Number;\n precision: Number;\n trade_status: string;\n sell_start: Number;\n buy_start: number;\n delisting_time: number;\n trade_url: string;\n st_tag: boolean;\n }>\n> => requestPublic('GET', `/spot/currency_pairs`);\n"]}
|
package/lib/index.d.ts
CHANGED
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;AACpC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;AACpC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,0BAA0B,CAAC"}
|
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,4CAA0C;AAC1C,+BAA6B;AAC7B,+BAA6B","sourcesContent":["import './services/markets/product';\nimport './services/markets/interest-rate';\nimport './services/transfer';\nimport './services/exchange';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,4CAA0C;AAC1C,+BAA6B;AAC7B,+BAA6B;AAC7B,oCAAkC","sourcesContent":["import './services/markets/product';\nimport './services/markets/interest-rate';\nimport './services/transfer';\nimport './services/exchange';\nimport './services/markets/quote';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../../src/services/markets/quote.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const protocol_1 = require("@yuants/protocol");
|
|
4
|
+
const sql_1 = require("@yuants/sql");
|
|
5
|
+
const utils_1 = require("@yuants/utils");
|
|
6
|
+
const rxjs_1 = require("rxjs");
|
|
7
|
+
const public_api_1 = require("../../api/public-api");
|
|
8
|
+
const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
9
|
+
// 获取所有USDT永续合约
|
|
10
|
+
const usdtFutureContracts$ = (0, rxjs_1.defer)(() => (0, public_api_1.getFuturesContracts)('usdt', {})).pipe((0, rxjs_1.repeat)({ delay: 3600000 }), (0, rxjs_1.retry)({ delay: 60000 }), (0, rxjs_1.shareReplay)(1));
|
|
11
|
+
// 从tickers获取价格和交易量数据
|
|
12
|
+
const quoteFromTickers$ = (0, rxjs_1.defer)(() => (0, public_api_1.getFuturesTickers)('usdt', {})).pipe((0, rxjs_1.mergeMap)((tickers) => tickers), (0, rxjs_1.map)((ticker) => ({
|
|
13
|
+
datasource_id: 'GATE',
|
|
14
|
+
product_id: (0, utils_1.encodePath)('GATE', 'FUTURE', ticker.contract),
|
|
15
|
+
last_price: ticker.last,
|
|
16
|
+
ask_price: ticker.lowest_ask,
|
|
17
|
+
bid_price: ticker.highest_bid,
|
|
18
|
+
// GATE API doesn't provide bid/ask volumes in tickers endpoint
|
|
19
|
+
// We'll need to use order book for that if required
|
|
20
|
+
ask_volume: '0',
|
|
21
|
+
bid_volume: '0',
|
|
22
|
+
// total_size is the open interest
|
|
23
|
+
open_interest: ticker.total_size,
|
|
24
|
+
// funding_rate is the current funding rate
|
|
25
|
+
interest_rate_long: ticker.funding_rate ? `${-parseFloat(ticker.funding_rate)}` : undefined,
|
|
26
|
+
interest_rate_short: ticker.funding_rate,
|
|
27
|
+
})), (0, rxjs_1.repeat)({ delay: 5000 }), (0, rxjs_1.retry)({ delay: 1000 }));
|
|
28
|
+
// 从现货tickers获取价格和交易量数据
|
|
29
|
+
const quoteFromSpotTickers$ = (0, rxjs_1.defer)(() => (0, public_api_1.getSpotTickers)({})).pipe((0, rxjs_1.mergeMap)((tickers) => tickers), (0, rxjs_1.map)((ticker) => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
return ({
|
|
32
|
+
datasource_id: 'GATE',
|
|
33
|
+
product_id: (0, utils_1.encodePath)('GATE', 'SPOT', ticker.currency_pair),
|
|
34
|
+
last_price: ticker.last,
|
|
35
|
+
ask_price: ticker.lowest_ask,
|
|
36
|
+
bid_price: ticker.highest_bid,
|
|
37
|
+
ask_volume: (_a = ticker.lowest_size) !== null && _a !== void 0 ? _a : '0',
|
|
38
|
+
bid_volume: (_b = ticker.highest_size) !== null && _b !== void 0 ? _b : '0',
|
|
39
|
+
// 现货没有持仓量的概念,设置为0
|
|
40
|
+
open_interest: '0',
|
|
41
|
+
});
|
|
42
|
+
}), (0, rxjs_1.repeat)({ delay: 5000 }), (0, rxjs_1.retry)({ delay: 1000 }));
|
|
43
|
+
const quoteSources$ = [quoteFromTickers$, quoteFromSpotTickers$];
|
|
44
|
+
const quote$ = (0, rxjs_1.defer)(() => (0, rxjs_1.merge)(...quoteSources$.map((x$) => (0, rxjs_1.defer)(() => x$).pipe(
|
|
45
|
+
// 防止单个流关闭导致整体关闭
|
|
46
|
+
(0, rxjs_1.catchError)(() => rxjs_1.EMPTY))))).pipe((0, rxjs_1.groupBy)((x) => (0, utils_1.encodePath)(x.datasource_id, x.product_id)), (0, rxjs_1.mergeMap)((group$) => {
|
|
47
|
+
return group$.pipe(
|
|
48
|
+
//
|
|
49
|
+
(0, rxjs_1.scan)((acc, cur) => Object.assign(acc, cur), {}));
|
|
50
|
+
}), (0, rxjs_1.share)());
|
|
51
|
+
// 写入数据库
|
|
52
|
+
if (process.env.WRITE_QUOTE_TO_SQL === 'true') {
|
|
53
|
+
terminal.channel.publishChannel('quote', { pattern: `^GATE/` }, (channel_id) => {
|
|
54
|
+
const [datasource_id, product_id] = (0, utils_1.decodePath)(channel_id);
|
|
55
|
+
if (!datasource_id) {
|
|
56
|
+
throw 'datasource_id is required';
|
|
57
|
+
}
|
|
58
|
+
if (!product_id) {
|
|
59
|
+
throw 'product_id is required';
|
|
60
|
+
}
|
|
61
|
+
return quote$.pipe((0, rxjs_1.filter)((x) => x.product_id === product_id));
|
|
62
|
+
});
|
|
63
|
+
quote$
|
|
64
|
+
.pipe((0, sql_1.writeToSQL)({
|
|
65
|
+
terminal,
|
|
66
|
+
writeInterval: 1000,
|
|
67
|
+
tableName: 'quote',
|
|
68
|
+
conflictKeys: ['datasource_id', 'product_id'],
|
|
69
|
+
}))
|
|
70
|
+
.subscribe();
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=quote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/services/markets/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { IQuote } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport {\n defer,\n filter,\n from,\n map,\n mergeMap,\n repeat,\n retry,\n shareReplay,\n merge,\n catchError,\n EMPTY,\n groupBy,\n scan,\n share,\n tap,\n} from 'rxjs';\nimport { getFuturesTickers, getFuturesContracts, getSpotTickers } from '../../api/public-api';\n\nconst terminal = Terminal.fromNodeEnv();\n\n// 获取所有USDT永续合约\nconst usdtFutureContracts$ = defer(() => getFuturesContracts('usdt', {})).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 60_000 }),\n shareReplay(1),\n);\n\n// 从tickers获取价格和交易量数据\nconst quoteFromTickers$ = defer(() => getFuturesTickers('usdt', {})).pipe(\n mergeMap((tickers) => tickers),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'GATE',\n product_id: encodePath('GATE', 'FUTURE', ticker.contract),\n last_price: ticker.last,\n ask_price: ticker.lowest_ask,\n bid_price: ticker.highest_bid,\n // GATE API doesn't provide bid/ask volumes in tickers endpoint\n // We'll need to use order book for that if required\n ask_volume: '0',\n bid_volume: '0',\n // total_size is the open interest\n open_interest: ticker.total_size,\n // funding_rate is the current funding rate\n interest_rate_long: ticker.funding_rate ? `${-parseFloat(ticker.funding_rate)}` : undefined,\n interest_rate_short: ticker.funding_rate,\n }),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 1000 }),\n);\n\n// 从现货tickers获取价格和交易量数据\nconst quoteFromSpotTickers$ = defer(() => getSpotTickers({})).pipe(\n mergeMap((tickers) => tickers),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'GATE',\n product_id: encodePath('GATE', 'SPOT', ticker.currency_pair),\n last_price: ticker.last,\n ask_price: ticker.lowest_ask,\n bid_price: ticker.highest_bid,\n ask_volume: ticker.lowest_size ?? '0',\n bid_volume: ticker.highest_size ?? '0',\n // 现货没有持仓量的概念,设置为0\n open_interest: '0',\n }),\n ),\n repeat({ delay: 5000 }),\n retry({ delay: 1000 }),\n);\n\nconst quoteSources$ = [quoteFromTickers$, quoteFromSpotTickers$];\n\nconst quote$ = defer(() =>\n merge(\n ...quoteSources$.map((x$) =>\n defer(() => x$).pipe(\n // 防止单个流关闭导致整体关闭\n catchError(() => EMPTY),\n ),\n ),\n ),\n).pipe(\n groupBy((x) => encodePath(x.datasource_id, x.product_id)),\n mergeMap((group$) => {\n return group$.pipe(\n //\n scan((acc, cur) => Object.assign(acc, cur), {} as Partial<IQuote>),\n );\n }),\n share(),\n);\n\n// 写入数据库\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n terminal.channel.publishChannel('quote', { pattern: `^GATE/` }, (channel_id) => {\n const [datasource_id, product_id] = decodePath(channel_id);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n return quote$.pipe(filter((x) => x.product_id === product_id));\n });\n quote$\n .pipe(\n writeToSQL({\n terminal,\n writeInterval: 1000,\n tableName: 'quote',\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-gate",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.17",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"lib",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"@yuants/data-series": "0.3.51",
|
|
20
20
|
"@yuants/data-interest-rate": "0.1.48",
|
|
21
21
|
"@yuants/exchange": "0.3.1",
|
|
22
|
+
"@yuants/data-quote": "0.2.43",
|
|
22
23
|
"rxjs": "~7.5.6"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
package/temp/package-deps.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"apps/vendor-gate/AGENTS.md": "59be8d734f8a91ae5f7377e7c688f1fccb8641b7",
|
|
3
|
-
"apps/vendor-gate/CHANGELOG.json": "
|
|
4
|
-
"apps/vendor-gate/CHANGELOG.md": "
|
|
3
|
+
"apps/vendor-gate/CHANGELOG.json": "7b0f5a70a37440921781f4d41d58efdff697f3a2",
|
|
4
|
+
"apps/vendor-gate/CHANGELOG.md": "0c6aa3d10f6003651958025c930c2dad7a26b23c",
|
|
5
5
|
"apps/vendor-gate/README.md": "ea5ee3a61cd87d9104d729902dfaccac9b9913e0",
|
|
6
6
|
"apps/vendor-gate/SESSION_NOTES.md": "768c89019ebca263968450d853c8038b0d56f619",
|
|
7
7
|
"apps/vendor-gate/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
"apps/vendor-gate/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
|
|
10
10
|
"apps/vendor-gate/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
|
|
11
11
|
"apps/vendor-gate/etc/vendor-gate.api.md": "970682cd589432de553cc5cee2a0abe73814a515",
|
|
12
|
-
"apps/vendor-gate/package.json": "
|
|
12
|
+
"apps/vendor-gate/package.json": "f18c454a51669a7a21283d93a4c4c1f86e0f2e14",
|
|
13
13
|
"apps/vendor-gate/src/api/http-client.ts": "013dcdfebaf136c83274638ceb697146a8e3f218",
|
|
14
14
|
"apps/vendor-gate/src/api/private-api.ts": "644570bc10fd22b7e9d4d6a0267397af9d5510f0",
|
|
15
|
-
"apps/vendor-gate/src/api/public-api.ts": "
|
|
15
|
+
"apps/vendor-gate/src/api/public-api.ts": "faaad3eeeaa9a32e2b96a38a111878011867bd1e",
|
|
16
16
|
"apps/vendor-gate/src/api/rate-limiter.ts": "047c51029ffcaf98190cfd04d96816bbced5fa7c",
|
|
17
|
-
"apps/vendor-gate/src/index.ts": "
|
|
17
|
+
"apps/vendor-gate/src/index.ts": "31888627bccab532d55bd91833d80c72a4afae9b",
|
|
18
18
|
"apps/vendor-gate/src/services/accounts/future.ts": "840e18154f16ad4a3e265195e39eb02bd90ab237",
|
|
19
19
|
"apps/vendor-gate/src/services/accounts/profile.ts": "4132c7c3d9760b9a6694d5b3eae7e8b2847fe6c1",
|
|
20
20
|
"apps/vendor-gate/src/services/accounts/spot.ts": "b861a4584e73eb181d79ea28ac216747895df086",
|
|
@@ -23,12 +23,13 @@
|
|
|
23
23
|
"apps/vendor-gate/src/services/exchange.ts": "5672321dea53f8c4592d8d2163de47075ba8fef5",
|
|
24
24
|
"apps/vendor-gate/src/services/markets/interest-rate.ts": "e669eb1d664448f309bb062907b273157d1c111e",
|
|
25
25
|
"apps/vendor-gate/src/services/markets/product.ts": "38f600251ddb0a17e111ccceda9231bee98c60a3",
|
|
26
|
+
"apps/vendor-gate/src/services/markets/quote.ts": "1624d58b9c607ae01300de292de3ed49a2f2e037",
|
|
26
27
|
"apps/vendor-gate/src/services/orders/cancelOrder.ts": "7dfdd30eaac89742f1050bf0fb47d8053ccecb28",
|
|
27
28
|
"apps/vendor-gate/src/services/orders/listOrders.ts": "9e4bd2c53cd768d609d1368fd37ff783f9b4d52f",
|
|
28
29
|
"apps/vendor-gate/src/services/orders/submitOrder.ts": "830e79b7e4c3fa0ea364382c801fa5527c2d9761",
|
|
29
30
|
"apps/vendor-gate/src/services/transfer.ts": "cf7d6cbcef3fe217b607f0bba7719d62ac603d66",
|
|
30
31
|
"apps/vendor-gate/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
31
|
-
"apps/vendor-gate/.rush/temp/shrinkwrap-deps.json": "
|
|
32
|
+
"apps/vendor-gate/.rush/temp/shrinkwrap-deps.json": "9aa98bfacea2eaf6aa77491dda2ea7632a0ce879",
|
|
32
33
|
"libraries/cache/temp/package-deps.json": "a4afa15e6462983f9d3735d31dc1ed8a683fb4dc",
|
|
33
34
|
"libraries/protocol/temp/package-deps.json": "0bd43721e96039b52d7b59c834dc6df45cf75e3f",
|
|
34
35
|
"libraries/transfer/temp/package-deps.json": "36c58299bd6c841c5ba7252d71881a881570d08c",
|
|
@@ -40,6 +41,7 @@
|
|
|
40
41
|
"libraries/data-series/temp/package-deps.json": "c89ebffe302757903aa54eff78f76cb855486b8c",
|
|
41
42
|
"libraries/data-interest-rate/temp/package-deps.json": "cef1e1cb0116ad593c24635684e0cbf03488d67c",
|
|
42
43
|
"libraries/exchange/temp/package-deps.json": "ee94ff641b8afcd48484829a1d6d66ffede2a69c",
|
|
44
|
+
"libraries/data-quote/temp/package-deps.json": "34d079eab44d2bf65e07b112ac2099c6e92a015e",
|
|
43
45
|
"libraries/extension/temp/package-deps.json": "9569c553c2f9a7d50b70d8f101fc2d3825aaccb9",
|
|
44
46
|
"tools/toolkit/temp/package-deps.json": "23e053490eb8feade23e4d45de4e54883e322711"
|
|
45
47
|
}
|