Skip to content

Instantly share code, notes, and snippets.

@codedot
Last active January 1, 2016 21:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codedot/8201934 to your computer and use it in GitHub Desktop.
Save codedot/8201934 to your computer and use it in GitHub Desktop.
Hedging observer for Bitstamp
URL = https://www.bitstamp.net/api/order_book/?group=0
all:
-while date; do \
$(MAKE) spy; \
$(MAKE) clean; \
sleep 60; \
done
spy: orders.json
node spyhedge
orders.json:
wget --no-check-certificate $(URL) -T 60 -O $@
clean:
-rm -f orders.json
var read = require("fs").readFileSync;
var data = read("orders.json", "utf8");
var book = JSON.parse(data);
var bids, asks, delta;
function match(order)
{
var price = order.shift();
var amount = order.shift();
var cent, fee;
price = parseFloat(price);
amount = parseFloat(amount);
amount *= price;
amount = amount.toFixed(2);
order.price = price;
order.delta = amount;
for (cent = 20; cent <= 50; cent += 2) {
var fee = cent / 100;
var delta = Math.ceil(100 / fee) / 100 - 0.01;
if (delta.toFixed(2) == amount)
return true;
}
return false;
}
function scan(orders)
{
var list = [];
var i;
for (i in orders) {
var order = orders[i];
if (match(order))
list.push(order);
}
return list;
}
function filter(orders, samples)
{
var list = [];
var i;
for (i in orders) {
var order = orders[i];
var j;
for (j in samples) {
var sample = samples[j];
if (order.delta == sample.delta) {
list.push(order);
break;
}
}
}
return list;
}
function separate(orders)
{
var dict = {};
var i;
for (i in orders) {
var order = orders[i];
var delta = order.delta;
if (!dict[delta])
dict[delta] = [];
dict[delta].push(order.price);
}
return dict;
}
bids = scan(book.bids);
asks = scan(book.asks);
bids = filter(bids, asks);
asks = filter(asks, bids);
bids = separate(bids);
asks = separate(asks);
for (delta in bids) {
var b = bids[delta];
var a = asks[delta];
var n = Math.min(b.length, a.length);
var d = parseFloat(delta);
var i;
for (i = 0; i < n; i++) {
var bid = b[i];
var ask = a[i];
var btc = 4 * delta / (ask - bid);
var usd = btc * (ask + bid) / 2 + 0.01;
var fee = 1 / delta;
var cur = (bid + ask) / 2;
console.log({
usd: usd.toFixed(2),
btc: btc.toFixed(8),
fee: fee.toFixed(2),
ask: ask.toFixed(2),
cur: cur.toFixed(2),
bid: bid.toFixed(2)
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment