okex 0.2.0 → 0.2.6

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: dae1478814bf6ccebb68aaf3bd52c3ac834148cb90b4b8e8f6427ccc811304eb
4
- data.tar.gz: 53bc2e5e42b90f1f60390273a82f98fa4caf19c07d238f38edac4bbf7a51a572
3
+ metadata.gz: 012c9b50e5c4dd3fb5522d0eef07764feb177c23a2aee07e1a847399fb7b7d68
4
+ data.tar.gz: 43f87e76c36c65bf9b81122392b36af8bee0f5125617b28ff2a6e2ae6a36196a
5
5
  SHA512:
6
- metadata.gz: 0afed6eb2d1e37d817e8f172d3713a1aec653a3eb70cab406523e5e7fc21aae803f0a64d16e11fa73440d34507c37303d2f33c7669ecc5218657546f322ce295
7
- data.tar.gz: 6bb22c3ce7cc7b3a739a975d7a7b3239edb5d2e5edb9bc5ea056229ca238ab806c25fc9c8703bedc8e969d28cea42c8119733ac603d11db359fcbad13e418594
6
+ metadata.gz: 84533cb2cc12b733a01c29a3f76274e1b179573fa0ad21e2588c87b04e76e9afdca18979c22056b4fa4c75fbec578e7fbb319e198721bedb9150e39e4f819f2a
7
+ data.tar.gz: 839673d67fed38b99dce0b5d5f31df562e56d9617c5e7c87cad1772136b616c60d457d6d9397427372bb0b6fd4168c9b035a8d74fb50b972c9bfc68e48defbce
data/Gemfile.lock CHANGED
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- okex (0.1.21)
4
+ okex (0.2.5)
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,11 @@ 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/account_order"
8
+ require "okex/trade_order"
9
+ require "okex/host"
10
+
8
11
 
9
12
  module OKEX
10
13
  class Error < StandardError; end
@@ -0,0 +1,4 @@
1
+ module OKEX
2
+ class AccountOrder < Order
3
+ end
4
+ end
data/lib/okex/api_v5.rb CHANGED
@@ -1,10 +1,31 @@
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")
9
+ end
10
+
11
+ def account_orders
12
+ resp = client.get(host, "/api/v5/account/positions")
13
+
14
+ if resp['success']
15
+ return resp['data'].map {|params| OKEX::AccountOrder.new(params)}
16
+ end
17
+
18
+ []
19
+ end
20
+
21
+ def trade_orders(instrument_id)
22
+ resp = client.get(host, "/api/v5/trade/order?instId=#{instrument_id}")
23
+
24
+ if resp['code'].to_i == 0 && resp['data'].size > 0
25
+ return resp['data'].map {|params| OKEX::TradeOrder.new(params)}
26
+ end
27
+
28
+ []
8
29
  end
9
30
 
10
31
  def short_swap(instid, amount)
@@ -17,28 +38,28 @@ class OKEX::ApiV5
17
38
  "sz": "1"
18
39
  }
19
40
 
20
- client.post("/api/v5/trade/order", params)
41
+ client.post(host, "/api/v5/trade/order", params)
21
42
  end
22
43
 
23
- def close_long(instid)
24
- close_position(instid, "long")
44
+ def close_long(instrument_id)
45
+ close_position(instrument_id, "long")
25
46
  end
26
47
 
27
- def close_short(instid)
28
- close_position(instid, "short")
48
+ def close_short(instrument_id)
49
+ close_position(instrument_id, "short")
29
50
  end
30
51
 
31
52
  private
32
53
 
33
- attr_reader :client
54
+ attr_reader :client, :host
34
55
 
35
- def close_position(instid, direction)
56
+ def close_position(instrument_id, direction)
36
57
  params = {
37
- "instId": instid,
58
+ "instId": instrument_id,
38
59
  "mgnMode": "cross",
39
60
  "posSide": direction
40
61
  }
41
62
 
42
- client.post("/api/v5/trade/close-position", params)
63
+ client.post(host, "/api/v5/trade/close-position", params)
43
64
  end
44
65
  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
data/lib/okex/order.rb ADDED
@@ -0,0 +1,80 @@
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 instrument_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
+ private
75
+
76
+ def dig(key)
77
+ @params[key]
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,24 @@
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
data/lib/okex/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OKEX
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.6"
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.0
4
+ version: 0.2.6
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-14 00:00:00.000000000 Z
11
+ date: 2021-07-24 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
@@ -85,11 +99,15 @@ files:
85
99
  - bin/console
86
100
  - bin/setup
87
101
  - lib/okex.rb
102
+ - lib/okex/account_order.rb
88
103
  - lib/okex/api_v3.rb
89
104
  - lib/okex/api_v5.rb
90
105
  - lib/okex/client.rb
91
106
  - lib/okex/coin.rb
92
107
  - lib/okex/coin/bitcoin.rb
108
+ - lib/okex/host.rb
109
+ - lib/okex/order.rb
110
+ - lib/okex/trade_order.rb
93
111
  - lib/okex/version.rb
94
112
  - okex.gemspec
95
113
  homepage: https://github.com/daqing/okex