-
Notifications
You must be signed in to change notification settings - Fork 8
/
index.js
308 lines (261 loc) · 7.64 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
'use strict'
/**
* >>>> 申明 <<<<
* 一旦您使用了本项目以及项目代码就代表一切风险将由您自己承担
* 本项目以及本项目成员对您有可能造成的财产损失概不负责
* 如果您不同意本申明,那么您将没有权利使用本项目以及本项目的代码
*
*/
// 加载自己的工具
const Util = require('./lib/util.js')
const Promise = require('bluebird')
// 币种定义
const COIN_TYPE = ['no','btc','ltc']
// 常量定义
const REFERSH_TIME = 6000 // 每6秒刷新一次
class Huobi {
/**
* @function constructor
* @param {String} accessKey 连接密钥
* @param {String} secretKey 密码密钥
* @param {Bollean} refresh 是否自动刷新数据
* @type {String}
*/
constructor({accessKey='', secretKey='', refresh=true}) {
// 这里输入Access Key 和 Secret Key
Util.accessKey(accessKey)
Util.secretKey(secretKey)
Util.APIUrl('https://api.huobi.com/apiv3')
this._balance_ = {
total:0,
net:0,
cny:0,
btc:0,
ltc:0,
fcny:0,
fbtc:0,
fltc:0,
lcny:0,
lbtc:0,
lltc:0
} // 账户资金
// 初始化事项
if(refresh){
this._refresh()
setInterval(this._refresh.bind(this), REFERSH_TIME)
}
}
// -------------------------------------------------
//
// 属性定义
//
// -------------------------------------------------
/**
* 获取当前账户资金余额
* @method balance
* @return {Object} 包含资金信息的对象
* Edit By:aokihu
*/
get balance(){
return this._balance_
}
// -------------------------------------------------
//
// 方法定义
//
// -------------------------------------------------
/**
* @function getNow
* @abstract 获取实时行情数据
* @param {String} type 币种类型,比特币'btc',莱特币'ltc'
* @param {string} market 币种市场,人民币'cny',美元'usd'
* @return {Promise}
*/
getNow({type='btc',market='cny'}){
let _market_ = market === 'cny' ? 'static' : 'usd'
let url = `http://api.huobi.com/${_market_}market/ticker_${type}_json.js`
return Util.fetch(url)
}
/**
* @function getAccountInfo
* @abstract 获取用户账户信息
* @return {Promise}
*/
getAccountInfo(){
return Util.request({method:'get_account_info'})
}
/**
* @function getOrders
* @abstract 获取所有委托订单
* @param {String} market 币种市场,有cny人民币和usd美元,默认cny
* @param {Integer} type 查询币种,比特币=1,莱特币=2
* @return {Promise}
*/
getOrders({type=1,market='cny'}){
return Util.request({method:'get_orders',coin_type:type},{market:market})
}
/**
* @function getNewDealOrders
* @abstract 查询个人最新10条成交订单
* @param {String} market 币种市场,有cny人民币和usd美元,默认cny
* @return {Promise}
*/
getNewDealOrders({market='cny'}){
return Util.request({method:'get_new_deal_orders'},{market:market})
}
/**
* @function orderInfo
* @abstract 获取订单详细内容
* @param {Integer} type 查询币种,比特币=1,莱特币=2
* @param {ID} orderID 订单ID
* @param {String} market 货币市场,人民币='cny',美元='usd'
*/
orderInfo({type=1, orderId='', market='cny'}){
return Util.request({method:'order_info',
coin_type:type,
id:orderId}
,{market:market})
}
/**
* @function buy
* @abstract 指定价位买入
* @param {Integer} type 币种,比特币=1,莱特币=2
* @param {Number} price 购买价格
* @param {Number} amount 购买数量
* @param {String} pwd 如果设置了交易密码,请添这个参数,如果没有就不用管了
* @param {String} market 货币市场,人民币='cny',美元='usd'
*/
buy({type=1, price=0, amount=0, pwd='', market='cny'}){
let must = {
'method':'buy',
'coin_type':type,
'price':price,
'amount':amount
}
let opt = {
'trade_password':pwd,
'market':market
}
return Util.request(must, opt)
}
/**
* @function sell
* @abstract 指定价位卖出
* @param {Integer} type 币种,比特币=1,莱特币=2
* @param {Number} price 购买价格
* @param {Number} amount 购买数量
* @param {String} pwd 如果设置了交易密码,请添这个参数,如果没有就不用管了
* @param {String} market 货币市场,人民币='cny',美元='usd'
*/
sell({type=1, price=0, amount=0, pwd='', market='cny'}){
let must = {
'method':'sell',
'coin_type':type,
'price':price,
'amount':amount
}
let opt = {
'trade_password':pwd,
'market':market
}
return Util.request(must, opt)
}
/**
* @function buyMarket
* @abstract 市场价位买入
* @param {Integer} type 币种,比特币=1,莱特币=2
* @param {Number} amount 购买数量
* @param {String} pwd 如果设置了交易密码,请添这个参数,如果没有就不用管了
* @param {String} market 货币市场,人民币='cny',美元='usd'
*/
buyMarket({type=1, amount=0, pwd='', market='cny'}){
let must = {
'method':'buy_market',
'coin_type':type,
'amount':amount
}
let opt = {
'trade_password':pwd,
'market':market
}
return Util.request(must, opt)
}
/**
* @function sellMarket
* @abstract 市场价卖出
* @param {Integer} type 币种,比特币=1,莱特币=2
* @param {Number} amount 购买数量
* @param {String} pwd 如果设置了交易密码,请添这个参数,如果没有就不用管了
* @param {String} market 货币市场,人民币='cny',美元='usd'
*/
sellMarket({type=1, amount=0, pwd='', market='cny'}){
let must = {
'method':'sell_market',
'coin_type':type,
'amount':amount
}
let opt = {
'trade_password':pwd,
'market':market
}
return Util.request(must, opt)
}
/**
* @function sellAllMarket
* @abstract 市场价全部卖出
* @param {Integer} type 币种,比特币=1,莱特币=2
* @param {Number} amount 购买数量
* @param {String} pwd 如果设置了交易密码,请添这个参数,如果没有就不用管了
* @param {String} market 货币市场,人民币='cny',美元='usd'
*/
sellAllMarket({type=1,pwd='',market='cny'}){
// 计算交易金额
let amount = this._balance_[COIN_TYPE[type]]
return this.sellMarket({type:type,amount:amount,pwd:'',market:market})
}
/**
* @function cancelOrder
* @abstract 取消订单
* @param {Integer} type 币种类型,比特币=1,莱特币=2
* @param {ID} orderID 订单ID
* @param {String} market 货币市场,人民币='cny',美元='usd'
* @return {Promise}
*/
cancelOrder({type=1, orderId="", market='cny'}){
return Util.request({method:'cancel_order',
coin_type:type,
id:orderId}
,{market:market})
}
// -----------------------------
//
// 内部方法定义
//
// -----------------------------
/**
* @private
* @function 刷新数据
*/
_refresh(){
// 更新账户信息
this.getAccountInfo()
.then(data => {
this._balance_ = {
total:data.total,
net:data.net_asset,
cny:data.available_cny_display,
btc:data.available_btc_display,
ltc:data.available_ltc_display,
fcny:data.frozen_cny_display,
fbtc:data.frozen_btc_display,
fltc:data.frozen_ltc_display,
lcny:data.loan_cny_display,
lbtc:data.loan_btc_display,
lltc:data.loan_ltc_display
}
})
.catch(err => console.log(err))
}
}
// @export
module.exports = Huobi