okex 0.2.1 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
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