rbtc_arbitrage 1.2.3 → 1.3.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/Gemfile +2 -1
- data/Gemfile.lock +165 -0
- data/Procfile +1 -0
- data/dummy_web_server.rb +9 -0
- data/lib/rbtc_arbitrage/cli.rb +1 -0
- data/lib/rbtc_arbitrage/trader.rb +13 -1
- data/lib/rbtc_arbitrage/version.rb +1 -1
- data/spec/trader_spec.rb +35 -0
- metadata +4 -2
- data/btce-api-key.yml +0 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 073f034a32dc76e95d0e5a425a0716e4c97d2208
|
|
4
|
+
data.tar.gz: fc051d210da396065843debde1122612f09bf331
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 09aa1b9843ff89cf3254d97801e1d1b2547cc4ae9be908d9abac68f5989250e447cc7b0f129c2540952937d58bb79ba4328acabc35767033f77cb24f53b2f1df
|
|
7
|
+
data.tar.gz: c90035506f8efeefc460761e1e2d4e61bc2313d4e69f251cfdb1c9d51df5facb1ba1335773d657a3c6b85ef04e315b048a403ccd74bc652f44f85c76a8bc5408
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
rbtc_arbitrage (1.3.0)
|
|
5
|
+
activemodel (>= 3.1)
|
|
6
|
+
activesupport (>= 3.1)
|
|
7
|
+
bitstamp
|
|
8
|
+
bitstamp
|
|
9
|
+
btce (= 0.2.4)
|
|
10
|
+
coinbase (= 1.2.4)
|
|
11
|
+
mtgox
|
|
12
|
+
thor
|
|
13
|
+
|
|
14
|
+
GEM
|
|
15
|
+
remote: https://rubygems.org/
|
|
16
|
+
specs:
|
|
17
|
+
activemodel (4.0.2)
|
|
18
|
+
activesupport (= 4.0.2)
|
|
19
|
+
builder (~> 3.1.0)
|
|
20
|
+
activesupport (4.0.2)
|
|
21
|
+
i18n (~> 0.6, >= 0.6.4)
|
|
22
|
+
minitest (~> 4.2)
|
|
23
|
+
multi_json (~> 1.3)
|
|
24
|
+
thread_safe (~> 0.1)
|
|
25
|
+
tzinfo (~> 0.3.37)
|
|
26
|
+
addressable (2.3.5)
|
|
27
|
+
atomic (1.1.14)
|
|
28
|
+
bitstamp (0.3.0)
|
|
29
|
+
activemodel (>= 3.1)
|
|
30
|
+
activesupport (>= 3.1)
|
|
31
|
+
curb (> 0.8.1)
|
|
32
|
+
ruby-hmac (= 0.4.0)
|
|
33
|
+
btce (0.2.4)
|
|
34
|
+
monkey-patch
|
|
35
|
+
builder (3.1.4)
|
|
36
|
+
celluloid (0.15.2)
|
|
37
|
+
timers (~> 1.1.0)
|
|
38
|
+
codeclimate-test-reporter (0.2.0)
|
|
39
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
|
40
|
+
coderay (1.1.0)
|
|
41
|
+
coinbase (1.2.4)
|
|
42
|
+
hashie (>= 1.2.0)
|
|
43
|
+
httparty (>= 0.8.3)
|
|
44
|
+
money (>= 4.0.1)
|
|
45
|
+
multi_json (>= 1.3.4)
|
|
46
|
+
coveralls (0.7.0)
|
|
47
|
+
multi_json (~> 1.3)
|
|
48
|
+
rest-client
|
|
49
|
+
simplecov (>= 0.7)
|
|
50
|
+
term-ansicolor
|
|
51
|
+
thor
|
|
52
|
+
crack (0.4.1)
|
|
53
|
+
safe_yaml (~> 0.9.0)
|
|
54
|
+
curb (0.8.5)
|
|
55
|
+
diff-lcs (1.2.5)
|
|
56
|
+
docile (1.1.1)
|
|
57
|
+
faraday (0.8.8)
|
|
58
|
+
multipart-post (~> 1.2.0)
|
|
59
|
+
ffi (1.9.3)
|
|
60
|
+
formatador (0.2.4)
|
|
61
|
+
guard (2.2.5)
|
|
62
|
+
formatador (>= 0.2.4)
|
|
63
|
+
listen (~> 2.1)
|
|
64
|
+
lumberjack (~> 1.0)
|
|
65
|
+
pry (>= 0.9.12)
|
|
66
|
+
thor (>= 0.18.1)
|
|
67
|
+
guard-rspec (4.2.1)
|
|
68
|
+
guard (>= 2.1.1)
|
|
69
|
+
rspec (~> 3.0.0.beta, >= 2.14, < 4.0)
|
|
70
|
+
hashie (2.0.5)
|
|
71
|
+
httparty (0.12.0)
|
|
72
|
+
json (~> 1.8)
|
|
73
|
+
multi_xml (>= 0.5.2)
|
|
74
|
+
i18n (0.6.9)
|
|
75
|
+
json (1.8.1)
|
|
76
|
+
listen (2.4.0)
|
|
77
|
+
celluloid (>= 0.15.2)
|
|
78
|
+
rb-fsevent (>= 0.9.3)
|
|
79
|
+
rb-inotify (>= 0.9)
|
|
80
|
+
lumberjack (1.0.4)
|
|
81
|
+
method_source (0.8.2)
|
|
82
|
+
mime-types (2.0)
|
|
83
|
+
minitest (4.7.5)
|
|
84
|
+
money (6.0.0)
|
|
85
|
+
i18n (~> 0.6.4)
|
|
86
|
+
monkey-patch (0.0.14)
|
|
87
|
+
activesupport
|
|
88
|
+
mtgox (1.1.0)
|
|
89
|
+
faraday (~> 0.8, < 0.10)
|
|
90
|
+
json (~> 1.7, >= 1.7.7)
|
|
91
|
+
multi_json (1.8.2)
|
|
92
|
+
multi_xml (0.5.5)
|
|
93
|
+
multipart-post (1.2.0)
|
|
94
|
+
pry (0.9.12.4)
|
|
95
|
+
coderay (~> 1.0)
|
|
96
|
+
method_source (~> 0.8)
|
|
97
|
+
slop (~> 3.4)
|
|
98
|
+
rack (1.5.2)
|
|
99
|
+
rack-protection (1.5.1)
|
|
100
|
+
rack
|
|
101
|
+
rake (10.1.1)
|
|
102
|
+
rb-fsevent (0.9.3)
|
|
103
|
+
rb-inotify (0.9.3)
|
|
104
|
+
ffi (>= 0.5.0)
|
|
105
|
+
rest-client (1.6.7)
|
|
106
|
+
mime-types (>= 1.16)
|
|
107
|
+
rspec (3.0.0.beta1)
|
|
108
|
+
rspec-core (= 3.0.0.beta1)
|
|
109
|
+
rspec-expectations (= 3.0.0.beta1)
|
|
110
|
+
rspec-mocks (= 3.0.0.beta1)
|
|
111
|
+
rspec-core (3.0.0.beta1)
|
|
112
|
+
rspec-support (= 3.0.0.beta1)
|
|
113
|
+
rspec-expectations (3.0.0.beta1)
|
|
114
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
|
115
|
+
rspec-support (= 3.0.0.beta1)
|
|
116
|
+
rspec-mocks (3.0.0.beta1)
|
|
117
|
+
rspec-support (= 3.0.0.beta1)
|
|
118
|
+
rspec-support (3.0.0.beta1)
|
|
119
|
+
ruby-hmac (0.4.0)
|
|
120
|
+
ruby_gntp (0.3.4)
|
|
121
|
+
safe_yaml (0.9.7)
|
|
122
|
+
simplecov (0.8.2)
|
|
123
|
+
docile (~> 1.1.0)
|
|
124
|
+
multi_json
|
|
125
|
+
simplecov-html (~> 0.8.0)
|
|
126
|
+
simplecov-html (0.8.0)
|
|
127
|
+
sinatra (1.4.4)
|
|
128
|
+
rack (~> 1.4)
|
|
129
|
+
rack-protection (~> 1.4)
|
|
130
|
+
tilt (~> 1.3, >= 1.3.4)
|
|
131
|
+
slop (3.4.7)
|
|
132
|
+
term-ansicolor (1.2.2)
|
|
133
|
+
tins (~> 0.8)
|
|
134
|
+
thor (0.18.1)
|
|
135
|
+
thread_safe (0.1.3)
|
|
136
|
+
atomic
|
|
137
|
+
tilt (1.4.1)
|
|
138
|
+
timers (1.1.0)
|
|
139
|
+
tins (0.13.1)
|
|
140
|
+
tzinfo (0.3.38)
|
|
141
|
+
vcr (2.8.0)
|
|
142
|
+
webmock (1.16.1)
|
|
143
|
+
addressable (>= 2.2.7)
|
|
144
|
+
crack (>= 0.3.2)
|
|
145
|
+
|
|
146
|
+
PLATFORMS
|
|
147
|
+
ruby
|
|
148
|
+
|
|
149
|
+
DEPENDENCIES
|
|
150
|
+
activemodel (>= 3.1)
|
|
151
|
+
activesupport (>= 3.1)
|
|
152
|
+
bundler (~> 1.3)
|
|
153
|
+
codeclimate-test-reporter
|
|
154
|
+
coveralls
|
|
155
|
+
guard
|
|
156
|
+
guard-rspec
|
|
157
|
+
hashie
|
|
158
|
+
rake
|
|
159
|
+
rbtc_arbitrage!
|
|
160
|
+
rspec
|
|
161
|
+
ruby_gntp
|
|
162
|
+
simplecov
|
|
163
|
+
sinatra
|
|
164
|
+
vcr
|
|
165
|
+
webmock
|
data/Procfile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
web: bundle exec ruby dummy_web_server.rb -p $PORT
|
data/dummy_web_server.rb
ADDED
data/lib/rbtc_arbitrage/cli.rb
CHANGED
|
@@ -8,6 +8,7 @@ module RbtcArbitrage
|
|
|
8
8
|
option :verbose, type: :boolean, default: true, desc: "Whether you wish to log information."
|
|
9
9
|
option :buyer, type: :string, default: "bitstamp"
|
|
10
10
|
option :seller, type: :string, default: "mtgox"
|
|
11
|
+
option :repeat, type: :numeric, default: nil
|
|
11
12
|
def trade
|
|
12
13
|
RbtcArbitrage::Trader.new(options).trade
|
|
13
14
|
end
|
|
@@ -16,6 +16,7 @@ module RbtcArbitrage
|
|
|
16
16
|
set_key opts, :logger, Logger.new(STDOUT)
|
|
17
17
|
set_key opts, :verbose, true
|
|
18
18
|
set_key opts, :live, false
|
|
19
|
+
set_key opts, :repeat, nil
|
|
19
20
|
exchange = opts[:buyer] || :bitstamp
|
|
20
21
|
@buy_client = client_for_exchange(exchange)
|
|
21
22
|
exchange = opts[:seller] || :mtgox
|
|
@@ -31,15 +32,26 @@ module RbtcArbitrage
|
|
|
31
32
|
fetch_prices
|
|
32
33
|
log_info if options[:verbose]
|
|
33
34
|
|
|
34
|
-
if options[:
|
|
35
|
+
if options[:live] && options[:cutoff] > @percent
|
|
35
36
|
raise SecurityError, "Exiting because real profit (#{@percent.round(2)}%) is less than cutoff (#{options[:cutoff].round(2)}%)"
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
execute_trade if options[:live]
|
|
39
40
|
|
|
41
|
+
if @options[:repeat]
|
|
42
|
+
trade_again
|
|
43
|
+
end
|
|
40
44
|
self
|
|
41
45
|
end
|
|
42
46
|
|
|
47
|
+
def trade_again
|
|
48
|
+
sleep @options[:repeat]
|
|
49
|
+
@logger.info " - " if @options[:verbose]
|
|
50
|
+
@buy_client = @buy_client.class.new(@options)
|
|
51
|
+
@sell_client = @sell_client.class.new(@options)
|
|
52
|
+
trade
|
|
53
|
+
end
|
|
54
|
+
|
|
43
55
|
def execute_trade
|
|
44
56
|
fetch_prices unless @paid
|
|
45
57
|
validate_env
|
data/spec/trader_spec.rb
CHANGED
|
@@ -161,6 +161,14 @@ describe RbtcArbitrage::Trader do
|
|
|
161
161
|
expect { trader.trade }.to raise_error(SecurityError)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
+
it "should repeat if specified" do
|
|
165
|
+
trader.options[:repeat] = 10
|
|
166
|
+
trader.should_receive(:fetch_prices)
|
|
167
|
+
trader.should_receive(:trade).and_call_original
|
|
168
|
+
trader.should_receive(:trade_again)
|
|
169
|
+
trader.trade
|
|
170
|
+
end
|
|
171
|
+
|
|
164
172
|
it "calls #execute_trade if percent > cutoff" do
|
|
165
173
|
trader.options[:live] = true
|
|
166
174
|
trader.options[:cutoff] = 1
|
|
@@ -190,4 +198,31 @@ describe RbtcArbitrage::Trader do
|
|
|
190
198
|
it { trader.logger.should == trader.options[:logger] }
|
|
191
199
|
end
|
|
192
200
|
|
|
201
|
+
describe "#trade_again" do
|
|
202
|
+
before(:each) { trader.options[:repeat] = 10 }
|
|
203
|
+
|
|
204
|
+
it "should call #trade" do
|
|
205
|
+
trader.should_receive(:sleep).with(10)
|
|
206
|
+
trader.should_receive(:trade)
|
|
207
|
+
trader.trade_again
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it "should create new clients" do
|
|
211
|
+
buy_client = trader.buy_client
|
|
212
|
+
sell_client = trader.sell_client
|
|
213
|
+
trader.should_receive(:sleep)
|
|
214
|
+
trader.should_receive(:trade)
|
|
215
|
+
trader.trade_again
|
|
216
|
+
buy_client.should_not == trader.buy_client
|
|
217
|
+
sell_client.should_not == trader.sell_client
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
describe "#client_for_exchange" do
|
|
222
|
+
it "should raise if wrong market" do
|
|
223
|
+
error = "Invalid exchange - 'test'"
|
|
224
|
+
expect { trader.client_for_exchange(:test) }.to raise_error(ArgumentError, error)
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
193
228
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rbtc_arbitrage
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hank Stoever
|
|
@@ -162,12 +162,14 @@ files:
|
|
|
162
162
|
- .rspec
|
|
163
163
|
- .travis.yml
|
|
164
164
|
- Gemfile
|
|
165
|
+
- Gemfile.lock
|
|
165
166
|
- Guardfile
|
|
166
167
|
- LICENSE.txt
|
|
168
|
+
- Procfile
|
|
167
169
|
- README.md
|
|
168
170
|
- Rakefile
|
|
169
171
|
- bin/rbtc
|
|
170
|
-
-
|
|
172
|
+
- dummy_web_server.rb
|
|
171
173
|
- lib/rbtc_arbitrage.rb
|
|
172
174
|
- lib/rbtc_arbitrage/campbx.rb
|
|
173
175
|
- lib/rbtc_arbitrage/cli.rb
|
data/btce-api-key.yml
DELETED