ib-api 972.3.1 → 972.4
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.lock +27 -27
- data/VERSION +1 -1
- data/bin/console +4 -8
- data/lib/ib/connection.rb +10 -19
- data/lib/ib/logger.rb +1 -1
- data/lib/logging.rb +45 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fe3f4d98e27f1480eafe5ed066e42410fc97527fef692aba69b02a1db61836de
|
|
4
|
+
data.tar.gz: 8e9e733f6e383313a4c4275d5f95853944c573fb543c78f85280d41988c0e842
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 306dfc26bb138a25e1f9136a24f590d47ac1f555f94936960287937888e50c107bb7bc6f5c9f802ceb6096218a4c4a22ba363b36bccb47f25c206ea6f71b0772
|
|
7
|
+
data.tar.gz: 4d97ce95ccc74a2c3b6d1d88b0472433b0a9382bc5433d0fd100337d6906a84570d09c363e8282e44259deb0bf8f21cfe80814a904d46e8379938ec8b7f67b9a
|
data/Gemfile.lock
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
GIT
|
|
2
2
|
remote: https://github.com/ohler55/ox.git
|
|
3
|
-
revision:
|
|
3
|
+
revision: 59c4234fe01fb5de08d49b39ecf5fc7338c1ffdc
|
|
4
4
|
specs:
|
|
5
|
-
ox (2.
|
|
5
|
+
ox (2.14.4)
|
|
6
6
|
|
|
7
7
|
PATH
|
|
8
8
|
remote: .
|
|
9
9
|
specs:
|
|
10
|
-
ib-api (972.
|
|
10
|
+
ib-api (972.3.1)
|
|
11
11
|
activemodel
|
|
12
12
|
activesupport (>= 6.0)
|
|
13
13
|
|
|
14
14
|
GEM
|
|
15
15
|
remote: https://rubygems.org/
|
|
16
16
|
specs:
|
|
17
|
-
activemodel (6.1.2
|
|
18
|
-
activesupport (= 6.1.2
|
|
19
|
-
activesupport (6.1.2
|
|
17
|
+
activemodel (6.1.3.2)
|
|
18
|
+
activesupport (= 6.1.3.2)
|
|
19
|
+
activesupport (6.1.3.2)
|
|
20
20
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
21
21
|
i18n (>= 1.6, < 2)
|
|
22
22
|
minitest (>= 5.1)
|
|
@@ -25,7 +25,7 @@ GEM
|
|
|
25
25
|
coderay (1.1.3)
|
|
26
26
|
concurrent-ruby (1.1.8)
|
|
27
27
|
diff-lcs (1.4.4)
|
|
28
|
-
ffi (1.
|
|
28
|
+
ffi (1.15.0)
|
|
29
29
|
formatador (0.2.5)
|
|
30
30
|
guard (2.16.2)
|
|
31
31
|
formatador (>= 0.2.4)
|
|
@@ -41,52 +41,52 @@ GEM
|
|
|
41
41
|
guard (~> 2.1)
|
|
42
42
|
guard-compat (~> 1.1)
|
|
43
43
|
rspec (>= 2.99.0, < 4.0)
|
|
44
|
-
i18n (1.8.
|
|
44
|
+
i18n (1.8.10)
|
|
45
45
|
concurrent-ruby (~> 1.0)
|
|
46
|
-
listen (3.
|
|
46
|
+
listen (3.5.1)
|
|
47
47
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
48
48
|
rb-inotify (~> 0.9, >= 0.9.10)
|
|
49
49
|
lumberjack (1.2.8)
|
|
50
50
|
method_source (1.0.0)
|
|
51
|
-
minitest (5.14.
|
|
51
|
+
minitest (5.14.4)
|
|
52
52
|
nenv (0.3.0)
|
|
53
53
|
notiffany (0.1.3)
|
|
54
54
|
nenv (~> 0.1)
|
|
55
55
|
shellany (~> 0.0)
|
|
56
|
-
pry (0.
|
|
56
|
+
pry (0.14.1)
|
|
57
57
|
coderay (~> 1.1)
|
|
58
58
|
method_source (~> 1.0)
|
|
59
|
-
rake (13.0.
|
|
60
|
-
rb-fsevent (0.
|
|
59
|
+
rake (13.0.3)
|
|
60
|
+
rb-fsevent (0.11.0)
|
|
61
61
|
rb-inotify (0.10.1)
|
|
62
62
|
ffi (~> 1.0)
|
|
63
|
-
rspec (3.
|
|
64
|
-
rspec-core (~> 3.
|
|
65
|
-
rspec-expectations (~> 3.
|
|
66
|
-
rspec-mocks (~> 3.
|
|
63
|
+
rspec (3.10.0)
|
|
64
|
+
rspec-core (~> 3.10.0)
|
|
65
|
+
rspec-expectations (~> 3.10.0)
|
|
66
|
+
rspec-mocks (~> 3.10.0)
|
|
67
67
|
rspec-collection_matchers (1.2.0)
|
|
68
68
|
rspec-expectations (>= 2.99.0.beta1)
|
|
69
|
-
rspec-core (3.
|
|
70
|
-
rspec-support (~> 3.
|
|
71
|
-
rspec-expectations (3.
|
|
69
|
+
rspec-core (3.10.1)
|
|
70
|
+
rspec-support (~> 3.10.0)
|
|
71
|
+
rspec-expectations (3.10.1)
|
|
72
72
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
73
|
-
rspec-support (~> 3.
|
|
73
|
+
rspec-support (~> 3.10.0)
|
|
74
74
|
rspec-its (1.3.0)
|
|
75
75
|
rspec-core (>= 3.0.0)
|
|
76
76
|
rspec-expectations (>= 3.0.0)
|
|
77
|
-
rspec-mocks (3.
|
|
77
|
+
rspec-mocks (3.10.2)
|
|
78
78
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
79
|
-
rspec-support (~> 3.
|
|
80
|
-
rspec-support (3.
|
|
79
|
+
rspec-support (~> 3.10.0)
|
|
80
|
+
rspec-support (3.10.2)
|
|
81
81
|
shellany (0.0.1)
|
|
82
|
-
thor (1.0
|
|
82
|
+
thor (1.1.0)
|
|
83
83
|
tzinfo (2.0.4)
|
|
84
84
|
concurrent-ruby (~> 1.0)
|
|
85
85
|
value_semantics (3.6.0)
|
|
86
86
|
zeitwerk (2.4.2)
|
|
87
87
|
|
|
88
88
|
PLATFORMS
|
|
89
|
-
|
|
89
|
+
x86_64-linux
|
|
90
90
|
|
|
91
91
|
DEPENDENCIES
|
|
92
92
|
bundler
|
|
@@ -101,4 +101,4 @@ DEPENDENCIES
|
|
|
101
101
|
value_semantics
|
|
102
102
|
|
|
103
103
|
BUNDLED WITH
|
|
104
|
-
|
|
104
|
+
2.2.3
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
972.
|
|
1
|
+
972.4
|
data/bin/console
CHANGED
|
@@ -10,8 +10,6 @@
|
|
|
10
10
|
require 'bundler/setup'
|
|
11
11
|
require 'yaml'
|
|
12
12
|
|
|
13
|
-
require 'logger'
|
|
14
|
-
|
|
15
13
|
require 'ib-api'
|
|
16
14
|
|
|
17
15
|
class Array
|
|
@@ -47,7 +45,6 @@ read_yml = -> (key) do
|
|
|
47
45
|
puts "Namespace is IB ! "
|
|
48
46
|
puts
|
|
49
47
|
puts '-'* 45
|
|
50
|
-
include LogDev
|
|
51
48
|
include IB
|
|
52
49
|
require 'irb'
|
|
53
50
|
client_id = ARGV[1] || read_yml[:client_id]
|
|
@@ -62,16 +59,15 @@ read_yml = -> (key) do
|
|
|
62
59
|
end
|
|
63
60
|
|
|
64
61
|
ARGV.clear
|
|
65
|
-
logger = default_logger # Logger.new STDOUT
|
|
66
62
|
|
|
67
63
|
## The Block takes instructions which are executed after initializing all instance-variables
|
|
68
64
|
## and prior to the connection-process
|
|
69
65
|
## Here we just subscribe to some events
|
|
70
66
|
C = Connection.new client_id: client_id, port: port do |c| # future use__ , optional_capacities: "+PACEAPI" do |c|
|
|
71
67
|
|
|
72
|
-
c.subscribe( :ContractData, :BondContractData) { |msg| logger.info { msg.contract.to_human } }
|
|
73
|
-
c.subscribe( :Alert, :ContractDataEnd, :ManagedAccounts, :OrderStatus ) {| m| logger.info { m.to_human } }
|
|
74
|
-
c.subscribe( :PortfolioValue, :AccountValue, :OrderStatus, :OpenOrderEnd, :ExecutionData ) {| m| logger.info { m.to_human }}
|
|
68
|
+
c.subscribe( :ContractData, :BondContractData) { |msg| c.logger.info { msg.contract.to_human } }
|
|
69
|
+
c.subscribe( :Alert, :ContractDataEnd, :ManagedAccounts, :OrderStatus ) {| m| c.logger.info { m.to_human } }
|
|
70
|
+
c.subscribe( :PortfolioValue, :AccountValue, :OrderStatus, :OpenOrderEnd, :ExecutionData ) {| m| c.logger.info { m.to_human }}
|
|
75
71
|
# c.subscribe :ManagedAccounts do |msg|
|
|
76
72
|
# puts "------------------------------- Managed Accounts ----------------------------------"
|
|
77
73
|
# puts "Detected Accounts: #{msg.accounts.account.join(' -- ')} "
|
|
@@ -79,8 +75,8 @@ read_yml = -> (key) do
|
|
|
79
75
|
# end
|
|
80
76
|
|
|
81
77
|
c.subscribe( :OpenOrder){ |msg| "Open Order detected and stored: C.received[:OpenOrders] " }
|
|
82
|
-
c.logger.level = Logger::INFO
|
|
83
78
|
end
|
|
79
|
+
C.logger.level = Logger::INFO
|
|
84
80
|
unless C.received[:OpenOrder].blank?
|
|
85
81
|
puts "------------------------------- OpenOrders ----------------------------------"
|
|
86
82
|
puts C.received[:OpenOrder].to_human.join "\n"
|
data/lib/ib/connection.rb
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
require 'thread'
|
|
2
2
|
#require 'active_support'
|
|
3
3
|
require 'ib/socket'
|
|
4
|
-
require '
|
|
4
|
+
require 'logger'
|
|
5
|
+
require 'logging'
|
|
5
6
|
require 'ib/messages'
|
|
6
7
|
|
|
7
|
-
module TechnicalAnalysis
|
|
8
|
-
module Signals
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
8
|
module IB
|
|
13
9
|
# Encapsulates API connection to TWS or Gateway
|
|
14
10
|
class Connection
|
|
@@ -23,10 +19,9 @@ module IB
|
|
|
23
19
|
## public data-queue: received, received?, wait_for, clear_received
|
|
24
20
|
## misc: reader_running?
|
|
25
21
|
|
|
26
|
-
include
|
|
22
|
+
include Support::Logging # provides default_logger
|
|
27
23
|
|
|
28
24
|
mattr_accessor :current
|
|
29
|
-
mattr_accessor :logger ## borrowed from active_support
|
|
30
25
|
# Please note, we are realizing only the most current TWS protocol versions,
|
|
31
26
|
# thus improving performance at the expense of backwards compatibility.
|
|
32
27
|
# Older protocol versions support can be found in older gem versions.
|
|
@@ -45,7 +40,7 @@ module IB
|
|
|
45
40
|
connect: true, # Connect at initialization
|
|
46
41
|
received: true, # Keep all received messages in a @received Hash
|
|
47
42
|
# redis: false, # future plans
|
|
48
|
-
logger:
|
|
43
|
+
logger: nil,
|
|
49
44
|
client_id: rand( 1001 .. 9999 ) ,
|
|
50
45
|
client_version: IB::Messages::CLIENT_VERSION, # lib/ib/server_versions.rb
|
|
51
46
|
optional_capacities: "", # TWS-Version 974: "+PACEAPI"
|
|
@@ -54,17 +49,13 @@ module IB
|
|
|
54
49
|
# V 974 release motes
|
|
55
50
|
# API messages sent at a higher rate than 50/second can now be paced by TWS at the 50/second rate instead of potentially causing a disconnection. This is now done automatically by the RTD Server API and can be done with other API technologies by invoking SetConnectOptions("+PACEAPI") prior to eConnect.
|
|
56
51
|
|
|
57
|
-
|
|
52
|
+
self.class.configure_logger logger
|
|
58
53
|
# convert parameters into instance-variables and assign them
|
|
59
|
-
|
|
60
|
-
next unless type == :key
|
|
61
|
-
|
|
62
|
-
when :logger
|
|
63
|
-
self.logger = logger
|
|
64
|
-
else
|
|
54
|
+
method(__method__).parameters.each do |type, k|
|
|
55
|
+
next unless type == :key ## available: key , keyrest
|
|
56
|
+
next if k.to_s == 'logger'
|
|
65
57
|
v = eval(k.to_s)
|
|
66
58
|
instance_variable_set("@#{k}", v) unless v.nil?
|
|
67
|
-
end
|
|
68
59
|
end
|
|
69
60
|
|
|
70
61
|
# A couple of locks to avoid race conditions in JRuby
|
|
@@ -84,9 +75,9 @@ module IB
|
|
|
84
75
|
yield self if block_given?
|
|
85
76
|
|
|
86
77
|
self.subscribe(:NextValidId) do |msg|
|
|
87
|
-
|
|
78
|
+
self.logger.progname = "Connection#connect"
|
|
88
79
|
self.next_local_id = msg.local_id
|
|
89
|
-
|
|
80
|
+
self.logger.info { "Got next valid order id: #{next_local_id}." }
|
|
90
81
|
end
|
|
91
82
|
|
|
92
83
|
# Ensure the transmission of NextValidId.
|
data/lib/ib/logger.rb
CHANGED
data/lib/logging.rb
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#module Kernel
|
|
2
|
+
# private
|
|
3
|
+
# def this_method_name
|
|
4
|
+
# caller[0] =~ /`([^']*)'/ and $1
|
|
5
|
+
# end
|
|
6
|
+
# see also __method__ and __callee__
|
|
7
|
+
#end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
module Support
|
|
12
|
+
module Logging
|
|
13
|
+
def self.included(base)
|
|
14
|
+
base.extend ClassMethods
|
|
15
|
+
base.send :define_method, :logger do
|
|
16
|
+
base.logger
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module ClassMethods
|
|
21
|
+
def logger
|
|
22
|
+
@logger
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def logger=(logger)
|
|
26
|
+
@logger = logger
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def configure_logger(log=nil)
|
|
30
|
+
if log
|
|
31
|
+
@logger = log
|
|
32
|
+
else
|
|
33
|
+
@logger = Logger.new(STDOUT)
|
|
34
|
+
@logger.level = Logger::INFO
|
|
35
|
+
@logger.formatter = proc do |severity, datetime, progname, msg|
|
|
36
|
+
# "#{datetime.strftime("%d.%m.(%X)")}#{"%5s" % severity}->#{msg}\n"
|
|
37
|
+
"#{"%5s" % severity}::#{msg}\n"
|
|
38
|
+
end
|
|
39
|
+
@logger.debug "------------------------------ start logging ----------------------------"
|
|
40
|
+
end # branch
|
|
41
|
+
end # def
|
|
42
|
+
end # module ClassMethods
|
|
43
|
+
end # module Logging
|
|
44
|
+
end # module Support
|
|
45
|
+
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ib-api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 972.
|
|
4
|
+
version: '972.4'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hartmut Bischoff
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-05-
|
|
11
|
+
date: 2021-05-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -142,6 +142,7 @@ files:
|
|
|
142
142
|
- lib/ib/socket.rb
|
|
143
143
|
- lib/ib/support.rb
|
|
144
144
|
- lib/ib/version.rb
|
|
145
|
+
- lib/logging.rb
|
|
145
146
|
- lib/models/ib/account.rb
|
|
146
147
|
- lib/models/ib/account_value.rb
|
|
147
148
|
- lib/models/ib/bag.rb
|