bluebot
Version:
A bitcoin trading bot for auto trading at various exchanges
90 lines (68 loc) • 1.72 kB
JavaScript
var BTCChina = require('btc-china-fork');
var util = require('../../core/util.js');
var _ = require('lodash');
var moment = require('moment');
var log = require('../../core/log');
var config = util.getConfig();
var dirs = util.dirs();
var Fetcher = require(dirs.exchanges + 'btcc');
// patch getTrades..
Fetcher.prototype.getTrades = function(fromTid, sinceTime, callback) {
var args = _.toArray(arguments);
var process = function(err, result) {
if(err)
return this.retry(this.getTrades, args);
callback(result);
}.bind(this);
if(sinceTime)
var params = {
limit: 1,
sincetype: 'time',
since: sinceTime
}
else if(fromTid)
var params = {
limit: 5000,
since: fromTid
}
this.btcc.getHistoryData(process, params);
}
util.makeEventEmitter(Fetcher);
var iterator = false;
var end = false;
var done = false;
var from = false;
var fetcher = new Fetcher(config.watch);
var fetch = () => {
if(!iterator)
fetcher.getTrades(false, from, handleFirstFetch);
else
fetcher.getTrades(iterator, false, handleFetch);
}
// we use the first fetch to figure out
// the tid of the moment we want data from
var handleFirstFetch = trades => {
iterator = _.first(trades).tid;
fetch();
}
var handleFetch = trades => {
iterator = _.last(trades).tid;
var last = moment.unix(_.last(trades).date);
if(last > end) {
fetcher.emit('done');
var endUnix = end.unix();
trades = _.filter(
trades,
t => t.date <= endUnix
);
}
fetcher.emit('trades', trades);
}
module.exports = function (daterange) {
from = daterange.from.unix();
end = daterange.to.clone();
return {
bus: fetcher,
fetch: fetch
}
}