rbtc_arbitrage 1.4.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/Gemfile +17 -14
  4. data/Gemfile.lock +26 -28
  5. data/lib/rbtc_arbitrage.rb +2 -2
  6. data/lib/rbtc_arbitrage/cli.rb +1 -1
  7. data/lib/rbtc_arbitrage/trader.rb +8 -2
  8. data/lib/rbtc_arbitrage/version.rb +1 -1
  9. data/rbtc_arbitrage.gemspec +1 -3
  10. data/spec/clients/bitstamp_client_spec.rb +2 -2
  11. data/spec/rbtc_arbitrage_spec.rb +1 -1
  12. data/spec/spec_helper.rb +1 -1
  13. data/spec/support/cassettes/RbtcArbitrage_Clients_BitstampClient/_transfer/calls_Bitstamp_correctly.yml +48 -0
  14. data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/should_raise_SecurityError_if_not_live.yml +46 -48
  15. data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/raises_SecurityError_if_not_enough_BTC.yml +52 -52
  16. data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/raises_SecurityError_if_not_enough_USD.yml +49 -46
  17. data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/should_fetch_balance.yml +43 -173
  18. data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/shouldn_t_raise_security_error.yml +87 -168
  19. data/spec/support/cassettes/RbtcArbitrage_Trader/_fetch_prices/gets_the_right_price_set.yml +101 -98
  20. data/spec/trader_spec.rb +4 -4
  21. metadata +6 -56
  22. data/lib/rbtc_arbitrage/clients/mtgox_client.rb +0 -56
  23. data/spec/clients/mtgox_client_spec.rb +0 -53
  24. data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_balance/fetches_the_balance_correctly.yml +0 -77
  25. data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_price/fetches_price_for_buy_correctly.yml +0 -44
  26. data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_price/fetches_price_for_sell_correctly.yml +0 -44
  27. data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_price/fetches_prices_correctly.yml +0 -85
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62369ae5921161c77cf12861468a5a030c341501
4
- data.tar.gz: 455e70c7cef5c338ad71b61fde1f83748b7afbd2
3
+ metadata.gz: 835177735b2d220e4b1ef228124f49b09fa9ad45
4
+ data.tar.gz: 0418bcfd189c5e7f8d693cc550c449e7efa200bf
5
5
  SHA512:
6
- metadata.gz: 6b4fc22945496444b7fcb510bb5f8e3b22ac1c35f14c35d384cffd72d9c700a7ffe5e80b776ba114522a8c2beaff0120275f26a7f28947372479e02ac29433f7
7
- data.tar.gz: fc36f51cac71e6e4ed8ff34d566d8ba884c57e5dc4ba436f942ba790da274bc9b279918a232cbe157b33a83ab6fc41ffd8817937d27538bfeb74eb48cf012601
6
+ metadata.gz: a28ac69bfc9ae19adc1c2ad6fb2a7e265be0ca83aea5880291ed77aed2493b35d4aff366bd5ad3276520a216a150fa06e246c85a82787d0d8958c6af399b4578
7
+ data.tar.gz: 86a46a9bc74c016967f81b1478bf220b91f19b7a612e222785289ef66306c0ae8859ba3bbcf2a34e48935ab945fd130bbcf21f3109b189bbd6164fb48da44724
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "bitstamp"]
2
+ path = bitstamp
3
+ url = https://github.com/kojnapp/bitstamp.git
data/Gemfile CHANGED
@@ -2,17 +2,20 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in rbtc_arbitrage.gemspec
4
4
  gemspec
5
- gem 'rspec'
6
- gem "activemodel", ">= 3.1"
7
- gem "activesupport", ">= 3.1"
8
- gem 'guard'
9
- gem 'ruby_gntp'
10
- # gem 'awesome_print'
11
- gem 'guard-rspec'
12
- gem 'simplecov'
13
- gem 'coveralls', require: false
14
- gem "webmock"
15
- gem 'vcr'
16
- gem 'codeclimate-test-reporter'
17
- gem 'hashie'
18
- gem 'sinatra'
5
+ group :development do
6
+ gem 'rspec'
7
+ gem "activemodel", ">= 3.1"
8
+ gem "activesupport", ">= 3.1"
9
+ gem 'guard'
10
+ gem 'ruby_gntp'
11
+ # gem 'awesome_print'
12
+ gem 'guard-rspec'
13
+ gem 'simplecov'
14
+ gem 'coveralls', require: false
15
+ gem "webmock"
16
+ gem 'vcr'
17
+ gem 'codeclimate-test-reporter'
18
+ gem 'hashie'
19
+ gem 'sinatra'
20
+ end
21
+ gem 'bitstamp', path: '../bitstamp'
data/Gemfile.lock CHANGED
@@ -1,37 +1,38 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbtc_arbitrage (1.4.6)
4
+ rbtc_arbitrage (2.0.0)
5
5
  activemodel (>= 3.1)
