okex 0.2.1 → 0.2.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a607b5cc12603ee0523d5c79d24ca3777e17b5809f0a2d1f46835bcf855fadb
4
- data.tar.gz: 1443cf42904c1567069f4aefa505b3470cb996d9c4586c10a0aacb49b2f7c82d
3
+ metadata.gz: 9d0150ce45ec59cd9ded8310ef2d1346c4dc4bac69d2c90fc676ef12edc4b50c
4
+ data.tar.gz: 96b70fdc8c95ee1cd3e0ff980a93c7bbb0b97e1a8917f98a4f471072f8ccbb39
5
5
  SHA512:
6
- metadata.gz: 6f1ea6535eeffa3f2dbe6e35b7b44ccd753820f51478f3ba882a854efe9e73bbf4424586d1b881679cbd8db84cd5c8f1a87d7f906d7f6fdfe9d6c78d24152a2b
7
- data.tar.gz: 9b9dc428f69094870b41cf4fe9b6a77cffdfbf979dbf04e0b72ea471e000d078d3999d06d2b1ed4a573c6485d75c7c7441911434e0a9a191e61f22703e8dcad1
6
+ metadata.gz: 6ca66d2608fcea9ed02dc4881b113650e22b262478bce2a885383dcb96dda5818f59f61340c8f87613eefa49b3e8d86f95677bb34a75245395178e41d3156746
7
+ data.tar.gz: 8f1a140fffe151688a64304a41ff5162f085fdc5bb4bb61daabef30c3a276946863e574242e26c277f07f79d53e7f4cdf9f86287dd7c661c68eaf90315aa220b
data/Gemfile.lock CHANGED
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- okex (0.2.1)
4
+ okex (0.2.7)
5
5
  faraday (~> 1.5)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ byebug (11.1.3)
10
11
  diff-lcs (1.4.4)
11
12
  faraday (1.5.0)
12
13
  faraday-em_http (~> 1.0)
@@ -47,6 +48,7 @@ PLATFORMS
47
48
 
48
49
  DEPENDENCIES
49
50
  bundler (~> 1.17)
51
+ byebug (~> 11.1)
50
52
  okex!
51
53
  rake (~> 10.0)
52
54
  rspec (~> 3.0)
data/lib/okex.rb CHANGED
@@ -3,8 +3,10 @@ require "okex/api_v3"
3
3
  require "okex/api_v5"
4
4
  require "okex/client"
5
5
  require "okex/coin"
6
- require "openssl"
7
- require "faraday"
6
+ require "okex/order"
7
+ require "okex/host"
8
+ require "okex/max_size"
9
+
8
10
 
9
11
  module OKEX
10
12
  class Error < StandardError; end
data/lib/okex/api_v5.rb CHANGED
@@ -1,14 +1,26 @@
1
1
  class OKEX::ApiV5
2
- def initialize(client)
2
+ def initialize(client, host)
3
3
  @client = client
4
+ @host = host
4
5
  end
5
6
 
6
7
  def instruments
7
- client.get("/api/v5/public/instruments")
8
+ client.get(host, "/api/v5/public/instruments?instType=SWAP")
8
9
  end
9
10
 
10
- def orders
11
- client.get("/api/v5/account/positions")
11
+ def orders(inst_id=nil)
12
+ url = "/api/v5/account/positions"
13
+ if inst_id.present?
14
+ url += "?instId=#{inst_id}"
15
+ end
16
+
17
+ resp = client.get(host, url)
18
+
19
+ if resp['success']
20
+ return resp['data'].map {|params| OKEX::Order.new(params)}
21
+ end
22
+
23
+ []
12
24
  end
13
25
 
14
26
  def short_swap(instid, amount)
@@ -21,28 +33,42 @@ class OKEX::ApiV5
21
33
  "sz": "1"
22
34
  }
23
35
 
24
- client.post("/api/v5/trade/order", params)
36
+ client.post(host, "/api/v5/trade/order", params)
25
37
  end
26
38
 
27
- def close_long(instid)
28
- close_position(instid, "long")
39
+ def close_long(instrument_id)
40
+ close_position(instrument_id, "long")
29
41
  end
30
42
 
31
- def close_short(instid)
32
- close_position(instid, "short")
43
+ def close_short(instrument_id)
44
+ close_position(instrument_id, "short")
45
+ end
46
+
47
+ def max_size(instrument_id)
48
+ result = client.get(host, "/api/v5/account/max-size?instId=#{instrument_id}&tdMode=cross")
49
+
50
+ ret = OKEX::MaxSize.new(-1, -1)
51
+ if result['success']
52
+ el = result['data'][0]
53
+ if el.present? && el['maxBuy'].to_i > 0 && el['maxSell'].to_i > 0
54
+ ret = OKEX::MaxSize.new(el['maxBuy'].to_i, el['maxSell'].to_i)
55
+ end
56
+ end
57
+
58
+ ret
33
59
  end
34
60
 
35
61
  private
36
62
 
37
- attr_reader :client
63
+ attr_reader :client, :host
38
64
 
39
- def close_position(instid, direction)
65
+ def close_position(instrument_id, direction)
40
66
  params = {
41
- "instId": instid,
67
+ "instId": instrument_id,
42
68
  "mgnMode": "cross",
43
69
  "posSide": direction
44
70
  }
45
71
 
46
- client.post("/api/v5/trade/close-position", params)
72
+ client.post(host, "/api/v5/trade/close-position", params)
47
73
  end
48
74
  end
data/lib/okex/client.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require 'time'
2
+ require 'base64'
3
+ require 'json'
4
+ require 'faraday'
2
5
 
3
6
  module OKEX
4
7
  class Client
@@ -8,34 +11,26 @@ module OKEX
8
11
  @passphrase = passphrase
