okex 0.2.6 → 0.3.2
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/Gemfile.lock +4 -4
- data/README.md +2 -1
- data/lib/okex.rb +6 -3
- data/lib/okex/api_error.rb +13 -0
- data/lib/okex/api_v5.rb +71 -14
- data/lib/okex/balance.rb +2 -0
- data/lib/okex/client.rb +13 -5
- data/lib/okex/coin/usdt.rb +11 -0
- data/lib/okex/max_size.rb +2 -0
- data/lib/okex/order.rb +12 -1
- data/lib/okex/version.rb +1 -1
- metadata +6 -4
- data/lib/okex/account_order.rb +0 -4
- data/lib/okex/trade_order.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30adc1b436dc4b0e5d299b64567da2e425c83d8b631c8e73d5c5cf116e3d45aa
|
4
|
+
data.tar.gz: 756dd71409995a737c20a5acf06b9c4478b1e91735ef1ab34345a8b3aef9051f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aae50477ae52399c19a0f14944a97e8d08182e196e34c436ebbb03c344807acf144e433834ce5894e4d0b36e7e9dba9f396d67ff40ae01c0741427d9e3442c47
|
7
|
+
data.tar.gz: 307e1223e5e804412cb7d4ec770edebcee1ba25b65bd46e38b5bd92fc6a95729a22cd39dec8eae1034d91b748482ea834107d8f3a766178f97bafc8155fc56a6
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
okex (0.
|
4
|
+
okex (0.3.1)
|
5
5
|
faraday (~> 1.5)
|
6
6
|
|
7
7
|
GEM
|
@@ -9,7 +9,7 @@ GEM
|
|
9
9
|
specs:
|
10
10
|
byebug (11.1.3)
|
11
11
|
diff-lcs (1.4.4)
|
12
|
-
faraday (1.5.
|
12
|
+
faraday (1.5.1)
|
13
13
|
faraday-em_http (~> 1.0)
|
14
14
|
faraday-em_synchrony (~> 1.0)
|
15
15
|
faraday-excon (~> 1.1)
|
@@ -24,7 +24,7 @@ GEM
|
|
24
24
|
faraday-excon (1.1.0)
|
25
25
|
faraday-httpclient (1.0.1)
|
26
26
|
faraday-net_http (1.0.1)
|
27
|
-
faraday-net_http_persistent (1.
|
27
|
+
faraday-net_http_persistent (1.2.0)
|
28
28
|
faraday-patron (1.0.0)
|
29
29
|
multipart-post (2.1.1)
|
30
30
|
rake (10.5.0)
|
@@ -41,7 +41,7 @@ GEM
|
|
41
41
|
diff-lcs (>= 1.2.0, < 2.0)
|
42
42
|
rspec-support (~> 3.10.0)
|
43
43
|
rspec-support (3.10.2)
|
44
|
-
ruby2_keywords (0.0.
|
44
|
+
ruby2_keywords (0.0.5)
|
45
45
|
|
46
46
|
PLATFORMS
|
47
47
|
ruby
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# okex
|
2
2
|
|
3
|
-
This is the
|
3
|
+
This is the V5 API ruby lib for okex.com
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -20,6 +20,7 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
+
Set `OKEX_DEBUG` environment flag to 1 to print debug messages.
|
23
24
|
|
24
25
|
## Development
|
25
26
|
|
data/lib/okex.rb
CHANGED
@@ -2,11 +2,14 @@ require "okex/version"
|
|
2
2
|
require "okex/api_v3"
|
3
3
|
require "okex/api_v5"
|
4
4
|
require "okex/client"
|
5
|
-
require "okex/coin"
|
5
|
+
require "okex/coin/bitcoin"
|
6
|
+
require "okex/coin/usdt"
|
6
7
|
require "okex/order"
|
7
|
-
require "okex/account_order"
|
8
|
-
require "okex/trade_order"
|
9
8
|
require "okex/host"
|
9
|
+
require "okex/max_size"
|
10
|
+
require "okex/api_error"
|
11
|
+
require "okex/balance"
|
12
|
+
|
10
13
|
|
11
14
|
|
12
15
|
module OKEX
|
data/lib/okex/api_v5.rb
CHANGED
@@ -8,24 +8,42 @@ class OKEX::ApiV5
|
|
8
8
|
client.get(host, "/api/v5/public/instruments?instType=SWAP")
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
return resp['data'].map {|params| OKEX::AccountOrder.new(params)}
|
11
|
+
def orders(inst_id=nil)
|
12
|
+
url = "/api/v5/account/positions"
|
13
|
+
if inst_id.present?
|
14
|
+
url += "?instId=#{inst_id}"
|
16
15
|
end
|
17
16
|
|
18
|
-
|
17
|
+
data = client.get(host, url)
|
18
|
+
|
19
|
+
data.map {|params| OKEX::Order.new(params)}
|
19
20
|
end
|
20
21
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
def balance(ccy, round)
|
23
|
+
data = client.get(host, "/api/v5/account/balance?ccy=#{ccy}")
|
24
|
+
|
25
|
+
details = data[0]['details'][0]
|
26
|
+
|
27
|
+
OKEX::Balance.new(
|
28
|
+
details['ccy'],
|
29
|
+
dig_round(details, 'cashBal', round),
|
30
|
+
dig_round(details, 'avalEq', round),
|
31
|
+
dig_round(details, 'frozenBal', round),
|
32
|
+
dig_round(details, 'upl', round)
|
33
|
+
)
|
34
|
+
end
|
27
35
|
|
28
|
-
|
36
|
+
def long_swap(instid, amount)
|
37
|
+
params = {
|
38
|
+
"instId": instid,
|
39
|
+
"tdMode": "cross",
|
40
|
+
"side": "buy",
|
41
|
+
"posSide": "long",
|
42
|
+
"ordType": "market",
|
43
|
+
"sz": amount.to_s,
|
44
|
+
}
|
45
|
+
|
46
|
+
client.post(host, "/api/v5/trade/order", params)
|
29
47
|
end
|
30
48
|
|
31
49
|
def short_swap(instid, amount)
|
@@ -35,12 +53,28 @@ class OKEX::ApiV5
|
|
35
53
|
"side": "sell",
|
36
54
|
"posSide": "short",
|
37
55
|
"ordType": "market",
|
38
|
-
"sz":
|
56
|
+
"sz": amount.to_s,
|
39
57
|
}
|
40
58
|
|
41
59
|
client.post(host, "/api/v5/trade/order", params)
|
42
60
|
end
|
43
61
|
|
62
|
+
# # 开多带止损
|
63
|
+
# def long_swap_stop(instid, amount, stop_price)
|
64
|
+
# params = {
|
65
|
+
# "instId": instid,
|
66
|
+
# "tdMode": "cross",
|
67
|
+
# "side": "buy",
|
68
|
+
# "posSide": "long",
|
69
|
+
# "ordType": "conditional",
|
70
|
+
# "sz": amount.to_s,
|
71
|
+
# "slTriggerPx": stop_price.to_s,
|
72
|
+
# "slOrdPx": "-1", # 执行市价止损
|
73
|
+
# }
|
74
|
+
|
75
|
+
# client.post(host, "/api/v5/trade/order-algo", params)
|
76
|
+
# end
|
77
|
+
|
44
78
|
def close_long(instrument_id)
|
45
79
|
close_position(instrument_id, "long")
|
46
80
|
end
|
@@ -49,6 +83,25 @@ class OKEX::ApiV5
|
|
49
83
|
close_position(instrument_id, "short")
|
50
84
|
end
|
51
85
|
|
86
|
+
def max_size(instrument_id)
|
87
|
+
data = client.get(host, "/api/v5/account/max-size?instId=#{instrument_id}&tdMode=cross")
|
88
|
+
|
89
|
+
ret = OKEX::MaxSize.new(-1, -1)
|
90
|
+
|
91
|
+
el = data[0]
|
92
|
+
if el.present? && el['maxBuy'].to_i > 0 && el['maxSell'].to_i > 0
|
93
|
+
ret = OKEX::MaxSize.new(el['maxBuy'].to_i, el['maxSell'].to_i)
|
94
|
+
end
|
95
|
+
|
96
|
+
ret
|
97
|
+
end
|
98
|
+
|
99
|
+
def current_leverage(inst_id)
|
100
|
+
data = client.get(host, "/api/v5/account/leverage-info?instId=#{inst_id}&mgnMode=cross")
|
101
|
+
|
102
|
+
data[0]['lever'].to_i
|
103
|
+
end
|
104
|
+
|
52
105
|
private
|
53
106
|
|
54
107
|
attr_reader :client, :host
|
@@ -62,4 +115,8 @@ class OKEX::ApiV5
|
|
62
115
|
|
63
116
|
client.post(host, "/api/v5/trade/close-position", params)
|
64
117
|
end
|
118
|
+
|
119
|
+
def dig_round(obj, key, round)
|
120
|
+
obj[key].to_f.round(round)
|
121
|
+
end
|
65
122
|
end
|
data/lib/okex/balance.rb
ADDED
data/lib/okex/client.rb
CHANGED
@@ -12,19 +12,27 @@ module OKEX
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def get(host, path)
|
15
|
+
url = host + path
|
15
16
|
ts = timestamp
|
16
17
|
sig = sign(ts, "GET", path)
|
18
|
+
_h = headers(ts, sig)
|
17
19
|
|
18
|
-
|
20
|
+
puts "---> GET: url=#{url}, headers=#{_h}" if ENV['OKEX_DEBUG'].to_i > 0
|
21
|
+
|
22
|
+
_resp(Faraday.get(url, nil, _h))
|
19
23
|
end
|
20
24
|
|
21
25
|
def post(host, path, payload)
|
22
26
|
payload_json = gen_payload(payload)
|
23
27
|
|
28
|
+
url = host + path
|
24
29
|
ts = timestamp
|
25
30
|
sig = sign(ts, "POST", path + payload_json)
|
31
|
+
_h = headers(ts, sig)
|
32
|
+
|
33
|
+
puts "---> POST: url=#{url}, payload=#{payload_json}, headers=#{_h}" if ENV['OKEX_DEBUG'].to_i > 0
|
26
34
|
|
27
|
-
_resp(Faraday.post(
|
35
|
+
_resp(Faraday.post(url, payload_json, _h))
|
28
36
|
end
|
29
37
|
|
30
38
|
private
|
@@ -64,10 +72,10 @@ module OKEX
|
|
64
72
|
|
65
73
|
code = result['code'].to_i
|
66
74
|
if code == 0 && result['msg'].empty?
|
67
|
-
return
|
68
|
-
else
|
69
|
-
return {'success' => false, 'code' => code, 'msg' => result['msg']}
|
75
|
+
return result['data']
|
70
76
|
end
|
77
|
+
|
78
|
+
raise OKEX::ApiError.new(code, result['data'], result['msg'])
|
71
79
|
end
|
72
80
|
end
|
73
81
|
end
|
data/lib/okex/order.rb
CHANGED
@@ -7,7 +7,8 @@ module OKEX
|
|
7
7
|
@params = params
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
# 合约名称,例如 BTC-USDT-SWAP
|
11
|
+
def inst_id
|
11
12
|
dig("instId")
|
12
13
|
end
|
13
14
|
|
@@ -71,6 +72,16 @@ module OKEX
|
|
71
72
|
dig("pos").to_i
|
72
73
|
end
|
73
74
|
|
75
|
+
# 是否正在持仓
|
76
|
+
def open?
|
77
|
+
pos > 0
|
78
|
+
end
|
79
|
+
|
80
|
+
# 已经平仓
|
81
|
+
def closed?
|
82
|
+
pos == 0
|
83
|
+
end
|
84
|
+
|
74
85
|
private
|
75
86
|
|
76
87
|
def dig(key)
|
data/lib/okex/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: okex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Zhang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -99,15 +99,17 @@ files:
|
|
99
99
|
- bin/console
|
100
100
|
- bin/setup
|
101
101
|
- lib/okex.rb
|
102
|
-
- lib/okex/
|
102
|
+
- lib/okex/api_error.rb
|
103
103
|
- lib/okex/api_v3.rb
|
104
104
|
- lib/okex/api_v5.rb
|
105
|
+
- lib/okex/balance.rb
|
105
106
|
- lib/okex/client.rb
|
106
107
|
- lib/okex/coin.rb
|
107
108
|
- lib/okex/coin/bitcoin.rb
|
109
|
+
- lib/okex/coin/usdt.rb
|
108
110
|
- lib/okex/host.rb
|
111
|
+
- lib/okex/max_size.rb
|
109
112
|
- lib/okex/order.rb
|
110
|
-
- lib/okex/trade_order.rb
|
111
113
|
- lib/okex/version.rb
|
112
114
|
- okex.gemspec
|
113
115
|
homepage: https://github.com/daqing/okex
|
data/lib/okex/account_order.rb
DELETED
data/lib/okex/trade_order.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
module OKEX
|
2
|
-
class TradeOrder < Order
|
3
|
-
|
4
|
-
# 预估强平价
|
5
|
-
def est_liq_price
|
6
|
-
dig("liqPx").to_f
|
7
|
-
end
|
8
|
-
|
9
|
-
# 最新成交价
|
10
|
-
def last_price
|
11
|
-
dig("fillPx").to_f
|
12
|
-
end
|
13
|
-
|
14
|
-
# 未实现收益
|
15
|
-
def upl
|
16
|
-
dig("pnl").to_f
|
17
|
-
end
|
18
|
-
|
19
|
-
# 持仓张数
|
20
|
-
def pos
|
21
|
-
dig("sz").to_i
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|