6
6
  activesupport (>= 3.1)
7
- bitstamp
8
- bitstamp
9
7
  btce (= 0.2.4)
10
8
  coinbase (= 1.2.6)
11
9
  faraday (= 0.8.8)
12
- mtgox
13
10
  pony
14
11
  thor
15
12
 
13
+ PATH
14
+ remote: ../bitstamp
15
+ specs:
16
+ bitstamp (0.4.0)
17
+ activemodel (>= 3.1)
18
+ activesupport (>= 3.1)
19
+ curb (> 0.8.1)
20
+ ruby-hmac (= 0.4.0)
21
+
16
22
  GEM
17
23
  remote: https://rubygems.org/
18
24
  specs:
19
- activemodel (4.0.2)
20
- activesupport (= 4.0.2)
25
+ activemodel (4.0.4)
26
+ activesupport (= 4.0.4)
21
27
  builder (~> 3.1.0)
22
- activesupport (4.0.2)
23
- i18n (~> 0.6, >= 0.6.4)
28
+ activesupport (4.0.4)
29
+ i18n (~> 0.6, >= 0.6.9)
24
30
  minitest (~> 4.2)
25
31
  multi_json (~> 1.3)
26
32
  thread_safe (~> 0.1)
27
33
  tzinfo (~> 0.3.37)
28
34
  addressable (2.3.5)
29
- atomic (1.1.14)
30
- bitstamp (0.3.0)
31
- activemodel (>= 3.1)
32
- activesupport (>= 3.1)
33
- curb (> 0.8.1)
34
- ruby-hmac (= 0.4.0)
35
+ atomic (1.1.16)
35
36
  btce (0.2.4)
36
37
  monkey-patch
37
38
  builder (3.1.4)
@@ -70,7 +71,7 @@ GEM
70
71
  guard (>= 2.1.1)
71
72
  rspec (~> 3.0.0.beta, >= 2.14, < 4.0)
72
73
  hashie (2.0.5)
73
- httparty (0.12.0)
74
+ httparty (0.13.0)
74
75
  json (~> 1.8)
75
76
  multi_xml (>= 0.5.2)
76
77
  i18n (0.6.9)
@@ -89,16 +90,13 @@ GEM
89
90
  minitest (4.7.5)
90
91
  money (5.1.1)
91
92
  i18n (~> 0.6.0)
92
- monkey-patch (0.0.14)
93
+ monkey-patch (0.0.16)
93
94
  activesupport
94
- mtgox (1.1.0)
95
- faraday (~> 0.8, < 0.10)
96
- json (~> 1.7, >= 1.7.7)
97
- multi_json (1.8.2)
95
+ multi_json (1.9.2)
98
96
  multi_xml (0.5.5)
99
97
  multipart-post (1.2.0)
100
- polyglot (0.3.3)
101
- pony (1.6.2)
98
+ polyglot (0.3.4)
99
+ pony (1.8)
102
100
  mail (>= 2.0)
103
101
  pry (0.9.12.4)
104
102
  coderay (~> 1.0)
@@ -141,15 +139,14 @@ GEM
141
139
  term-ansicolor (1.2.2)
142
140
  tins (~> 0.8)
143
141
  thor (0.18.1)
144
- thread_safe (0.1.3)
145
- atomic
142
+ thread_safe (0.3.1)
143
+ atomic (>= 1.1.7, < 2)
146
144
  tilt (1.4.1)
147
145
  timers (1.1.0)
148
146
  tins (0.13.1)
149
- treetop (1.4.15)
150
- polyglot
151
- polyglot (>= 0.3.1)
152
- tzinfo (0.3.38)
147
+ treetop (1.5.3)
148
+ polyglot (~> 0.3)
149
+ tzinfo (0.3.39)
153
150
  vcr (2.8.0)
154
151
  webmock (1.16.1)
155
152
  addressable (>= 2.2.7)
@@ -161,6 +158,7 @@ PLATFORMS
161
158
  DEPENDENCIES
162
159
  activemodel (>= 3.1)
163
160
  activesupport (>= 3.1)
161
+ bitstamp!
164
162
  bundler (~> 1.3)
165
163
  codeclimate-test-reporter
166
164
  coveralls
