watchcow 0.0.3 → 0.0.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 +4 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +0 -5
- data/lib/watchcow.rb +0 -1
- data/lib/watchcow/api_symbol.rb +1 -1
- data/lib/watchcow/client.rb +12 -89
- data/lib/watchcow/output.rb +10 -10
- data/lib/watchcow/rate.rb +15 -6
- data/lib/watchcow/version.rb +1 -1
- data/watchcow-0.0.3.gem +0 -0
- data/watchcow-0.0.4.gem +0 -0
- data/watchcow-0.0.5.gem +0 -0
- data/watchcow.gemspec +2 -2
- metadata +5 -43
- data/lib/notification_worker.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f68067affe43ba8f13442ef5d8d26bf2b5a4baf441baeabea15ca35caee8abcc
|
4
|
+
data.tar.gz: 724b3b7c74be7ec4f3a760372b264f66fc23e6c1c9784d206c20a1fcaccdbf4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c680b39a2544d5416edcde25deab194654b1cfe8d8ba2f7431712139032c9e4dd1c3ea2cbde691a72df0c1329d5dafcdca9baaaec61ce4e182cfce617c5e9d1
|
7
|
+
data.tar.gz: e0bf02ae041a6f187b37436525249ed7e786c0defa92e7de959d035cc9009176d4a4c99ef3144298880b3d15ab0dfcb9af30f6f63db103966d0d5f3d1a1cc55b
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -4,8 +4,6 @@ PATH
|
|
4
4
|
watchcow (0.0.1)
|
5
5
|
httparty (~> 0.14, >= 0.14.0)
|
6
6
|
pry-rails (~> 0.3.9)
|
7
|
-
redis (~> 3.3, >= 3.3.5)
|
8
|
-
sidekiq (~> 5.2, >= 5.2.9)
|
9
7
|
|
10
8
|
GEM
|
11
9
|
remote: https://rubygems.org/
|
@@ -30,7 +28,6 @@ GEM
|
|
30
28
|
rack-protection (2.0.4)
|
31
29
|
rack
|
32
30
|
rake (13.0.3)
|
33
|
-
redis (3.3.5)
|
34
31
|
rspec (3.10.0)
|
35
32
|
rspec-core (~> 3.10.0)
|
36
33
|
rspec-expectations (~> 3.10.0)
|
@@ -44,11 +41,9 @@ GEM
|
|
44
41
|
diff-lcs (>= 1.2.0, < 2.0)
|
45
42
|
rspec-support (~> 3.10.0)
|
46
43
|
rspec-support (3.10.2)
|
47
|
-
sidekiq (5.2.9)
|
48
44
|
connection_pool (~> 2.2, >= 2.2.2)
|
49
45
|
rack (~> 2.0)
|
50
46
|
rack-protection (>= 1.5.0)
|
51
|
-
redis (>= 3.3.5, < 4.2)
|
52
47
|
|
53
48
|
PLATFORMS
|
54
49
|
x86_64-darwin-17
|
data/lib/watchcow.rb
CHANGED
data/lib/watchcow/api_symbol.rb
CHANGED
data/lib/watchcow/client.rb
CHANGED
@@ -3,100 +3,23 @@ require 'watchcow/contract_info'
|
|
3
3
|
require 'watchcow/market_depth'
|
4
4
|
require 'active_support'
|
5
5
|
require 'watchcow/rate'
|
6
|
-
require 'watchcow/output'
|
7
|
-
|
8
|
-
$redis = Redis.new(url: ENV["REDIS_URL"] || "redis://localhost:6379/0")
|
9
6
|
|
10
7
|
module Watchcow
|
11
8
|
class Client
|
12
9
|
class << self
|
13
10
|
def call
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
puts "CQ"
|
27
|
-
cq_string = "#{coin}, #{best_margin}, #{days_remained}, #{expected_margin}, #{real_margin}"
|
28
|
-
puts cq_string
|
29
|
-
# NQ
|
30
|
-
coin = best_nq.dig(:coin)
|
31
|
-
best_margin = "annual margin: #{best_nq.dig(:margin)}%"
|
32
|
-
days_remained = "days remained: #{best_nq.dig(:days)}"
|
33
|
-
expected_margin = "expected margin: #{best_nq.dig(:expected_margin)}%"
|
34
|
-
real_margin = "landed margin: #{best_nq.dig(:real_margin_expected)}%"
|
35
|
-
puts "NQ"
|
36
|
-
nq_string = "#{coin}, #{best_margin}, #{days_remained}, #{expected_margin}, #{real_margin}"
|
37
|
-
puts nq_string
|
38
|
-
puts "---"
|
39
|
-
Watchcow::Output.call("<p>#{cq_string}</p><p>#{nq_string}</p>")
|
40
|
-
sleep(30)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
def mark! coin_offer
|
46
|
-
offer_margin = coin_offer.dig(:margin)
|
47
|
-
if better_than_best? offer_margin
|
48
|
-
key = Time.now.strftime('%m-%d')
|
49
|
-
set_redis coin_offer
|
50
|
-
if worth_notification?(offer_margin)
|
51
|
-
# TODO
|
52
|
-
# Trigger SMS notification
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def set_redis coin_offer
|
58
|
-
coin_info_str = "#{coin_offer.dig(:coin)}, #{coin_offer.dig(:margin)}, #{coin_offer.dig(:days)}, record at #{Time.now.strftime('%m-%d %H:%M')}"
|
59
|
-
coin_attr = {coin: coin_offer.dig(:coin), margin: coin_offer.dig(:margin), days: coin_offer.dig(:days), record_at: Time.now.strftime('%Y-%m-%d %H:%M')}
|
60
|
-
best_margin_of_day = $redis.get('margin_of_day')
|
61
|
-
if best_margin.blank? || two_hous_past?
|
62
|
-
$redis.set('offer', coin_info_str)
|
63
|
-
$redis.set('coin', coin_attr.to_json)
|
64
|
-
end
|
65
|
-
if best_margin_of_day.blank? || coin_offer.dig(:margin).to_f - best_margin_of_day.to_f > 1
|
66
|
-
$redis.set('margin_of_day', coin_offer.dig(:margin))
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def best_margin
|
71
|
-
key = $redis.get('margin_of_day')
|
72
|
-
if key.blank?
|
73
|
-
nil
|
74
|
-
else
|
75
|
-
key.to_f
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def better_than_best? offer_margin
|
80
|
-
return true if best_margin.blank?
|
81
|
-
return true if best_margin > 30 && offer_margin > best_margin
|
82
|
-
end
|
83
|
-
|
84
|
-
def worth_notification? offer_margin
|
85
|
-
return true if best_margin > 30 && (offer_margin - best_margin) > 2
|
86
|
-
end
|
87
|
-
|
88
|
-
def two_hous_past?
|
89
|
-
(Time.now - last_time_records).ceil / 3600 >= 2
|
90
|
-
end
|
91
|
-
|
92
|
-
def last_time_records
|
93
|
-
key = $redis.get('coin')
|
94
|
-
if key.blank?
|
95
|
-
puts "redis 'coin' nothing returns"
|
96
|
-
return nil
|
97
|
-
else
|
98
|
-
JSON.parse(key).dig('record_at').to_datetime
|
99
|
-
end
|
11
|
+
results = Watchcow::Rate.call
|
12
|
+
cq_list = results[:cq_list]
|
13
|
+
nq_list = results[:nq_list]
|
14
|
+
nw_list = results[:nw_list]
|
15
|
+
cw_list = results[:cw_list]
|
16
|
+
results = {
|
17
|
+
cq_list: cq_list,
|
18
|
+
nq_list: nq_list,
|
19
|
+
nw_list: nw_list,
|
20
|
+
cw_list: cw_list
|
21
|
+
}
|
22
|
+
results.to_json
|
100
23
|
end
|
101
24
|
end
|
102
25
|
end
|
data/lib/watchcow/output.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
module Watchcow
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
1
|
+
# module Watchcow
|
2
|
+
# class Output
|
3
|
+
# class << self
|
4
|
+
# def call text
|
5
|
+
# path = File.expand_path('~/', __FILE__)
|
6
|
+
# File.open("#{path}/info.html", 'w+'){|f| f.write(text)}
|
7
|
+
# end
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
# end
|
data/lib/watchcow/rate.rb
CHANGED
@@ -2,6 +2,12 @@ require 'active_support/core_ext'
|
|
2
2
|
|
3
3
|
module Watchcow
|
4
4
|
class Rate
|
5
|
+
KEYS = {
|
6
|
+
'cq' => 'quarter',
|
7
|
+
'nq' => 'next_quarter',
|
8
|
+
'nw' => 'next_week',
|
9
|
+
'cw' => 'this_week'
|
10
|
+
}
|
5
11
|
class << self
|
6
12
|
def call
|
7
13
|
results = []
|
@@ -9,7 +15,6 @@ module Watchcow
|
|
9
15
|
Watchcow::ApiSymbol.dm_types.each do |t|
|
10
16
|
dm_symbol = {symbol: "#{coin}_#{t}"}
|
11
17
|
spot_symbol = {symbol: "#{coin}usdt"}
|
12
|
-
|
13
18
|
begin
|
14
19
|
dm_result = Watchcow::MarketDepth.call(params: dm_symbol, k: :future)
|
15
20
|
# puts dm_symbol.dig(:symbol)
|
@@ -22,7 +27,6 @@ module Watchcow
|
|
22
27
|
days_remain = self.days_remain_of(coin, t)
|
23
28
|
dm_first_bid = dm_result.dig('tick', 'bids')[0][0].to_f
|
24
29
|
spot_first_bid = spot_result.dig('tick', 'bids')[0][0].to_f
|
25
|
-
|
26
30
|
margin_annual = (((dm_first_bid - spot_first_bid) / spot_first_bid) / days_remain * 365 * 100).round(6)
|
27
31
|
margin_expect = margin_annual / 365 * days_remain
|
28
32
|
|
@@ -40,17 +44,22 @@ module Watchcow
|
|
40
44
|
end
|
41
45
|
results_cq = results.select{|x| x[:coin].include?('cq')}
|
42
46
|
results_nq = results.select{|x| x[:coin].include?('nq')}
|
47
|
+
results_cw = results.select{|x| x[:coin].include?('cw')}
|
48
|
+
results_nw = results.select{|x| x[:coin].include?('nw')}
|
43
49
|
{
|
44
|
-
|
45
|
-
|
50
|
+
cq_list: results_cq.sort{|x,y| y[:expected_margin] <=> x[:expected_margin]},
|
51
|
+
nq_list: results_nq.sort{|x,y| y[:expected_margin] <=> x[:expected_margin]},
|
52
|
+
cw_list: results_cw.sort{|x,y| y[:expected_margin] <=> x[:expected_margin]},
|
53
|
+
nw_list: results_nw.sort{|x,y| y[:expected_margin] <=> x[:expected_margin]}
|
46
54
|
}
|
47
55
|
end
|
48
56
|
|
49
57
|
def days_remain_of symbol, t
|
50
58
|
@contract_info ||= Watchcow::ContractInfo.call
|
51
59
|
line = @contract_info.dig('data').select do |h|
|
52
|
-
mark = t == 'cq' ? 'quarter' : 'next_quarter'
|
53
|
-
h.dig('symbol') == symbol.upcase && h.dig('contract_type') == mark
|
60
|
+
# mark = t == 'cq' ? 'quarter' : 'next_quarter'
|
61
|
+
# h.dig('symbol') == symbol.upcase && h.dig('contract_type') == mark
|
62
|
+
h.dig('symbol') == symbol.upcase && h.dig('contract_type') == KEYS[t]
|
54
63
|
end.first
|
55
64
|
(line.dig("delivery_date").to_s.to_date - Time.now.to_date).to_i
|
56
65
|
end
|
data/lib/watchcow/version.rb
CHANGED
data/watchcow-0.0.3.gem
ADDED
Binary file
|
data/watchcow-0.0.4.gem
ADDED
Binary file
|
data/watchcow-0.0.5.gem
ADDED
Binary file
|
data/watchcow.gemspec
CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |spec|
|
|
29
29
|
# spec.add_dependency "example-gem", "~> 1.0"
|
30
30
|
|
31
31
|
spec.add_dependency "httparty", '~> 0.14', ">= 0.14.0"
|
32
|
-
spec.add_dependency "redis", '~> 3.3', ">= 3.3.5"
|
33
|
-
spec.add_dependency "sidekiq", '~> 5.2', ">= 5.2.9"
|
32
|
+
# spec.add_dependency "redis", '~> 3.3', ">= 3.3.5"
|
33
|
+
# spec.add_dependency "sidekiq", '~> 5.2', ">= 5.2.9"
|
34
34
|
spec.add_dependency "pry-rails", "~> 0.3.9"
|
35
35
|
|
36
36
|
# For more information and examples about making a new gem, checkout our
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watchcow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DrinE Liu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -30,46 +30,6 @@ dependencies:
|
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '0.14'
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: redis
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '3.3'
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 3.3.5
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '3.3'
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 3.3.5
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: sidekiq
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '5.2'
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 5.2.9
|
63
|
-
type: :runtime
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '5.2'
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 5.2.9
|
73
33
|
- !ruby/object:Gem::Dependency
|
74
34
|
name: pry-rails
|
75
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,7 +62,6 @@ files:
|
|
102
62
|
- Rakefile
|
103
63
|
- bin/console
|
104
64
|
- bin/setup
|
105
|
-
- lib/notification_worker.rb
|
106
65
|
- lib/watchcow.rb
|
107
66
|
- lib/watchcow/api_symbol.rb
|
108
67
|
- lib/watchcow/client.rb
|
@@ -112,6 +71,9 @@ files:
|
|
112
71
|
- lib/watchcow/rate.rb
|
113
72
|
- lib/watchcow/version.rb
|
114
73
|
- watchcow-0.0.2.gem
|
74
|
+
- watchcow-0.0.3.gem
|
75
|
+
- watchcow-0.0.4.gem
|
76
|
+
- watchcow-0.0.5.gem
|
115
77
|
- watchcow.gemspec
|
116
78
|
homepage: https://rubygems.org/gems
|
117
79
|
licenses:
|