cryptoexchange 0.16.1 → 0.17.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/README.md +8 -3
- data/lib/cryptoexchange/exchanges/abucoins/services/trades.rb +1 -1
- data/lib/cryptoexchange/exchanges/acx/market.rb +8 -0
- data/lib/cryptoexchange/exchanges/acx/services/market.rb +40 -0
- data/lib/cryptoexchange/exchanges/acx/services/order_book.rb +48 -0
- data/lib/cryptoexchange/exchanges/acx/services/pairs.rb +24 -0
- data/lib/cryptoexchange/exchanges/acx/services/trades.rb +38 -0
- data/lib/cryptoexchange/exchanges/binance/services/order_book.rb +1 -1
- data/lib/cryptoexchange/exchanges/bitstamp/services/order_book.rb +44 -0
- data/lib/cryptoexchange/exchanges/bitstamp/services/trades.rb +32 -0
- data/lib/cryptoexchange/exchanges/gemini/services/trades.rb +1 -1
- data/lib/cryptoexchange/exchanges/huobi/services/market.rb +1 -1
- data/lib/cryptoexchange/exchanges/okex/market.rb +8 -0
- data/lib/cryptoexchange/exchanges/okex/okex.yml +43 -0
- data/lib/cryptoexchange/exchanges/okex/services/market.rb +40 -0
- data/lib/cryptoexchange/exchanges/okex/services/order_book.rb +46 -0
- data/lib/cryptoexchange/exchanges/okex/services/pairs.rb +24 -0
- data/lib/cryptoexchange/exchanges/okex/services/trades.rb +32 -0
- data/lib/cryptoexchange/exchanges/wex/market.rb +8 -0
- data/lib/cryptoexchange/exchanges/wex/services/market.rb +44 -0
- data/lib/cryptoexchange/exchanges/wex/services/order_book.rb +50 -0
- data/lib/cryptoexchange/exchanges/wex/services/pairs.rb +27 -0
- data/lib/cryptoexchange/exchanges/wex/services/trades.rb +38 -0
- data/lib/cryptoexchange/exchanges/zaif/market.rb +8 -0
- data/lib/cryptoexchange/exchanges/zaif/services/market.rb +38 -0
- data/lib/cryptoexchange/exchanges/zaif/services/order_book.rb +44 -0
- data/lib/cryptoexchange/exchanges/zaif/services/pairs.rb +27 -0
- data/lib/cryptoexchange/exchanges/zaif/services/trades.rb +32 -0
- data/lib/cryptoexchange/version.rb +1 -1
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f05ebf8131e8107046a6a7893c2407de3d563c59
|
4
|
+
data.tar.gz: 05184ce6f50078417f8fcbe62f12760df8daeb01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8d5a17dc883537bee6f7badb78b4c003195fd4c5a6e0caddbe25331e712934fb62e679276aa642dab99fdf8c4ea67e5c3bfb4d379dbe6eb8722b6efe35ead9e
|
7
|
+
data.tar.gz: 80be3c919cd8e0b33d1f4db18536b7e689b952b3baeaf90e7eacca0440e773c09ae0e2b4c47955dbcdfff50b7986f7818f847ee3294dbe7912699511f7e81a76
|
data/README.md
CHANGED
@@ -25,6 +25,7 @@ Or install it yourself as:
|
|
25
25
|
| Exchange | Ticker | Order Book | Trade | Account | Market List |
|
26
26
|
| ----------------- | ------- | ---------- | ------- | ------- | ----------- |
|
27
27
|
| Abucoins | Y | Y | Y | | Y |
|
28
|
+
| ACX | Y | Y | Y | | Y |
|
28
29
|
| Allcoin | Y | Y | | | User-Defined|
|
29
30
|
| ANX | Y | | | | User-Defined|
|
30
31
|
| Bit-Z | Y | | | | Y |
|
@@ -37,7 +38,7 @@ Or install it yourself as:
|
|
37
38
|
| Bithumb | Y | | | | Y |
|
38
39
|
| Bitkonan | Y | | | | User-Defined|
|
39
40
|
| Bitso | Y | | | | Y |
|
40
|
-
| Bitstamp | Y |
|
41
|
+
| Bitstamp | Y | Y | Y | | User-Defined|
|
41
42
|
| Bittrex | Y | | | | Y |
|
42
43
|
| Bleutrade | Y | | | | Y |
|
43
44
|
| BTC-e | | | | | |
|
@@ -73,11 +74,13 @@ Or install it yourself as:
|
|
73
74
|
| Liqui | Y | | | | Y |
|
74
75
|
| LiteBit.eu | Y | | | | Y |
|
75
76
|
| Livecoin | Y | | | | Y |
|
77
|
+
| LocalBitcoins | Y | Y | Y | | Y |
|
76
78
|
| Luno | Y | | | | Y |
|
77
79
|
| MercadoBitcoin | Y | | | | User-Defined|
|
78
80
|
| Mercatox | Y | N | N | N | Y |
|
79
81
|
| Nova Exchange | Y | | | | Y |
|
80
82
|
| OKCoin | Y | | | | User-Defined|
|
83
|
+
| OKEx | Y | Y | Y | | User-Defined|
|
81
84
|
| Poloniex | Y | | | | Y |
|
82
85
|
| Qryptos | Y | | | | Y |
|
83
86
|
| QuadrigaCX | Y | | | | User-Defined|
|
@@ -89,9 +92,11 @@ Or install it yourself as:
|
|
89
92
|
| TuxExchange | Y | | | | Y |
|
90
93
|
| Unocoin | | | | | |
|
91
94
|
| Viabtc | Y | | | | User-Defined|
|
95
|
+
| Wex | Y | Y | Y | | Y |
|
92
96
|
| Yobit | Y | | | | Y |
|
93
97
|
| Yuanbao | Y | | | | User-Defined|
|
94
98
|
| Yunbi | Y | | | | Y |
|
99
|
+
| Zaif | Y | Y | Y | | Y |
|
95
100
|
|
96
101
|
## Usage
|
97
102
|
|
@@ -111,7 +116,7 @@ Or install it yourself as:
|
|
111
116
|
### Query the Ticker API
|
112
117
|
```
|
113
118
|
pair = client.pairs('bitflyer').first
|
114
|
-
ticker = client.ticker(
|
119
|
+
ticker = client.ticker(pair)
|
115
120
|
ticker.base
|
116
121
|
ticker.target
|
117
122
|
ticker.last
|
@@ -121,7 +126,7 @@ Or install it yourself as:
|
|
121
126
|
```
|
122
127
|
# Check if exchange has support for OrderBook
|
123
128
|
pair = client.pairs('bitflyer').first
|
124
|
-
order_book = client.order_book(
|
129
|
+
order_book = client.order_book(pair)
|
125
130
|
order_book.base
|
126
131
|
order_book.target
|
127
132
|
order_book.bids
|
@@ -20,7 +20,7 @@ module Cryptoexchange::Exchanges
|
|
20
20
|
tr.type = trade['side']
|
21
21
|
tr.price = trade['price']
|
22
22
|
tr.amount = trade['size']
|
23
|
-
tr.timestamp = Time.
|
23
|
+
tr.timestamp = Time.parse(trade['time']).to_i
|
24
24
|
tr.payload = trade
|
25
25
|
tr.market = Abucoins::Market::NAME
|
26
26
|
tr
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Acx
|
3
|
+
module Services
|
4
|
+
class Market < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
base = market_pair.base.downcase
|
18
|
+
target = market_pair.target.downcase
|
19
|
+
"#{Cryptoexchange::Exchanges::Acx::Market::API_URL}/tickers/#{base}#{target}.json"
|
20
|
+
end
|
21
|
+
|
22
|
+
def adapt(output, market_pair)
|
23
|
+
ticker = Cryptoexchange::Models::Ticker.new
|
24
|
+
ticker.base = market_pair.base
|
25
|
+
ticker.target = market_pair.target
|
26
|
+
ticker.market = Acx::Market::NAME
|
27
|
+
ticker.ask = NumericHelper.to_d(output['ticker']['buy'])
|
28
|
+
ticker.bid = NumericHelper.to_d(output['ticker']['sell'])
|
29
|
+
ticker.high = NumericHelper.to_d(output['ticker']['high'])
|
30
|
+
ticker.low = NumericHelper.to_d(output['ticker']['low'])
|
31
|
+
ticker.last = NumericHelper.to_d(output['ticker']['last'])
|
32
|
+
ticker.volume = NumericHelper.to_d(output['ticker']['vol'])
|
33
|
+
ticker.timestamp = output['at'].to_i
|
34
|
+
ticker.payload = output
|
35
|
+
ticker
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Acx
|
3
|
+
module Services
|
4
|
+
class OrderBook < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
"#{Cryptoexchange::Exchanges::Acx::Market::API_URL}/order_book.json?market=#{market_pair.base.downcase}#{market_pair.target.downcase}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def adapt(output, market_pair)
|
21
|
+
order_book = Cryptoexchange::Models::OrderBook.new
|
22
|
+
|
23
|
+
order_book.base = market_pair.base
|
24
|
+
order_book.target = market_pair.target
|
25
|
+
order_book.market = Acx::Market::NAME
|
26
|
+
order_book.asks = adapt_orders output['asks']
|
27
|
+
order_book.bids = adapt_orders output['bids']
|
28
|
+
order_book.timestamp = Time.now.to_i
|
29
|
+
order_book.payload = output
|
30
|
+
order_book
|
31
|
+
end
|
32
|
+
|
33
|
+
def adapt_orders(orders)
|
34
|
+
orders.collect do |order_entry|
|
35
|
+
price = order_entry['price']
|
36
|
+
amount = order_entry['volume']
|
37
|
+
timestamp = DateTime.iso8601(order_entry['created_at'])
|
38
|
+
.to_time
|
39
|
+
.to_i
|
40
|
+
Cryptoexchange::Models::Order.new(price: price,
|
41
|
+
amount: amount,
|
42
|
+
timestamp: timestamp)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Acx
|
3
|
+
module Services
|
4
|
+
class Pairs < Cryptoexchange::Services::Pairs
|
5
|
+
PAIRS_URL = "#{Cryptoexchange::Exchanges::Acx::Market::API_URL}/markets.json"
|
6
|
+
|
7
|
+
def fetch
|
8
|
+
output = super
|
9
|
+
adapt(output)
|
10
|
+
end
|
11
|
+
|
12
|
+
def adapt(output)
|
13
|
+
output.map do |pair|
|
14
|
+
Cryptoexchange::Models::MarketPair.new(
|
15
|
+
base: pair['base_unit'],
|
16
|
+
target: pair['quote_unit'],
|
17
|
+
market: Acx::Market::NAME
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Acx
|
3
|
+
module Services
|
4
|
+
class Trades < Cryptoexchange::Services::Market
|
5
|
+
def fetch(market_pair)
|
6
|
+
output = super(ticker_url(market_pair))
|
7
|
+
adapt(output, market_pair)
|
8
|
+
end
|
9
|
+
|
10
|
+
def ticker_url(market_pair)
|
11
|
+
base = market_pair.base.downcase
|
12
|
+
target = market_pair.target.downcase
|
13
|
+
"#{Cryptoexchange::Exchanges::Acx::Market::API_URL}/trades.json?market=#{base}#{target}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def adapt(output, market_pair)
|
17
|
+
output.collect do |trade|
|
18
|
+
tr = Cryptoexchange::Models::Trade.new
|
19
|
+
tr.trade_id = trade['id']
|
20
|
+
tr.base = market_pair.base
|
21
|
+
tr.target = market_pair.target
|
22
|
+
tr.price = trade['volume']
|
23
|
+
tr.amount = trade['funds']
|
24
|
+
|
25
|
+
timestamp = DateTime.iso8601(trade['created_at'])
|
26
|
+
.to_time
|
27
|
+
.to_i
|
28
|
+
|
29
|
+
tr.timestamp = timestamp
|
30
|
+
tr.payload = trade
|
31
|
+
tr.market = Acx::Market::NAME
|
32
|
+
tr
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Bitstamp
|
3
|
+
module Services
|
4
|
+
class OrderBook < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
"#{Cryptoexchange::Exchanges::Bitstamp::Market::API_URL}/order_book/#{market_pair.base}#{market_pair.target}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def adapt(output, market_pair)
|
21
|
+
order_book = Cryptoexchange::Models::OrderBook.new
|
22
|
+
|
23
|
+
order_book.base = market_pair.base
|
24
|
+
order_book.target = market_pair.target
|
25
|
+
order_book.market = Bitstamp::Market::NAME
|
26
|
+
order_book.asks = adapt_orders output['asks']
|
27
|
+
order_book.bids = adapt_orders output['bids']
|
28
|
+
order_book.timestamp = Time.now.to_i
|
29
|
+
order_book.payload = output
|
30
|
+
order_book
|
31
|
+
end
|
32
|
+
|
33
|
+
def adapt_orders(orders)
|
34
|
+
orders.collect do |order_entry|
|
35
|
+
price, amount = order_entry
|
36
|
+
Cryptoexchange::Models::Order.new(price: price,
|
37
|
+
amount: amount,
|
38
|
+
timestamp: Time.now.to_i)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Bitstamp
|
3
|
+
module Services
|
4
|
+
class Trades < Cryptoexchange::Services::Market
|
5
|
+
def fetch(market_pair)
|
6
|
+
output = super(ticker_url(market_pair))
|
7
|
+
adapt(output, market_pair)
|
8
|
+
end
|
9
|
+
|
10
|
+
def ticker_url(market_pair)
|
11
|
+
"#{Cryptoexchange::Exchanges::Bitstamp::Market::API_URL}/transactions/#{market_pair.base.downcase}#{market_pair.target.downcase}/"
|
12
|
+
end
|
13
|
+
|
14
|
+
def adapt(output, market_pair)
|
15
|
+
output.collect do |trade|
|
16
|
+
tr = Cryptoexchange::Models::Trade.new
|
17
|
+
tr.trade_id = trade['tid']
|
18
|
+
tr.base = market_pair.base
|
19
|
+
tr.target = market_pair.target
|
20
|
+
tr.type = trade['type'] == '0' ? 'buy' : 'sell'
|
21
|
+
tr.price = trade['price']
|
22
|
+
tr.amount = trade['amount']
|
23
|
+
tr.timestamp = trade['date'].to_i
|
24
|
+
tr.payload = trade
|
25
|
+
tr.market = Bitstamp::Market::NAME
|
26
|
+
tr
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -40,7 +40,7 @@ module Cryptoexchange::Exchanges
|
|
40
40
|
ticker.high = NumericHelper.to_d(market['high'])
|
41
41
|
ticker.low = NumericHelper.to_d(market['low'])
|
42
42
|
ticker.volume = NumericHelper.to_d(market['amount'])
|
43
|
-
ticker.timestamp =
|
43
|
+
ticker.timestamp = output['ts'].to_i / 1000
|
44
44
|
ticker.payload = market
|
45
45
|
ticker
|
46
46
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
:pairs:
|
2
|
+
- :base: LTC
|
3
|
+
:target: BTC
|
4
|
+
- :base: ETH
|
5
|
+
:target: BTC
|
6
|
+
- :base: ETC
|
7
|
+
:target: BTC
|
8
|
+
- :base: BCH
|
9
|
+
:target: BTC
|
10
|
+
- :base: BTC
|
11
|
+
:target: USDT
|
12
|
+
- :base: ETH
|
13
|
+
:target: USDT
|
14
|
+
- :base: LTC
|
15
|
+
:target: USDT
|
16
|
+
- :base: ETC
|
17
|
+
:target: USDT
|
18
|
+
- :base: BCH
|
19
|
+
:target: USDT
|
20
|
+
- :base: ETC
|
21
|
+
:target: ETH
|
22
|
+
- :base: BT1
|
23
|
+
:target: BTC
|
24
|
+
- :base: BT2
|
25
|
+
:target: BTC
|
26
|
+
- :base: BTG
|
27
|
+
:target: BTC
|
28
|
+
- :base: QTUM
|
29
|
+
:target: BTC
|
30
|
+
- :base: HSR
|
31
|
+
:target: BTC
|
32
|
+
- :base: NEO
|
33
|
+
:target: BTC
|
34
|
+
- :base: GAS
|
35
|
+
:target: BTC
|
36
|
+
- :base: QTUM
|
37
|
+
:target: USDT
|
38
|
+
- :base: HSR
|
39
|
+
:target: USDT
|
40
|
+
- :base: NEO
|
41
|
+
:target: USDT
|
42
|
+
- :base: GAS
|
43
|
+
:target: USDT
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Okex
|
3
|
+
module Services
|
4
|
+
class Market < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
base = market_pair.base.downcase
|
18
|
+
target = market_pair.target.downcase
|
19
|
+
"#{Cryptoexchange::Exchanges::Okex::Market::API_URL}/ticker.do?symbol=#{base}_#{target}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def adapt(output, market_pair)
|
23
|
+
ticker = Cryptoexchange::Models::Ticker.new
|
24
|
+
ticker.base = market_pair.base
|
25
|
+
ticker.target = market_pair.target
|
26
|
+
ticker.market = Okex::Market::NAME
|
27
|
+
ticker.ask = NumericHelper.to_d(output['ticker']['sell'])
|
28
|
+
ticker.bid = NumericHelper.to_d(output['ticker']['buy'])
|
29
|
+
ticker.last = NumericHelper.to_d(output['ticker']['last'])
|
30
|
+
ticker.high = NumericHelper.to_d(output['ticker']['high'])
|
31
|
+
ticker.low = NumericHelper.to_d(output['ticker']['low'])
|
32
|
+
ticker.volume = NumericHelper.to_d(output['ticker']['vol'])
|
33
|
+
ticker.timestamp = output['date'].to_i
|
34
|
+
ticker.payload = output
|
35
|
+
ticker
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Okex
|
3
|
+
module Services
|
4
|
+
class OrderBook < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
"#{Cryptoexchange::Exchanges::Okex::Market::API_URL}/depth.do?symbol=#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def adapt(output, market_pair)
|
21
|
+
order_book = Cryptoexchange::Models::OrderBook.new
|
22
|
+
timestamp = Time.now.to_i
|
23
|
+
|
24
|
+
order_book.base = market_pair.base
|
25
|
+
order_book.target = market_pair.target
|
26
|
+
order_book.market = Okex::Market::NAME
|
27
|
+
order_book.asks = adapt_orders(output['asks'], timestamp)
|
28
|
+
order_book.bids = adapt_orders(output['bids'], timestamp)
|
29
|
+
order_book.timestamp = Time.now.to_i
|
30
|
+
order_book.payload = output
|
31
|
+
order_book
|
32
|
+
end
|
33
|
+
|
34
|
+
def adapt_orders(orders, timestamp)
|
35
|
+
orders.collect do |order_entry|
|
36
|
+
price = order_entry[0]
|
37
|
+
amount = order_entry[1]
|
38
|
+
Cryptoexchange::Models::Order.new(price: price,
|
39
|
+
amount: amount,
|
40
|
+
timestamp: timestamp)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Okex
|
3
|
+
module Services
|
4
|
+
class Pairs < Cryptoexchange::Services::Pairs
|
5
|
+
def fetch
|
6
|
+
output = super
|
7
|
+
adapt(output)
|
8
|
+
end
|
9
|
+
|
10
|
+
def adapt(output)
|
11
|
+
market_pairs = []
|
12
|
+
output.each do |pair|
|
13
|
+
market_pairs << Cryptoexchange::Models::MarketPair.new(
|
14
|
+
base: pair[:base],
|
15
|
+
target: pair[:target],
|
16
|
+
market: Okex::Market::NAME
|
17
|
+
)
|
18
|
+
end
|
19
|
+
market_pairs
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Okex
|
3
|
+
module Services
|
4
|
+
class Trades < Cryptoexchange::Services::Market
|
5
|
+
def fetch(market_pair)
|
6
|
+
output = super(ticker_url(market_pair))
|
7
|
+
adapt(output, market_pair)
|
8
|
+
end
|
9
|
+
|
10
|
+
def ticker_url(market_pair)
|
11
|
+
"#{Cryptoexchange::Exchanges::Okex::Market::API_URL}/trades.do?symbol=#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def adapt(output, market_pair)
|
15
|
+
output.collect do |trade|
|
16
|
+
tr = Cryptoexchange::Models::Trade.new
|
17
|
+
tr.trade_id = trade['tid']
|
18
|
+
tr.base = market_pair.base
|
19
|
+
tr.target = market_pair.target
|
20
|
+
tr.type = trade['type']
|
21
|
+
tr.price = trade['price']
|
22
|
+
tr.amount = trade['amount']
|
23
|
+
tr.timestamp = trade['date'].to_i
|
24
|
+
tr.payload = trade
|
25
|
+
tr.market = Okex::Market::NAME
|
26
|
+
tr
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Wex
|
3
|
+
module Services
|
4
|
+
class Market < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(market_pair, output)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
"#{Cryptoexchange::Exchanges::Wex::Market::API_URL}/ticker/#{symbol(market_pair)}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def symbol(market_pair)
|
21
|
+
"#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def adapt(market_pair, output)
|
25
|
+
data = output[symbol(market_pair)]
|
26
|
+
|
27
|
+
ticker = Cryptoexchange::Models::Ticker.new
|
28
|
+
ticker.base = market_pair.base
|
29
|
+
ticker.target = market_pair.target
|
30
|
+
ticker.market = Wex::Market::NAME
|
31
|
+
ticker.ask = NumericHelper.to_d(data['sell'])
|
32
|
+
ticker.bid = NumericHelper.to_d(data['buy'])
|
33
|
+
ticker.last = NumericHelper.to_d(data['last'])
|
34
|
+
ticker.high = NumericHelper.to_d(data['high'])
|
35
|
+
ticker.low = NumericHelper.to_d(data['low'])
|
36
|
+
ticker.volume = NumericHelper.to_d(data['vol_cur'])
|
37
|
+
ticker.timestamp = data['updated'].to_i
|
38
|
+
ticker.payload = output
|
39
|
+
ticker
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Wex
|
3
|
+
module Services
|
4
|
+
class OrderBook < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
"#{Cryptoexchange::Exchanges::Wex::Market::API_URL}/depth/#{symbol(market_pair)}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def symbol(market_pair)
|
21
|
+
"#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def adapt(output, market_pair)
|
25
|
+
data = output[symbol(market_pair)]
|
26
|
+
order_book = Cryptoexchange::Models::OrderBook.new
|
27
|
+
|
28
|
+
order_book.base = market_pair.base
|
29
|
+
order_book.target = market_pair.target
|
30
|
+
order_book.market = Wex::Market::NAME
|
31
|
+
order_book.asks = adapt_orders data['asks']
|
32
|
+
order_book.bids = adapt_orders data['bids']
|
33
|
+
order_book.timestamp = Time.now.to_i
|
34
|
+
order_book.payload = output
|
35
|
+
order_book
|
36
|
+
end
|
37
|
+
|
38
|
+
def adapt_orders(orders)
|
39
|
+
orders.collect do |order_entry|
|
40
|
+
price = order_entry[0]
|
41
|
+
amount = order_entry[1]
|
42
|
+
Cryptoexchange::Models::Order.new(price: price,
|
43
|
+
amount: amount,
|
44
|
+
timestamp: Time.now.to_i)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Wex
|
3
|
+
module Services
|
4
|
+
class Pairs < Cryptoexchange::Services::Pairs
|
5
|
+
PAIRS_URL = "#{Cryptoexchange::Exchanges::Wex::Market::API_URL}/info"
|
6
|
+
|
7
|
+
def fetch
|
8
|
+
output = super
|
9
|
+
adapt(output)
|
10
|
+
end
|
11
|
+
|
12
|
+
def adapt(output)
|
13
|
+
market_pairs = []
|
14
|
+
output['pairs'].each_key do |pair|
|
15
|
+
base, target = pair.split('_')
|
16
|
+
market_pairs << Cryptoexchange::Models::MarketPair.new(
|
17
|
+
base: base,
|
18
|
+
target: target,
|
19
|
+
market: Wex::Market::NAME
|
20
|
+
)
|
21
|
+
end
|
22
|
+
market_pairs
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Wex
|
3
|
+
module Services
|
4
|
+
class Trades < Cryptoexchange::Services::Market
|
5
|
+
def fetch(market_pair)
|
6
|
+
output = super(ticker_url(market_pair))
|
7
|
+
adapt(output, market_pair)
|
8
|
+
end
|
9
|
+
|
10
|
+
def ticker_url(market_pair)
|
11
|
+
"#{Cryptoexchange::Exchanges::Wex::Market::API_URL}/trades/#{symbol(market_pair)}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def symbol(market_pair)
|
15
|
+
"#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def adapt(output, market_pair)
|
19
|
+
data = output[symbol(market_pair)]
|
20
|
+
|
21
|
+
data.collect do |trade|
|
22
|
+
tr = Cryptoexchange::Models::Trade.new
|
23
|
+
tr.trade_id = trade['tid']
|
24
|
+
tr.base = market_pair.base
|
25
|
+
tr.target = market_pair.target
|
26
|
+
tr.type = trade['type']
|
27
|
+
tr.price = trade['price']
|
28
|
+
tr.amount = trade['amount']
|
29
|
+
tr.timestamp = trade[:timestamp].to_i
|
30
|
+
tr.payload = trade
|
31
|
+
tr.market = Wex::Market::NAME
|
32
|
+
tr
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Zaif
|
3
|
+
module Services
|
4
|
+
class Market < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(self.ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
"#{Cryptoexchange::Exchanges::Zaif::Market::API_URL}/ticker/#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def adapt(output, market_pair)
|
21
|
+
ticker = Cryptoexchange::Models::Ticker.new
|
22
|
+
ticker.base = market_pair.base
|
23
|
+
ticker.target = market_pair.target
|
24
|
+
ticker.market = Zaif::Market::NAME
|
25
|
+
ticker.last = NumericHelper.to_d(output['last'])
|
26
|
+
ticker.bid = NumericHelper.to_d(output['bid'])
|
27
|
+
ticker.ask = NumericHelper.to_d(output['ask'])
|
28
|
+
ticker.high = NumericHelper.to_d(output['high'])
|
29
|
+
ticker.low = NumericHelper.to_d(output['low'])
|
30
|
+
ticker.volume = NumericHelper.to_d(output['volume'])
|
31
|
+
ticker.timestamp = DateTime.now.to_time.to_i
|
32
|
+
ticker.payload = output
|
33
|
+
ticker
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Zaif
|
3
|
+
module Services
|
4
|
+
class OrderBook < Cryptoexchange::Services::Market
|
5
|
+
class << self
|
6
|
+
def supports_individual_ticker_query?
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch(market_pair)
|
12
|
+
output = super(ticker_url(market_pair))
|
13
|
+
adapt(output, market_pair)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ticker_url(market_pair)
|
17
|
+
"#{Cryptoexchange::Exchanges::Zaif::Market::API_URL}/depth/#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def adapt(output, market_pair)
|
21
|
+
order_book = Cryptoexchange::Models::OrderBook.new
|
22
|
+
|
23
|
+
order_book.base = market_pair.base
|
24
|
+
order_book.target = market_pair.target
|
25
|
+
order_book.market = Zaif::Market::NAME
|
26
|
+
order_book.asks = adapt_orders output['asks']
|
27
|
+
order_book.bids = adapt_orders output['bids']
|
28
|
+
order_book.timestamp = Time.now.to_i
|
29
|
+
order_book.payload = output
|
30
|
+
order_book
|
31
|
+
end
|
32
|
+
|
33
|
+
def adapt_orders(orders)
|
34
|
+
orders.collect do |order_entry|
|
35
|
+
price, amount = order_entry
|
36
|
+
Cryptoexchange::Models::Order.new(price: price,
|
37
|
+
amount: amount,
|
38
|
+
timestamp: nil)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Zaif
|
3
|
+
module Services
|
4
|
+
class Pairs < Cryptoexchange::Services::Pairs
|
5
|
+
PAIRS_URL = "#{Cryptoexchange::Exchanges::Zaif::Market::API_URL}/currency_pairs/all"
|
6
|
+
|
7
|
+
def fetch
|
8
|
+
output = super
|
9
|
+
adapt(output)
|
10
|
+
end
|
11
|
+
|
12
|
+
def adapt(output)
|
13
|
+
market_pairs = []
|
14
|
+
output.each do |pair|
|
15
|
+
market_pair = Cryptoexchange::Models::MarketPair.new
|
16
|
+
base, target = pair['currency_pair'].split('_')
|
17
|
+
market_pair.base = base
|
18
|
+
market_pair.target = target
|
19
|
+
market_pair.market = Zaif::Market::NAME
|
20
|
+
market_pairs << market_pair
|
21
|
+
end
|
22
|
+
market_pairs
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cryptoexchange::Exchanges
|
2
|
+
module Zaif
|
3
|
+
module Services
|
4
|
+
class Trades < Cryptoexchange::Services::Market
|
5
|
+
def fetch(market_pair)
|
6
|
+
output = super(ticker_url(market_pair))
|
7
|
+
adapt(output, market_pair)
|
8
|
+
end
|
9
|
+
|
10
|
+
def ticker_url(market_pair)
|
11
|
+
"#{Cryptoexchange::Exchanges::Zaif::Market::API_URL}/trades/#{market_pair.base.downcase}_#{market_pair.target.downcase}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def adapt(output, market_pair)
|
15
|
+
output.collect do |trade|
|
16
|
+
tr = Cryptoexchange::Models::Trade.new
|
17
|
+
tr.trade_id = trade['tid']
|
18
|
+
tr.base = market_pair.base
|
19
|
+
tr.target = market_pair.target
|
20
|
+
tr.type = trade['trade_type'] == 'bid' ? 'buy' : 'sell'
|
21
|
+
tr.price = trade['price']
|
22
|
+
tr.amount = trade['amount']
|
23
|
+
tr.timestamp = trade['date']
|
24
|
+
tr.payload = trade
|
25
|
+
tr.market = Zaif::Market::NAME
|
26
|
+
tr
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cryptoexchange
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TM Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -163,6 +163,11 @@ files:
|
|
163
163
|
- lib/cryptoexchange/exchanges/abucoins/services/order_book.rb
|
164
164
|
- lib/cryptoexchange/exchanges/abucoins/services/pairs.rb
|
165
165
|
- lib/cryptoexchange/exchanges/abucoins/services/trades.rb
|
166
|
+
- lib/cryptoexchange/exchanges/acx/market.rb
|
167
|
+
- lib/cryptoexchange/exchanges/acx/services/market.rb
|
168
|
+
- lib/cryptoexchange/exchanges/acx/services/order_book.rb
|
169
|
+
- lib/cryptoexchange/exchanges/acx/services/pairs.rb
|
170
|
+
- lib/cryptoexchange/exchanges/acx/services/trades.rb
|
166
171
|
- lib/cryptoexchange/exchanges/allcoin/allcoin.yml
|
167
172
|
- lib/cryptoexchange/exchanges/allcoin/market.rb
|
168
173
|
- lib/cryptoexchange/exchanges/allcoin/services/market.rb
|
@@ -209,7 +214,9 @@ files:
|
|
209
214
|
- lib/cryptoexchange/exchanges/bitstamp/bitstamp.yml
|
210
215
|
- lib/cryptoexchange/exchanges/bitstamp/market.rb
|
211
216
|
- lib/cryptoexchange/exchanges/bitstamp/services/market.rb
|
217
|
+
- lib/cryptoexchange/exchanges/bitstamp/services/order_book.rb
|
212
218
|
- lib/cryptoexchange/exchanges/bitstamp/services/pairs.rb
|
219
|
+
- lib/cryptoexchange/exchanges/bitstamp/services/trades.rb
|
213
220
|
- lib/cryptoexchange/exchanges/bittrex/market.rb
|
214
221
|
- lib/cryptoexchange/exchanges/bittrex/services/market.rb
|
215
222
|
- lib/cryptoexchange/exchanges/bittrex/services/pairs.rb
|
@@ -338,6 +345,12 @@ files:
|
|
338
345
|
- lib/cryptoexchange/exchanges/okcoin/okcoin.yml
|
339
346
|
- lib/cryptoexchange/exchanges/okcoin/services/market.rb
|
340
347
|
- lib/cryptoexchange/exchanges/okcoin/services/pairs.rb
|
348
|
+
- lib/cryptoexchange/exchanges/okex/market.rb
|
349
|
+
- lib/cryptoexchange/exchanges/okex/okex.yml
|
350
|
+
- lib/cryptoexchange/exchanges/okex/services/market.rb
|
351
|
+
- lib/cryptoexchange/exchanges/okex/services/order_book.rb
|
352
|
+
- lib/cryptoexchange/exchanges/okex/services/pairs.rb
|
353
|
+
- lib/cryptoexchange/exchanges/okex/services/trades.rb
|
341
354
|
- lib/cryptoexchange/exchanges/poloniex/market.rb
|
342
355
|
- lib/cryptoexchange/exchanges/poloniex/services/market.rb
|
343
356
|
- lib/cryptoexchange/exchanges/poloniex/services/pairs.rb
|
@@ -370,6 +383,11 @@ files:
|
|
370
383
|
- lib/cryptoexchange/exchanges/viabtc/services/market.rb
|
371
384
|
- lib/cryptoexchange/exchanges/viabtc/services/pairs.rb
|
372
385
|
- lib/cryptoexchange/exchanges/viabtc/viabtc.yml
|
386
|
+
- lib/cryptoexchange/exchanges/wex/market.rb
|
387
|
+
- lib/cryptoexchange/exchanges/wex/services/market.rb
|
388
|
+
- lib/cryptoexchange/exchanges/wex/services/order_book.rb
|
389
|
+
- lib/cryptoexchange/exchanges/wex/services/pairs.rb
|
390
|
+
- lib/cryptoexchange/exchanges/wex/services/trades.rb
|
373
391
|
- lib/cryptoexchange/exchanges/yobit/market.rb
|
374
392
|
- lib/cryptoexchange/exchanges/yobit/services/market.rb
|
375
393
|
- lib/cryptoexchange/exchanges/yobit/services/pairs.rb
|
@@ -380,6 +398,11 @@ files:
|
|
380
398
|
- lib/cryptoexchange/exchanges/yunbi/market.rb
|
381
399
|
- lib/cryptoexchange/exchanges/yunbi/services/market.rb
|
382
400
|
- lib/cryptoexchange/exchanges/yunbi/services/pairs.rb
|
401
|
+
- lib/cryptoexchange/exchanges/zaif/market.rb
|
402
|
+
- lib/cryptoexchange/exchanges/zaif/services/market.rb
|
403
|
+
- lib/cryptoexchange/exchanges/zaif/services/order_book.rb
|
404
|
+
- lib/cryptoexchange/exchanges/zaif/services/pairs.rb
|
405
|
+
- lib/cryptoexchange/exchanges/zaif/services/trades.rb
|
383
406
|
- lib/cryptoexchange/helpers/hash_helper.rb
|
384
407
|
- lib/cryptoexchange/helpers/numeric_helper.rb
|
385
408
|
- lib/cryptoexchange/helpers/string_helper.rb
|