@@ -1,7 +1,7 @@
1
+ require 'bundler'
2
+ Bundler.require(:default)
1
3
  require 'thor'
2
- require 'mtgox'
3
4
  require_relative 'rbtc_arbitrage/campbx.rb'
4
- require 'bitstamp'
5
5
  require 'btce'
6
6
  require 'coinbase'
7
7
  require 'pony'
@@ -7,7 +7,7 @@ module RbtcArbitrage
7
7
  option :volume, type: :numeric, default: 0.01, desc: "The amount of bitcoins to trade per transaction."
8
8
  option :verbose, type: :boolean, default: true, desc: "Whether you wish to log information."
9
9
  option :buyer, type: :string, default: "bitstamp"
10
- option :seller, type: :string, default: "mtgox"
10
+ option :seller, type: :string, default: "campbx"
11
11
  option :repeat, type: :numeric, default: nil
12
12
  option :notify, type: :boolean, default: false
13
13
  def trade
@@ -22,7 +22,7 @@ module RbtcArbitrage
22
22
  set_key opts, :notify, false
23
23
  exchange = opts[:buyer] || :bitstamp
24
24
  @buy_client = client_for_exchange(exchange)
25
- exchange = opts[:seller] || :mtgox
25
+ exchange = opts[:seller] || :campbx
26
26
  @sell_client = client_for_exchange(exchange)
27
27
  self
28
28
  end
@@ -94,7 +94,13 @@ module RbtcArbitrage
94
94
  logger.info "#{higher_ex}: $#{seller[:price].round(2)}"
95
95
  logger.info "buying #{@options[:volume]} btc from #{lower_ex} for $#{@paid.round(2)}"
96
96
  logger.info "selling #{@options[:volume]} btc on #{higher_ex} for $#{@received.round(2)}"
97
- logger.info "profit: $#{(@received - @paid).round(2)} (#{@percent.round(2)}%)"
97
+
98
+ profit_msg = "profit: $#{(@received - @paid).round(2)} (#{@percent.round(2)}%)"
99
+ if cutoff = @options[:cutoff]
100
+ profit_msg << " is #{@percent < cutoff ? 'below' : 'above'} cutoff"
101
+ profit_msg << " of #{cutoff}%."
102
+ end
103
+ logger.info profit_msg
98
104
  end
99
105
 
100
106
  def get_balance
@@ -1,3 +1,3 @@
1
1
  module RbtcArbitrage
2
- VERSION = "1.4.6"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -21,14 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
 
24
- spec.add_dependency "mtgox"
25
24
  spec.add_dependency "faraday", "0.8.8"
26
- spec.add_dependency "bitstamp"
25
+ # spec.add_dependency "bitstamp"
27
26
  spec.add_dependency "activemodel", ">= 3.1"
28
27
  spec.add_dependency "activesupport", ">= 3.1"
29
28
  spec.add_dependency "thor"
30
29
  spec.add_dependency "btce", '0.2.4'
31
- spec.add_dependency "bitstamp"
32
30
  spec.add_dependency "coinbase", '1.2.6'
33
31
  spec.add_dependency "pony"
34
32
  end
@@ -44,8 +44,8 @@ describe RbtcArbitrage::Clients::BitstampClient do
44
44
  end
45
45
 
46
46
  describe "#transfer" do
47
- it "calls Bitstamp correctly" do
48
- sell_client = RbtcArbitrage::Clients::MtGoxClient.new
47
+ it "calls Bitstamp correctly", :vcr do
48
+ sell_client = RbtcArbitrage::Clients::CampbxClient.new
49
49
  Bitstamp.should_receive(:transfer).with(0.01, sell_client.address)
50
50
  client.transfer sell_client
51
51
  end
@@ -4,7 +4,7 @@ describe RbtcArbitrage do
4
4
  describe ".clients" do
5
5
  it "includes clients" do
6
6
  clients = RbtcArbitrage.clients
7
- clients.should include(RbtcArbitrage::Clients::MtGoxClient)
7
+ clients.should include(RbtcArbitrage::Clients::CampbxClient)
8
8
  clients.should include(RbtcArbitrage::Clients::BitstampClient)
9
9
  end
10
10
  end
data/spec/spec_helper.rb CHANGED
@@ -13,7 +13,7 @@ SimpleCov.start do
13
13
  end
14
14
 
15
15
  require 'bundler'
16
- Bundler.require
16
+ Bundler.require(:default, :development)
17
17
 
18
18
  VCR.configure do |c|
19
19
  c.cassette_library_dir = 'spec/support/cassettes'
