Class: Bter::Trade

Inherits:
Object
  • Object
show all
Defined in:
lib/bter/trading.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTrade

Returns a new instance of Trade.



7
8
9
# File 'lib/bter/trading.rb', line 7

def initialize
  @logging = false
end

Instance Attribute Details

#keyObject

Returns the value of attribute key.



5
6
7
# File 'lib/bter/trading.rb', line 5

def key
  @key
end

#secretObject

Returns the value of attribute secret.



5
6
7
# File 'lib/bter/trading.rb', line 5

def secret
  @secret
end

Instance Method Details

#active_ordersObject



56
57
58
59
# File 'lib/bter/trading.rb', line 56

def active_orders
  query = trade_request "orderlist"
  info = JSON.parse query, {:symbolize_names => true}
end

#buy(pair, amount) ⇒ Object

abstract the trade to buy and sell



67
68
69
70
# File 'lib/bter/trading.rb', line 67

def buy(pair, amount)
  pair_rate = get_rate(pair)
  trade({:pair => pair, :type => "BUY", :rate => pair_rate, :amount => amount})
end

#cancel_order(order_id) ⇒ Object



82
83
84
85
# File 'lib/bter/trading.rb', line 82

def cancel_order(order_id)
  query = trade_request "cancelorder", [{:id => order_id}]
  info = JSON.parse query, {:symbolize_names => true}
end

#get_infoObject



51
52
53
54
# File 'lib/bter/trading.rb', line 51

def get_info    
  query = trade_request "getfunds"
  info = JSON.parse query, {:symbolize_names => true}    
end

#get_rate(pair) ⇒ Object



87
88
89
# File 'lib/bter/trading.rb', line 87

def get_rate(pair)
  Public.new.ticker(pair).values_at(:last).flatten
end

#logging(p) ⇒ Object



11
12
13
14
15
# File 'lib/bter/trading.rb', line 11

def logging(p)
  if p == :on
    @logging = true
  end
end

#order_status(order_id) ⇒ Object



77
78
79
80
# File 'lib/bter/trading.rb', line 77

def order_status(order_id)
  query = trade_request "getorder", [{:id => order_id}]
  info = JSON.parse query, {:symbolize_names => true}
end

#sell(pair, amount) ⇒ Object



72
73
74
75
# File 'lib/bter/trading.rb', line 72

def sell(pair, amount)
  pair_rate = get_rate(pair)
  trade({:pair => pair, :type => "SELL", :rate => pair_rate, :amount => amount})
end

#signObject



45
46
47
48
49
# File 'lib/bter/trading.rb', line 45

def sign
  hmac = OpenSSL::HMAC.new(@secret,OpenSSL::Digest::SHA512.new)
  @params = @params.collect {|k,v| "#{k}=#{v}"}.join('&')
  signed = hmac.update @params      
end

#trade(*params) ⇒ Object



61
62
63
64
# File 'lib/bter/trading.rb', line 61

def trade(*params)
  query = trade_request "placeorder", params
  info = JSON.parse query, {:symbolize_names => true}
end

#trade_request(method, params = nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/bter/trading.rb', line 17

def trade_request(method, params=nil)
  if params.nil?
    @params = {:method => method}
  else
    @params = {:method => method}
    params.each do |param|
      @params.merge!(param)
    end
  end
  request = Typhoeus::Request.new(
    "https://bter.com/api/1/private/#{method}",
    method: :post,
    body: @params,
    headers: { Key: @key, Sign: sign }
    )
    if @logging
      RequestLogger.error_log(request)
    end
    hydra = Typhoeus::Hydra.hydra
    hydra.queue(request)
    hydra.run
    response = request.response
    if @logging
      RequestLogger.info_log(response.code, response.total_time, response.headers_hash)
    end
    response.body
end