class Trader::BitstampBackend
Constants
- BASE_CUR
- MAIN_MARKET
- QUOTE_CUR
- TYPE_MAP
Attributes
session[R]
Public Class Methods
new()
click to toggle source
Calls superclass method
Trader::BaseBackend::new
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 43 def initialize super :bitstamp end
Public Instance Methods
create_order(_session, _pair, _volume, _price, _type)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 81 def create_order(_session, _pair, _volume, _price, _type) not_supported('market orders') if _price.nil? normalize_raw_order execute_request( _session || session, _type == Order::BID ? 'buy' : 'sell', { amount: _volume.to_f, price: _price.to_f } ) end
fetch_order(_session, _id)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 91 def fetch_order(_session, _id) normalize_raw_order_status _id, execute_request( _session || session, 'order_status', { id: _id['id'] } ) end
fill_book(_book)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 51 def fill_book(_book) # TODO: consider book pair _book.prepare Time.now ob = execute_request(nil, 'order_book') ob['bids'].each { |o| _book.add_bid(o[0], o[1]) } ob['asks'].each { |o| _book.add_ask(o[0], o[1]) } tx = execute_request(nil, 'transactions') tx.each do |t| _book.add_transaction t['price'], t['amount'], Time.at(t['date'].to_i) end end
get_available_markets()
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 47 def get_available_markets [MAIN_MARKET] end
get_balance(_session, _currency)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 66 def get_balance(_session, _currency) raw = execute_request(_session || session, 'balance') if _currency == BASE_CUR return BackendBalance.new raw['btc_balance'], raw['btc_available'] else return BackendBalance.new raw['usd_balance'], raw['usd_available'] end end
get_orders(_session, _pair)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 76 def get_orders(_session, _pair) raw_orders = execute_request(_session || session, 'open_orders') raw_orders.map { |o| normalize_raw_order o } end
Private Instance Methods
big(_string)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 151 def big(_string) BigDecimal.new _string end
execute_request(_signing, _resource, _data=nil)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 103 def execute_request(_signing, _resource, _data=nil) _data = sign_params _signing, _data if _signing JSON.parse(if _data.nil? RestClient.get "https://www.bitstamp.net/api/#{_resource}/" else RestClient.post "https://www.bitstamp.net/api/#{_resource}/", _data end) end
normalize_raw_order(_order)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 131 def normalize_raw_order(_order) BitstampOrder.new({ 'raw' => _order, 'executed_volume' => big(0), 'status' => 'In Queue' }) end
normalize_raw_order_status(_id, _status)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 139 def normalize_raw_order_status(_id, _status) executed_volume = _status['transactions'].inject(big(0)) { |r, t| r + big(t['btc']) } executed_price = _status['transactions'].inject(big(0)) { |r, t| r + (big(t['price']) * big(t['btc'])) } BitstampOrder.new({ 'raw' => _id, 'executed_volume' => executed_volume, 'executed_price' => executed_price / executed_volume, 'status' => _status['status'] }) end
sign_params(_keys, _params)
click to toggle source
# File lib/trade-o-matic/adapters/bitstamp_backend.rb, line 113 def sign_params(_keys, _params) nonce = (Time.now.to_f*10000).to_i.to_s customer_id = _keys[:customer_id].to_s api_key = _keys[:api_key] api_secret = _keys[:api_secret] digest = OpenSSL::Digest.new('sha256') signature_data = "#{nonce}#{customer_id}#{api_key}" signature = OpenSSL::HMAC.hexdigest(digest, api_secret, signature_data) (_params || {}).merge({ nonce: nonce, signature: signature.upcase, key: api_key }) end