@@ -0,0 +1,48 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://campbx.com/api/getbtcaddr.php
6
+ headers:
7
+ Accept-Encoding:
8
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
9
+ Accept:
10
+ - '*/*'
11
+ User-Agent:
12
+ - Ruby
13
+ Content-Type:
14
+ - application/x-www-form-urlencoded
15
+ response:
16
+ status:
17
+ code: 200
18
+ message: OK
19
+ headers:
20
+ Server:
21
+ - cloudflare-nginx
22
+ Date:
23
+ - Sun, 23 Mar 2014 03:35:04 GMT
24
+ Content-Type:
25
+ - application/json
26
+ Transfer-Encoding:
27
+ - chunked
28
+ Connection:
29
+ - keep-alive
30
+ Set-Cookie:
31
+ - __cfduid=d690eee91be78c2c7e475be75dadde6551395545704073; expires=Mon, 23-Dec-2019
32
+ 23:50:00 GMT; path=/; domain=.campbx.com; HttpOnly
33
+ X-Frame-Options:
34
+ - SAMEORIGIN
35
+ Cache-Control:
36
+ - no-cache, must-revalidate, max-age=3600
37
+ Vary:
38
+ - Accept-Encoding
39
+ Expires:
40
+ - Sun, 23 Mar 2014 04:34:58 GMT
41
+ Cf-Ray:
42
+ - 10f793aa06040657-SJC
43
+ body:
44
+ encoding: UTF-8
45
+ string: "\r\n{\"Success\":\"16rQQYMTTKb9cnnSX3xYkN4hcKXoYcYURi\",\"Expiry\":3802802}"
46
+ http_version:
47
+ recorded_at: Sun, 23 Mar 2014 03:35:04 GMT
48
+ recorded_with: VCR 2.8.0
@@ -2,45 +2,50 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://data.mtgox.com/api/1/BTCUSD/ticker
5
+ uri: https://campbx.com/api/xticker.php
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
9
9
  headers:
10
- Accept:
11
- - application/json
12
- User-Agent:
13
- - mtgox gem 1.1.0
14
10
  Accept-Encoding:
15
11
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Ruby
16
16
  response:
17
17
  status:
18
18
  code: 200
19
19
  message: OK
20
20
  headers:
21
21
  Server:
22
- - nginx/1.4.4
23
- Content-Type:
24
- - application/json; charset=utf-8
25
- X-Powered-By:
26
- - PHP/5.5.4
27
- Access-Control-Allow-Origin:
28
- - '*'
29
- Content-Length:
30
- - '1377'
31
- Cache-Control:
32
- - public, max-age=23
33
- Expires:
34
- - Fri, 13 Dec 2013 23:46:23 GMT
22
+ - cloudflare-nginx
35
23
  Date:
36
- - Fri, 13 Dec 2013 23:46:00 GMT
24
+ - Sun, 23 Mar 2014 03:30:11 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
37
29
  Connection:
38
30
  - keep-alive
31
+ Set-Cookie:
32
+ - __cfduid=d5959036b6f71a1846c956b349605ab471395545410818; expires=Mon, 23-Dec-2019
33
+ 23:50:00 GMT; path=/; domain=.campbx.com; HttpOnly
34
+ X-Frame-Options:
35
+ - SAMEORIGIN
36
+ Cache-Control:
37
+ - no-cache, must-revalidate, max-age=3600
38
+ Vary:
39
+ - Accept-Encoding
40
+ Expires:
41
+ - Sun, 23 Mar 2014 04:30:05 GMT
42
+ Cf-Ray:
43
+ - 10f78c819b1e012b-SJC
39
44
  body:
40
45
  encoding: UTF-8
41
- string: '{"result":"success","return":{"high":{"value":"990.00000","value_int":"99000000","display":"$990.00","display_short":"$990.00","currency":"USD"},"low":{"value":"882.15864","value_int":"88215864","display":"$882.16","display_short":"$882.16","currency":"USD"},"avg":{"value":"929.35648","value_int":"92935648","display":"$929.36","display_short":"$929.36","currency":"USD"},"vwap":{"value":"930.71887","value_int":"93071887","display":"$930.72","display_short":"$930.72","currency":"USD"},"vol":{"value":"16658.49512372","value_int":"1665849512372","display":"16,658.50\u00a0BTC","display_short":"16,658.50\u00a0BTC","currency":"BTC"},"last_local":{"value":"933.00000","value_int":"93300000","display":"$933.00","display_short":"$933.00","currency":"USD"},"last_orig":{"value":"933.00000","value_int":"93300000","display":"$933.00","display_short":"$933.00","currency":"USD"},"last_all":{"value":"933.00000","value_int":"93300000","display":"$933.00","display_short":"$933.00","currency":"USD"},"last":{"value":"933.00000","value_int":"93300000","display":"$933.00","display_short":"$933.00","currency":"USD"},"buy":{"value":"923.01500","value_int":"92301500","display":"$923.02","display_short":"$923.02","currency":"USD"},"sell":{"value":"932.99500","value_int":"93299500","display":"$933.00","display_short":"$933.00","currency":"USD"},"item":"BTC","now":"1386978350330653"}}'
46
+ string: '{"Last Trade":"582.01","Best Bid":"598.00","Best Ask":"599.99"}'
42
47
  http_version:
