Commit 3263d5ee by rongjun

bug

parent b6ac6f49
...@@ -195,6 +195,10 @@ class biboxApi { ...@@ -195,6 +195,10 @@ class biboxApi {
this._request("GET", "/v1/account/balances",{limit: limit || 20, page: page || 1}, callback); this._request("GET", "/v1/account/balances",{limit: limit || 20, page: page || 1}, callback);
} }
coins_info(callback) {
this._publicRequest("/v1/market/open/coins",{}, callback);
}
getTrades(symbol, callback) { getTrades(symbol, callback) {
callback(null, null) callback(null, null)
} }
......
...@@ -4,6 +4,7 @@ const restCurrencies = ["PRA","AAC","AT","RED","BU","QTUM","EOSDAC","HPB","ORME" ...@@ -4,6 +4,7 @@ const restCurrencies = ["PRA","AAC","AT","RED","BU","QTUM","EOSDAC","HPB","ORME"
const machine = process.env['MACHINE']; const machine = process.env['MACHINE'];
const biboxApi = require('./api_kucoin'); const biboxApi = require('./api_kucoin');
const zlib = require('zlib'); const zlib = require('zlib');
let coinInfoMap = null
const Strategy3MaxAmountMap = { const Strategy3MaxAmountMap = {
USDT: 300, USDT: 300,
BTC: 0.05, BTC: 0.05,
...@@ -93,6 +94,21 @@ class BiboxCollector extends BaseCollector{ ...@@ -93,6 +94,21 @@ class BiboxCollector extends BaseCollector{
_runMonitor(callback){ _runMonitor(callback){
let balanceMap = {}; let balanceMap = {};
let need = 1; let need = 1;
if(!coinInfoMap){
console.log('start get coin info...');
coinInfoMap = {}
this.api.coins_info((error,result)=>{
if(error){
console.error('get coins info error')
}else {
if(result.data){
for(let d of result.data){
coinInfoMap[d.coin] = d
}
}
}
});
}
this.api.balance(20, 1, (error,result)=>{ this.api.balance(20, 1, (error,result)=>{
if(error){ if(error){
console.error("get balance by rest error:"); console.error("get balance by rest error:");
...@@ -145,9 +161,14 @@ class BiboxCollector extends BaseCollector{ ...@@ -145,9 +161,14 @@ class BiboxCollector extends BaseCollector{
} }
processAmount(fromCurrency,toCurrency,amount){ processAmount(fromCurrency,toCurrency,amount){
//有可能会由于数值过小,传进来的amount被表示为科学计数法法 //有可能会由于数值过小,传进来的amount被表示为科学计数法法
let tradePrecision = 4;
const coin = coinInfoMap[toCurrency];
if(coin){
tradePrecision = coin['tradePrecision'] || 4;
}
const amountStr = parseFloat(amount).toFixed(10); const amountStr = parseFloat(amount).toFixed(10);
const nums = amountStr.split('.'); const nums = amountStr.split('.');
if(nums.length ===2 && nums[1].length>4){ if(nums.length ===2 && nums[1].length>tradePrecision){
return nums[0]+"."+nums[1].slice(0,4); return nums[0]+"."+nums[1].slice(0,4);
} }
return amount; return amount;
......
...@@ -20,7 +20,7 @@ function returnFakeOrder(symbol, price, amount) { ...@@ -20,7 +20,7 @@ function returnFakeOrder(symbol, price, amount) {
} }
} }
function convertToRecordOrder(order) { function convertToRecordOrder(order, price) {
let status = constants.OrderStatusNew; let status = constants.OrderStatusNew;
if(order.pendingAmount === 0){ if(order.pendingAmount === 0){
status = constants.OrderStatusFilled; status = constants.OrderStatusFilled;
...@@ -34,7 +34,7 @@ function convertToRecordOrder(order) { ...@@ -34,7 +34,7 @@ function convertToRecordOrder(order) {
} }
return { return {
orderId: order.orderOid + '', orderId: order.orderOid + '',
price: order.dealPriceAverage, price: price,
status: status, status: status,
transactTime: order.createdAt, transactTime: order.createdAt,
origQty: order.pendingAmount + order.dealAmount, origQty: order.pendingAmount + order.dealAmount,
...@@ -53,7 +53,7 @@ class Order { ...@@ -53,7 +53,7 @@ class Order {
this.api = new biboxApi(); this.api = new biboxApi();
} }
_handleFOKSearchResult(orderId, symbol, side, finalCallback, error, result) { _handleFOKSearchResult(orderId, symbol, side, price, finalCallback, error, result) {
if (error) { if (error) {
console.error("搜索订单出错"); console.error("搜索订单出错");
console.error(error); console.error(error);
...@@ -63,7 +63,7 @@ class Order { ...@@ -63,7 +63,7 @@ class Order {
timeout = 2000; timeout = 2000;
} }
setTimeout(() => { setTimeout(() => {
this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, finalCallback)); this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, price, finalCallback));
}, timeout); }, timeout);
return; return;
} }
...@@ -71,20 +71,20 @@ class Order { ...@@ -71,20 +71,20 @@ class Order {
if(!order.dealAmount && !order.pendingAmount){ if(!order.dealAmount && !order.pendingAmount){
console.error("没有返回amount 和deal amount字段,继续搜索"); console.error("没有返回amount 和deal amount字段,继续搜索");
console.log(result) console.log(result)
this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, finalCallback)); this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, price, finalCallback));
}else if (order.pendingAmount === 0 || !order.isActive) { }else if (order.pendingAmount === 0 || !order.isActive) {
finalCallback(null, convertToRecordOrder(order)); finalCallback(null, convertToRecordOrder(order, price));
} else if (order.dealAmount === 0 || (order.dealAmount > 0 && order.pendingAmount >0)) { } else if (order.dealAmount === 0 || (order.dealAmount > 0 && order.pendingAmount >0)) {
this.api.cancelOrder(orderId, symbol, side, (error, result) => { this.api.cancelOrder(orderId, symbol, side, (error, result) => {
// setTimeout(() => { // setTimeout(() => {
console.log("尝试取消,准备搜索订单"); console.log("尝试取消,准备搜索订单");
this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, finalCallback)); this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, price, finalCallback));
// }, 80) // }, 80)
}) })
} else { } else {
setTimeout(() => { setTimeout(() => {
console.log("订单尚未完成或取消,再次搜索"); console.log("订单尚未完成或取消,再次搜索");
this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, finalCallback)); this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, price, finalCallback));
}, 500); }, 500);
} }
} }
...@@ -101,7 +101,7 @@ class Order { ...@@ -101,7 +101,7 @@ class Order {
} }
const orderId = result.data.orderOid; const orderId = result.data.orderOid;
setTimeout(()=>{ setTimeout(()=>{
this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, callback)); this.api.searchOrder(orderId, symbol, side, this._handleFOKSearchResult.bind(this, orderId, symbol, side, price, callback));
},50); },50);
}) })
} }
...@@ -137,7 +137,7 @@ class Order { ...@@ -137,7 +137,7 @@ class Order {
api2.searchOrder(orderId, symbol, side, handleSearchResult.bind(this)); api2.searchOrder(orderId, symbol, side, handleSearchResult.bind(this));
return; return;
} }
callback(null, convertToRecordOrder(result.data)); callback(null, convertToRecordOrder(result.data, price));
} }
this.api.searchOrder(orderId, symbol, side, handleSearchResult.bind(this)); this.api.searchOrder(orderId, symbol, side, handleSearchResult.bind(this));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment