trade-o-matic 0.5.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93cfd0dc804c45086e43e42d3d27a73ba0a36ebd
4
- data.tar.gz: 66f00afddcc8fbec1d3c1b871d5d048dcc0aa7bd
3
+ metadata.gz: b8d98a405fccc33b4d1a65e5edb2774c9b36a7fa
4
+ data.tar.gz: d25f801f15f1d5617e6c3476259f4a7863de9e4e
5
5
  SHA512:
6
- metadata.gz: 73fdfb94a5fab02d95bb8f92ce0d0b10f20470c7f63d1780edb1c572abd1966af3a31ce01ecb4afbcadd3fb1053f49aa06ac6866bcfe2857908447bcf434f91b
7
- data.tar.gz: 15b6a0ec1f3e54b57d719eb3474fdcb2d7b969ac43508d0fe417520445aadcd336496c15f34e418023282ac54f8115eb38aa64dc17b10d259ddebd54e95b59d6
6
+ metadata.gz: 00bf4f07ce88b644e0ec7fe08f733f8090c1f5d56b820e8ba9f494c8bb8a5a1859b81a693be890288fad276e583bf493dd1557480d939ea4b73030aedc114302
7
+ data.tar.gz: 51d6663db16fab7a59a3afa496434b65c1aa21a810eed5c0e118a2a4858a9a2a4a92f3bc10ef693772b3a32fa79235996970b4303dd635df8ac17342507db9e1
@@ -23,6 +23,7 @@ require 'trade-o-matic/core/account'
23
23
  require 'trade-o-matic/core/account_proxy'
24
24
  require 'trade-o-matic/core/account_order'
25
25
  require 'trade-o-matic/core/balance'
26
+ require 'trade-o-matic/core/transaction_event'
26
27
 
27
28
  require 'trade-o-matic/endpoints/base_endpoint'
28
29
  require 'trade-o-matic/endpoints/bitcoin_address'
@@ -49,6 +49,10 @@ module Trader
49
49
  not_supported :cancel_order
50
50
  end
51
51
 
52
+ def listen_transactions(_pair, &_block)
53
+ not_supported :listen_transactions
54
+ end
55
+
52
56
  def not_supported(_feature)
53
57
  raise NotSupportedError.new name, _feature
54
58
  end
@@ -1,6 +1,7 @@
1
1
  require 'rest-client'
2
2
  require 'base64'
3
3
  require 'json'
4
+ require 'websocket-client-simple'
4
5
 
5
6
  module Trader
6
7
  class BitfinexBackend < BaseBackend
@@ -110,6 +111,29 @@ module Trader
110
111
  order
111
112
  end
112
113
 
114
+ def listen_transactions(_pair, &_block)
115
+ WebSocket::Client::Simple.connect('wss://api2.bitfinex.com:3000/ws') do |ws|
116
+ ws.on :open do |event|
117
+ ws.send(JSON.dump({ event: 'subscribe', channel: 'trades', pair: 'BTCUSD' }))
118
+ end
119
+
120
+ ws.on :message do |event|
121
+ message = JSON.load(event.data)
122
+ next if message.is_a? Hash
123
+
124
+ if message[1] == 'te'
125
+ _block.call(
126
+ pair: _pair,
127
+ ts: Time.at(message[3]),
128
+ direction: message[5] < 0 ? Transaction::SELL : Transaction::BUY,
129
+ price: message[4],
130
+ volume: message[5].abs
131
+ )
132
+ end
133
+ end
134
+ end
135
+ end
136
+
113
137
  private
114
138
 
115
139
  attr_reader :session
@@ -20,6 +20,7 @@ module Trader
20
20
  }
21
21
 
22
22
  MAIN_MARKET = CurrencyPair.new(:SATOSHI, :CLP_CENT)
23
+ COP_MARKET = CurrencyPair.new(:SATOSHI, :COP_CENT)
23
24
 
24
25
  class SurbtcBalance < RawBalance
25
26
  attr_mapped :amount
@@ -47,7 +48,7 @@ module Trader
47
48
  end
48
49
 
49
50
  def get_available_markets
50
- [MAIN_MARKET]
51
+ [MAIN_MARKET, COP_MARKET]
51
52
  end
52
53
 
53
54
  def get_balance(_session, _currency)
@@ -114,6 +115,7 @@ module Trader
114
115
 
115
116
  def currency_code_for(_currency)
116
117
  return 'clp' if _currency.code == :CLP_CENT
118
+ return 'cop' if _currency.code == :COP_CENT
117
119
  return 'btc' if _currency.code == :SATOSHI
118
120
  _currency.to_s.downcase
119
121
  end
@@ -23,5 +23,12 @@ module Trader
23
23
  backend.fill_book(book)
24
24
  self
25
25
  end
26
+
27
+ def on_transaction
28
+ backend.listen_transactions(pair) do |raw|
29
+ yield TransactionEvent.new raw, nil
30
+ end
31
+ end
26
32
  end
27
- end
33
+ end
34
+
@@ -0,0 +1,52 @@
1
+ module Trader
2
+ class TransactionEvent
3
+ def initialize(_raw, _forced_pair = nil)
4
+ @raw = _raw
5
+ @forced_pair = _forced_pair
6
+ end
7
+
8
+ def convert_to(_pair, _quote=nil)
9
+ forced_pair = CurrencyPair.for_code _pair, _quote
10
+ return self if forced_pair == pair
11
+ self.class.new @raw, forced_pair
12
+ end
13
+
14
+ def pair
15
+ forced_pair || original_pair
16
+ end
17
+
18
+ def original_pair
19
+ @raw[:pair]
20
+ end
21
+
22
+ def timestamp
23
+ @raw[:ts]
24
+ end
25
+
26
+ def direction
27
+ @raw[:direction]
28
+ end
29
+
30
+ def price
31
+ convert_quote original_pair.quote.pack @raw[:price]
32
+ end
33
+
34
+ def volume
35
+ convert_base original_pair.quote.pack @raw[:volume]
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :forced_pair
41
+
42
+ def convert_base(_price)
43
+ return _price if forced_pair.nil?
44
+ _price.convert_to forced_pair.base
45
+ end
46
+
47
+ def convert_quote(_price)
48
+ return _price if forced_pair.nil?
49
+ _price.convert_to forced_pair.quote
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,6 @@
1
1
  module Trader
2
- class Transaction < Struct.new(:price, :volume, :time); end
2
+ class Transaction < Struct.new(:price, :volume, :time)
3
+ BUY = :buy
4
+ SELL = :sell
5
+ end
3
6
  end
@@ -1,3 +1,3 @@
1
1
  module Trader
2
- VERSION = "0.5.7"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trade-o-matic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-14 00:00:00.000000000 Z
11
+ date: 2016-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: websocket-client-simple
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '0.3'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '0.3'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -280,6 +294,7 @@ files:
280
294
  - lib/trade-o-matic/core/exchange.rb
281
295
  - lib/trade-o-matic/core/market.rb
282
296
  - lib/trade-o-matic/core/market_loader.rb
297
+ - lib/trade-o-matic/core/transaction_event.rb
283
298
  - lib/trade-o-matic/endpoints/base_endpoint.rb
284
299
  - lib/trade-o-matic/endpoints/bitcoin_address.rb
285
300
  - lib/trade-o-matic/errors.rb