@yuants/vendor-okx 0.16.9 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account.js +198 -0
- package/dist/account.js.map +1 -0
- package/dist/api.js +463 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -0
- package/dist/cluster.js +80 -0
- package/dist/cluster.js.map +1 -0
- package/dist/extension.js +89 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/interest_rate.js +133 -0
- package/dist/interest_rate.js.map +1 -0
- package/dist/legacy_index.js +554 -0
- package/dist/legacy_index.js.map +1 -0
- package/dist/logger.js +91 -0
- package/dist/logger.js.map +1 -0
- package/dist/ohlc.js +171 -0
- package/dist/ohlc.js.map +1 -0
- package/dist/order.js +96 -0
- package/dist/order.js.map +1 -0
- package/dist/product.js +85 -0
- package/dist/product.js.map +1 -0
- package/dist/quote.js +58 -0
- package/dist/quote.js.map +1 -0
- package/dist/vendor-okx.d.ts +1 -0
- package/dist/websocket.js +80 -0
- package/dist/websocket.js.map +1 -0
- package/lib/account.d.ts +102 -0
- package/lib/account.d.ts.map +1 -0
- package/lib/account.js +201 -0
- package/lib/account.js.map +1 -0
- package/lib/api.d.ts +1401 -0
- package/lib/api.d.ts.map +1 -0
- package/lib/api.js +470 -0
- package/lib/api.js.map +1 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +5 -0
- package/lib/cli.js.map +1 -0
- package/lib/cluster.d.ts +2 -0
- package/lib/cluster.d.ts.map +1 -0
- package/lib/cluster.js +108 -0
- package/lib/cluster.js.map +1 -0
- package/lib/extension.d.ts +4 -0
- package/lib/extension.d.ts.map +1 -0
- package/lib/extension.js +91 -0
- package/lib/extension.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -0
- package/lib/index.js.map +1 -0
- package/lib/interest_rate.d.ts +2 -0
- package/lib/interest_rate.d.ts.map +1 -0
- package/lib/interest_rate.js +135 -0
- package/lib/interest_rate.js.map +1 -0
- package/lib/legacy_index.d.ts +2 -0
- package/lib/legacy_index.d.ts.map +1 -0
- package/lib/legacy_index.js +556 -0
- package/lib/legacy_index.js.map +1 -0
- package/lib/logger.d.ts +21 -0
- package/lib/logger.d.ts.map +1 -0
- package/lib/logger.js +98 -0
- package/lib/logger.js.map +1 -0
- package/lib/ohlc.d.ts +2 -0
- package/lib/ohlc.d.ts.map +1 -0
- package/lib/ohlc.js +173 -0
- package/lib/ohlc.js.map +1 -0
- package/lib/order.d.ts +4 -0
- package/lib/order.d.ts.map +1 -0
- package/lib/order.js +99 -0
- package/lib/order.js.map +1 -0
- package/lib/product.d.ts +6 -0
- package/lib/product.d.ts.map +1 -0
- package/lib/product.js +88 -0
- package/lib/product.js.map +1 -0
- package/lib/quote.d.ts +42 -0
- package/lib/quote.d.ts.map +1 -0
- package/lib/quote.js +61 -0
- package/lib/quote.js.map +1 -0
- package/lib/websocket.d.ts +14 -0
- package/lib/websocket.d.ts.map +1 -0
- package/lib/websocket.js +83 -0
- package/lib/websocket.js.map +1 -0
- package/package.json +9 -4
- package/temp/image-tag +1 -0
- package/temp/package-deps.json +42 -0
- package/temp/vendor-okx.api.json +177 -0
- package/temp/vendor-okx.api.md +9 -0
package/dist/api.js
ADDED
@@ -0,0 +1,463 @@
|
|
1
|
+
import { formatTime } from '@yuants/utils';
|
2
|
+
// @ts-ignore
|
3
|
+
import CryptoJS from 'crypto-js';
|
4
|
+
/**
|
5
|
+
* API v5: https://www.okx.com/docs-v5/#overview
|
6
|
+
*/
|
7
|
+
export class OkxClient {
|
8
|
+
constructor(config) {
|
9
|
+
this.config = config;
|
10
|
+
this.noAuth = true;
|
11
|
+
/**
|
12
|
+
* 获取所有产品行情信息
|
13
|
+
*
|
14
|
+
* 获取产品行情信息
|
15
|
+
*
|
16
|
+
* 限速:20次/2s
|
17
|
+
* 限速规则:IP
|
18
|
+
*
|
19
|
+
* https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-tickers
|
20
|
+
*/
|
21
|
+
this.getMarketTickers = (params) => this.request('GET', '/api/v5/market/tickers', params);
|
22
|
+
/**
|
23
|
+
* 获取账户资产估值
|
24
|
+
*
|
25
|
+
* 查看账户资产估值
|
26
|
+
*
|
27
|
+
* 限速:1次/s
|
28
|
+
* 限速规则:UserID
|
29
|
+
*
|
30
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-account-asset-valuation
|
31
|
+
*/
|
32
|
+
this.getAssetValuation = (params) => this.request('GET', '/api/v5/asset/asset-valuation', params);
|
33
|
+
/**
|
34
|
+
* 获取持仓总量
|
35
|
+
*
|
36
|
+
* 查询单个交易产品的市场的持仓总量
|
37
|
+
*
|
38
|
+
* 限速:20次/2s
|
39
|
+
* 限速规则:IP + instrumentID
|
40
|
+
*
|
41
|
+
* https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-open-interest
|
42
|
+
*/
|
43
|
+
this.getOpenInterest = (params) => this.request('GET', '/api/v5/public/open-interest', params);
|
44
|
+
/**
|
45
|
+
* 查看账户配置
|
46
|
+
* 查看当前账户的配置信息。
|
47
|
+
*
|
48
|
+
* 限速:5次/2s
|
49
|
+
* 限速规则:UserID
|
50
|
+
*
|
51
|
+
* https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-account-configuration
|
52
|
+
*/
|
53
|
+
this.getAccountConfig = () => this.request('GET', '/api/v5/account/config');
|
54
|
+
/**
|
55
|
+
* 获取市场借币杠杆利率和借币限额
|
56
|
+
*
|
57
|
+
* 限速:2次/2s
|
58
|
+
* 限速规则:IP
|
59
|
+
*
|
60
|
+
* https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-interest-rate-and-loan-quota
|
61
|
+
*/
|
62
|
+
this.getInterestRateLoanQuota = () => this.request('GET', '/api/v5/public/interest-rate-loan-quota');
|
63
|
+
/**
|
64
|
+
* 获取交易产品基础信息
|
65
|
+
*
|
66
|
+
* 获取所有可交易产品的信息列表。
|
67
|
+
*
|
68
|
+
* 限速:20次/2s
|
69
|
+
* 限速规则:IP +instType
|
70
|
+
*
|
71
|
+
* https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-instruments
|
72
|
+
*/
|
73
|
+
this.getInstruments = (params) => this.request('GET', '/api/v5/public/instruments', params);
|
74
|
+
/**
|
75
|
+
* 获取永续合约当前资金费率
|
76
|
+
* 获取当前资金费率
|
77
|
+
*
|
78
|
+
* 限速:20次/2s
|
79
|
+
* 限速规则:IP +instrumentID
|
80
|
+
*
|
81
|
+
* https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate
|
82
|
+
*/
|
83
|
+
this.getFundingRate = (params) => this.request('GET', '/api/v5/public/funding-rate', params);
|
84
|
+
/**
|
85
|
+
* 获取永续合约历史资金费率
|
86
|
+
*
|
87
|
+
* 获取最近3个月的历史资金费率
|
88
|
+
*
|
89
|
+
* 限速:10次/2s
|
90
|
+
* 限速规则:IP +instrumentID
|
91
|
+
*
|
92
|
+
* https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate-history
|
93
|
+
*/
|
94
|
+
this.getFundingRateHistory = (params) => this.request('GET', '/api/v5/public/funding-rate-history', params);
|
95
|
+
/**
|
96
|
+
* 获取标记价格历史K线数据
|
97
|
+
*
|
98
|
+
* 获取最近几年的标记价格K线数据
|
99
|
+
*
|
100
|
+
* 限速:10次/2s
|
101
|
+
* 限速规则:IP
|
102
|
+
*
|
103
|
+
* https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-mark-price-candlesticks-history
|
104
|
+
*/
|
105
|
+
this.getHistoryMarkPriceCandles = (params) => this.request('GET', '/api/v5/market/history-mark-price-candles', params);
|
106
|
+
/**
|
107
|
+
* GET / 获取交易产品历史K线数据
|
108
|
+
*
|
109
|
+
* 获取最近几年的历史k线数据(1s k线支持查询最近3个月的数据)
|
110
|
+
*
|
111
|
+
* 限速:20次/2s
|
112
|
+
*
|
113
|
+
* 限速规则:IP
|
114
|
+
*
|
115
|
+
* 期权不支持 1s K线, 其他业务线 (币币, 杠杆, 交割和永续)支持
|
116
|
+
*/
|
117
|
+
this.getHistoryCandles = (params) => this.request('GET', '/api/v5/market/history-candles', params);
|
118
|
+
/**
|
119
|
+
* 获取余币宝余额
|
120
|
+
*
|
121
|
+
* 限速:6次/s
|
122
|
+
* 限速规则:UserID
|
123
|
+
*
|
124
|
+
* https://www.okx.com/docs-v5/zh/#financial-product-savings-get-saving-balance
|
125
|
+
*/
|
126
|
+
this.getFinanceSavingsBalance = (params) => this.request('GET', '/api/v5/finance/savings/balance', params);
|
127
|
+
/**
|
128
|
+
* 余币宝申购/赎回
|
129
|
+
*
|
130
|
+
* 仅资金账户中的资产支持余币宝申购。
|
131
|
+
*
|
132
|
+
* 限速:6次/s
|
133
|
+
*
|
134
|
+
* 限速规则:UserID
|
135
|
+
*
|
136
|
+
* https://www.okx.com/docs-v5/zh/#financial-product-savings-post-savings-purchase-redemption
|
137
|
+
*/
|
138
|
+
this.postFinanceSavingsPurchaseRedempt = (params) => this.request('POST', '/api/v5/finance/savings/purchase-redempt', params);
|
139
|
+
/**
|
140
|
+
* GET / 获取市场借贷历史(公共)
|
141
|
+
*
|
142
|
+
* 公共接口无须鉴权
|
143
|
+
*
|
144
|
+
* 返回2021年12月14日后的记录
|
145
|
+
*
|
146
|
+
* 限速:6次/s
|
147
|
+
* 限速规则:IP
|
148
|
+
*
|
149
|
+
* https://www.okx.com/docs-v5/zh/#financial-product-savings-get-public-borrow-history-public
|
150
|
+
*/
|
151
|
+
this.getLendingRateHistory = (params) => this.request('GET', '/api/v5/finance/savings/lending-rate-history', params);
|
152
|
+
/**
|
153
|
+
* 提币
|
154
|
+
*
|
155
|
+
* 用户提币。普通子账户不支持提币。
|
156
|
+
*
|
157
|
+
* API只能提币到免认证地址/账户上,通过 WEB/APP 可以设置免认证地址。
|
158
|
+
*
|
159
|
+
* 关于标签:某些币种如XRP充币时同时需要一个充值地址和标签(又名memo/payment_id),标签是一种保证您的充币地址唯一性的数字串,与充币地址成对出现并一一对应。请您务必遵守正确的充值步骤,在提币时输入完整信息,否则将面临丢失币的风险!
|
160
|
+
* 对于有标签的币种,如果是OKX用户间的提币,请走内部转账不要走链上提币。
|
161
|
+
*
|
162
|
+
* 限速:6次/s
|
163
|
+
* 限速规则:UserID
|
164
|
+
*
|
165
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-withdrawal
|
166
|
+
*/
|
167
|
+
this.postAssetWithdrawal = (params) => this.request('POST', '/api/v5/asset/withdrawal', params);
|
168
|
+
/**
|
169
|
+
* 获取充值地址信息
|
170
|
+
*
|
171
|
+
* 获取各个币种的充值地址,包括曾使用过的老地址。
|
172
|
+
*
|
173
|
+
* 限速:6次/s
|
174
|
+
* 限速规则:UserID
|
175
|
+
*
|
176
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-address
|
177
|
+
*/
|
178
|
+
this.getAssetDepositAddress = (params) => this.request('GET', '/api/v5/asset/deposit-address', params);
|
179
|
+
/**
|
180
|
+
* 获取提币记录
|
181
|
+
*
|
182
|
+
* 根据币种,提币状态,时间范围获取提币记录,按照时间倒序排列,默认返回100条数据。
|
183
|
+
* 支持Websocket订阅,参考 提币信息频道。
|
184
|
+
*
|
185
|
+
* 限速:6 次/s
|
186
|
+
* 限速规则:UserID
|
187
|
+
*
|
188
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-withdrawal-history
|
189
|
+
*/
|
190
|
+
this.getAssetWithdrawalHistory = (params) => this.request('GET', '/api/v5/asset/withdrawal-history', params);
|
191
|
+
/**
|
192
|
+
* 获取充值记录
|
193
|
+
*
|
194
|
+
* 根据币种,充值状态,时间范围获取充值记录,按照时间倒序排列,默认返回 100 条数据。
|
195
|
+
* 支持Websocket订阅,参考 充值信息频道。
|
196
|
+
*
|
197
|
+
* 限速:6次/s
|
198
|
+
* 限速规则:UserID
|
199
|
+
*
|
200
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-history
|
201
|
+
*/
|
202
|
+
this.getAssetDepositHistory = (params) => this.request('GET', '/api/v5/asset/deposit-history', params);
|
203
|
+
/**
|
204
|
+
* 获取资金账户余额
|
205
|
+
*
|
206
|
+
* 获取资金账户所有资产列表,查询各币种的余额、冻结和可用等信息。
|
207
|
+
*
|
208
|
+
* 只返回余额大于0的币资产信息。
|
209
|
+
*
|
210
|
+
* 限速:6次/s
|
211
|
+
* 限速规则:UserID
|
212
|
+
*
|
213
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-balance
|
214
|
+
*/
|
215
|
+
this.getAssetBalances = (params) => this.request('GET', '/api/v5/asset/balances', params);
|
216
|
+
/**
|
217
|
+
* 资金划转
|
218
|
+
*
|
219
|
+
* 调用时,API Key 需要有交易权限。
|
220
|
+
*
|
221
|
+
* 支持母账户的资金账户划转到交易账户,母账户到子账户的资金账户和交易账户划转。
|
222
|
+
*
|
223
|
+
* 子账户默认可转出至母账户,划转到同一母账户下的其他子账户,需要先调用 设置子账户主动转出权限 接口进行授权。
|
224
|
+
*
|
225
|
+
* 请求失败不代表划转失败,建议以获取资金划转状态接口返回的状态为准。
|
226
|
+
*
|
227
|
+
* 限速:2 次/s
|
228
|
+
* 限速规则:UserID + Currency
|
229
|
+
*
|
230
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-funds-transfer
|
231
|
+
*/
|
232
|
+
this.postAssetTransfer = (params) => this.request('POST', '/api/v5/asset/transfer', params);
|
233
|
+
/**
|
234
|
+
* 查看账户余额
|
235
|
+
*
|
236
|
+
* 获取交易账户中资金余额信息。
|
237
|
+
*
|
238
|
+
* 免息额度和折算率都是公共数据,不在账户接口内展示
|
239
|
+
*
|
240
|
+
* 限速:10次/2s
|
241
|
+
* 限速规则:UserID
|
242
|
+
*
|
243
|
+
* https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-balance
|
244
|
+
*/
|
245
|
+
this.getAccountBalance = (params) => this.request('GET', '/api/v5/account/balance', params);
|
246
|
+
/**
|
247
|
+
* 查看持仓信息
|
248
|
+
*
|
249
|
+
* 获取该账户下拥有实际持仓的信息。账户为买卖模式会显示净持仓(net),账户为开平仓模式下会分别返回开多(long)或开空(short)的仓位。按照仓位创建时间倒序排列。
|
250
|
+
*
|
251
|
+
* 如果该 instId 拥有过仓位且当前持仓量为0,传 instId 时,如果当前存在有效的posId,会返回仓位信息,如果当前不存在有效的 posId 时,不会返回仓位信息;不传 instId 时,仓位信息不返回。
|
252
|
+
*
|
253
|
+
* 逐仓交易设置中,如果设置为自主划转模式,逐仓转入保证金后,会生成一个持仓量为0的仓位
|
254
|
+
*
|
255
|
+
* 限速:10次/2s
|
256
|
+
* 限速规则:UserID
|
257
|
+
*
|
258
|
+
* https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-positions
|
259
|
+
*/
|
260
|
+
this.getAccountPositions = (params) => this.request('GET', '/api/v5/account/positions', params);
|
261
|
+
/**
|
262
|
+
* 赚币
|
263
|
+
* GET / 查看项目
|
264
|
+
*
|
265
|
+
* 限速:3次/s
|
266
|
+
* 限速规则:UserID
|
267
|
+
*/
|
268
|
+
this.getFinanceStakingDeFiOffers = (params) => this.request('GET', '/api/v5/finance/staking-defi/offers', params);
|
269
|
+
/**
|
270
|
+
* 赚币
|
271
|
+
* GET / 查看活跃订单
|
272
|
+
*
|
273
|
+
* 限速:3次/s
|
274
|
+
* 限速规则:UserID
|
275
|
+
*/
|
276
|
+
this.getFinanceStakingDeFiOrdersActive = (params) => this.request('GET', '/api/v5/finance/staking-defi/orders-active', params);
|
277
|
+
/**
|
278
|
+
* 下单
|
279
|
+
*
|
280
|
+
* 只有当您的账户有足够的资金才能下单。
|
281
|
+
*
|
282
|
+
* 限速:60次/2s
|
283
|
+
*
|
284
|
+
* 跟单交易带单产品的限速:4次/2s
|
285
|
+
*
|
286
|
+
* 限速规则(期权以外):UserID + Instrument ID
|
287
|
+
*
|
288
|
+
* 限速规则(只限期权):UserID + Instrument Family
|
289
|
+
*
|
290
|
+
* https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-place-order
|
291
|
+
*/
|
292
|
+
this.postTradeOrder = (params) => this.request('POST', '/api/v5/trade/order', params);
|
293
|
+
/**
|
294
|
+
* 修改订单
|
295
|
+
*
|
296
|
+
* 修改当前未成交的挂单
|
297
|
+
*
|
298
|
+
* 限速:60次/2s
|
299
|
+
*
|
300
|
+
* 跟单交易带单员带单产品的限速:4个/2s
|
301
|
+
*
|
302
|
+
* 限速规则:User ID + Instrument ID
|
303
|
+
*
|
304
|
+
* 权限:交易
|
305
|
+
*
|
306
|
+
* 该接口限速同时受到 子账户限速 及 基于成交比率的子账户限速 限速规则的影响。
|
307
|
+
*/
|
308
|
+
this.postTradeAmendOrder = (params) => this.request('POST', '/api/v5/trade/amend-order', params);
|
309
|
+
/**
|
310
|
+
* 获取未成交订单列表
|
311
|
+
*
|
312
|
+
* 获取当前账户下所有未成交订单信息
|
313
|
+
*
|
314
|
+
* 限速:60次/2s
|
315
|
+
* 限速规则:UserID
|
316
|
+
*
|
317
|
+
* https://www.okx.com/docs-v5/zh/#order-book-trading-trade-get-order-list
|
318
|
+
*/
|
319
|
+
this.getTradeOrdersPending = (params) => this.request('GET', '/api/v5/trade/orders-pending', params);
|
320
|
+
/**
|
321
|
+
* 获取历史订单记录(近七天)
|
322
|
+
*
|
323
|
+
* 获取最近7天挂单,且完成的订单数据,包括7天以前挂单,但近7天才成交的订单数据。按照订单创建时间倒序排序。
|
324
|
+
*
|
325
|
+
* 已经撤销的未成交单 只保留2小时
|
326
|
+
* 限速:40次/2s
|
327
|
+
* 限速规则:User ID
|
328
|
+
*/
|
329
|
+
this.getTradeOrdersHistory = (params) => this.request('GET', '/api/v5/trade/orders-history', params);
|
330
|
+
/**
|
331
|
+
* 撤单
|
332
|
+
*
|
333
|
+
* 撤销之前下的未完成订单。
|
334
|
+
*
|
335
|
+
* 限速:60次/2s
|
336
|
+
*
|
337
|
+
* 限速规则(期权以外):UserID + Instrument ID
|
338
|
+
*
|
339
|
+
* 限速规则(只限期权):UserID + Instrument Family
|
340
|
+
*
|
341
|
+
* https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-cancel-order
|
342
|
+
*/
|
343
|
+
this.postTradeCancelOrder = (params) => this.request('POST', '/api/v5/trade/cancel-order', params);
|
344
|
+
/**
|
345
|
+
* 查看子账户列表
|
346
|
+
*
|
347
|
+
* 仅适用于母账户。
|
348
|
+
*
|
349
|
+
* 限速:2次/2s
|
350
|
+
*
|
351
|
+
* 限速规则:UserID
|
352
|
+
*/
|
353
|
+
this.getSubAccountList = (params) => this.request('GET', '/api/v5/users/subaccount/list', params);
|
354
|
+
/**
|
355
|
+
* 设置子账户主动转出权限
|
356
|
+
*
|
357
|
+
* 设置子账户转出权限(仅适用于母账户),默认可转出至母账户。
|
358
|
+
*
|
359
|
+
* 限速:1次/s
|
360
|
+
*
|
361
|
+
* 限速规则:UserID
|
362
|
+
*/
|
363
|
+
this.postSetSubAccountTransferOut = (params) => this.request('POST', '/api/v5/users/subaccount/set-transfer-out', params);
|
364
|
+
/**
|
365
|
+
* 获取资金划转状态
|
366
|
+
*
|
367
|
+
* 获取最近2个星期内的资金划转状态数据
|
368
|
+
*
|
369
|
+
* 限速:10 次/s
|
370
|
+
*
|
371
|
+
* 限速规则:UserID
|
372
|
+
*
|
373
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-funds-transfer-state
|
374
|
+
*/
|
375
|
+
this.getAssetTransferState = (params) => this.request('GET', '/api/v5/asset/transfer-state', params);
|
376
|
+
/**
|
377
|
+
* 获取币种列表
|
378
|
+
*
|
379
|
+
* 获取当前用户KYC实体支持的币种列表。
|
380
|
+
*
|
381
|
+
* 限速:6 次/s
|
382
|
+
*
|
383
|
+
* 限速规则:UserID
|
384
|
+
*
|
385
|
+
* https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-currencies
|
386
|
+
*/
|
387
|
+
this.getAssetCurrencies = (params) => this.request('GET', '/api/v5/asset/currencies', params);
|
388
|
+
/**
|
389
|
+
* 获取指数行情数据
|
390
|
+
*
|
391
|
+
*
|
392
|
+
* 限速:20 次/2s
|
393
|
+
*
|
394
|
+
*
|
395
|
+
* https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-index-tickers
|
396
|
+
*/
|
397
|
+
this.getMarketIndexTicker = (params) => this.request('GET', '/api/v5/market/index-tickers', params);
|
398
|
+
/**
|
399
|
+
* 账单流水查询(近七天)
|
400
|
+
*
|
401
|
+
*
|
402
|
+
* 限速:5次/s
|
403
|
+
*
|
404
|
+
*
|
405
|
+
* https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-7-days
|
406
|
+
*/
|
407
|
+
this.getAccountBills = (params) => this.request('GET', '/api/v5/account/bills', params);
|
408
|
+
/**
|
409
|
+
* 账单流水查询(近三个月)
|
410
|
+
*
|
411
|
+
*
|
412
|
+
* 限速:5次/2s
|
413
|
+
*
|
414
|
+
*
|
415
|
+
* https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-3-months
|
416
|
+
*/
|
417
|
+
this.getAccountBillsArchive = (params) => this.request('GET', '/api/v5/account/bills-archive', params);
|
418
|
+
if (config.auth.public_key && config.auth.secret_key && config.auth.passphrase) {
|
419
|
+
this.noAuth = false;
|
420
|
+
}
|
421
|
+
}
|
422
|
+
async request(method, path, params) {
|
423
|
+
const url = new URL('https://www.okx.com');
|
424
|
+
url.pathname = path;
|
425
|
+
if (method === 'GET') {
|
426
|
+
for (const key in params) {
|
427
|
+
url.searchParams.set(key, params[key]);
|
428
|
+
}
|
429
|
+
}
|
430
|
+
if (this.noAuth) {
|
431
|
+
console.info(formatTime(Date.now()), method, url.href);
|
432
|
+
const res = await fetch(url.href, { method });
|
433
|
+
return res.json();
|
434
|
+
}
|
435
|
+
const timestamp = formatTime(Date.now(), 'UTC').replace(' ', 'T');
|
436
|
+
const secret_key = this.config.auth.secret_key;
|
437
|
+
const body = method === 'GET' ? '' : JSON.stringify(params);
|
438
|
+
const signData = timestamp + method + url.pathname + url.search + body;
|
439
|
+
const str = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signData, secret_key));
|
440
|
+
const headers = {
|
441
|
+
'Content-Type': 'application/json',
|
442
|
+
'OK-ACCESS-KEY': this.config.auth.public_key,
|
443
|
+
'OK-ACCESS-SIGN': str,
|
444
|
+
'OK-ACCESS-TIMESTAMP': timestamp,
|
445
|
+
'OK-ACCESS-PASSPHRASE': this.config.auth.passphrase,
|
446
|
+
};
|
447
|
+
console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body, signData);
|
448
|
+
const res = await fetch(url.href, {
|
449
|
+
method,
|
450
|
+
headers,
|
451
|
+
body: body || undefined,
|
452
|
+
});
|
453
|
+
return res.json();
|
454
|
+
}
|
455
|
+
}
|
456
|
+
export const client = new OkxClient({
|
457
|
+
auth: {
|
458
|
+
public_key: process.env.ACCESS_KEY,
|
459
|
+
secret_key: process.env.SECRET_KEY,
|
460
|
+
passphrase: process.env.PASSPHRASE,
|
461
|
+
},
|
462
|
+
});
|
463
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatTime } from '@yuants/utils';\n// @ts-ignore\nimport CryptoJS from 'crypto-js';\n\n/**\n * API v5: https://www.okx.com/docs-v5/#overview\n */\nexport class OkxClient {\n noAuth = true;\n constructor(\n public config: {\n auth: {\n public_key: string;\n secret_key: string;\n passphrase: string;\n };\n },\n ) {\n if (config.auth.public_key && config.auth.secret_key && config.auth.passphrase) {\n this.noAuth = false;\n }\n }\n\n async request(method: string, path: string, params?: any) {\n const url = new URL('https://www.okx.com');\n url.pathname = path;\n if (method === 'GET') {\n for (const key in params) {\n url.searchParams.set(key, params[key]);\n }\n }\n if (this.noAuth) {\n console.info(formatTime(Date.now()), method, url.href);\n const res = await fetch(url.href, { method });\n return res.json();\n }\n const timestamp = formatTime(Date.now(), 'UTC').replace(' ', 'T');\n const secret_key = this.config.auth.secret_key;\n const body = method === 'GET' ? '' : JSON.stringify(params);\n const signData = timestamp + method + url.pathname + url.search + body;\n const str = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n\n const headers = {\n 'Content-Type': 'application/json',\n 'OK-ACCESS-KEY': this.config.auth.public_key!,\n 'OK-ACCESS-SIGN': str,\n 'OK-ACCESS-TIMESTAMP': timestamp,\n 'OK-ACCESS-PASSPHRASE': this.config.auth.passphrase,\n };\n\n console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body, signData);\n const res = await fetch(url.href, {\n method,\n headers,\n body: body || undefined,\n });\n return res.json();\n }\n\n /**\n * 获取所有产品行情信息\n *\n * 获取产品行情信息\n *\n * 限速:20次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-market-data-get-tickers\n */\n getMarketTickers = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n instType: string;\n instId: string;\n last: string;\n lastSz: string;\n askPx: string;\n askSz: string;\n bidPx: string;\n bidSz: string;\n open24h: string;\n high24h: string;\n low24h: string;\n volCcy24h: string;\n vol24h: string;\n sodUtc0: string;\n sodUtc8: string;\n ts: string;\n }>;\n }> => this.request('GET', '/api/v5/market/tickers', params);\n\n /**\n * 获取账户资产估值\n *\n * 查看账户资产估值\n *\n * 限速:1次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-account-asset-valuation\n */\n getAssetValuation = (params?: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n details: {\n classic: string;\n earn: string;\n funding: string;\n trading: string;\n };\n totalBal: string;\n ts: string;\n }>;\n }> => this.request('GET', '/api/v5/asset/asset-valuation', params);\n\n /**\n * 获取持仓总量\n *\n * 查询单个交易产品的市场的持仓总量\n *\n * 限速:20次/2s\n * 限速规则:IP + instrumentID\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-open-interest\n */\n getOpenInterest = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n instId: string;\n oi: string;\n oiCcy: string;\n ts: string;\n }[];\n }> => this.request('GET', '/api/v5/public/open-interest', params);\n\n /**\n * 查看账户配置\n * 查看当前账户的配置信息。\n *\n * 限速:5次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-account-configuration\n */\n getAccountConfig = (): Promise<{\n code: string;\n data: Array<{\n acctLv: string;\n autoLoan: boolean;\n ctIsoMode: string;\n greeksType: string;\n level: string;\n levelTmp: string;\n mgnIsoMode: string;\n posMode: string;\n spotOffsetType: string;\n uid: string;\n label: string;\n roleType: string;\n traderInsts: any[];\n spotRoleType: string;\n spotTraderInsts: any[];\n opAuth: string;\n kycLv: string;\n ip: string;\n perm: string;\n mainUid: string;\n }>;\n msg: string;\n }> => this.request('GET', '/api/v5/account/config');\n\n /**\n * 获取市场借币杠杆利率和借币限额\n *\n * 限速:2次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-interest-rate-and-loan-quota\n */\n getInterestRateLoanQuota = (): Promise<{\n code: string;\n data?: Array<{\n basic: Array<{\n ccy: string;\n rate: string;\n quota: string;\n }>;\n vip: Array<{\n loanQuotaCoef: string;\n level: string;\n }>;\n regular: Array<{\n loanQuotaCoef: string;\n level: string;\n }>;\n }>;\n }> => this.request('GET', '/api/v5/public/interest-rate-loan-quota');\n\n /**\n * 获取交易产品基础信息\n *\n * 获取所有可交易产品的信息列表。\n *\n * 限速:20次/2s\n * 限速规则:IP +instType\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-instruments\n */\n getInstruments = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n alias: string;\n baseCcy: string;\n category: string;\n ctMult: string;\n ctType: string;\n ctVal: string;\n ctValCcy: string;\n expTime: string;\n instFamily: string;\n instId: string;\n instType: string;\n lever: string;\n listTime: string;\n lotSz: string;\n maxIcebergSz: string;\n maxLmtAmt: string;\n maxLmtSz: string;\n maxMktAmt: string;\n maxMktSz: string;\n maxStopSz: string;\n maxTriggerSz: string;\n maxTwapSz: string;\n minSz: string;\n optType: string;\n quoteCcy: string;\n settleCcy: string;\n state: string;\n stk: string;\n tickSz: string;\n uly: string;\n }>;\n }> => this.request('GET', '/api/v5/public/instruments', params);\n\n /**\n * 获取永续合约当前资金费率\n * 获取当前资金费率\n *\n * 限速:20次/2s\n * 限速规则:IP +instrumentID\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate\n */\n getFundingRate = (params: {\n instId: string;\n }): Promise<{\n code: string;\n data: Array<{\n fundingRate: string;\n fundingTime: string;\n instId: string;\n instType: string;\n method: string;\n maxFundingRate: string;\n minFundingRate: string;\n nextFundingRate: string;\n nextFundingTime: string;\n premium: string;\n settFundingRate: string;\n settState: string;\n ts: string;\n }>;\n msg: string;\n }> => this.request('GET', '/api/v5/public/funding-rate', params);\n\n /**\n * 获取永续合约历史资金费率\n *\n * 获取最近3个月的历史资金费率\n *\n * 限速:10次/2s\n * 限速规则:IP +instrumentID\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-funding-rate-history\n */\n getFundingRateHistory = (params: {\n instId: string;\n before?: string;\n after?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n fundingRate: string;\n fundingTime: string;\n instId: string;\n instType: string;\n method: string;\n realizedRate: string;\n }>;\n }> => this.request('GET', '/api/v5/public/funding-rate-history', params);\n\n /**\n * 获取标记价格历史K线数据\n *\n * 获取最近几年的标记价格K线数据\n *\n * 限速:10次/2s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-mark-price-candlesticks-history\n */\n getHistoryMarkPriceCandles = (params: {\n instId: string;\n bar?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<[ts: string, o: string, h: string, l: string, c: string, confirm: string]>;\n }> => this.request('GET', '/api/v5/market/history-mark-price-candles', params);\n\n /**\n * GET / 获取交易产品历史K线数据\n *\n * 获取最近几年的历史k线数据(1s k线支持查询最近3个月的数据)\n *\n * 限速:20次/2s\n *\n * 限速规则:IP\n *\n * 期权不支持 1s K线, 其他业务线 (币币, 杠杆, 交割和永续)支持\n */\n getHistoryCandles = (params: {\n instId: string;\n bar?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<\n [\n ts: string,\n o: string,\n h: string,\n l: string,\n c: string,\n vol: string,\n volCcy: string,\n volCcyQuote: string,\n confirm: string,\n ]\n >;\n }> => this.request('GET', '/api/v5/market/history-candles', params);\n\n /**\n * 获取余币宝余额\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-get-saving-balance\n */\n getFinanceSavingsBalance = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n earnings: string;\n redemptAmt: string;\n rate: string;\n ccy: string;\n amt: string;\n loanAmt: string;\n pendingAmt: string;\n }[];\n }> => this.request('GET', '/api/v5/finance/savings/balance', params);\n\n /**\n * 余币宝申购/赎回\n *\n * 仅资金账户中的资产支持余币宝申购。\n *\n * 限速:6次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-post-savings-purchase-redemption\n */\n postFinanceSavingsPurchaseRedempt = (params: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n amt: string;\n side: string;\n rate: string;\n }[];\n }> => this.request('POST', '/api/v5/finance/savings/purchase-redempt', params);\n\n /**\n * GET / 获取市场借贷历史(公共)\n *\n * 公共接口无须鉴权\n *\n * 返回2021年12月14日后的记录\n *\n * 限速:6次/s\n * 限速规则:IP\n *\n * https://www.okx.com/docs-v5/zh/#financial-product-savings-get-public-borrow-history-public\n */\n getLendingRateHistory = (params: {\n ccy?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n ccy: string;\n amt: string;\n rate: string;\n ts: string;\n }>;\n }> => this.request('GET', '/api/v5/finance/savings/lending-rate-history', params);\n\n /**\n * 提币\n *\n * 用户提币。普通子账户不支持提币。\n *\n * API只能提币到免认证地址/账户上,通过 WEB/APP 可以设置免认证地址。\n *\n * 关于标签:某些币种如XRP充币时同时需要一个充值地址和标签(又名memo/payment_id),标签是一种保证您的充币地址唯一性的数字串,与充币地址成对出现并一一对应。请您务必遵守正确的充值步骤,在提币时输入完整信息,否则将面临丢失币的风险!\n * 对于有标签的币种,如果是OKX用户间的提币,请走内部转账不要走链上提币。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-withdrawal\n */\n postAssetWithdrawal = (params: {\n amt: string;\n fee: string;\n dest: string;\n ccy: string;\n chain?: string;\n toAddr: string;\n clientId?: string;\n rcvrInfo?: {\n walletType: string;\n exchId: string;\n rcvrFirstName: string;\n rcvrLastName: string;\n };\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n amt: string;\n wdId: string;\n ccy: string;\n clientId: string;\n chain: string;\n }>;\n }> => this.request('POST', '/api/v5/asset/withdrawal', params);\n\n /**\n * 获取充值地址信息\n *\n * 获取各个币种的充值地址,包括曾使用过的老地址。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-address\n */\n getAssetDepositAddress = (params: {\n ccy: string;\n }): Promise<{\n code: string;\n data: {\n chain: string;\n ctAddr: string;\n ccy: string;\n to: string;\n addr: string;\n verifiedName: string;\n selected: boolean;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/asset/deposit-address', params);\n\n /**\n * 获取提币记录\n *\n * 根据币种,提币状态,时间范围获取提币记录,按照时间倒序排列,默认返回100条数据。\n * 支持Websocket订阅,参考 提币信息频道。\n *\n * 限速:6 次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-withdrawal-history\n */\n getAssetWithdrawalHistory = (params: {\n ccy?: string;\n wdId?: string;\n clientId?: string;\n txId?: string;\n type?: string;\n state?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n chain: string;\n fee: string;\n feeCcy: string;\n ccy: string;\n clientId: string;\n amt: string;\n txId: string;\n from: string;\n areaCodeFrom: string;\n to: string;\n areaCodeTo: string;\n state: string;\n ts: string;\n nonTradableAsset: boolean;\n wdId: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/withdrawal-history', params);\n\n /**\n * 获取充值记录\n *\n * 根据币种,充值状态,时间范围获取充值记录,按照时间倒序排列,默认返回 100 条数据。\n * 支持Websocket订阅,参考 充值信息频道。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-deposit-history\n */\n getAssetDepositHistory = (params: {\n ccy?: string;\n depId?: string;\n state?: string;\n fromWdId?: string;\n txId?: string;\n type?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n actualDepBlkConfirm: string;\n amt: string;\n areaCodeFrom: string;\n ccy: string;\n chain: string;\n depId: string;\n from: string;\n fromWdId: string;\n state: string;\n to: string;\n ts: string;\n txId: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/deposit-history', params);\n\n /**\n * 获取资金账户余额\n *\n * 获取资金账户所有资产列表,查询各币种的余额、冻结和可用等信息。\n *\n * 只返回余额大于0的币资产信息。\n *\n * 限速:6次/s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-balance\n */\n getAssetBalances = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n availBal: string;\n bal: string;\n ccy: string;\n frozenBal: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/balances', params);\n\n /**\n * 资金划转\n *\n * 调用时,API Key 需要有交易权限。\n *\n * 支持母账户的资金账户划转到交易账户,母账户到子账户的资金账户和交易账户划转。\n *\n * 子账户默认可转出至母账户,划转到同一母账户下的其他子账户,需要先调用 设置子账户主动转出权限 接口进行授权。\n *\n * 请求失败不代表划转失败,建议以获取资金划转状态接口返回的状态为准。\n *\n * 限速:2 次/s\n * 限速规则:UserID + Currency\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-funds-transfer\n */\n postAssetTransfer = (params: {\n ccy: string;\n type?: string;\n amt: string;\n from: string;\n to: string;\n subAcct?: string;\n loanTrans?: boolean;\n omitPosRisk?: string;\n clientId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n transId: string;\n ccy: string;\n clientId: string;\n from: string;\n amt: string;\n to: string;\n }[];\n }> => this.request('POST', '/api/v5/asset/transfer', params);\n\n /**\n * 查看账户余额\n *\n * 获取交易账户中资金余额信息。\n *\n * 免息额度和折算率都是公共数据,不在账户接口内展示\n *\n * 限速:10次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-balance\n */\n getAccountBalance = (params: {\n ccy?: string;\n }): Promise<{\n code: string;\n data: {\n adjEq: string;\n borrowFroz: string;\n details: {\n availBal: string;\n availEq: string;\n borrowFroz: string;\n cashBal: string;\n ccy: string;\n crossLiab: string;\n disEq: string;\n eq: string;\n eqUsd: string;\n fixedBal: string;\n frozenBal: string;\n imr: string;\n interest: string;\n isoEq: string;\n isoLiab: string;\n isoUpl: string;\n liab: string;\n maxLoan: string;\n mgnRatio: string;\n mmr: string;\n notionalLever: string;\n ordFrozen: string;\n rewardBal: string;\n spotInUseAmt: string;\n spotIsoBal: string;\n stgyEq: string;\n twap: string;\n uTime: string;\n upl: string;\n uplLiab: string;\n openAvgPx: string;\n spotUpl: string;\n accAvgPx: string;\n totalPnl: string;\n spotBal: string;\n }[];\n imr: string;\n isoEq: string;\n mgnRatio: string;\n mmr: string;\n notionalUsd: string;\n ordFroz: string;\n totalEq: string;\n uTime: string;\n upl: string;\n }[];\n msg: string;\n }> => this.request('GET', '/api/v5/account/balance', params);\n\n /**\n * 查看持仓信息\n *\n * 获取该账户下拥有实际持仓的信息。账户为买卖模式会显示净持仓(net),账户为开平仓模式下会分别返回开多(long)或开空(short)的仓位。按照仓位创建时间倒序排列。\n *\n * 如果该 instId 拥有过仓位且当前持仓量为0,传 instId 时,如果当前存在有效的posId,会返回仓位信息,如果当前不存在有效的 posId 时,不会返回仓位信息;不传 instId 时,仓位信息不返回。\n *\n * 逐仓交易设置中,如果设置为自主划转模式,逐仓转入保证金后,会生成一个持仓量为0的仓位\n *\n * 限速:10次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-positions\n */\n getAccountPositions = (params: {\n instType?: string;\n instId?: string;\n posId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n adl: string;\n availPos: string;\n avgPx: string;\n cTime: string;\n ccy: string;\n deltaBS: string;\n deltaPA: string;\n gammaBS: string;\n gammaPA: string;\n imr: string;\n instId: string;\n instType: string;\n interest: string;\n idxPx: string;\n last: string;\n usdPx: string;\n bePx: string;\n lever: string;\n liab: string;\n liabCcy: string;\n liqPx: string;\n markPx: string;\n margin: string;\n mgnMode: string;\n mgnRatio: string;\n mmr: string;\n notionalUsd: string;\n optVal: string;\n pTime: string;\n pos: string;\n posCcy: string;\n posId: string;\n posSide: string;\n spotInUseAmt: string;\n spotInUseCcy: string;\n thetaBS: string;\n thetaPA: string;\n tradeId: string;\n bizRefId: string;\n bizRefType: string;\n quoteBal: string;\n baseBal: string;\n baseBorrowed: string;\n baseInterest: string;\n quoteBorrowed: string;\n quoteInterest: string;\n uTime: string;\n upl: string;\n uplLastPx: string;\n uplRatio: string;\n uplRatioLastPx: string;\n vegaBS: string;\n vegaPA: string;\n realizedPnl: string;\n pnl: string;\n fee: string;\n fundingFee: string;\n liqPenalty: string;\n closeOrderAlgo: {\n algoId: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n closeFraction: string;\n }[];\n }[];\n }> => this.request('GET', '/api/v5/account/positions', params);\n\n /**\n * 赚币\n * GET / 查看项目\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\n getFinanceStakingDeFiOffers = (params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n productId: string;\n protocol: string;\n protocolType: string;\n term: string;\n apy: string;\n earlyRedeem: boolean;\n investData: {\n ccy: string;\n bal: string;\n minAmt: string;\n maxAmt: string;\n }[];\n earningData: {\n ccy: string;\n earningType: string;\n }[];\n state: string;\n earningCcy?: string[];\n }[];\n }> => this.request('GET', '/api/v5/finance/staking-defi/offers', params);\n\n /**\n * 赚币\n * GET / 查看活跃订单\n *\n * 限速:3次/s\n * 限速规则:UserID\n */\n getFinanceStakingDeFiOrdersActive = (params: {\n productId?: string;\n protocolType?: string;\n ccy?: string;\n state?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ordId: string;\n state: string;\n ccy: string;\n protocol: string;\n protocolType: string;\n term: string;\n apy: string;\n investData: {\n ccy: string;\n amt: string;\n minAmt?: string;\n maxAmt?: string;\n }[];\n earningData: {\n ccy: string;\n earningType: string;\n earnings: string;\n }[];\n purchasedTime: string;\n estSettlementTime: string;\n cancelRedemptionDeadline: string;\n tag: string;\n earningCcy?: string[];\n }[];\n }> => this.request('GET', '/api/v5/finance/staking-defi/orders-active', params);\n\n /**\n * 下单\n *\n * 只有当您的账户有足够的资金才能下单。\n *\n * 限速:60次/2s\n *\n * 跟单交易带单产品的限速:4次/2s\n *\n * 限速规则(期权以外):UserID + Instrument ID\n *\n * 限速规则(只限期权):UserID + Instrument Family\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-place-order\n */\n postTradeOrder = (params: {\n instId: string;\n tdMode: string;\n ccy?: string;\n clOrdId?: string;\n tag?: string;\n side: string;\n posSide?: string;\n ordType: string;\n sz: string;\n px?: string;\n pxUsd?: string;\n pxVol?: string;\n reduceOnly?: string;\n tgtCcy?: string;\n banAmend?: string;\n quickMgnType?: string;\n stpId?: string;\n stpMode?: string;\n attachAlgoOrds?: Array<{\n attachAlgoClOrdId?: string;\n tpTriggerPx?: string;\n tpOrdPx?: string;\n tpOrdKind?: string;\n slTriggerPx?: string;\n slOrdPx?: string;\n tpTriggerPxType?: string;\n slTriggerPxType?: string;\n sz?: string;\n amendPxOnTriggerType?: string;\n }>;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n tag: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/order', params);\n\n /**\n * 修改订单\n *\n * 修改当前未成交的挂单\n *\n * 限速:60次/2s\n *\n * 跟单交易带单员带单产品的限速:4个/2s\n *\n * 限速规则:User ID + Instrument ID\n *\n * 权限:交易\n *\n * 该接口限速同时受到 子账户限速 及 基于成交比率的子账户限速 限速规则的影响。\n */\n postTradeAmendOrder = (params: {\n instId: string;\n cxIOnFail?: boolean;\n ordId?: string;\n clOrdId?: string;\n reqId?: string;\n newSz?: string;\n newPx?: string;\n newPxUsd?: string;\n newPxVol?: string;\n attachAlgoOrds?: Array<{\n attachAlgoId?: string;\n attachAlgoClOrdId?: string;\n newTpTriggerPx?: string;\n newTpOrdPx?: string;\n newTpOrdKind?: string;\n newSlTriggerPx?: string;\n newSlOrdPx?: string;\n newTpTriggerPxType?: string;\n newSlTriggerPxType?: string;\n sz?: string;\n amendPxOnTriggerType?: string;\n }>;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n ts: string;\n reqId: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/amend-order', params);\n\n /**\n * 获取未成交订单列表\n *\n * 获取当前账户下所有未成交订单信息\n *\n * 限速:60次/2s\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-get-order-list\n */\n getTradeOrdersPending = (params: {\n instType?: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n ordType?: string;\n state?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n accFillSz: string;\n avgPx: string;\n cTime: string;\n category: string;\n ccy: string;\n clOrdId: string;\n fee: string;\n feeCcy: string;\n fillPx: string;\n fillSz: string;\n fillTime: string;\n instId: string;\n instType: string;\n lever: string;\n ordId: string;\n ordType: string;\n pnl: string;\n posSide: string;\n px: string;\n pxUsd: string;\n pxVol: string;\n pxType: string;\n rebate: string;\n rebateCcy: string;\n side: string;\n attachAlgoClOrdId: string;\n slOrdPx: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n attachAlgoOrds: any[];\n source: string;\n state: string;\n stpId: string;\n stpMode: string;\n sz: string;\n tag: string;\n tdMode: string;\n tgtCcy: string;\n tpOrdPx: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n tradeId: string;\n reduceOnly: string;\n quickMgnType: string;\n algoClOrdId: string;\n algoId: string;\n isTpLimit: string;\n uTime: string;\n }[];\n }> => this.request('GET', '/api/v5/trade/orders-pending', params);\n\n /**\n * 获取历史订单记录(近七天)\n *\n * 获取最近7天挂单,且完成的订单数据,包括7天以前挂单,但近7天才成交的订单数据。按照订单创建时间倒序排序。\n *\n * 已经撤销的未成交单 只保留2小时\n * 限速:40次/2s\n * 限速规则:User ID\n */\n getTradeOrdersHistory = (params: {\n instType: string;\n uly?: string;\n instFamily?: string;\n instId?: string;\n ordType?: string;\n state?: string;\n category?: string;\n after?: string;\n before?: string;\n begin?: string;\n end?: string;\n limit?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: Array<{\n instType: string;\n instId: string;\n tgtCcy: string;\n ccy: string;\n ordId: string;\n clOrdId: string;\n tag: string;\n px: string;\n pxUsd: string;\n pxVol: string;\n pxType: string;\n sz: string;\n ordType: string;\n side: string;\n posSide: string;\n tdMode: string;\n accFillSz: string;\n fillPx: string;\n tradeId: string;\n fillSz: string;\n fillTime: string;\n avgPx: string;\n state: string;\n lever: string;\n attachAlgoClOrdId: string;\n tpTriggerPx: string;\n tpTriggerPxType: string;\n tpOrdPx: string;\n slTriggerPx: string;\n slTriggerPxType: string;\n slOrdPx: string;\n attachAlgoOrds: any[];\n linkedAlgoOrd: any[];\n stpId: string;\n stpMode: string;\n feeCcy: string;\n fee: string;\n rebateCcy: string;\n source: string;\n rebate: string;\n pnl: string;\n category: string;\n reduceOnly: string;\n cancelSource: string;\n cancelSourceReason: string;\n algoClOrdId: string;\n algoId: string;\n isTpLimit: string;\n uTime: string;\n cTime: string;\n tradeQuoteCcy: string;\n }>;\n }> => this.request('GET', '/api/v5/trade/orders-history', params);\n\n /**\n * 撤单\n *\n * 撤销之前下的未完成订单。\n *\n * 限速:60次/2s\n *\n * 限速规则(期权以外):UserID + Instrument ID\n *\n * 限速规则(只限期权):UserID + Instrument Family\n *\n * https://www.okx.com/docs-v5/zh/#order-book-trading-trade-post-cancel-order\n */\n postTradeCancelOrder = (params: {\n instId: string;\n ordId?: string;\n clOrdId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n clOrdId: string;\n ordId: string;\n sCode: string;\n sMsg: string;\n }[];\n inTime: string;\n outTime: string;\n }> => this.request('POST', '/api/v5/trade/cancel-order', params);\n\n /**\n * 查看子账户列表\n *\n * 仅适用于母账户。\n *\n * 限速:2次/2s\n *\n * 限速规则:UserID\n */\n getSubAccountList = (params?: {\n enable?: string;\n subAct?: string;\n after?: string;\n before?: string;\n limit?: string;\n }): Promise<{\n data: {\n type: string;\n enable: string;\n subAcct: string;\n uid: string;\n label: string;\n mobile: string;\n gAuth: boolean;\n frozenFunc: string[];\n canTransOut: boolean;\n ts: string;\n }[];\n code: string;\n msg: string;\n }> => this.request('GET', '/api/v5/users/subaccount/list', params);\n\n /**\n * 设置子账户主动转出权限\n *\n * 设置子账户转出权限(仅适用于母账户),默认可转出至母账户。\n *\n * 限速:1次/s\n *\n * 限速规则:UserID\n */\n postSetSubAccountTransferOut = (params: {\n subAcct: string;\n canTransOut: boolean;\n }): Promise<{\n subAcct: string;\n canTransOut: boolean;\n }> => this.request('POST', '/api/v5/users/subaccount/set-transfer-out', params);\n\n /**\n * 获取资金划转状态\n *\n * 获取最近2个星期内的资金划转状态数据\n *\n * 限速:10 次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-funds-transfer-state\n */\n getAssetTransferState = (params: {\n transId?: string;\n clientId?: string;\n type?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n transId: string;\n clientId: string;\n ccy: string;\n amt: string;\n type: string;\n from: string;\n to: string;\n subAcct: string;\n // success | pending | failed\n state: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/transfer-state', params);\n\n /**\n * 获取币种列表\n *\n * 获取当前用户KYC实体支持的币种列表。\n *\n * 限速:6 次/s\n *\n * 限速规则:UserID\n *\n * https://www.okx.com/docs-v5/zh/#funding-account-rest-api-get-currencies\n */\n getAssetCurrencies = (params?: {\n ccy?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n ccy: string;\n name: string;\n chain: string;\n canWd: boolean;\n canInternal: boolean;\n minWd: string;\n maxWd: string;\n wdTickSz: string;\n wdQuota: string;\n usedWdQuota: string;\n minFee: string;\n maxFee: string;\n }[];\n }> => this.request('GET', '/api/v5/asset/currencies', params);\n\n /**\n * 获取指数行情数据\n *\n *\n * 限速:20 次/2s\n *\n *\n * https://www.okx.com/docs-v5/zh/#public-data-rest-api-get-index-tickers\n */\n getMarketIndexTicker = (params?: {\n quoteCcy?: string;\n instId?: string;\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instId: string;\n idxPx: string;\n high24h: string;\n sodUtc0: string;\n open24h: string;\n low24h: string;\n sodUtc8: string;\n ts: string;\n }[];\n }> => this.request('GET', '/api/v5/market/index-tickers', params);\n\n /**\n * 账单流水查询(近七天)\n *\n *\n * 限速:5次/s\n *\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-7-days\n */\n getAccountBills = (params?: {\n instType?: string;\n instId?: string;\n ccy?: string;\n mgnMode?: 'isolated' | 'cross';\n ctType?: 'linear' | 'inverse';\n type?: AccountBillType;\n subType?: string;\n after?: string; //请求此id之前(更旧的数据)的分页内容,传的值为对应接口的billId\n before?: string; //请求此id之后(更新的数据)的分页内容,传的值为对应接口的billId\n begin?: string; //筛选的开始时间戳 ts,Unix 时间戳为毫秒数格式,如 1597026383085\n end?: string;\n limit?: string; //分页返回的结果集数量,最大为100,不填默认返回100条\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n billId: string;\n type: string;\n subType: string;\n ts: string;\n balChg: string;\n posBalChg: string;\n bal: string;\n posBal: string;\n sz: string;\n px: string;\n ccy: string;\n pnl: string;\n fee: string;\n mgnMode: 'isolated' | 'cross' | 'cash' | '';\n instId: string;\n ordId: string;\n execType: string;\n from: string;\n to: string;\n notes: string;\n interest: string;\n tag: string;\n fillTime: string;\n tradeId: string;\n clOrdId: string;\n fillIdxPx: string;\n fillMarkPx: string;\n fillPxVol: string;\n fillPxUsd: string;\n fillMarkVol: string;\n fillFwdPx: string;\n }[];\n }> => this.request('GET', '/api/v5/account/bills', params);\n\n /**\n * 账单流水查询(近三个月)\n *\n *\n * 限速:5次/2s\n *\n *\n * https://www.okx.com/docs-v5/zh/#trading-account-rest-api-get-bills-details-last-3-months\n */\n getAccountBillsArchive = (params?: {\n instType?: string;\n instId?: string;\n ccy?: string;\n mgnMode?: 'isolated' | 'cross';\n ctType?: 'linear' | 'inverse';\n type?: AccountBillType;\n subType?: string;\n after?: string; //请求此id之前(更旧的数据)的分页内容,传的值为对应接口的billId\n before?: string; //请求此id之后(更新的数据)的分页内容,传的值为对应接口的billId\n begin?: string; //筛选的开始时间戳 ts,Unix 时间戳为毫秒数格式,如 1597026383085\n end?: string;\n limit?: string; //分页返回的结果集数量,最大为100,不填默认返回100条\n }): Promise<{\n code: string;\n msg: string;\n data: {\n instType: string;\n billId: string;\n type: string;\n subType: string;\n ts: string;\n balChg: string;\n posBalChg: string;\n bal: string;\n posBal: string;\n sz: string;\n px: string;\n ccy: string;\n pnl: string;\n fee: string;\n mgnMode: 'isolated' | 'cross' | 'cash' | '';\n instId: string;\n ordId: string;\n execType: string;\n from: string;\n to: string;\n notes: string;\n interest: string;\n tag: string;\n fillTime: string;\n tradeId: string;\n clOrdId: string;\n fillIdxPx: string;\n fillMarkPx: string;\n fillPxVol: string;\n fillPxUsd: string;\n fillMarkVol: string;\n fillFwdPx: string;\n }[];\n }> => this.request('GET', '/api/v5/account/bills-archive', params);\n}\n\ntype AccountBillType =\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | '10'\n | '11'\n | '12'\n | '13'\n | '14'\n | '15'\n | '16'\n | '22'\n | '24'\n | '26'\n | '27'\n | '28'\n | '29'\n | '30'\n | '32'\n | '33'\n | '34'\n | '250'\n | '251';\n\nexport const client = new OkxClient({\n auth: {\n public_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n passphrase: process.env.PASSPHRASE!,\n },\n});\n"]}
|
package/dist/cli.js
ADDED
package/dist/cli.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,SAAS,CAAC","sourcesContent":["#!/usr/bin/env node\nimport './index';\n"]}
|
package/dist/cluster.js
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
import { Terminal } from '@yuants/protocol';
|
2
|
+
import { loadSecrets } from '@yuants/secret';
|
3
|
+
import { formatTime, listWatch } from '@yuants/utils';
|
4
|
+
import cluster from 'cluster';
|
5
|
+
import { bufferTime, defer, filter, map, Observable, repeat, retry, Subject, tap } from 'rxjs';
|
6
|
+
import { overrideConsole } from './logger';
|
7
|
+
overrideConsole();
|
8
|
+
if (cluster.isPrimary) {
|
9
|
+
console.info(`[Primary] ${formatTime(Date.now())} This is the primary process`);
|
10
|
+
const logBuffer = new Subject();
|
11
|
+
logBuffer
|
12
|
+
.pipe(
|
13
|
+
//
|
14
|
+
bufferTime(100), map((v) => v.join('\n')), filter((v) => v.trim() !== ''))
|
15
|
+
.subscribe((message) => {
|
16
|
+
console.info(message);
|
17
|
+
});
|
18
|
+
defer(() => loadSecrets({
|
19
|
+
terminal: Terminal.fromNodeEnv(),
|
20
|
+
encryption_key_base58: process.env.ENCRYPTION_KEY_BASE58,
|
21
|
+
}))
|
22
|
+
.pipe(
|
23
|
+
//
|
24
|
+
tap({
|
25
|
+
error: (e) => {
|
26
|
+
console.error(`[Primary] ${formatTime(Date.now())} Failed to load secrets`, e);
|
27
|
+
},
|
28
|
+
}), retry({ delay: 5000 }), repeat({ delay: 5000 }))
|
29
|
+
.pipe(listWatch((x) => x.secret.id, (account) => defer(() => new Observable((subscriber) => {
|
30
|
+
console.info(formatTime(Date.now()), `[Primary] ${formatTime(Date.now())} Starting worker for account ${account.secret.public_data.name} (${account.secret.id})`);
|
31
|
+
if (account.secret.public_data.type !== 'api_key_okx')
|
32
|
+
return;
|
33
|
+
if (!account.secret.public_data.name)
|
34
|
+
return;
|
35
|
+
if (!account.decrypted_data)
|
36
|
+
return;
|
37
|
+
if (!account.decrypted_data.access_key)
|
38
|
+
return;
|
39
|
+
if (!account.decrypted_data.secret_key)
|
40
|
+
return;
|
41
|
+
if (!account.decrypted_data.passphrase)
|
42
|
+
return;
|
43
|
+
const worker = cluster.fork({
|
44
|
+
ENCRYPTION_KEY_BASE58: '',
|
45
|
+
ACCESS_KEY: account.decrypted_data.access_key,
|
46
|
+
SECRET_KEY: account.decrypted_data.secret_key,
|
47
|
+
PASSPHRASE: account.decrypted_data.passphrase,
|
48
|
+
WRITE_QUOTE_TO_SQL: account.secret.public_data.write_quote_to_sql ? 'true' : 'false',
|
49
|
+
TERMINAL_ID: `@yuants/vendor-okx/worker/${account.secret.public_data.name}`,
|
50
|
+
WORKER_LABEL: account.secret.public_data.name,
|
51
|
+
});
|
52
|
+
worker.on('message', (message) => {
|
53
|
+
if (message.type === 'log') {
|
54
|
+
logBuffer.next(`[Worker ${worker.process.pid} ${message.label}] ${message.level}: ${message.message}`);
|
55
|
+
}
|
56
|
+
});
|
57
|
+
worker.on('exit', (code, signal) => {
|
58
|
+
if (code === 0) {
|
59
|
+
console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited gracefully`);
|
60
|
+
subscriber.complete();
|
61
|
+
}
|
62
|
+
else {
|
63
|
+
console.error(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`);
|
64
|
+
subscriber.error(new Error(`Worker ${worker.process.pid} exited with code ${code} and signal ${signal}`));
|
65
|
+
}
|
66
|
+
});
|
67
|
+
return () => {
|
68
|
+
worker.kill();
|
69
|
+
console.info(`[Primary] ${formatTime(Date.now())} Worker ${worker.process.pid} killed`);
|
70
|
+
};
|
71
|
+
})).pipe(
|
72
|
+
//
|
73
|
+
retry({ delay: 1000 }), repeat({ delay: 1000 })), (a, b) => a.secret.updated_at === b.secret.updated_at))
|
74
|
+
.subscribe();
|
75
|
+
}
|
76
|
+
else {
|
77
|
+
console.info(`${formatTime(Date.now())} This is the worker process`, process.pid, process.env);
|
78
|
+
import('./index');
|
79
|
+
}
|
80
|
+
//# sourceMappingURL=cluster.js.map
|