Basically just add in an auction platform to mtgox.
Ssssshh...
|
|
|
I'd given thought to an open source, p2p trading application that one would run in conjunction with bitcoin and float synchronized data across the nodes.
Bitcoin avoids doublespend problem by applying a delay, however a trading system requires all the stuff that we do not know (yet) how to run decentralized: trust, realtime, atomic transactions
|
|
|
With backups on various places of the world, too. Hosting in Japan is just too expensive (about 15 times more than US servers) to be used by default.
|
|
|
Another question: how can I re-subscribe from a previously unsubscribed channel? I have tried sending {'channel': 'd5f06780-30a8-4a48-a2f8-7ed181b4a13f', 'op': 'mtgox.subscribe'} and {'key': 'd5f06780-30a8-4a48-a2f8-7ed181b4a13f', 'op': 'mtgox.subscribe'} but neither works at getting the ticker feed back after I unsubscribe from it. Just added: {"op":"mtgox.subscribe","type":"trades"} Possible types: trades, ticker, depth
|
|
|
Everything works as expected. Looks like I get a lot of identical ticker frames when I enter an order, I'm guessing this is because there are a lot of bots adjusting orders in response?
Might just have been "by chance". There are a lot of ticker events, no need to think too hard about this
|
|
|
Is websocket api down? $ telnet websocket.mtgox.com 80 Trying 69.64.54.38... telnet: Unable to connect to remote host: Connection refused
Yep was down, found the reason, fixed the code and restarted it (division by zero when someone sent badly formatted draft-00 headers). Hello, thanks for the API. Few questions/comments: a) What exactly is the ticker? Why server broadcast so many packets without any changed data? I see few updates per second without any change... b) Can you please post example of subscribe/unsubscribe command? It's not clear for me how to unsubscribe from ticker. c) Can you include (official) server timestamps to the broadcasts? Client timestamps in trading platforms are hell... I'm sorry, I miss 'date' field a) The ticker is the current stats about bitcoin. It's sent once each time it have a chance to be changed, which includes when orders are posted, removed or completed. b) Here's an example: {"op":"unsubscribe","channel":"xxx"} Additionally each user has a "own" channel which streams informations about orders (new order, deleted order, etc) and trades only the user's trades).
Does a user's "own" channel include information about when BTC/USD funds post to his account? Not at this point. why are you using UUID's to name the channels rather than just something human readable like: "trades" ?
Because it was easier since I intend to use this system for many other sites, without having to do something to isolate users of a specific system. Also there are user-specific channels and many other stuff which makes use of uuid a bit easier (for me).
|
|
|
I'm hoping to move my automated trading system from poll-based to event-based. It's first I heard about websockets, looks like it's invented for browser based systems. Is it worth writing a standalone program that makes use of this (in which case I'll start right ahead) or do you have a more basic socket interface in your plans? Or am I talking nonsense (haven't slept for a while)?
The draft-75 version of the protocol is really easy to implement from an application. You send a simple HTTP request: GET /mtgox HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: websocket.mtgox.com Origin: null
(remember to add an empty line at the end) And you get the following reply: HTTP/1.1 101 Web Socket Protocol Handshake Upgrade: WebSocket Connection: Upgrade WebSocket-Origin: null WebSocket-Location: ws://websocket.mtgox.com/mtgox
Once you got this, the websocket server will send you frames in the following format: a NUL byte (00), some JSON-encoded data, and a FF byte. You can then decode each json packet as they come and handle them. You can also send packets in the same way, by sending a NUL byte, some json-encoded data, and a FF byte (for example to send an unsubscribe request, or subscribe to a mtgox key). Example with telnet: http://dl.dropbox.com/u/24900303/screenshot/2011/04/20110415_websocket_telnet_example.png
|
|
|
EDIT: I see your problem, should be better~
|
|
|
I look forward to a feed of bids and asks, so I can restore newsham's page to it's former glory. I don't need the whole order book to be sent every time there's a change; just a stream of updates would be good. For example: add 1001 bid 23.45 1.043 add 1002 ask 34.56 1.07 remove 1001 fill 1002 14.56 fill 1002 20.00 ...
Should be possible, I'll do something
|
|
|
For info if you want to define a A on the domain itself, just leave "Host" empty.
|
|
|
Hi, There's a new MTGox websocket API. This API works by subscription to channels, and each channel is represented by an UUID. You can connect via: ws://websocket.mtgox.com/mtgox The websocket will subscribe you to some channels automatically: - dbf1dee9-4f2e-4a08-8cb7-748919a71b21: trades (each time a trade happens, you get something here)
- d5f06780-30a8-4a48-a2f8-7ed181b4a13f: the mtgox ticker (lots of updates, with often the same data)
- 24e67e0d-1cad-4cc0-9e7a-f8523ef460fe: depth information in realtime (price + amount + type... type=1=Ask, type=2=Bid)
Additionally each user has a "own" channel which streams informations about orders (new order, deleted order, etc) and trades only the user's trades). Each message is a JSON-encoded object, with at least "op" element. The "op" element contains the operation to be done (for outgoing messages), or the type of message (for incoming messages). Possible outgoing commands: - unsubscribe Stop receiving messages from a channel (parameter "channel")
Example incoming data: Ticker{"channel":"d5f06780-30a8-4a48-a2f8-7ed181b4a13f","op":"private","origin":"broadcast","private":"ticker","ticker":{"buy":0.9515,"high":1,"low":0.91,"sell":0.9697,"vol":34349}} Trade{"channel":"dbf1dee9-4f2e-4a08-8cb7-748919a71b21","op":"private","origin":"broadcast","private":"trade","trade":{"amount":2.71,"amount_int":"271000000","date":1310279340,"item":"BTC","price":14.43,"price_currency":"USD","price_int":"1443000","tid":"1310279340877902","trade_type":"bid","type":"trade"}} Contains: - amount: the traded amount in item (BTC), float, deprecated
- amount_int: same as amount, but in smallest unit
- date: unix timestamp of trade
- item: What was this trade about
- price: price per unit, float, deprecated
- price_int: price in smallest unit as integer (5 decimals of USD, 3 in case of JPY)
- price_currency: currency in which trade was completed
- tid: Trade id (big integer, which is in fact trade timestamp in microseconds)
- trade_type: Did this trade result from the execution of a bid or a ask?
Depth update{"channel":"24e67e0d-1cad-4cc0-9e7a-f8523ef460fe","depth":{"currency":"USD","item":"BTC","price":"14.43","price_int":"1443000","type":1,"type_str":"ask","volume":"-2.71","volume_int":"-271000000"},"op":"private","origin":"broadcast","private":"depth"} Contains: - currency: the currency affected
- item: the item (BTC)
- price: price as a float, deprecated
- price_int: the price at which volume change happened
- type: 1=ask 2=bid. Deprecated, see type_str
- type_str: type of order at this depth, either "ask" or "bid"
- volume: the volume change as float, deprecated
- volume_int: volume change in smallest unit
(priv) Order update{"channel":"(partial key)","op":"private","order_upd":{"amount":1000,"darkStatus":0,"date":1302836027,"oid":"(oid)","price":0.9899,"status":1},"origin":"broadcast","private":"order_upd"} This is still under tests, and any element of this websocket API may change anytime.Ideas/comments are welcome
|
|
|
Found the guy and got the work done, this offer is now closed.
|
|
|
Thanks to all who have offered help. I'm going through the offers and will contact some of you. New volunteers are still welcome.
Oh hi~ btw I can provide both management & hosting (got a few idle machines here that would definitely hold the load).
|
|
|
Hi,
Sorry for not seeing this thread sooner, I see there's a bug here (when ServerName matches the host name, TLS protocol doesn't work anymore), I fixed it for now by not providing a hostname in the vhost (and I'll try to upgrade openssl to see if it fixes the issue)
This needs openssl 0.9.8j or later. On both ends. Running openssl 1.0.0d here~
|
|
|
Hi,
Sorry for not seeing this thread sooner, I see there's a bug here (when ServerName matches the host name, TLS protocol doesn't work anymore), I fixed it for now by not providing a hostname in the vhost (and I'll try to upgrade openssl to see if it fixes the issue)
Mark
|
|
|
Could you point to some documentation of this Websocket handshake you want to be implemented, because I still not sure what exactly you want to be done?
http://en.wikipedia.org/wiki/WebSocketsSupport "most browsers". This means support of both:
|
|
|
Why not just use WebKit?
It's not a websocket server but client. I need the server part. Why does the server have to be written in C++/Qt?
Because I want to code the server part myself, there are some abstractions I want to make, and there are many other things I'd like to use this (it'd be useful for a *lot* of things)
|
|
|
Um, I'm not sure what more do you want apart from what QtTcpServer class does? Do you want a HTTP server?
As I said, I need a websocket server. That means using QTcpServer, implementing the base of a HTTP server, and adding support for the websocket fuckedup handshake. I was hoping someone would have that already done somewhere. I may end up doing it myself if nobody takes this up.
|
|
|
I'd need someone to write (or find if it already exists, I'm too lazy to filter Qt results from QuickTime results in Google) a little something for me. Basically, it'd be an async websocket server in Qt. It should not depend on QtGui (only use QCoreApplication/etc), and allow me to write my own websocket handler. I'd bid between 50 BTC (for a link to something already existing, opensource, and which works fine) to 1000 BTC (if you make it yourself and produce a quality library, opensource or not - if opensource it shouldn't be under GPL, use a real license like BSD, X11 or WTFPL). In between amounts for in between results. First come first served, etc. Some additionnal details: - Each connected socket should be represented by an abstract object, with slots for incoming data, and the ability to send data to the endpoint
- No form of serialization is required, I'll handle that myself
- It should use QTcpSocket or similar with signals and never block (in order to scale nicely)
- My main problem is to implement the WS handshake. Whoever wrote the spec was on pot and the thing is insane. Do a basic framework accepting tcp connections and handling the websocket handshake as implemented in major browsers (and without accepting invalid stuff) and you'll get your BTC (not the max, but not the min)
- The thing shouldn't crash if client connects and throw random stuff, and timeout clients nicely if they do not handshake
Let me know if you need additional details.
|
|
|
|