rbtc_arbitrage 2.0.2 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -1
- data/bitstamp/.gitignore +21 -0
- data/bitstamp/.rspec +2 -0
- data/bitstamp/.ruby-gemset +1 -0
- data/bitstamp/.ruby-version +1 -0
- data/bitstamp/Gemfile +24 -0
- data/bitstamp/Gemfile.lock +64 -0
- data/bitstamp/LICENSE.txt +20 -0
- data/bitstamp/README.md +96 -0
- data/bitstamp/Rakefile +49 -0
- data/bitstamp/VERSION +1 -0
- data/bitstamp/bitstamp.gemspec +94 -0
- data/bitstamp/lib/bitstamp/collection.rb +30 -0
- data/bitstamp/lib/bitstamp/helper.rb +19 -0
- data/bitstamp/lib/bitstamp/model.rb +33 -0
- data/bitstamp/lib/bitstamp/net.rb +49 -0
- data/bitstamp/lib/bitstamp/orders.rb +41 -0
- data/bitstamp/lib/bitstamp/ticker.rb +16 -0
- data/bitstamp/lib/bitstamp/transactions.rb +37 -0
- data/bitstamp/lib/bitstamp.rb +77 -0
- data/bitstamp/spec/bitstamp_spec.rb +57 -0
- data/bitstamp/spec/collection_spec.rb +12 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/balance.yml +63 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/order_book.yml +1910 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/orders/all.yml +62 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/orders/buy.yml +62 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/orders/sell/failure.yml +60 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/ticker.yml +63 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/transactions.yml +244 -0
- data/bitstamp/spec/fixtures/vcr_cassettes/bitstamp/user_transactions/all.yml +223 -0
- data/bitstamp/spec/orders_spec.rb +40 -0
- data/bitstamp/spec/spec_helper.rb +26 -0
- data/bitstamp/spec/support/bitstamp_setup.rb +19 -0
- data/bitstamp/spec/support/vcr.rb +21 -0
- data/bitstamp/spec/transactions_spec.rb +32 -0
- data/lib/rbtc_arbitrage/trader/logger.rb +18 -7
- data/lib/rbtc_arbitrage/version.rb +1 -1
- data/lib/rbtc_arbitrage.rb +5 -1
- data/rbtc_arbitrage.gemspec +21 -0
- metadata +50 -2
@@ -0,0 +1,223 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://www.bitstamp.net/api/user_transactions/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: key=BITSTAMP_KEY&nonce=1380238185&signature=7CBA96CEB133CF1E40EB223B8EE85696D75FFFB2AF8DFF9052F9F6651F829C2A&timedelta=3600
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: !binary |-
|
14
|
+
T0s=
|
15
|
+
headers:
|
16
|
+
!binary "U2VydmVy":
|
17
|
+
- !binary |-
|
18
|
+
Y2xvdWRmbGFyZS1uZ2lueA==
|
19
|
+
!binary "RGF0ZQ==":
|
20
|
+
- !binary |-
|
21
|
+
VGh1LCAyNiBTZXAgMjAxMyAyMzoyOTo0NiBHTVQ=
|
22
|
+
!binary "Q29udGVudC1UeXBl":
|
23
|
+
- !binary |-
|
24
|
+
YXBwbGljYXRpb24vanNvbg==
|
25
|
+
!binary "VHJhbnNmZXItRW5jb2Rpbmc=":
|
26
|
+
- !binary |-
|
27
|
+
Y2h1bmtlZA==
|
28
|
+
!binary "Q29ubmVjdGlvbg==":
|
29
|
+
- !binary |-
|
30
|
+
a2VlcC1hbGl2ZQ==
|
31
|
+
!binary "U2V0LUNvb2tpZQ==":
|
32
|
+
- !binary |-
|
33
|
+
X19jZmR1aWQ9ZDg0ODRmMzI3NTJiOTlmMGMzNzI0YWE1YjNkYjczNjA2MTM4
|
34
|
+
MDIzODE4NTY4MzsgZXhwaXJlcz1Nb24sIDIzLURlYy0yMDE5IDIzOjUwOjAw
|
35
|
+
IEdNVDsgcGF0aD0vOyBkb21haW49LmJpdHN0YW1wLm5ldA==
|
36
|
+
!binary "Q29udGVudC1MYW5ndWFnZQ==":
|
37
|
+
- !binary |-
|
38
|
+
ZW4=
|
39
|
+
!binary "RXhwaXJlcw==":
|
40
|
+
- !binary |-
|
41
|
+
VGh1LCAyNiBTZXAgMjAxMyAyMzoyOTo0NiBHTVQ=
|
42
|
+
!binary "VmFyeQ==":
|
43
|
+
- !binary |-
|
44
|
+
QWNjZXB0LUxhbmd1YWdl
|
45
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
46
|
+
- !binary |-
|
47
|
+
bWF4LWFnZT0w
|
48
|
+
!binary "TGFzdC1Nb2RpZmllZA==":
|
49
|
+
- !binary |-
|
50
|
+
VGh1LCAyNiBTZXAgMjAxMyAyMzoyOTo0NiBHTVQ=
|
51
|
+
!binary "Q2YtUmF5":
|
52
|
+
- !binary |-
|
53
|
+
YjQzYmNmNDg0NjQwMzIw
|
54
|
+
body:
|
55
|
+
encoding: ASCII-8BIT
|
56
|
+
string: !binary |-
|
57
|
+
W3sidXNkIjogIjAuMDAiLCAiYnRjIjogIi0zLjAwNzgxMTI0IiwgImJ0Y191
|
58
|
+
c2QiOiAiMC4wMCIsICJvcmRlcl9pZCI6IG51bGwsICJmZWUiOiAiMC4wMCIs
|
59
|
+
ICJ0eXBlIjogMSwgImlkIjogMTQ0NDQ3NiwgImRhdGV0aW1lIjogIjIwMTMt
|
60
|
+
MDktMjYgMTM6NDY6NTkifSwgeyJ1c2QiOiAiLTM3My41MSIsICJidGMiOiAi
|
61
|
+
My4wMDc4MTEyNCIsICJidGNfdXNkIjogIjEyNC4xOCIsICJvcmRlcl9pZCI6
|
62
|
+
IDc2MjM5NDIsICJmZWUiOiAiMS41MCIsICJ0eXBlIjogMiwgImlkIjogMTQ0
|
63
|
+
NDQwNCwgImRhdGV0aW1lIjogIjIwMTMtMDktMjYgMTM6Mjg6NTUifSwgeyJ1
|
64
|
+
c2QiOiAiNDUwMC4wMCIsICJidGMiOiAiMC4wMDAwMDAwMCIsICJidGNfdXNk
|
65
|
+
IjogIjAuMDAiLCAib3JkZXJfaWQiOiBudWxsLCAiZmVlIjogIjE1LjAwIiwg
|
66
|
+
InR5cGUiOiAwLCAiaWQiOiAxNDM5ODY0LCAiZGF0ZXRpbWUiOiAiMjAxMy0w
|
67
|
+
OS0yNSAxODoxMjoxOCJ9LCB7InVzZCI6ICIwLjAwIiwgImJ0YyI6ICItMy45
|
68
|
+
OTcxOTA3OSIsICJidGNfdXNkIjogIjAuMDAiLCAib3JkZXJfaWQiOiBudWxs
|
69
|
+
LCAiZmVlIjogIjAuMDAiLCAidHlwZSI6IDEsICJpZCI6IDE0Mzg2MDksICJk
|
70
|
+
YXRldGltZSI6ICIyMDEzLTA5LTI1IDEyOjM4OjA0In0sIHsidXNkIjogIi00
|
71
|
+
OTguMDEiLCAiYnRjIjogIjMuOTk3MTkwNzkiLCAiYnRjX3VzZCI6ICIxMjQu
|
72
|
+
NTkiLCAib3JkZXJfaWQiOiA3NjAxMzExLCAiZmVlIjogIjIuMDAiLCAidHlw
|
73
|
+
ZSI6IDIsICJpZCI6IDE0Mzg1MzcsICJkYXRldGltZSI6ICIyMDEzLTA5LTI1
|
74
|
+
IDEyOjMwOjIyIn0sIHsidXNkIjogIjAuMDAiLCAiYnRjIjogIi0xMC45MzU4
|
75
|
+
OTg0OCIsICJidGNfdXNkIjogIjAuMDAiLCAib3JkZXJfaWQiOiBudWxsLCAi
|
76
|
+
ZmVlIjogIjAuMDAiLCAidHlwZSI6IDEsICJpZCI6IDE0MzM4NjAsICJkYXRl
|
77
|
+
dGltZSI6ICIyMDEzLTA5LTI0IDE3OjU5OjIxIn0sIHsidXNkIjogIi0yMC4z
|
78
|
+
MCIsICJidGMiOiAiMC4xNjUwOTg0OCIsICJidGNfdXNkIjogIjEyMi45MyIs
|
79
|
+
ICJvcmRlcl9pZCI6IDc1ODEzOTYsICJmZWUiOiAiMC4wOSIsICJ0eXBlIjog
|
80
|
+
MiwgImlkIjogMTQzMzAxMywgImRhdGV0aW1lIjogIjIwMTMtMDktMjQgMTU6
|
81
|
+
MDQ6MjAifSwgeyJ1c2QiOiAiLTM2OC43OSIsICJidGMiOiAiMy4wMDAwMDAw
|
82
|
+
MCIsICJidGNfdXNkIjogIjEyMi45MyIsICJvcmRlcl9pZCI6IDc1ODEzOTYs
|
83
|
+
ICJmZWUiOiAiMS40OCIsICJ0eXBlIjogMiwgImlkIjogMTQzMzAxMSwgImRh
|
84
|
+
dGV0aW1lIjogIjIwMTMtMDktMjQgMTU6MDE6MTMifSwgeyJ1c2QiOiAiLTgy
|
85
|
+
OS44OCIsICJidGMiOiAiNi43NTA4MDAwMCIsICJidGNfdXNkIjogIjEyMi45
|
86
|
+
MyIsICJvcmRlcl9pZCI6IDc1ODEzOTYsICJmZWUiOiAiMy4zMiIsICJ0eXBl
|
87
|
+
IjogMiwgImlkIjogMTQzMzAwOCwgImRhdGV0aW1lIjogIjIwMTMtMDktMjQg
|
88
|
+
MTU6MDA6MzQifSwgeyJ1c2QiOiAiLTIuNDYiLCAiYnRjIjogIjAuMDIwMDAw
|
89
|
+
MDAiLCAiYnRjX3VzZCI6ICIxMjIuOTMiLCAib3JkZXJfaWQiOiA3NTgxMzk2
|
90
|
+
LCAiZmVlIjogIjAuMDEiLCAidHlwZSI6IDIsICJpZCI6IDE0MzMwMDcsICJk
|
91
|
+
YXRldGltZSI6ICIyMDEzLTA5LTI0IDE1OjAwOjI4In0sIHsidXNkIjogIi0x
|
92
|
+
MjIuOTMiLCAiYnRjIjogIjEuMDAwMDAwMDAiLCAiYnRjX3VzZCI6ICIxMjIu
|
93
|
+
OTMiLCAib3JkZXJfaWQiOiA3NTgxMzk2LCAiZmVlIjogIjAuNTIiLCAidHlw
|
94
|
+
ZSI6IDIsICJpZCI6IDE0MzMwMDYsICJkYXRldGltZSI6ICIyMDEzLTA5LTI0
|
95
|
+
IDE1OjAwOjAyIn0sIHsidXNkIjogIjAuMDAiLCAiYnRjIjogIi0xMS45OTk2
|
96
|
+
MDg2OSIsICJidGNfdXNkIjogIjAuMDAiLCAib3JkZXJfaWQiOiBudWxsLCAi
|
97
|
+
ZmVlIjogIjAuMDAiLCAidHlwZSI6IDEsICJpZCI6IDEzOTM5NDQsICJkYXRl
|
98
|
+
dGltZSI6ICIyMDEzLTA5LTE3IDEzOjE2OjA0In0sIHsidXNkIjogIi01Njku
|
99
|
+
MjAiLCAiYnRjIjogIjQuNDgwNDc4NTgiLCAiYnRjX3VzZCI6ICIxMjcuMDQi
|
100
|
+
LCAib3JkZXJfaWQiOiA3NDI5NjA0LCAiZmVlIjogIjIuMjgiLCAidHlwZSI6
|
101
|
+
IDIsICJpZCI6IDEzOTM4MTAsICJkYXRldGltZSI6ICIyMDEzLTA5LTE3IDEy
|
102
|
+
OjU3OjIzIn0sIHsidXNkIjogIi05OS4wMCIsICJidGMiOiAiMC43NzkyODIx
|
103
|
+
MiIsICJidGNfdXNkIjogIjEyNy4wNCIsICJvcmRlcl9pZCI6IDc0Mjk2MDQs
|
104
|
+
ICJmZWUiOiAiMC40MCIsICJ0eXBlIjogMiwgImlkIjogMTM5MzgwOCwgImRh
|
105
|
+
dGV0aW1lIjogIjIwMTMtMDktMTcgMTI6NTc6MTYifSwgeyJ1c2QiOiAiLTk5
|
106
|
+
LjAwIiwgImJ0YyI6ICIwLjc3OTI4MjEyIiwgImJ0Y191c2QiOiAiMTI3LjA0
|
107
|
+
IiwgIm9yZGVyX2lkIjogNzQyOTYwNCwgImZlZSI6ICIwLjQwIiwgInR5cGUi
|
108
|
+
OiAyLCAiaWQiOiAxMzkzODA3LCAiZGF0ZXRpbWUiOiAiMjAxMy0wOS0xNyAx
|
109
|
+
Mjo1NzoxNCJ9LCB7InVzZCI6ICItNzU2LjQwIiwgImJ0YyI6ICI1Ljk2MDU2
|
110
|
+
NTg3IiwgImJ0Y191c2QiOiAiMTI2LjkwIiwgIm9yZGVyX2lkIjogNzQyOTYw
|
111
|
+
NCwgImZlZSI6ICIzLjE4IiwgInR5cGUiOiAyLCAiaWQiOiAxMzkzNzU3LCAi
|
112
|
+
ZGF0ZXRpbWUiOiAiMjAxMy0wOS0xNyAxMjo0NTo0NSJ9LCB7InVzZCI6ICI0
|
113
|
+
MzQ1LjAwIiwgImJ0YyI6ICIwLjAwMDAwMDAwIiwgImJ0Y191c2QiOiAiMC4w
|
114
|
+
MCIsICJvcmRlcl9pZCI6IG51bGwsICJmZWUiOiAiMTUuMDAiLCAidHlwZSI6
|
115
|
+
IDAsICJpZCI6IDEzOTE5MTIsICJkYXRldGltZSI6ICIyMDEzLTA5LTE3IDA4
|
116
|
+
OjI5OjAzIn0sIHsidXNkIjogIjAuMDAiLCAiYnRjIjogIi00LjczOTc4ODky
|
117
|
+
IiwgImJ0Y191c2QiOiAiMC4wMCIsICJvcmRlcl9pZCI6IG51bGwsICJmZWUi
|
118
|
+
OiAiMC4wMCIsICJ0eXBlIjogMSwgImlkIjogMTM4Nzg5MSwgImRhdGV0aW1l
|
119
|
+
IjogIjIwMTMtMDktMTYgMTQ6MTE6MDMifSwgeyJ1c2QiOiAiLTI3LjcyIiwg
|
120
|
+
ImJ0YyI6ICIwLjIyMDM2NzI4IiwgImJ0Y191c2QiOiAiMTI1Ljc5IiwgIm9y
|
121
|
+
ZGVyX2lkIjogNzQwOTgwNCwgImZlZSI6ICIwLjEyIiwgInR5cGUiOiAyLCAi
|
122
|
+
aWQiOiAxMzg3ODgxLCAiZGF0ZXRpbWUiOiAiMjAxMy0wOS0xNiAxNDowNDow
|
123
|
+
MiJ9LCB7InVzZCI6ICItOTguMDAiLCAiYnRjIjogIjAuNzc5MDc2MjQiLCAi
|
124
|
+
YnRjX3VzZCI6ICIxMjUuNzkiLCAib3JkZXJfaWQiOiA3NDA5ODA0LCAiZmVl
|
125
|
+
IjogIjAuNDIiLCAidHlwZSI6IDIsICJpZCI6IDEzODc4NzksICJkYXRldGlt
|
126
|
+
ZSI6ICIyMDEzLTA5LTE2IDE0OjAzOjEwIn0sIHsidXNkIjogIi0xMjUuMzYi
|
127
|
+
LCAiYnRjIjogIjEuMDAwMDAwMDAiLCAiYnRjX3VzZCI6ICIxMjUuMzYiLCAi
|
128
|
+
b3JkZXJfaWQiOiA3Mzk0NzE1LCAiZmVlIjogIjAuNTMiLCAidHlwZSI6IDIs
|
129
|
+
ICJpZCI6IDEzODQzNjksICJkYXRldGltZSI6ICIyMDEzLTA5LTE1IDIwOjIw
|
130
|
+
OjQzIn0sIHsidXNkIjogIi0zMS44MSIsICJidGMiOiAiMC4yNDgyNzgzMCIs
|
131
|
+
ICJidGNfdXNkIjogIjEyOC4xMyIsICJvcmRlcl9pZCI6IDczNDAwOTYsICJm
|
132
|
+
ZWUiOiAiMC4xNCIsICJ0eXBlIjogMiwgImlkIjogMTM3NTM1NCwgImRhdGV0
|
133
|
+
aW1lIjogIjIwMTMtMDktMTMgMjA6MjQ6MzIifSwgeyJ1c2QiOiAiLTguODMi
|
134
|
+
LCAiYnRjIjogIjAuMDY4OTE0MzkiLCAiYnRjX3VzZCI6ICIxMjguMTMiLCAi
|
135
|
+
b3JkZXJfaWQiOiA3MzQwMDk2LCAiZmVlIjogIjAuMDQiLCAidHlwZSI6IDIs
|
136
|
+
ICJpZCI6IDEzNzUzNDUsICJkYXRldGltZSI6ICIyMDEzLTA5LTEzIDIwOjIw
|
137
|
+
OjA4In0sIHsidXNkIjogIi0xNzUuNTQiLCAiYnRjIjogIjEuMzcwMDAwMDAi
|
138
|
+
LCAiYnRjX3VzZCI6ICIxMjguMTMiLCAib3JkZXJfaWQiOiA3MzQwMDk2LCAi
|
139
|
+
ZmVlIjogIjAuNzQiLCAidHlwZSI6IDIsICJpZCI6IDEzNzUzNDQsICJkYXRl
|
140
|
+
dGltZSI6ICIyMDEzLTA5LTEzIDIwOjE5OjUyIn0sIHsidXNkIjogIi0xMDIu
|
141
|
+
MDAiLCAiYnRjIjogIjAuNzk2MDY2NDkiLCAiYnRjX3VzZCI6ICIxMjguMTMi
|
142
|
+
LCAib3JkZXJfaWQiOiA3MzQwMDk2LCAiZmVlIjogIjAuNDMiLCAidHlwZSI6
|
143
|
+
IDIsICJpZCI6IDEzNzUzMjEsICJkYXRldGltZSI6ICIyMDEzLTA5LTEzIDIw
|
144
|
+
OjE2OjAzIn0sIHsidXNkIjogIi0zMi45MiIsICJidGMiOiAiMC4yNTcwODYy
|
145
|
+
MiIsICJidGNfdXNkIjogIjEyOC4wNiIsICJvcmRlcl9pZCI6IDczNDAwOTYs
|
146
|
+
ICJmZWUiOiAiMC4xNCIsICJ0eXBlIjogMiwgImlkIjogMTM3NTI4NCwgImRh
|
147
|
+
dGV0aW1lIjogIjIwMTMtMDktMTMgMjA6MDU6MDIifSwgeyJ1c2QiOiAiMC4w
|
148
|
+
MCIsICJidGMiOiAiLTMuMjA3MTQ5NjMiLCAiYnRjX3VzZCI6ICIwLjAwIiwg
|
149
|
+
Im9yZGVyX2lkIjogbnVsbCwgImZlZSI6ICIwLjAwIiwgInR5cGUiOiAxLCAi
|
150
|
+
aWQiOiAxMzc1MjcxLCAiZGF0ZXRpbWUiOiAiMjAxMy0wOS0xMyAyMDowMTow
|
151
|
+
MyJ9LCB7InVzZCI6ICItMjA3LjcwIiwgImJ0YyI6ICIxLjYyMTY0MjczIiwg
|
152
|
+
ImJ0Y191c2QiOiAiMTI4LjA4IiwgIm9yZGVyX2lkIjogNzM0MDE4OSwgImZl
|
153
|
+
ZSI6ICIwLjg4IiwgInR5cGUiOiAyLCAiaWQiOiAxMzc1MjY0LCAiZGF0ZXRp
|
154
|
+
bWUiOiAiMjAxMy0wOS0xMyAxOTo1ODo1OCJ9LCB7InVzZCI6ICItMTAxLjAw
|
155
|
+
IiwgImJ0YyI6ICIwLjc4ODU2OTY0IiwgImJ0Y191c2QiOiAiMTI4LjA4Iiwg
|
156
|
+
Im9yZGVyX2lkIjogNzM0MDE4OSwgImZlZSI6ICIwLjQzIiwgInR5cGUiOiAy
|
157
|
+
LCAiaWQiOiAxMzc1MjYzLCAiZGF0ZXRpbWUiOiAiMjAxMy0wOS0xMyAxOTo1
|
158
|
+
ODo1NyJ9LCB7InVzZCI6ICItMTAyLjAwIiwgImJ0YyI6ICIwLjc5NjkzNzI2
|
159
|
+
IiwgImJ0Y191c2QiOiAiMTI3Ljk5IiwgIm9yZGVyX2lkIjogNzM0MDA5Niwg
|
160
|
+
ImZlZSI6ICIwLjQzIiwgInR5cGUiOiAyLCAiaWQiOiAxMzc1MjU1LCAiZGF0
|
161
|
+
ZXRpbWUiOiAiMjAxMy0wOS0xMyAxOTo1NDowNCJ9LCB7InVzZCI6ICIwLjAw
|
162
|
+
IiwgImJ0YyI6ICItMi4xMTA2MDUyMyIsICJidGNfdXNkIjogIjAuMDAiLCAi
|
163
|
+
b3JkZXJfaWQiOiBudWxsLCAiZmVlIjogIjAuMDAiLCAidHlwZSI6IDEsICJp
|
164
|
+
ZCI6IDEzNzMyNTAsICJkYXRldGltZSI6ICIyMDEzLTA5LTEzIDEyOjI4OjEz
|
165
|
+
In0sIHsidXNkIjogIi0yNjguODciLCAiYnRjIjogIjIuMTEwNjA1MjMiLCAi
|
166
|
+
YnRjX3VzZCI6ICIxMjcuMzkiLCAib3JkZXJfaWQiOiA3MzMxNDkyLCAiZmVl
|
167
|
+
IjogIjEuMTMiLCAidHlwZSI6IDIsICJpZCI6IDEzNzMxNTMsICJkYXRldGlt
|
168
|
+
ZSI6ICIyMDEzLTA5LTEzIDEyOjIwOjM3In0sIHsidXNkIjogIjAuMDAiLCAi
|
169
|
+
YnRjIjogIi03LjE0Mjc2NjA0IiwgImJ0Y191c2QiOiAiMC4wMCIsICJvcmRl
|
170
|
+
cl9pZCI6IG51bGwsICJmZWUiOiAiMC4wMCIsICJ0eXBlIjogMSwgImlkIjog
|
171
|
+
MTM2NTUxNCwgImRhdGV0aW1lIjogIjIwMTMtMDktMTIgMTI6NTc6MDQifSwg
|
172
|
+
eyJ1c2QiOiAiLTg5Ni4wNiIsICJidGMiOiAiNy4xNDI3NjYwNCIsICJidGNf
|
173
|
+
dXNkIjogIjEyNS40NSIsICJvcmRlcl9pZCI6IDcyOTYzMTcsICJmZWUiOiAi
|
174
|
+
My45NSIsICJ0eXBlIjogMiwgImlkIjogMTM2NTQ4MCwgImRhdGV0aW1lIjog
|
175
|
+
IjIwMTMtMDktMTIgMTI6NDM6MjkifSwgeyJ1c2QiOiAiMC4wMCIsICJidGMi
|
176
|
+
OiAiLTIxLjU2OTYzMjc3IiwgImJ0Y191c2QiOiAiMC4wMCIsICJvcmRlcl9p
|
177
|
+
ZCI6IG51bGwsICJmZWUiOiAiMC4wMCIsICJ0eXBlIjogMSwgImlkIjogMTM1
|
178
|
+
ODg2MiwgImRhdGV0aW1lIjogIjIwMTMtMDktMTEgMTk6NDk6MDUifSwgeyJ1
|
179
|
+
c2QiOiAiMC4wMCIsICJidGMiOiAiLTEuMDAwMDAwMDAiLCAiYnRjX3VzZCI6
|
180
|
+
ICIwLjAwIiwgIm9yZGVyX2lkIjogbnVsbCwgImZlZSI6ICIwLjAwIiwgInR5
|
181
|
+
cGUiOiAxLCAiaWQiOiAxMzU3Mjc1LCAiZGF0ZXRpbWUiOiAiMjAxMy0wOS0x
|
182
|
+
MSAxNToyNzozNCJ9LCB7InVzZCI6ICItNjEuOTAiLCAiYnRjIjogIjAuNTAw
|
183
|
+
MDAwMDAiLCAiYnRjX3VzZCI6ICIxMjMuNzkiLCAib3JkZXJfaWQiOiA3MjY0
|
184
|
+
MzYyLCAiZmVlIjogIjAuMjgiLCAidHlwZSI6IDIsICJpZCI6IDEzNTcwNDcs
|
185
|
+
ICJkYXRldGltZSI6ICIyMDEzLTA5LTExIDE0OjU2OjA1In0sIHsidXNkIjog
|
186
|
+
Ii0yMTAyLjQwIiwgImJ0YyI6ICIxNi45NjQzODAwMCIsICJidGNfdXNkIjog
|
187
|
+
IjEyMy45MyIsICJvcmRlcl9pZCI6IDcyNjU5NjcsICJmZWUiOiAiOS42OCIs
|
188
|
+
ICJ0eXBlIjogMiwgImlkIjogMTM1NzAzNSwgImRhdGV0aW1lIjogIjIwMTMt
|
189
|
+
MDktMTEgMTQ6NTU6MDYifSwgeyJ1c2QiOiAiLTI0Ny44NiIsICJidGMiOiAi
|
190
|
+
Mi4wMDAwMDAwMCIsICJidGNfdXNkIjogIjEyMy45MyIsICJvcmRlcl9pZCI6
|
191
|
+
IDcyNjU5NjcsICJmZWUiOiAiMS4xNSIsICJ0eXBlIjogMiwgImlkIjogMTM1
|
192
|
+
NzAzNCwgImRhdGV0aW1lIjogIjIwMTMtMDktMTEgMTQ6NTQ6MzcifSwgeyJ1
|
193
|
+
c2QiOiAiLTIzNC44MCIsICJidGMiOiAiMS44OTQ2NTMzMiIsICJidGNfdXNk
|
194
|
+
IjogIjEyMy45MyIsICJvcmRlcl9pZCI6IDcyNjU5NjcsICJmZWUiOiAiMS4w
|
195
|
+
OSIsICJ0eXBlIjogMiwgImlkIjogMTM1NzAyNywgImRhdGV0aW1lIjogIjIw
|
196
|
+
MTMtMDktMTEgMTQ6NTQ6MDkifSwgeyJ1c2QiOiAiLTI1LjkzIiwgImJ0YyI6
|
197
|
+
ICIwLjIwOTIzMTAyIiwgImJ0Y191c2QiOiAiMTIzLjkzIiwgIm9yZGVyX2lk
|
198
|
+
IjogNzI2NTk2NywgImZlZSI6ICIwLjEyIiwgInR5cGUiOiAyLCAiaWQiOiAx
|
199
|
+
MzU3MDIyLCAiZGF0ZXRpbWUiOiAiMjAxMy0wOS0xMSAxNDo1Mjo0NiJ9LCB7
|
200
|
+
InVzZCI6ICItMTI0LjI3IiwgImJ0YyI6ICIxLjAwMTM2ODQzIiwgImJ0Y191
|
201
|
+
c2QiOiAiMTI0LjEwIiwgIm9yZGVyX2lkIjogNzI2NTIyNCwgImZlZSI6ICIw
|
202
|
+
LjYwIiwgInR5cGUiOiAyLCAiaWQiOiAxMzU2ODM0LCAiZGF0ZXRpbWUiOiAi
|
203
|
+
MjAxMy0wOS0xMSAxNDoyNzoxMyJ9LCB7InVzZCI6ICI0NDYwLjAwIiwgImJ0
|
204
|
+
YyI6ICIwLjAwMDAwMDAwIiwgImJ0Y191c2QiOiAiMC4wMCIsICJvcmRlcl9p
|
205
|
+
ZCI6IG51bGwsICJmZWUiOiAiMTUuMDAiLCAidHlwZSI6IDAsICJpZCI6IDEz
|
206
|
+
NTUyNDcsICJkYXRldGltZSI6ICIyMDEzLTA5LTExIDEyOjA1OjI2In0sIHsi
|
207
|
+
dXNkIjogIjI0NjAuMDAiLCAiYnRjIjogIjAuMDAwMDAwMDAiLCAiYnRjX3Vz
|
208
|
+
ZCI6ICIwLjAwIiwgIm9yZGVyX2lkIjogbnVsbCwgImZlZSI6ICIxNS4wMCIs
|
209
|
+
ICJ0eXBlIjogMCwgImlkIjogMTMzOTA4NCwgImRhdGV0aW1lIjogIjIwMTMt
|
210
|
+
MDktMDkgMTA6NDQ6MzQifSwgeyJ1c2QiOiAiMC4wMCIsICJidGMiOiAiLTku
|
211
|
+
NTUyNTM0MTEiLCAiYnRjX3VzZCI6ICIwLjAwIiwgIm9yZGVyX2lkIjogbnVs
|
212
|
+
bCwgImZlZSI6ICIwLjAwIiwgInR5cGUiOiAxLCAiaWQiOiAxMjIwOTIwLCAi
|
213
|
+
ZGF0ZXRpbWUiOiAiMjAxMy0wOC0xOSAyMjowNTowMyJ9LCB7InVzZCI6ICIt
|
214
|
+
OTgwLjA5IiwgImJ0YyI6ICI5LjU1MjUzNDExIiwgImJ0Y191c2QiOiAiMTAy
|
215
|
+
LjYwIiwgIm9yZGVyX2lkIjogbnVsbCwgImZlZSI6ICI0LjkxIiwgInR5cGUi
|
216
|
+
OiAyLCAiaWQiOiAxMjIwODk2LCAiZGF0ZXRpbWUiOiAiMjAxMy0wOC0xOSAy
|
217
|
+
MjowMDowOCJ9LCB7InVzZCI6ICIxMDAwLjAwIiwgImJ0YyI6ICIwLjAwMDAw
|
218
|
+
MDAwIiwgImJ0Y191c2QiOiAiMC4wMCIsICJvcmRlcl9pZCI6IG51bGwsICJm
|
219
|
+
ZWUiOiAiMTUuMDAiLCAidHlwZSI6IDAsICJpZCI6IDEyMTgzODUsICJkYXRl
|
220
|
+
dGltZSI6ICIyMDEzLTA4LTE5IDEzOjA0OjM5In1d
|
221
|
+
http_version:
|
222
|
+
recorded_at: Thu, 26 Sep 2013 23:29:46 GMT
|
223
|
+
recorded_with: VCR 2.6.0
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bitstamp::Orders do
|
4
|
+
before { setup_bitstamp }
|
5
|
+
|
6
|
+
describe :all, vcr: {cassette_name: 'bitstamp/orders/all'} do
|
7
|
+
subject { Bitstamp.orders.all }
|
8
|
+
it { should be_kind_of Array }
|
9
|
+
describe "first order" do
|
10
|
+
subject { Bitstamp.orders.all.first }
|
11
|
+
its(:price) { should == "1.01" }
|
12
|
+
its(:amount) { should == "1.00000000" }
|
13
|
+
its(:type) { should == 0 }
|
14
|
+
its(:datetime) { should == "2013-09-26 23:15:04" }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe :sell do
|
19
|
+
context "no permission found", vcr: {cassette_name: 'bitstamp/orders/sell/failure'} do
|
20
|
+
subject { Bitstamp.orders.sell(:amount => 1, :price => 1000) }
|
21
|
+
it { should be_kind_of Bitstamp::Order }
|
22
|
+
its(:error) { should == "No permission found" }
|
23
|
+
end
|
24
|
+
# context "bitcoins available", vcr: {cassette_name: 'bitstamp/orders/sell/success'} do
|
25
|
+
# subject { Bitstamp.orders.sell(:amount => 1, :price => 1000) }
|
26
|
+
# xit { should be_kind_of Bitstamp::Order }
|
27
|
+
# its(:error) { should be_nil }
|
28
|
+
# end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe :buy, vcr: {cassette_name: 'bitstamp/orders/buy'} do
|
32
|
+
subject { Bitstamp.orders.buy(:amount => 1, :price => 1.01) }
|
33
|
+
it { should be_kind_of Bitstamp::Order }
|
34
|
+
its(:price) { should == "1.01" }
|
35
|
+
its(:amount) { should == "1" }
|
36
|
+
its(:type) { should == 0 }
|
37
|
+
its(:datetime) { should == "2013-09-26 23:26:56.849475" }
|
38
|
+
its(:error) { should be_nil }
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
5
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
6
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
7
|
+
# loaded once.
|
8
|
+
|
9
|
+
require 'bitstamp'
|
10
|
+
|
11
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
12
|
+
# in spec/support/ and its subdirectories.
|
13
|
+
Dir[File.expand_path("./spec/support/**/*.rb")].each { |f| require f }
|
14
|
+
|
15
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
18
|
+
config.run_all_when_everything_filtered = true
|
19
|
+
config.filter_run :focus
|
20
|
+
|
21
|
+
# Run specs in random order to surface order dependencies. If you find an
|
22
|
+
# order dependency and want to debug it, you can fix the order by providing
|
23
|
+
# the seed, which is printed after each run.
|
24
|
+
# --seed 1234
|
25
|
+
config.order = 'random'
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.before(:each) do
|
3
|
+
# The famous singleton problem
|
4
|
+
Bitstamp.setup do |config|
|
5
|
+
config.key = nil
|
6
|
+
config.secret = nil
|
7
|
+
config.client_id = nil
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def setup_bitstamp
|
13
|
+
Bitstamp.setup do |config|
|
14
|
+
raise "You must set environment variable BITSTAMP_KEY and BITSTAMP_SECRET with your username and password to run specs." if ENV['BITSTAMP_KEY'].nil? or ENV['BITSTAMP_SECRET'].nil?
|
15
|
+
config.key = ENV['BITSTAMP_KEY']
|
16
|
+
config.secret = ENV['BITSTAMP_SECRET']
|
17
|
+
config.client_id = ENV['BITSTAMP_CLIENT_ID']
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'vcr'
|
2
|
+
require 'webmock/rspec'
|
3
|
+
|
4
|
+
VCR.configure do |c|
|
5
|
+
c.allow_http_connections_when_no_cassette = false
|
6
|
+
c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
7
|
+
c.hook_into :webmock # or :fakeweb
|
8
|
+
c.configure_rspec_metadata!
|
9
|
+
c.filter_sensitive_data('BITSTAMP_KEY') do |interaction|
|
10
|
+
ENV['BITSTAMP_KEY']
|
11
|
+
end
|
12
|
+
c.filter_sensitive_data('BITSTAMP_SECRET') do |interaction|
|
13
|
+
ENV['BITSTAMP_SECRET']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
RSpec.configure do |c|
|
18
|
+
# so we can use :vcr rather than :vcr => true;
|
19
|
+
# in RSpec 3 this will no longer be necessary.
|
20
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
21
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bitstamp::UserTransactions do
|
4
|
+
before { setup_bitstamp }
|
5
|
+
|
6
|
+
describe :all, vcr: {cassette_name: 'bitstamp/user_transactions/all'} do
|
7
|
+
subject { Bitstamp.user_transactions.all }
|
8
|
+
its(:count) { should == 47 }
|
9
|
+
context "first transaction" do
|
10
|
+
subject { Bitstamp.user_transactions.all.first }
|
11
|
+
it { should be_kind_of(Bitstamp::UserTransaction) }
|
12
|
+
its(:btc) { should == "-3.00781124" }
|
13
|
+
its(:btc_usd) { should == "0.00" }
|
14
|
+
its(:datetime) { should == "2013-09-26 13:46:59" }
|
15
|
+
its(:fee) { should == "0.00" }
|
16
|
+
its(:order_id) { should be_nil }
|
17
|
+
its(:type) { should == 1 }
|
18
|
+
its(:usd) { should == "0.00" }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
describe Bitstamp::Transactions do
|
25
|
+
before { setup_bitstamp }
|
26
|
+
|
27
|
+
describe :all, vcr:{cassette_name: 'bitstamp/transactions'} do
|
28
|
+
subject { Bitstamp.transactions }
|
29
|
+
it { should be_kind_of Array }
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -8,21 +8,32 @@ module RbtcArbitrage
|
|
8
8
|
def log_info
|
9
9
|
lower_ex = @buy_client.exchange.to_s.capitalize
|
10
10
|
higher_ex = @sell_client.exchange.to_s.capitalize
|
11
|
-
logger.info "#{lower_ex}: $#{buyer[:price].round(2)}"
|
12
|
-
logger.info "#{higher_ex}: $#{seller[:price].round(2)}"
|
13
|
-
logger.info "buying
|
14
|
-
logger.info "selling
|
11
|
+
logger.info "#{lower_ex}: $#{color(buyer[:price].round(2))}"
|
12
|
+
logger.info "#{higher_ex}: $#{color(seller[:price].round(2))}"
|
13
|
+
logger.info log_string("buying", lower_ex, @paid)
|
14
|
+
logger.info log_string("selling", lower_ex, @received)
|
15
15
|
|
16
16
|
log_profit
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
private
|
20
20
|
|
21
|
+
def log_string action, exchange, amount
|
22
|
+
message = "#{action} #{color @options[:volume]} "
|
23
|
+
message << "btc at #{exchange} for $"
|
24
|
+
message << color(amount.round(2))
|
25
|
+
end
|
26
|
+
|
27
|
+
def color message
|
28
|
+
message.to_s.fg("#D5EC28").bg("#000")
|
29
|
+
end
|
30
|
+
|
21
31
|
def log_profit
|
22
|
-
profit_msg = "profit: $#{(@received - @paid).round(2)}
|
32
|
+
profit_msg = "profit: $#{color (@received - @paid).round(2)}"
|
33
|
+
profit_msg << " (#{color(@percent.round(2))}%)"
|
23
34
|
if cutoff = @options[:cutoff]
|
24
35
|
profit_msg << " is #{@percent < cutoff ? 'below' : 'above'} cutoff"
|
25
|
-
profit_msg << " of #{cutoff}%."
|
36
|
+
profit_msg << " of #{color(cutoff)}%."
|
26
37
|
end
|
27
38
|
logger.info profit_msg
|
28
39
|
end
|
data/lib/rbtc_arbitrage.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
require 'bundler'
|
2
|
-
|
2
|
+
Dir.chdir("#{File.dirname(__FILE__)}/../") do
|
3
|
+
Bundler.require(:default)
|
4
|
+
end
|
5
|
+
require 'bitstamp'
|
3
6
|
require 'thor'
|
4
7
|
require_relative 'rbtc_arbitrage/campbx.rb'
|
5
8
|
require 'btce'
|
6
9
|
require 'coinbase'
|
7
10
|
require 'pony'
|
11
|
+
require 'tco'
|
8
12
|
require_relative 'rbtc_arbitrage/client.rb'
|
9
13
|
Dir["#{File.dirname(__FILE__)}/rbtc_arbitrage/trader/*.rb"].each { |f| require(f) }
|
10
14
|
Dir["#{File.dirname(__FILE__)}/rbtc_arbitrage/**/*.rb"].each { |f| require(f) }
|
data/rbtc_arbitrage.gemspec
CHANGED
@@ -14,6 +14,26 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
17
|
+
# get an array of submodule dirs by executing 'pwd' inside each submodule
|
18
|
+
`git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
|
19
|
+
# for each submodule, change working directory to that submodule
|
20
|
+
Dir.chdir(submodule_path) do
|
21
|
+
# issue git ls-files in submodule's directory
|
22
|
+
submodule_files = `git ls-files`.split($\)
|
23
|
+
# prepend the submodule path to create absolute file paths
|
24
|
+
submodule_files_fullpaths = submodule_files.map do |filename|
|
25
|
+
"#{submodule_path}/#{filename}"
|
26
|
+
end
|
27
|
+
# remove leading path parts to get paths relative to the gem's root dir
|
28
|
+
# (this assumes, that the gemspec resides in the gem's root dir)
|
29
|
+
submodule_files_paths = submodule_files_fullpaths.map do |filename|
|
30
|
+
filename.gsub "#{File.dirname(__FILE__)}/", ""
|
31
|
+
end
|
32
|
+
# add relative paths to gem.files
|
33
|
+
spec.files += submodule_files_paths
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
17
37
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
38
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
39
|
spec.require_paths = ["lib"]
|
@@ -29,4 +49,5 @@ Gem::Specification.new do |spec|
|
|
29
49
|
spec.add_dependency "btce", '0.2.4'
|
30
50
|
spec.add_dependency "coinbase", '1.2.6'
|
31
51
|
spec.add_dependency "pony"
|
52
|
+
spec.add_dependency "tco", "0.1.0"
|
32
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbtc_arbitrage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hank Stoever
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: tco
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.1.0
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.1.0
|
139
153
|
description: A gem for conducting arbitrage with Bitcoin.
|
140
154
|
email:
|
141
155
|
- hstove@gmail.com
|
@@ -156,6 +170,40 @@ files:
|
|
156
170
|
- README.md
|
157
171
|
- Rakefile
|
158
172
|
- bin/rbtc
|
173
|
+
- bitstamp/.gitignore
|
174
|
+
- bitstamp/.rspec
|
175
|
+
- bitstamp/.ruby-gemset
|
176
|
+
- bitstamp/.ruby-version
|
177
|
+
- bitstamp/Gemfile
|
178
|
+
- bitstamp/Gemfile.lock
|
179
|
+
- bitstamp/LICENSE.txt
|
180
|
+
- bitstamp/README.md
|
181
|
+
- bitstamp/Rakefile
|
182
|
+
- bitstamp/VERSION
|
183
|
+
- bitstamp/bitstamp.gemspec
|
184
|
+
- bitstamp/lib/bitstamp.rb
|
185
|
+
- bitstamp/lib/bitstamp/collection.rb
|
186
|
+
- bitstamp/lib/bitstamp/helper.rb
|
187
|
+
- bitstamp/lib/bitstamp/model.rb
|
188
|
+
- bitstamp/lib/bitstamp/net.rb
|
189
|
+
- bitstamp/lib/bitstamp/orders.rb
|
190
|
+
- bitstamp/lib/bitstamp/ticker.rb
|
191
|
+
- bitstamp/lib/bitstamp/transactions.rb
|
192
|
+
- bitstamp/spec/bitstamp_spec.rb
|
193
|
+
- bitstamp/spec/collection_spec.rb
|
194
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/balance.yml
|
195
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/order_book.yml
|
196
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/orders/all.yml
|
197
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/orders/buy.yml
|
198
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/orders/sell/failure.yml
|
199
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/ticker.yml
|
200
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/transactions.yml
|
201
|
+
- bitstamp/spec/fixtures/vcr_cassettes/bitstamp/user_transactions/all.yml
|
202
|
+
- bitstamp/spec/orders_spec.rb
|
203
|
+
- bitstamp/spec/spec_helper.rb
|
204
|
+
- bitstamp/spec/support/bitstamp_setup.rb
|
205
|
+
- bitstamp/spec/support/vcr.rb
|
206
|
+
- bitstamp/spec/transactions_spec.rb
|
159
207
|
- dummy_web_server.rb
|
160
208
|
- lib/rbtc_arbitrage.rb
|
161
209
|
- lib/rbtc_arbitrage/campbx.rb
|