Skip to content

Commit d263b28

Browse files
committed
add tradeblock script
1 parent 71c4437 commit d263b28

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"sjcl": "^1.0.3",
4949
"thrift": "^0.9.2",
5050
"underscore": "^1.6.0",
51+
"webhdfs": "^1.1.1",
5152
"winston": "^0.8.3",
5253
"ws": "^1.0.1"
5354
}

scripts/tradeblock.js

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
'use strict'
2+
var config = require('../config/import.config')
3+
var WebSocket = require('ws')
4+
var WebHDFS = require('webhdfs')
5+
var hdfs = WebHDFS.createClient(config.get('hdfs'))
6+
var moment = require('moment')
7+
8+
var url = 'wss://clientapi.tradeblock.com/json/RPbb09aee6'
9+
var connection = new WebSocket(url)
10+
var buffer = {}
11+
var last
12+
13+
/**
14+
* appendFile
15+
*/
16+
17+
function appendFile(pair, market, time, data) {
18+
var filename = 'file_date=' + time.format('YYYYMMDD') +
19+
'/' + pair.replace('/', '|') +
20+
'/' + market +
21+
'/' + time.format('HH') + '.csv'
22+
console.log('appending file: ' + filename)
23+
24+
hdfs.exists(filename, function(exists) {
25+
var action = exists ? 'appendFile' : 'writeFile'
26+
hdfs[action](filename, data, {}, function(err) {
27+
if (err) {
28+
console.error(err)
29+
return
30+
}
31+
})
32+
})
33+
}
34+
35+
/**
36+
* saveBuffer
37+
*/
38+
39+
function saveBuffer(time) {
40+
var market
41+
var pair
42+
43+
console.log('save buffer')
44+
45+
for (pair in buffer) {
46+
for (market in buffer[pair]) {
47+
appendFile(pair, market, time, buffer[pair][market])
48+
delete buffer[pair][market]
49+
}
50+
}
51+
52+
last = moment(time).startOf('minute')
53+
}
54+
55+
/**
56+
* bufferOrderbookData
57+
*/
58+
59+
function bufferOrderbookData(json) {
60+
61+
var time = moment.unix(json.asof).utc()
62+
var minute = moment(time).startOf('minute')
63+
var price
64+
var size
65+
var i
66+
67+
if (!buffer[json.pair]) {
68+
buffer[json.pair] = {}
69+
}
70+
71+
if (!buffer[json.pair][json.market]) {
72+
buffer[json.pair][json.market] = ''
73+
}
74+
75+
for (i = 0; i < json.bids.length; i++) {
76+
price = json.bids[i][0]
77+
size = json.bids[i][1]
78+
79+
buffer[json.pair][json.market] += 'bids,' +
80+
json.asof + ',' +
81+
price + ',' +
82+
size + ',' +
83+
json.type + '\n'
84+
}
85+
86+
for (i = 0; i < json.asks.length; i++) {
87+
price = json.asks[i][0]
88+
size = json.asks[i][1]
89+
90+
buffer[json.pair][json.market] += 'asks,' +
91+
json.asof + ',' +
92+
price + ',' +
93+
size + ',' +
94+
json.type + '\n'
95+
}
96+
97+
if (!last) {
98+
last = minute
99+
100+
} else if (minute.diff(last)) {
101+
saveBuffer(time)
102+
}
103+
}
104+
105+
connection.onopen = function() {
106+
console.log('started at: ' + new Date())
107+
var message = {
108+
action: 'subscribe',
109+
channel: 'orderbooks'
110+
}
111+
connection.send(JSON.stringify(message))
112+
}
113+
114+
connection.onerror = function(error) {
115+
console.log(error)
116+
console.log('Connection error ' + new Date())
117+
process.exit()
118+
}
119+
120+
connection.onmessage = function(message) {
121+
var json
122+
123+
try {
124+
json = JSON.parse(message.data)
125+
} catch (e) {
126+
console.log('invalid JSON: ', message.data)
127+
return
128+
}
129+
130+
131+
if (json.type === 3) {
132+
bufferOrderbookData(json)
133+
}
134+
}
135+

0 commit comments

Comments
 (0)