rbtc_arbitrage 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -6
- data/.rspec +1 -1
- data/.travis.yml +13 -3
- data/Gemfile +10 -0
- data/Guardfile +8 -0
- data/README.md +41 -3
- data/btce-api-key.yml +2 -0
- data/lib/rbtc_arbitrage/campbx.rb +98 -0
- data/lib/rbtc_arbitrage/cli.rb +3 -1
- data/lib/rbtc_arbitrage/client.rb +45 -0
- data/lib/rbtc_arbitrage/clients/bitstamp_client.rb +52 -0
- data/lib/rbtc_arbitrage/clients/mtgox_client.rb +45 -0
- data/lib/rbtc_arbitrage/trader.rb +62 -66
- data/lib/rbtc_arbitrage/version.rb +1 -1
- data/lib/rbtc_arbitrage.rb +3 -1
- data/rbtc_arbitrage.gemspec +2 -0
- data/spec/cli_spec.rb +8 -0
- data/spec/client_spec.rb +18 -0
- data/spec/clients/bitstamp_client_spec.rb +53 -0
- data/spec/clients/mtgox_client_spec.rb +52 -0
- data/spec/spec_helper.rb +27 -12
- data/spec/support/cassettes/RbtcArbitrage_Clients_BitstampClient/_balance/fetches_the_balance_correctly.yml +96 -0
- data/spec/support/cassettes/RbtcArbitrage_Clients_BitstampClient/_price/fetches_price_for_buy_correctly.yml +52 -0
- data/spec/support/cassettes/RbtcArbitrage_Clients_BitstampClient/_price/fetches_price_for_sell_correctly.yml +52 -0
- data/spec/support/cassettes/RbtcArbitrage_Clients_BitstampClient/_price/fetches_prices_correctly.yml +44 -0
- data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_balance/fetches_the_balance_correctly.yml +77 -0
- data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_price/fetches_price_for_buy_correctly.yml +44 -0
- data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_price/fetches_price_for_sell_correctly.yml +44 -0
- data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_price/fetches_prices_correctly.yml +85 -0
- data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/should_raise_SecurityError_if_not_live.yml +93 -0
- data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/raises_SecurityError_if_not_enough_BTC.yml +86 -0
- data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/raises_SecurityError_if_not_enough_USD.yml +80 -0
- data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/should_fetch_balance.yml +225 -0
- data/spec/support/cassettes/RbtcArbitrage_Trader/_execute_trade/when_live/shouldn_t_raise_security_error.yml +262 -0
- data/spec/support/cassettes/RbtcArbitrage_Trader/_fetch_prices/gets_the_right_price_set.yml +176 -0
- data/spec/support/cassettes/RbtcArbitrage_Trader/_get_balance/fetches_the_right_balance.yml +166 -0
- data/spec/trader_spec.rb +156 -19
- metadata +89 -18
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RbtcArbitrage::Clients::BitstampClient do
|
4
|
+
let(:client) { RbtcArbitrage::Clients::BitstampClient.new }
|
5
|
+
before(:each) { client.validate_env }
|
6
|
+
|
7
|
+
describe "#balance" do
|
8
|
+
it "fetches the balance correctly", :vcr do
|
9
|
+
balances = Bitstamp.balance
|
10
|
+
client.balance.should == [balances["usd_available"].to_f, balances["btc_available"].to_f]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#price" do
|
15
|
+
[:buy, :sell].each do |action|
|
16
|
+
it "fetches price for #{action} correctly", :vcr do
|
17
|
+
client.price(action).should be_a(Float)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
[[:bid, :sell], [:ask, :buy]].each do |actions|
|
22
|
+
it "calls Bistamp with #{actions[0]}" do
|
23
|
+
hash = Hashie::Mash.new("#{actions[0]}".to_sym => 10)
|
24
|
+
hash.should_receive(:"#{actions[0]}")
|
25
|
+
Bitstamp.should_receive(:ticker) { hash }
|
26
|
+
client.price(actions[1])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#trade" do
|
32
|
+
[:buy, :sell].each do |action|
|
33
|
+
it "trades on Bitstamp with #{action}" do
|
34
|
+
client.instance_variable_set("@price", 1)
|
35
|
+
trade_price = {
|
36
|
+
buy: 1.001,
|
37
|
+
sell: 0.999,
|
38
|
+
}[action]
|
39
|
+
bitstamp_options = {amount: 0.01, price: trade_price}
|
40
|
+
Bitstamp.orders.should_receive(action).with(bitstamp_options)
|
41
|
+
client.trade(action)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#transfer" do
|
47
|
+
it "calls Bitstamp correctly" do
|
48
|
+
sell_client = RbtcArbitrage::Clients::MtGoxClient.new
|
49
|
+
Bitstamp.should_receive(:transfer).with(0.01, sell_client.address)
|
50
|
+
client.transfer sell_client
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RbtcArbitrage::Clients::MtGoxClient do
|
4
|
+
let(:client) { RbtcArbitrage::Clients::MtGoxClient.new }
|
5
|
+
before(:each) { client.validate_env }
|
6
|
+
|
7
|
+
describe "#balance" do
|
8
|
+
it "fetches the balance correctly", :vcr do
|
9
|
+
balances = MtGox.balance
|
10
|
+
balance = client.balance
|
11
|
+
balance.should == [balances[0].amount.to_f, balances[1].amount.to_f]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#price" do
|
16
|
+
[:buy, :sell].each do |action|
|
17
|
+
it "fetches price for #{action} correctly", :vcr do
|
18
|
+
client.price(action).should be_a(BigDecimal)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "calls MtGox" do
|
23
|
+
hash = Hashie::Mash.new(buy: 10)
|
24
|
+
hash.should_receive(:buy)
|
25
|
+
MtGox.should_receive(:ticker) { hash }
|
26
|
+
client.price(:sell)
|
27
|
+
|
28
|
+
hash = Hashie::Mash.new(sell: 10)
|
29
|
+
hash.should_receive(:sell)
|
30
|
+
MtGox.should_receive(:ticker) { hash }
|
31
|
+
client.price(:buy)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#trade" do
|
36
|
+
it "calls MtGox" do
|
37
|
+
MtGox.should_receive(:sell!).with(0.01, :market)
|
38
|
+
client.trade(:sell)
|
39
|
+
|
40
|
+
MtGox.should_receive(:buy!).with(0.01, :market)
|
41
|
+
client.trade(:buy)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#transfer" do
|
46
|
+
it "calls MtGox correctly" do
|
47
|
+
sell_client = RbtcArbitrage::Clients::BitstampClient.new
|
48
|
+
MtGox.should_receive(:withdraw!).with(0.01, sell_client.address)
|
49
|
+
client.transfer sell_client
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,19 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
require 'simplecov'
|
2
|
+
require 'coveralls'
|
3
|
+
require 'codeclimate-test-reporter'
|
4
|
+
|
5
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
6
|
+
SimpleCov::Formatter::HTMLFormatter,
|
7
|
+
Coveralls::SimpleCov::Formatter,
|
8
|
+
# CodeClimate::TestReporter::Formatter
|
9
|
+
]
|
10
|
+
SimpleCov.start do
|
11
|
+
add_filter "/spec/"
|
12
|
+
add_filter "/lib/rbtc_arbitrage/campbx.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
require 'bundler'
|
16
|
+
Bundler.require
|
17
|
+
|
18
|
+
VCR.configure do |c|
|
19
|
+
c.cassette_library_dir = 'spec/support/cassettes'
|
20
|
+
c.hook_into :webmock # or :fakeweb
|
21
|
+
c.ignore_localhost = true
|
22
|
+
c.ignore_hosts 'codeclimate.com'
|
23
|
+
c.ignore_request do |request|
|
24
|
+
# true
|
25
|
+
end
|
26
|
+
c.configure_rspec_metadata!
|
27
|
+
end
|
8
28
|
|
9
29
|
RSpec.configure do |config|
|
10
30
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
31
|
config.run_all_when_everything_filtered = true
|
12
32
|
config.filter_run :focus
|
13
|
-
|
14
|
-
# Run specs in random order to surface order dependencies. If you find an
|
15
|
-
# order dependency and want to debug it, you can fix the order by providing
|
16
|
-
# the seed, which is printed after each run.
|
17
|
-
# --seed 1234
|
18
33
|
config.order = 'random'
|
19
34
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://www.bitstamp.net/api/balance/
|
6
|
+
body:
|
7
|
+
headers: {}
|
8
|
+
response:
|
9
|
+
status:
|
10
|
+
code: 200
|
11
|
+
message: OK
|
12
|
+
headers:
|
13
|
+
Date:
|
14
|
+
- Tue, 17 Dec 2013 18:40:02 GMT
|
15
|
+
Server:
|
16
|
+
- Apache
|
17
|
+
Content-Language:
|
18
|
+
- en
|
19
|
+
Expires:
|
20
|
+
- Tue, 17 Dec 2013 18:40:02 GMT
|
21
|
+
Vary:
|
22
|
+
- Accept-Language
|
23
|
+
Cache-Control:
|
24
|
+
- max-age=0
|
25
|
+
Last-Modified:
|
26
|
+
- Tue, 17 Dec 2013 18:40:02 GMT
|
27
|
+
Connection:
|
28
|
+
- close
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Content-Type:
|
32
|
+
- application/json
|
33
|
+
Set-Cookie:
|
34
|
+
- incap_ses_124_99025=/U1EcazP+UfdRdBvBoq4AYKasFIAAAAAdb3zOl4ewZCjqVwIQR8HRg==;
|
35
|
+
path=/; Domain=.bitstamp.net
|
36
|
+
- nlbi_99025=6To6TWWds1Vw9zhaItob8gAAAABgpcZ6AsnAXA2RDnqQ2T1z; path=/; Domain=.bitstamp.net
|
37
|
+
- visid_incap_99025=MMLr1fRQQF+jMYOwRSsxz4GasFIAAAAAQUIPAAAAAABoL4fhNvllL6g2wd8gq/Zs;
|
38
|
+
expires=Thu, 17 Dec 2015 17:12:31 GMT; path=/; Domain=.bitstamp.net
|
39
|
+
X-Iinfo:
|
40
|
+
- 6-3497408-3497716 NNNY CT(200 202 0) RT(1387305600895 539) q(0 0 4 0) r(4
|
41
|
+
7) U6
|
42
|
+
X-Cdn:
|
43
|
+
- Incapsula
|
44
|
+
body:
|
45
|
+
encoding: ASCII-8BIT
|
46
|
+
string: '{"btc_reserved": "0", "fee": "0.5000", "btc_available": "0", "usd_reserved":
|
47
|
+
"0", "btc_balance": "0", "usd_balance": "0.00", "usd_available": "0.00"}'
|
48
|
+
http_version:
|
49
|
+
recorded_at: Tue, 17 Dec 2013 18:40:03 GMT
|
50
|
+
- request:
|
51
|
+
method: post
|
52
|
+
uri: https://www.bitstamp.net/api/balance/
|
53
|
+
headers: {}
|
54
|
+
response:
|
55
|
+
status:
|
56
|
+
code: 200
|
57
|
+
message: OK
|
58
|
+
headers:
|
59
|
+
Date:
|
60
|
+
- Tue, 17 Dec 2013 18:40:03 GMT
|
61
|
+
Server:
|
62
|
+
- Apache
|
63
|
+
Content-Language:
|
64
|
+
- en
|
65
|
+
Expires:
|
66
|
+
- Tue, 17 Dec 2013 18:40:03 GMT
|
67
|
+
Vary:
|
68
|
+
- Accept-Language
|
69
|
+
Cache-Control:
|
70
|
+
- max-age=0
|
71
|
+
Last-Modified:
|
72
|
+
- Tue, 17 Dec 2013 18:40:03 GMT
|
73
|
+
Connection:
|
74
|
+
- close
|
75
|
+
Transfer-Encoding:
|
76
|
+
- chunked
|
77
|
+
Content-Type:
|
78
|
+
- application/json
|
79
|
+
Set-Cookie:
|
80
|
+
- incap_ses_124_99025=LlOzDxXjiiDdRdBvBoq4AYOasFIAAAAAjKStMu6sRoI8G9vBobzXaw==;
|
81
|
+
path=/; Domain=.bitstamp.net
|
82
|
+
- nlbi_99025=iC3WZwFDbyNNIFu9Itob8gAAAABlF1MNYf5CBe4QsTL4PfH8; path=/; Domain=.bitstamp.net
|
83
|
+
- visid_incap_99025=MMLr1fRQQF+jMYOwRSsxz4GasFIAAAAAQUIPAAAAAABoL4fhNvllL6g2wd8gq/Zs;
|
84
|
+
expires=Thu, 17 Dec 2015 17:12:31 GMT; path=/; Domain=.bitstamp.net
|
85
|
+
X-Iinfo:
|
86
|
+
- 6-3498335-3498462 NNNY CT(193 217 0) RT(1387305602232 162) q(0 0 5 0) r(5
|
87
|
+
7) U6
|
88
|
+
X-Cdn:
|
89
|
+
- Incapsula
|
90
|
+
body:
|
91
|
+
encoding: ASCII-8BIT
|
92
|
+
string: '{"btc_reserved": "0", "fee": "0.5000", "btc_available": "0", "usd_reserved":
|
93
|
+
"0", "btc_balance": "0", "usd_balance": "0.00", "usd_available": "0.00"}'
|
94
|
+
http_version:
|
95
|
+
recorded_at: Tue, 17 Dec 2013 18:40:04 GMT
|
96
|
+
recorded_with: VCR 2.7.0
|
@@ -0,0 +1,52 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://www.bitstamp.net/api/ticker/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Date:
|
16
|
+
- Tue, 17 Dec 2013 18:52:04 GMT
|
17
|
+
Server:
|
18
|
+
- Apache
|
19
|
+
Content-Language:
|
20
|
+
- en
|
21
|
+
Expires:
|
22
|
+
- Tue, 17 Dec 2013 18:52:04 GMT
|
23
|
+
Vary:
|
24
|
+
- Accept-Language
|
25
|
+
Cache-Control:
|
26
|
+
- max-age=0
|
27
|
+
Last-Modified:
|
28
|
+
- Tue, 17 Dec 2013 18:52:04 GMT
|
29
|
+
Connection:
|
30
|
+
- close
|
31
|
+
Transfer-Encoding:
|
32
|
+
- chunked
|
33
|
+
Content-Type:
|
34
|
+
- application/json
|
35
|
+
Set-Cookie:
|
36
|
+
- incap_ses_124_99025=5DhUG6HHpgc7/tZvBoq4AVSdsFIAAAAAoM6lqyNWcwlVvCFr/4IIuw==;
|
37
|
+
path=/; Domain=.bitstamp.net
|
38
|
+
- nlbi_99025=HA9ZcYGgIXoCBMJHItob8gAAAACXpbRiMvo8jSczT4T6cKpV; path=/; Domain=.bitstamp.net
|
39
|
+
- visid_incap_99025=8mFx8YHMTyKSmlu5q6QgKlSdsFIAAAAAQUIPAAAAAADPhKj72XMvuuLQmfmN6bUE;
|
40
|
+
expires=Thu, 17 Dec 2015 17:22:01 GMT; path=/; Domain=.bitstamp.net
|
41
|
+
X-Iinfo:
|
42
|
+
- 2-306226-306234 NNNY CT(200 200 0) RT(1387306323909 189) q(0 0 4 -1) r(4 7)
|
43
|
+
U13
|
44
|
+
X-Cdn:
|
45
|
+
- Incapsula
|
46
|
+
body:
|
47
|
+
encoding: ASCII-8BIT
|
48
|
+
string: '{"high": "750.00", "last": "715.00", "timestamp": "1387306318", "bid":
|
49
|
+
"715.00", "volume": "64331.27905889", "low": "612.51", "ask": "716.44"}'
|
50
|
+
http_version:
|
51
|
+
recorded_at: Tue, 17 Dec 2013 18:52:06 GMT
|
52
|
+
recorded_with: VCR 2.7.0
|
@@ -0,0 +1,52 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://www.bitstamp.net/api/ticker/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Date:
|
16
|
+
- Tue, 17 Dec 2013 18:52:06 GMT
|
17
|
+
Server:
|
18
|
+
- Apache
|
19
|
+
Content-Language:
|
20
|
+
- en
|
21
|
+
Expires:
|
22
|
+
- Tue, 17 Dec 2013 18:52:06 GMT
|
23
|
+
Vary:
|
24
|
+
- Accept-Language
|
25
|
+
Cache-Control:
|
26
|
+
- max-age=0
|
27
|
+
Last-Modified:
|
28
|
+
- Tue, 17 Dec 2013 18:52:06 GMT
|
29
|
+
Connection:
|
30
|
+
- close
|
31
|
+
Transfer-Encoding:
|
32
|
+
- chunked
|
33
|
+
Content-Type:
|
34
|
+
- application/json
|
35
|
+
Set-Cookie:
|
36
|
+
- incap_ses_124_99025=EG6NVFY4Zj3MANdvBoq4AVWdsFIAAAAAJ5HXgArrNoPSLKMXyrPmIA==;
|
37
|
+
path=/; Domain=.bitstamp.net
|
38
|
+
- nlbi_99025=BEeSMWMBHh4P8h8yItob8gAAAAByf4B7gSxAE4n9qUXQRygm; path=/; Domain=.bitstamp.net
|
39
|
+
- visid_incap_99025=8DwVZBcRQHCx3jP6h7xR7VWdsFIAAAAAQUIPAAAAAAD2kz0IxzLs0UNgtTywlZwj;
|
40
|
+
expires=Thu, 17 Dec 2015 17:22:01 GMT; path=/; Domain=.bitstamp.net
|
41
|
+
X-Iinfo:
|
42
|
+
- 5-2963838-2963878 NNNY CT(195 201 0) RT(1387306325135 166) q(0 0 3 -1) r(3
|
43
|
+
6) U13
|
44
|
+
X-Cdn:
|
45
|
+
- Incapsula
|
46
|
+
body:
|
47
|
+
encoding: ASCII-8BIT
|
48
|
+
string: '{"high": "750.00", "last": "715.00", "timestamp": "1387306318", "bid":
|
49
|
+
"715.00", "volume": "64331.27905889", "low": "612.51", "ask": "716.44"}'
|
50
|
+
http_version:
|
51
|
+
recorded_at: Tue, 17 Dec 2013 18:52:06 GMT
|
52
|
+
recorded_with: VCR 2.7.0
|
data/spec/support/cassettes/RbtcArbitrage_Clients_BitstampClient/_price/fetches_prices_correctly.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://data.mtgox.com/api/1/BTCUSD/ticker
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
User-Agent:
|
13
|
+
- mtgox gem 1.1.0
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
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
|
+
- '1387'
|
31
|
+
Cache-Control:
|
32
|
+
- public, max-age=27
|
33
|
+
Expires:
|
34
|
+
- Tue, 17 Dec 2013 18:41:04 GMT
|
35
|
+
Date:
|
36
|
+
- Tue, 17 Dec 2013 18:40:37 GMT
|
37
|
+
Connection:
|
38
|
+
- keep-alive
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '{"result":"success","return":{"high":{"value":"824.88888","value_int":"82488888","display":"$824.89","display_short":"$824.89","currency":"USD"},"low":{"value":"678.89040","value_int":"67889040","display":"$678.89","display_short":"$678.89","currency":"USD"},"avg":{"value":"741.06661","value_int":"74106661","display":"$741.07","display_short":"$741.07","currency":"USD"},"vwap":{"value":"738.12158","value_int":"73812158","display":"$738.12","display_short":"$738.12","currency":"USD"},"vol":{"value":"47976.69175988","value_int":"4797669175988","display":"47,976.69\u00a0BTC","display_short":"47,976.69\u00a0BTC","currency":"BTC"},"last_local":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"last_orig":{"value":"77000.000","value_int":"77000000","display":"\u00a577,000","display_short":"\u00a577,000","currency":"JPY"},"last_all":{"value":"747.69296","value_int":"74769296","display":"$747.69","display_short":"$747.69","currency":"USD"},"last":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"buy":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"sell":{"value":"749.40000","value_int":"74940000","display":"$749.40","display_short":"$749.40","currency":"USD"},"item":"BTC","now":"1387305632161184"}}'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Tue, 17 Dec 2013 18:40:38 GMT
|
44
|
+
recorded_with: VCR 2.7.0
|
@@ -0,0 +1,77 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://data.mtgox.com/api/1/generic/info
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: nonce=1387161061259915
|
9
|
+
response:
|
10
|
+
status:
|
11
|
+
code: 200
|
12
|
+
message: OK
|
13
|
+
headers:
|
14
|
+
Server:
|
15
|
+
- nginx/1.4.4
|
16
|
+
Content-Type:
|
17
|
+
- application/json; charset=utf-8
|
18
|
+
X-Powered-By:
|
19
|
+
- PHP/5.5.4
|
20
|
+
Access-Control-Allow-Origin:
|
21
|
+
- '*'
|
22
|
+
Content-Length:
|
23
|
+
- '1731'
|
24
|
+
Expires:
|
25
|
+
- Mon, 16 Dec 2013 02:31:02 GMT
|
26
|
+
Cache-Control:
|
27
|
+
- max-age=0, no-cache, no-store
|
28
|
+
Pragma:
|
29
|
+
- no-cache
|
30
|
+
Date:
|
31
|
+
- Mon, 16 Dec 2013 02:31:02 GMT
|
32
|
+
Connection:
|
33
|
+
- keep-alive
|
34
|
+
body:
|
35
|
+
encoding: UTF-8
|
36
|
+
string: '{"result":"success","return":{"Login":"heynk","Index":"141119","Id":"84fdd298-4386-4d7c-86c0-af74f2e0d0ec","Link":"M82141119X","Rights":["deposit","get_info","merchant","trade","withdraw"],"Language":"en_US","Created":"2012-04-07
|
37
|
+
13:52:16","Last_Login":"2013-10-15 20:52:29","Wallets":{"BTC":{"Balance":{"value":"0.00000133","value_int":"133","display":"0.00000133\u00a0BTC","display_short":"0.00\u00a0BTC","currency":"BTC"},"Operations":1,"Daily_Withdraw_Limit":{"value":"100.00000000","value_int":"10000000000","display":"100.00000000\u00a0BTC","display_short":"100.00\u00a0BTC","currency":"BTC"},"Monthly_Withdraw_Limit":null,"Max_Withdraw":{"value":"100.00000000","value_int":"10000000000","display":"100.00000000\u00a0BTC","display_short":"100.00\u00a0BTC","currency":"BTC"},"Open_Orders":{"value":"0.00000000","value_int":"0","display":"0.00000000\u00a0BTC","display_short":"0.00\u00a0BTC","currency":"BTC"}},"USD":{"Balance":{"value":"0.00000","value_int":"0","display":"$0.00000","display_short":"$0.00","currency":"USD"},"Operations":0,"Daily_Withdraw_Limit":{"value":"1000.00000","value_int":"100000000","display":"$1,000.00000","display_short":"$1,000.00","currency":"USD"},"Monthly_Withdraw_Limit":{"value":"10000.00000","value_int":"1000000000","display":"$10,000.00000","display_short":"$10,000.00","currency":"USD"},"Max_Withdraw":{"value":"1000.00000","value_int":"100000000","display":"$1,000.00000","display_short":"$1,000.00","currency":"USD"},"Open_Orders":{"value":"0.00000","value_int":"0","display":"$0.00000","display_short":"$0.00","currency":"USD"}}},"Monthly_Volume":{"value":"0.00000000","value_int":"0","display":"0.00000000\u00a0BTC","display_short":"0.00\u00a0BTC","currency":"BTC"},"Trade_Fee":0.6}}'
|
38
|
+
http_version:
|
39
|
+
recorded_at: Mon, 16 Dec 2013 02:31:02 GMT
|
40
|
+
- request:
|
41
|
+
method: post
|
42
|
+
uri: https://data.mtgox.com/api/1/generic/info
|
43
|
+
body:
|
44
|
+
encoding: US-ASCII
|
45
|
+
string: nonce=1387161062673595
|
46
|
+
response:
|
47
|
+
status:
|
48
|
+
code: 200
|
49
|
+
message: OK
|
50
|
+
headers:
|
51
|
+
Server:
|
52
|
+
- nginx/1.4.4
|
53
|
+
Content-Type:
|
54
|
+
- application/json; charset=utf-8
|
55
|
+
X-Powered-By:
|
56
|
+
- PHP/5.5.4
|
57
|
+
Access-Control-Allow-Origin:
|
58
|
+
- '*'
|
59
|
+
Content-Length:
|
60
|
+
- '1731'
|
61
|
+
Expires:
|
62
|
+
- Mon, 16 Dec 2013 02:31:03 GMT
|
63
|
+
Cache-Control:
|
64
|
+
- max-age=0, no-cache, no-store
|
65
|
+
Pragma:
|
66
|
+
- no-cache
|
67
|
+
Date:
|
68
|
+
- Mon, 16 Dec 2013 02:31:03 GMT
|
69
|
+
Connection:
|
70
|
+
- keep-alive
|
71
|
+
body:
|
72
|
+
encoding: UTF-8
|
73
|
+
string: '{"result":"success","return":{"Login":"heynk","Index":"141119","Id":"84fdd298-4386-4d7c-86c0-af74f2e0d0ec","Link":"M82141119X","Rights":["deposit","get_info","merchant","trade","withdraw"],"Language":"en_US","Created":"2012-04-07
|
74
|
+
13:52:16","Last_Login":"2013-10-15 20:52:29","Wallets":{"BTC":{"Balance":{"value":"0.00000133","value_int":"133","display":"0.00000133\u00a0BTC","display_short":"0.00\u00a0BTC","currency":"BTC"},"Operations":1,"Daily_Withdraw_Limit":{"value":"100.00000000","value_int":"10000000000","display":"100.00000000\u00a0BTC","display_short":"100.00\u00a0BTC","currency":"BTC"},"Monthly_Withdraw_Limit":null,"Max_Withdraw":{"value":"100.00000000","value_int":"10000000000","display":"100.00000000\u00a0BTC","display_short":"100.00\u00a0BTC","currency":"BTC"},"Open_Orders":{"value":"0.00000000","value_int":"0","display":"0.00000000\u00a0BTC","display_short":"0.00\u00a0BTC","currency":"BTC"}},"USD":{"Balance":{"value":"0.00000","value_int":"0","display":"$0.00000","display_short":"$0.00","currency":"USD"},"Operations":0,"Daily_Withdraw_Limit":{"value":"1000.00000","value_int":"100000000","display":"$1,000.00000","display_short":"$1,000.00","currency":"USD"},"Monthly_Withdraw_Limit":{"value":"10000.00000","value_int":"1000000000","display":"$10,000.00000","display_short":"$10,000.00","currency":"USD"},"Max_Withdraw":{"value":"1000.00000","value_int":"100000000","display":"$1,000.00000","display_short":"$1,000.00","currency":"USD"},"Open_Orders":{"value":"0.00000","value_int":"0","display":"$0.00000","display_short":"$0.00","currency":"USD"}}},"Monthly_Volume":{"value":"0.00000000","value_int":"0","display":"0.00000000\u00a0BTC","display_short":"0.00\u00a0BTC","currency":"BTC"},"Trade_Fee":0.6}}'
|
75
|
+
http_version:
|
76
|
+
recorded_at: Mon, 16 Dec 2013 02:31:03 GMT
|
77
|
+
recorded_with: VCR 2.7.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://data.mtgox.com/api/1/BTCUSD/ticker
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
User-Agent:
|
13
|
+
- mtgox gem 1.1.0
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
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=19
|
33
|
+
Expires:
|
34
|
+
- Tue, 17 Dec 2013 18:52:46 GMT
|
35
|
+
Date:
|
36
|
+
- Tue, 17 Dec 2013 18:52:27 GMT
|
37
|
+
Connection:
|
38
|
+
- keep-alive
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '{"result":"success","return":{"high":{"value":"824.88888","value_int":"82488888","display":"$824.89","display_short":"$824.89","currency":"USD"},"low":{"value":"678.89040","value_int":"67889040","display":"$678.89","display_short":"$678.89","currency":"USD"},"avg":{"value":"740.58273","value_int":"74058273","display":"$740.58","display_short":"$740.58","currency":"USD"},"vwap":{"value":"737.16841","value_int":"73716841","display":"$737.17","display_short":"$737.17","currency":"USD"},"vol":{"value":"46591.37947288","value_int":"4659137947288","display":"46,591.38\u00a0BTC","display_short":"46,591.38\u00a0BTC","currency":"BTC"},"last_local":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"last_orig":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"last_all":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"last":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"buy":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"sell":{"value":"747.00000","value_int":"74700000","display":"$747.00","display_short":"$747.00","currency":"USD"},"item":"BTC","now":"1387306337410204"}}'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Tue, 17 Dec 2013 18:52:28 GMT
|
44
|
+
recorded_with: VCR 2.7.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://data.mtgox.com/api/1/BTCUSD/ticker
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
User-Agent:
|
13
|
+
- mtgox gem 1.1.0
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
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=19
|
33
|
+
Expires:
|
34
|
+
- Tue, 17 Dec 2013 18:52:46 GMT
|
35
|
+
Date:
|
36
|
+
- Tue, 17 Dec 2013 18:52:27 GMT
|
37
|
+
Connection:
|
38
|
+
- keep-alive
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '{"result":"success","return":{"high":{"value":"824.88888","value_int":"82488888","display":"$824.89","display_short":"$824.89","currency":"USD"},"low":{"value":"678.89040","value_int":"67889040","display":"$678.89","display_short":"$678.89","currency":"USD"},"avg":{"value":"740.58273","value_int":"74058273","display":"$740.58","display_short":"$740.58","currency":"USD"},"vwap":{"value":"737.16841","value_int":"73716841","display":"$737.17","display_short":"$737.17","currency":"USD"},"vol":{"value":"46591.37947288","value_int":"4659137947288","display":"46,591.38\u00a0BTC","display_short":"46,591.38\u00a0BTC","currency":"BTC"},"last_local":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"last_orig":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"last_all":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"last":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"buy":{"value":"746.00000","value_int":"74600000","display":"$746.00","display_short":"$746.00","currency":"USD"},"sell":{"value":"747.00000","value_int":"74700000","display":"$747.00","display_short":"$747.00","currency":"USD"},"item":"BTC","now":"1387306337410204"}}'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Tue, 17 Dec 2013 18:52:28 GMT
|
44
|
+
recorded_with: VCR 2.7.0
|
data/spec/support/cassettes/RbtcArbitrage_Clients_MtGoxClient/_price/fetches_prices_correctly.yml
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://data.mtgox.com/api/1/BTCUSD/ticker
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
User-Agent:
|
13
|
+
- mtgox gem 1.1.0
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
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=19
|
33
|
+
Expires:
|
34
|
+
- Mon, 16 Dec 2013 02:37:47 GMT
|
35
|
+
Date:
|
36
|
+
- Mon, 16 Dec 2013 02:37:28 GMT
|
37
|
+
Connection:
|
38
|
+
- keep-alive
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '{"result":"success","return":{"high":{"value":"928.00000","value_int":"92800000","display":"$928.00","display_short":"$928.00","currency":"USD"},"low":{"value":"838.02010","value_int":"83802010","display":"$838.02","display_short":"$838.02","currency":"USD"},"avg":{"value":"881.69362","value_int":"88169362","display":"$881.69","display_short":"$881.69","currency":"USD"},"vwap":{"value":"877.80871","value_int":"87780871","display":"$877.81","display_short":"$877.81","currency":"USD"},"vol":{"value":"15209.28682013","value_int":"1520928682013","display":"15,209.29\u00a0BTC","display_short":"15,209.29\u00a0BTC","currency":"BTC"},"last_local":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"last_orig":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"last_all":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"last":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"buy":{"value":"912.40000","value_int":"91240000","display":"$912.40","display_short":"$912.40","currency":"USD"},"sell":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"item":"BTC","now":"1387161430752600"}}'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Mon, 16 Dec 2013 02:37:28 GMT
|
44
|
+
- request:
|
45
|
+
method: get
|
46
|
+
uri: https://data.mtgox.com/api/1/BTCUSD/ticker
|
47
|
+
body:
|
48
|
+
encoding: US-ASCII
|
49
|
+
string: ''
|
50
|
+
headers:
|
51
|
+
Accept:
|
52
|
+
- application/json
|
53
|
+
User-Agent:
|
54
|
+
- mtgox gem 1.1.0
|
55
|
+
Accept-Encoding:
|
56
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
57
|
+
response:
|
58
|
+
status:
|
59
|
+
code: 200
|
60
|
+
message: OK
|
61
|
+
headers:
|
62
|
+
Server:
|
63
|
+
- nginx/1.4.4
|
64
|
+
Content-Type:
|
65
|
+
- application/json; charset=utf-8
|
66
|
+
X-Powered-By:
|
67
|
+
- PHP/5.5.4
|
68
|
+
Access-Control-Allow-Origin:
|
69
|
+
- '*'
|
70
|
+
Content-Length:
|
71
|
+
- '1377'
|
72
|
+
Cache-Control:
|
73
|
+
- public, max-age=19
|
74
|
+
Expires:
|
75
|
+
- Mon, 16 Dec 2013 02:37:47 GMT
|
76
|
+
Date:
|
77
|
+
- Mon, 16 Dec 2013 02:37:28 GMT
|
78
|
+
Connection:
|
79
|
+
- keep-alive
|
80
|
+
body:
|
81
|
+
encoding: UTF-8
|
82
|
+
string: '{"result":"success","return":{"high":{"value":"928.00000","value_int":"92800000","display":"$928.00","display_short":"$928.00","currency":"USD"},"low":{"value":"838.02010","value_int":"83802010","display":"$838.02","display_short":"$838.02","currency":"USD"},"avg":{"value":"881.69362","value_int":"88169362","display":"$881.69","display_short":"$881.69","currency":"USD"},"vwap":{"value":"877.80871","value_int":"87780871","display":"$877.81","display_short":"$877.81","currency":"USD"},"vol":{"value":"15209.28682013","value_int":"1520928682013","display":"15,209.29\u00a0BTC","display_short":"15,209.29\u00a0BTC","currency":"BTC"},"last_local":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"last_orig":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"last_all":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"last":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"buy":{"value":"912.40000","value_int":"91240000","display":"$912.40","display_short":"$912.40","currency":"USD"},"sell":{"value":"915.00000","value_int":"91500000","display":"$915.00","display_short":"$915.00","currency":"USD"},"item":"BTC","now":"1387161430752600"}}'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Mon, 16 Dec 2013 02:37:28 GMT
|
85
|
+
recorded_with: VCR 2.7.0
|