9
12
  end
10
13
 
11
- def get(path)
14
+ def get(host, path)
12
15
  ts = timestamp
13
16
  sig = sign(ts, "GET", path)
14
17
 
15
- _resp(::Faraday.get(HOST + path, nil, headers(ts, sig)))
18
+ _resp(Faraday.get(host + path, nil, headers(ts, sig)))
16
19
  end
17
20
 
18
- def post(path, payload)
21
+ def post(host, path, payload)
19
22
  payload_json = gen_payload(payload)
20
23
 
21
24
  ts = timestamp
22
25
  sig = sign(ts, "POST", path + payload_json)
23
26
 
24
- begin
25
- conn = ::Faraday.new(HOST + path, :ssl => {:verify => false})
26
- result = conn.post(HOST + path, payload_json, headers(ts, sig))
27
- _resp(result)
28
- rescue => e
29
- puts "[error] #{e.inspect}"
30
- end
27
+ _resp(Faraday.post(host + path, payload_json, headers(ts, sig)))
31
28
  end
32
29
 
33
30
  private
34
31
 
35
32
  attr_reader :api_key, :api_secret, :passphrase
36
33
 
37
- HOST = "https://www.okex.com"
38
-
39
34
  def gen_payload(payload)
40
35
  m = payload.map { |k, v| JSON.generate({k => v}, {space: ' '})}
41
36
  m2 = m.join(", ").gsub("{", "").gsub("}", "")
@@ -65,7 +60,14 @@ module OKEX
65
60
  end
66
61
 
67
62
  def _resp(result)
68
- JSON.parse(result.body)
63
+ result = JSON.parse(result.body)
64
+
65
+ code = result['code'].to_i
66
+ if code == 0 && result['msg'].empty?
67
+ return {'success' => true, 'data' => result['data']}
68
+ else
69
+ return {'success' => false, 'code' => code, 'msg' => result['msg']}
70
+ end
69
71
  end
70
72
  end
71
73
  end
data/lib/okex/host.rb ADDED
@@ -0,0 +1,12 @@
1
+ class OKEX::Host
2
+ OUYI_HOST = "https://www.ouyi.cc".freeze
3
+ OKEX_HOST = "https://www.okex.com".freeze
4
+
5
+ def self.ouyi
6
+ OUYI_HOST
7
+ end
8
+
9
+ def self.okex
10
+ OKEX_HOST
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ class OKEX::MaxSize < Struct.new(:buy, :sell)
2
+ def
3
+ end
data/lib/okex/order.rb ADDED
@@ -0,0 +1,90 @@
1
+ module OKEX
2
+ class Order
3
+ POS_LONG = 'long'.freeze
4
+ POS_SHORT = 'short'.freeze
5
+
6
+ def initialize(params)
7
+ @params = params
8
+ end
9
+
10
+ def inst_id
11
+ dig("instId")
12
+ end
13
+
14
+ # 杠杆倍数
15
+ def leverage
16
+ dig("lever")
17
+ end
18
+
19
+ def created_at
20
+ Time.at(dig("cTime").to_i / 1000)
21
+ end
22
+
23
+ # 平均开仓价
24
+ def avg_open_price
25
+ dig("avgPx").to_f
26
+ end
27
+
28
+ # 预估强平价
29
+ def est_liq_price
30
+ dig("liqPx").to_f
31
+ end
32
+
33
+ # 最新成交价
34
+ def last_price
35
+ dig("last").to_f
36
+ end
37
+
38
+ # 持仓方向
39
+ def position_side
40
+ side = dig("posSide")
41
+ if [POS_SHORT, POS_LONG].include?(side)
42
+ return side
43
+ end
44
+ end
45
+
46
+ def long?
47
+ position_side == POS_LONG
48
+ end
49
+
50
+ def short?
51
+ position_side == POS_SHORT
52
+ end
53
+
54
+ # 开仓方向名称
55
+ def position_name
56
+ case position_side
57
+ when POS_SHORT
58
+ '空'
59
+ when POS_LONG
60
+ '多'
61
+ end
62
+ end
63
+
64
+ # 未实现收益
65
+ def upl
66
+ dig("upl").to_f
67
+ end
68
+
69
+ # 持仓张数
70
+ def pos
71
+ dig("pos").to_i
72
+ end
73
+
74
+ # 是否正在持仓
75
+ def open?
76
+ pos > 0
77
+ end
78
+
79
+ # 已经平仓
80
+ def closed?
81
+ pos == 0
82
+ end
83
+
84
+ private
85
+
86
+ def dig(key)
87
+ @params[key]
88
+ end
89
+ end
90
+ end
data/lib/okex/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OKEX
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.8"
3
3
  end
data/okex.gemspec CHANGED
@@ -38,6 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_development_dependency "bundler", "~> 1.17"
39
39
  spec.add_development_dependency "rake", "~> 10.0"
40
40
  spec.add_development_dependency "rspec", "~> 3.0"
41
+ spec.add_development_dependency "byebug", "~> 11.1"
41
42
 
42
43
  spec.add_runtime_dependency "faraday", "~> 1.5"
43
44
  end
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.1
4
+ version: 0.2.8
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-22 00:00:00.000000000 Z
11
+ date: 2021-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '11.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '11.1'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: faraday
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -90,6 +104,9 @@ files:
90
104
  - lib/okex/client.rb
91
105
  - lib/okex/coin.rb
92
106
  - lib/okex/coin/bitcoin.rb
107
+ - lib/okex/host.rb
108
+ - lib/okex/max_size.rb
109
+ - lib/okex/order.rb
93
110
  - lib/okex/version.rb
94
111
  - okex.gemspec
95
112
  homepage: https://github.com/daqing/okex