cotcube-helpers 0.1.9.2 → 0.2.2.3
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 +38 -0
- data/Gemfile +2 -0
- data/VERSION +1 -1
- data/lib/cotcube-helpers/constants.rb +16 -5
- data/lib/cotcube-helpers/data_client.rb +230 -0
- data/lib/cotcube-helpers/expiration.rb +31 -0
- data/lib/cotcube-helpers/get_id_set.rb +9 -7
- data/lib/cotcube-helpers/ib_contracts.rb +69 -0
- data/lib/cotcube-helpers/init.rb +2 -1
- data/lib/cotcube-helpers/numeric_ext.rb +8 -0
- data/lib/cotcube-helpers/orderclient.rb +203 -0
- data/lib/cotcube-helpers/output.rb +20 -0
- data/lib/cotcube-helpers/recognition.rb +509 -0
- data/lib/cotcube-helpers/subpattern.rb +4 -4
- data/lib/cotcube-helpers/symbols.rb +52 -5
- data/lib/cotcube-helpers.rb +13 -0
- data/scripts/collect_market_depth +103 -0
- data/scripts/cron_ruby_wrapper.sh +25 -0
- data/scripts/symbols +13 -0
- metadata +13 -3
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
Bundler.require
|
5
|
+
require 'parallel'
|
6
|
+
require_relative '../lib/cotcube-helpers'
|
7
|
+
|
8
|
+
dc = Cotcube::Helpers::DataClient.new
|
9
|
+
|
10
|
+
dc.start_persistent(type: :depth, contract: 'GCZ21') {|msg| p msg.size; p msg.map{|z| z[:size]}.reduce(&:+) }
|
11
|
+
|
12
|
+
loop do
|
13
|
+
sleep 1
|
14
|
+
end
|
15
|
+
|
16
|
+
__END__
|
17
|
+
depthThread = Thread.new do
|
18
|
+
begin
|
19
|
+
loop do
|
20
|
+
sleep 0.025 while depthQueue.empty?
|
21
|
+
while not depthQueue.empty?
|
22
|
+
msg = depthQueue.pop
|
23
|
+
if msg.data[:operation] == 2
|
24
|
+
data = [ (Time.now.to_f % 100000).round(3), :d, msg.data.values_at(:operation, :side, :position) ].flatten
|
25
|
+
else
|
26
|
+
data = [ (Time.now.to_f % 100000).round(3), :d, msg.data.values_at(:operation, :side, :position, :size, :price) ].flatten
|
27
|
+
end
|
28
|
+
puts "#{data}" if data[2]!=1 or data[4] == 0
|
29
|
+
next
|
30
|
+
writeQueue << data
|
31
|
+
side = msg.data[:side]
|
32
|
+
price = msg.data[:price]
|
33
|
+
size = msg.data[:size]
|
34
|
+
pos = msg.data[:position]
|
35
|
+
case msg.data[:operation]
|
36
|
+
when 0 # insert
|
37
|
+
orderbook[side].insert(pos, { price: price.to_f, size: size })
|
38
|
+
when 1 # update
|
39
|
+
orderbook[side][pos] = { price: price.to_f, size: size }
|
40
|
+
when 2 # remove
|
41
|
+
orderbook[side].delete_at(pos)
|
42
|
+
end
|
43
|
+
orderbook[1].shift while orderbook[1].size > DEPTH
|
44
|
+
orderbook[0].shift while orderbook[0].size > DEPTH
|
45
|
+
a = orderbook[0].size
|
46
|
+
a.times do |n|
|
47
|
+
s = a - 1
|
48
|
+
ask = orderbook[0][s-n]
|
49
|
+
next if ask.nil?
|
50
|
+
allasks = orderbook[0][0..s-n].map{|x| x[:size]}.reduce(:+)
|
51
|
+
asksacc = orderbook[0][0..s-n].map{|x| x[:size] * x[:price]}.reduce(:+) / allasks
|
52
|
+
puts "\t\t\t\t#{format % ask[:price]} x #{'% 5d' % ask[:size]}\t#{'% 4d' % allasks}\t#{format % asksacc}"
|
53
|
+
end
|
54
|
+
allasks = orderbook[0].compact.map{|x| x[:size]}.reduce(:+)
|
55
|
+
asksacc = orderbook[0].compact.map{|x| x[:size] * x[:price]}.reduce(:+) / allasks unless orderbook[0].empty?
|
56
|
+
allbids = orderbook[1].compact.map{|x| x[:size]}.reduce(:+)
|
57
|
+
bidsacc = orderbook[1].compact.map{|x| x[:size] * x[:price]}.reduce(:+) / allbids unless orderbook[0].empty?
|
58
|
+
puts "#{(format % bidsacc) unless bidsacc.nil?}\t".light_red +
|
59
|
+
"#{('% 4d' % allbids) unless allbids.nil?}\t\t\t\t\t".light_red +
|
60
|
+
"#{"#{'% 5d' % allasks}" unless allasks.nil?}\t".light_red +
|
61
|
+
"#{"#{format % asksacc}" unless asksacc.nil?}".light_red
|
62
|
+
b = orderbook[1].size
|
63
|
+
b.times do |n|
|
64
|
+
bid = orderbook[1][n]
|
65
|
+
next if bid.nil?
|
66
|
+
allbids = orderbook[1][0..n].map{|x| x[:size]}.reduce(:+)
|
67
|
+
bidsacc = orderbook[1][0..n].map{|x| x[:size] * x[:price]}.reduce(:+) / allbids
|
68
|
+
puts "#{format % bidsacc}\t#{'% 4d' % allbids}\t#{'%5d' % bid[:size]} x #{format % bid[:price]}"
|
69
|
+
end
|
70
|
+
puts "="*50
|
71
|
+
end
|
72
|
+
end
|
73
|
+
rescue
|
74
|
+
puts "RESCUE in depthThread".light_red
|
75
|
+
puts "#{orderbook}"
|
76
|
+
raise
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
sleep 0.01 while Time.now.to_i % WRITE_INTERVAL != 0
|
81
|
+
loop do
|
82
|
+
t = Time.now.to_f
|
83
|
+
unless writeQueue.empty?
|
84
|
+
data = []
|
85
|
+
data << writeQueue.pop while not writeQueue.empty?
|
86
|
+
CSV.open(OUTFILE, "a+") { |csv| data.each {|x| csv << x } }
|
87
|
+
end
|
88
|
+
begin
|
89
|
+
sleep WRITE_INTERVAL - (Time.now.to_f - t)
|
90
|
+
rescue
|
91
|
+
sleep 3
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
ensure
|
97
|
+
ib.send_message :CancelMarketDepth, id: ID
|
98
|
+
ib.send_message :CancelMarketData, id: ID
|
99
|
+
tickThread.kill
|
100
|
+
depthThread.kill
|
101
|
+
end
|
102
|
+
sleep 1
|
103
|
+
puts "Done."
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
export rubyenv=/home/pepe/.rvm/environments/default
|
4
|
+
|
5
|
+
. $rubyenv
|
6
|
+
cd /home/pepe/GEMS/${1}
|
7
|
+
export LC_ALL="en_US.utf8"
|
8
|
+
|
9
|
+
ruby ${2} ${3} ${4} ${5} ${6}
|
10
|
+
|
11
|
+
|
12
|
+
exit
|
13
|
+
for testing run
|
14
|
+
env - `cat /home/pepe/bin/cron_ruby_wrapper.sh | tail -n 6` /bin/bash
|
15
|
+
|
16
|
+
HOME=/home/pepe
|
17
|
+
LOGNAME=pepe
|
18
|
+
PATH=/usr/bin:/bin
|
19
|
+
LANG=en_US.UTF-8
|
20
|
+
SHELL=/bin/sh
|
21
|
+
PWD=/home/pepe
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
data/scripts/symbols
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
option=$1
|
4
|
+
headers='ID,Symbol,ticksize,power,months,type,factor,reports,format,name'
|
5
|
+
|
6
|
+
if [ -z "${option}" ]
|
7
|
+
then
|
8
|
+
(echo ${headers} && cat /etc/cotcube/symbols.csv /etc/cotcube/symbols_micros.csv) | sed 's/,/ , /g' | column -s, -t
|
9
|
+
else
|
10
|
+
(echo ${headers} && cat /etc/cotcube/symbols.csv /etc/cotcube/symbols_micros.csv) | grep -i "$option\|reports,format" | sed 's/,/ , /g' | column -s, -t
|
11
|
+
fi
|
12
|
+
|
13
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cotcube-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2.3
|
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-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -97,14 +97,21 @@ files:
|
|
97
97
|
- lib/cotcube-helpers.rb
|
98
98
|
- lib/cotcube-helpers/array_ext.rb
|
99
99
|
- lib/cotcube-helpers/constants.rb
|
100
|
+
- lib/cotcube-helpers/data_client.rb
|
100
101
|
- lib/cotcube-helpers/datetime_ext.rb
|
101
102
|
- lib/cotcube-helpers/enum_ext.rb
|
103
|
+
- lib/cotcube-helpers/expiration.rb
|
102
104
|
- lib/cotcube-helpers/get_id_set.rb
|
103
105
|
- lib/cotcube-helpers/hash_ext.rb
|
106
|
+
- lib/cotcube-helpers/ib_contracts.rb
|
104
107
|
- lib/cotcube-helpers/init.rb
|
105
108
|
- lib/cotcube-helpers/input.rb
|
109
|
+
- lib/cotcube-helpers/numeric_ext.rb
|
110
|
+
- lib/cotcube-helpers/orderclient.rb
|
111
|
+
- lib/cotcube-helpers/output.rb
|
106
112
|
- lib/cotcube-helpers/parallelize.rb
|
107
113
|
- lib/cotcube-helpers/range_ext.rb
|
114
|
+
- lib/cotcube-helpers/recognition.rb
|
108
115
|
- lib/cotcube-helpers/reduce.rb
|
109
116
|
- lib/cotcube-helpers/simple_output.rb
|
110
117
|
- lib/cotcube-helpers/simple_series_stats.rb
|
@@ -114,6 +121,9 @@ files:
|
|
114
121
|
- lib/cotcube-helpers/swig/fill_x.rb
|
115
122
|
- lib/cotcube-helpers/swig/recognition.rb
|
116
123
|
- lib/cotcube-helpers/symbols.rb
|
124
|
+
- scripts/collect_market_depth
|
125
|
+
- scripts/cron_ruby_wrapper.sh
|
126
|
+
- scripts/symbols
|
117
127
|
homepage: https://github.com/donkeybridge/cotcube-helpers
|
118
128
|
licenses:
|
119
129
|
- BSD-4-Clause
|
@@ -136,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
146
|
- !ruby/object:Gem::Version
|
137
147
|
version: '0'
|
138
148
|
requirements: []
|
139
|
-
rubygems_version: 3.1.
|
149
|
+
rubygems_version: 3.1.6
|
140
150
|
signing_key:
|
141
151
|
specification_version: 4
|
142
152
|
summary: Some helpers and core extensions as part of the Cotcube Suite.
|