43
- recorded_at: Fri, 13 Dec 2013 23:45:59 GMT
48
+ recorded_at: Sun, 23 Mar 2014 03:30:11 GMT
44
49
  - request:
45
50
  method: get
46
51
  uri: https://www.bitstamp.net/api/ticker/
@@ -53,41 +58,34 @@ http_interactions:
53
58
  code: 200
54
59
  message: OK
55
60
  headers:
56
- Date:
57
- - Fri, 13 Dec 2013 23:46:01 GMT
58
- Server:
59
- - Apache
60
- Content-Language:
61
- - en
62
- Expires:
63
- - Fri, 13 Dec 2013 23:46:01 GMT
64
- Vary:
65
- - Accept-Language
66
- Cache-Control:
67
- - max-age=0
61
+ Etag:
62
+ - '"120627-a0-4f53dbbb126b1"'
68
63
  Last-Modified:
69
- - Fri, 13 Dec 2013 23:46:01 GMT
70
- Connection:
71
- - close
72
- Transfer-Encoding:
73
- - chunked
64
+ - Sun, 23 Mar 2014 03:29:57 GMT
65
+ Content-Length:
66
+ - '160'
74
67
  Content-Type:
75
68
  - application/json
69
+ Cache-Control:
70
+ - max-age=10, public
71
+ Expires:
72
+ - Sun, 23 Mar 2014 03:30:21 GMT
73
+ Date:
74
+ - Sun, 23 Mar 2014 03:30:11 GMT
76
75
  Set-Cookie:
77
- - incap_ses_124_99025=1AGJPcUZxAWETOnVAYq4ATmcq1IAAAAAsPOre1PyXZcqEJH1uY4Qfg==;
76
+ - incap_ses_209_99025=/Pt0LzC6viGfdmvjkIXmAkNVLlMAAAAAaFpHwp3YsMhz5noifqhXyg==;
78
77
  path=/; Domain=.bitstamp.net
79
- - nlbi_99025=/DSMfH+W5Ew2ED96Itob8gAAAAAGzFr9JBde9Z+4ZeBXJbWF; path=/; Domain=.bitstamp.net
80
- - visid_incap_99025=QgG3duHHS6OybwUjvo9t3Ticq1IAAAAAQUIPAAAAAABm3P8tzeXhQXHryTzg9Y1Y;
81
- expires=Sun, 13 Dec 2015 10:19:32 GMT; path=/; Domain=.bitstamp.net
78
+ - visid_incap_99025=2EcA4uXSRZ+SzOE2AsWMxENVLlMAAAAAQUIPAAAAAADDQabegou/a5tQLDR/2oR9;
79
+ expires=Mon, 21 Mar 2016 09:10:12 GMT; path=/; Domain=.bitstamp.net
82
80
  X-Iinfo:
83
- - 5-187947047-187947137 NNNY CT(197 197 0) RT(1386978360501 172) q(0 0 4 0)
84
- r(4 6) U6
81
+ - 10-57915944-0 0CNN RT(1395545410761 287) q(0 -1 -1 0) r(0 -1)
85
82
  X-Cdn:
86
83
  - Incapsula
87
84
  body:
88
85
  encoding: ASCII-8BIT
89
- string: '{"high": "920.42", "last": "883.00", "timestamp": "1386978349", "bid":
90
- "879.36", "volume": "14666.53257818", "low": "850.00", "ask": "883.00"}'
86
+ string: '{"high": "571.70", "last": "565.14", "timestamp": "1395545393", "bid":
87
+ "563.11", "vwap": "556.51", "volume": "13035.98901950", "low": "541.00", "ask":
88
+ "567.39"}'
91
89
  http_version:
92
- recorded_at: Fri, 13 Dec 2013 23:46:00 GMT
93
- recorded_with: VCR 2.7.0
90
+ recorded_at: Sun, 23 Mar 2014 03:30:11 GMT
91
+ recorded_with: VCR 2.8.0