cotcube-bardata 0.1.16 → 0.1.17
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/CHANGELOG.md +6 -0
- data/VERSION +1 -1
- data/bin/daily.rb +73 -0
- data/bin/eod.rb +12 -2
- data/bin/intra.rb +75 -0
- data/bin/sym.rb +16 -0
- data/bin/symbols.rb +11 -0
- data/lib/cotcube-bardata/daily.rb +2 -2
- data/lib/cotcube-bardata/eods.rb +4 -2
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bb98a590c08cbd0dafba80850aab164befd778fb6425e67e304a7fc909f9411
|
4
|
+
data.tar.gz: cc3ec5166d4610605c0afd14c16f07798e092c537c82b2ed19d9a3326c10b642
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a85816eefa18b6b72d98c9f6642881784678a99d1b4e402129bdcbe613ee0827ffd389bf996da31408306bf6a2f3ba8fe3cbd992b462460362b935d3e24dde2
|
7
|
+
data.tar.gz: 0f227bf5199375e04cda8382787170e2654689278eb93ac59f0573523030aecde9771f9a035a1b321f626e500a040ab01c5a35199ea54a63293adbf97357f2a0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.1.17 (December 06, 2021)
|
2
|
+
- changed parameter for building of continuous (in daily.rb)
|
3
|
+
- added bin/intra + symbols. improved bin/daily
|
4
|
+
- bin/*: created (sym, daily) and improved (eod) cmd wrappers
|
5
|
+
- daily.rb: improved silence in .continuous
|
6
|
+
|
1
7
|
## 0.1.16 (November 23, 2021)
|
2
8
|
- bin/eod.rb: little helper to display eod data in bash resp. in xinetdhttpservice
|
3
9
|
- eods.rb: minor change to adapt move of symbols to Helpers
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.17
|
data/bin/daily.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/cotcube-bardata'
|
4
|
+
require 'cotcube-level'
|
5
|
+
require 'cotcube-indicators'
|
6
|
+
CcI = Cotcube::Indicators
|
7
|
+
|
8
|
+
def exit_with_error(err)
|
9
|
+
msg = { error: 1, message: "#{err}" }
|
10
|
+
p msg.to_json
|
11
|
+
exit 1
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
contract = ARGV[0].nil? ? nil : ARGV[0].upcase
|
16
|
+
if contract.nil?
|
17
|
+
exit_with_error('No contract given')
|
18
|
+
end
|
19
|
+
|
20
|
+
output = true
|
21
|
+
|
22
|
+
sym = Cotcube::Helpers.get_id_set(symbol: contract[..1])
|
23
|
+
# TODO: apply daylight time pimped diff to all relevant datetimes in series
|
24
|
+
timediff = if %w[ NYBOT NYMEX ].include? sym[:exchange]
|
25
|
+
5.hours
|
26
|
+
elsif %w[ DTB ].include? sym[:exchane]
|
27
|
+
1.hour
|
28
|
+
else
|
29
|
+
6.hours
|
30
|
+
end
|
31
|
+
|
32
|
+
continuous = %w[currencies interest indices].include? sym[:type]
|
33
|
+
intraday = false
|
34
|
+
interval = intraday ? 30.minutes : 1.day
|
35
|
+
ema_period = 50
|
36
|
+
|
37
|
+
indicators = {
|
38
|
+
ema_high: CcI.ema(key: :high, length: ema_period, smoothing: 2),
|
39
|
+
ema_low: CcI.ema(key: :low, length: ema_period, smoothing: 2)
|
40
|
+
}
|
41
|
+
|
42
|
+
dailybase = []
|
43
|
+
stencil = nil
|
44
|
+
stencil = Cotcube::Level::EOD_Stencil.new( interval: :daily, swap_type: :full)
|
45
|
+
dailybase = if continuous
|
46
|
+
Cotcube::Bardata.continuous(symbol: contract[..1], indicators: indicators)[-300..].
|
47
|
+
map{ |z|
|
48
|
+
z[:datetime] = DateTime.parse(z[:date])
|
49
|
+
z.delete(:contracts)
|
50
|
+
z
|
51
|
+
}
|
52
|
+
else
|
53
|
+
Cotcube::Bardata.provide_daily(contract: contract, indicators: indicators)[-300..]
|
54
|
+
end
|
55
|
+
|
56
|
+
base = dailybase
|
57
|
+
base.select!{|z| z[:high]}
|
58
|
+
|
59
|
+
scaleBreaks = []
|
60
|
+
brb = stencil.base
|
61
|
+
brb.each_with_index.map{|z,i|
|
62
|
+
next if i.zero?
|
63
|
+
if brb[i][:datetime] - brb[i-1][:datetime] > (intraday ? 1 : 1.day) and brb[i][:datetime] > base.first[:datetime] and brb[i-1][:datetime] < base.last[:datetime]
|
64
|
+
scaleBreaks << { startValue: brb[i-1][:datetime] + 0.5 * interval, endValue: brb[i][:datetime] - 0.5 * interval }
|
65
|
+
end
|
66
|
+
} unless base.empty?
|
67
|
+
|
68
|
+
pkg = {
|
69
|
+
base: base,
|
70
|
+
breaks: scaleBreaks
|
71
|
+
}
|
72
|
+
|
73
|
+
puts pkg.to_json if output
|
data/bin/eod.rb
CHANGED
@@ -3,6 +3,16 @@
|
|
3
3
|
require_relative '../lib/cotcube-bardata.rb'
|
4
4
|
|
5
5
|
symbol = ARGV[0].nil? ? nil : ARGV[0].upcase
|
6
|
+
json = ARGV.include? 'json'
|
6
7
|
|
7
|
-
|
8
|
-
s.
|
8
|
+
begin
|
9
|
+
s = Cotcube::Bardata.provide_eods(threshold: 0.10, contracts_only: false, symbol: symbol, filter: :oi_part)
|
10
|
+
if json
|
11
|
+
p s.to_json
|
12
|
+
else
|
13
|
+
s.each {|x| puts x.values.to_csv}
|
14
|
+
end
|
15
|
+
rescue
|
16
|
+
msg = { error: 503, message: "Could not processes symbol '#{symbol}'." }
|
17
|
+
p msg.to_json
|
18
|
+
end
|
data/bin/intra.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'cotcube-bardata'
|
4
|
+
require 'cotcube-level'
|
5
|
+
require 'cotcube-indicators'
|
6
|
+
|
7
|
+
def exit_with_error(err)
|
8
|
+
msg = { error: 1, message: "#{err}" }
|
9
|
+
p msg.to_json
|
10
|
+
exit 1
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
contract = ARGV[0].nil? ? nil : ARGV[0].upcase
|
15
|
+
|
16
|
+
debug = ARGV.include? 'debug'
|
17
|
+
if contract.nil?
|
18
|
+
exit_with_error('No contract given')
|
19
|
+
end
|
20
|
+
|
21
|
+
sym = Cotcube::Helpers.get_id_set(symbol: contract[..1])
|
22
|
+
# TODO: apply daylight time pimped diff to all relevant datetimes in series
|
23
|
+
timediff = if %w[ NYBOT NYMEX ].include? sym[:exchange]
|
24
|
+
5.hours
|
25
|
+
elsif %w[ DTB ].include? sym[:exchane]
|
26
|
+
1.hour
|
27
|
+
else
|
28
|
+
6.hours
|
29
|
+
end
|
30
|
+
|
31
|
+
continuous = %w[currencies interest indices].include? sym[:type]
|
32
|
+
interval = 30.minutes
|
33
|
+
|
34
|
+
intrabase = []
|
35
|
+
istencil = []
|
36
|
+
collector_threads = []
|
37
|
+
|
38
|
+
collector_threads << Thread.new do
|
39
|
+
istencil = Cotcube::Level::Intraday_Stencil.new( interval: 30.minutes, swap_type: :full, asset: :full, weeks: 8)
|
40
|
+
end
|
41
|
+
|
42
|
+
collector_threads << Thread.new do
|
43
|
+
begin
|
44
|
+
intrabase = JSON.parse(Cotcube::Helpers::DataClient.new.get_historical(contract: contract, interval: :min30, duration: '3_W' ), symbolize_names: true)[:base].
|
45
|
+
map{ |z|
|
46
|
+
z[:datetime] = DateTime.parse(z[:time])
|
47
|
+
%i[time created_at wap trades].each{|k| z.delete(k)}
|
48
|
+
z
|
49
|
+
}
|
50
|
+
rescue
|
51
|
+
intrabase = []
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
collector_threads.each(&:join)
|
56
|
+
|
57
|
+
base = intrabase
|
58
|
+
base.select!{|z| z[:high]}
|
59
|
+
|
60
|
+
scaleBreaks = []
|
61
|
+
brb = istencil.base
|
62
|
+
brb.each_with_index.map{|z,i|
|
63
|
+
next if i.zero?
|
64
|
+
if brb[i][:datetime] - brb[i-1][:datetime] > (1) and brb[i][:datetime] > base.first[:datetime] and brb[i-1][:datetime] < base.last[:datetime]
|
65
|
+
scaleBreaks << { startValue: brb[i-1][:datetime] + 0.5 * interval, endValue: brb[i][:datetime] - 0.5 * interval }
|
66
|
+
end
|
67
|
+
} unless base.empty?
|
68
|
+
|
69
|
+
pkg = {
|
70
|
+
sym: sym,
|
71
|
+
base: base,
|
72
|
+
breaks: scaleBreaks
|
73
|
+
}
|
74
|
+
|
75
|
+
puts pkg.to_json
|
data/bin/sym.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'cotcube-level'
|
4
|
+
require 'cotcube-helpers'
|
5
|
+
include Cotcube::Helpers
|
6
|
+
require_relative '../lib/cotcube-bardata.rb'
|
7
|
+
|
8
|
+
contract = ARGV[0].nil? ? nil : ARGV[0].upcase
|
9
|
+
|
10
|
+
begin
|
11
|
+
s = Cotcube::Helpers.get_id_set(symbol: contract[..1])
|
12
|
+
p s.to_json
|
13
|
+
rescue
|
14
|
+
msg = { error: 503, message: "Could not process contract '#{contract}'." }
|
15
|
+
p msg.to_json
|
16
|
+
end
|
data/bin/symbols.rb
ADDED
@@ -116,7 +116,7 @@ module Cotcube
|
|
116
116
|
# this boosts from 4.5sec to 0.3sec
|
117
117
|
rewriting = (force_rewrite or not(File.exist?(c_file)) or (Time.now - File.mtime(c_file) > 8.days))
|
118
118
|
if rewriting
|
119
|
-
puts "In daily+continuous: Rewriting #{c_file} #{force_rewrite ? "forcibly" : "due to fileage"}.".light_yellow
|
119
|
+
puts "In daily+continuous: Rewriting #{c_file} #{force_rewrite ? "forcibly" : "due to fileage"}.".light_yellow if debug
|
120
120
|
`rm #{c_file}; find #{id_path} | xargs cat 2>/dev/null | grep -v ',0,' | grep -v ',0$'| sort -t, -k2 | cut -d, -f1-8 | grep ',.*,' | uniq > #{c_file}`
|
121
121
|
end
|
122
122
|
loading = lambda do
|
@@ -394,7 +394,7 @@ module Cotcube
|
|
394
394
|
last_avg: lavg,
|
395
395
|
last_max: ldays.max,
|
396
396
|
until_start: fday - ytoday,
|
397
|
-
until_end:
|
397
|
+
until_end: lavg - ytoday
|
398
398
|
}
|
399
399
|
current[:until_end] += 365 if current[:until_end] - current[:until_start] < 0
|
400
400
|
current[:until_end] -= 365 if current[:until_end] > 365
|
data/lib/cotcube-bardata/eods.rb
CHANGED
@@ -78,12 +78,14 @@ module Cotcube
|
|
78
78
|
# l_symbol = l_sym[:symbol]
|
79
79
|
id_path = id_path_get.call(i)
|
80
80
|
data_file = "#{id_path}/#{d}.csv"
|
81
|
+
current_sym = Cotcube::Helpers.get_id_set(id: i, config: config)
|
81
82
|
raise "No data found for requested :id (#{id_path} does not exist)" unless Dir.exist?(id_path)
|
82
83
|
|
83
84
|
unless File.exist?(data_file)
|
84
85
|
unless quiet
|
85
|
-
puts 'WARNING: No data found for requested
|
86
|
-
|
86
|
+
puts 'WARNING: No data found for requested symbol'\
|
87
|
+
" #{current_sym[:symbol]} in #{id_path} for #{d}.".colorize(:light_yellow)
|
88
|
+
|
87
89
|
end
|
88
90
|
return []
|
89
91
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cotcube-bardata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin L. Tischendorf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -164,7 +164,11 @@ files:
|
|
164
164
|
- README.md
|
165
165
|
- Rakefile
|
166
166
|
- VERSION
|
167
|
+
- bin/daily.rb
|
167
168
|
- bin/eod.rb
|
169
|
+
- bin/intra.rb
|
170
|
+
- bin/sym.rb
|
171
|
+
- bin/symbols.rb
|
168
172
|
- cotcube-bardata.gemspec
|
169
173
|
- lib/cotcube-bardata.rb
|
170
174
|
- lib/cotcube-bardata/cached.rb
|