dtn 0.0.0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -5
  3. data/.env.example +5 -0
  4. data/.gitignore +2 -0
  5. data/.rubocop.yml +7 -0
  6. data/CHANGELOG.md +5 -1
  7. data/Gemfile +3 -1
  8. data/README.md +288 -9
  9. data/Rakefile +2 -0
  10. data/docker-compose.yml +34 -0
  11. data/dtn.gemspec +1 -1
  12. data/lib/dtn.rb +18 -1
  13. data/lib/dtn/concerns/id.rb +36 -0
  14. data/lib/dtn/concerns/validation.rb +71 -0
  15. data/lib/dtn/helpers/catalog.rb +32 -0
  16. data/lib/dtn/lookups/catalog/listed_markets.rb +12 -0
  17. data/lib/dtn/lookups/catalog/naic_codes.rb +12 -0
  18. data/lib/dtn/lookups/catalog/security_types.rb +12 -0
  19. data/lib/dtn/lookups/catalog/sic_codes.rb +12 -0
  20. data/lib/dtn/lookups/catalog/trade_conditions.rb +12 -0
  21. data/lib/dtn/lookups/historical/base.rb +43 -0
  22. data/lib/dtn/lookups/historical/daily_datapoint.rb +13 -0
  23. data/lib/dtn/lookups/historical/daily_timeframe.rb +34 -0
  24. data/lib/dtn/lookups/historical/datapoint.rb +27 -0
  25. data/lib/dtn/lookups/historical/interval.rb +14 -0
  26. data/lib/dtn/lookups/historical/interval_datapoint.rb +31 -0
  27. data/lib/dtn/lookups/historical/interval_day.rb +32 -0
  28. data/lib/dtn/lookups/historical/interval_timeframe.rb +37 -0
  29. data/lib/dtn/lookups/historical/monthly_datapoint.rb +13 -0
  30. data/lib/dtn/lookups/historical/tick.rb +14 -0
  31. data/lib/dtn/lookups/historical/tick_datapoint.rb +24 -0
  32. data/lib/dtn/lookups/historical/tick_day.rb +34 -0
  33. data/lib/dtn/lookups/historical/tick_timeframe.rb +31 -0
  34. data/lib/dtn/lookups/historical/weekly_datapoint.rb +13 -0
  35. data/lib/dtn/lookups/news/base.rb +85 -0
  36. data/lib/dtn/lookups/news/config.rb +25 -0
  37. data/lib/dtn/lookups/news/headline.rb +40 -0
  38. data/lib/dtn/lookups/news/story.rb +40 -0
  39. data/lib/dtn/lookups/news/story_count.rb +36 -0
  40. data/lib/dtn/lookups/request.rb +92 -0
  41. data/lib/dtn/lookups/symbol/base.rb +11 -0
  42. data/lib/dtn/lookups/symbol/by_filter.rb +58 -0
  43. data/lib/dtn/lookups/symbol/by_naic.rb +26 -0
  44. data/lib/dtn/lookups/symbol/by_sic.rb +26 -0
  45. data/lib/dtn/message.rb +29 -0
  46. data/lib/dtn/messages/bar/base.rb +30 -0
  47. data/lib/dtn/messages/bar/current_bar.rb +11 -0
  48. data/lib/dtn/messages/bar/historical_bar.rb +11 -0
  49. data/lib/dtn/messages/bar/update_bar.rb +11 -0
  50. data/lib/dtn/messages/catalog/code.rb +22 -0
  51. data/lib/dtn/messages/catalog/listed_markets.rb +20 -0
  52. data/lib/dtn/messages/catalog/naic_codes.rb +10 -0
  53. data/lib/dtn/messages/catalog/security_types.rb +20 -0
  54. data/lib/dtn/messages/catalog/sic_codes.rb +10 -0
  55. data/lib/dtn/messages/catalog/trade_conditions.rb +20 -0
  56. data/lib/dtn/messages/historical/daily_weekly_monthly.rb +25 -0
  57. data/lib/dtn/messages/historical/interval.rb +28 -0
  58. data/lib/dtn/messages/historical/tick.rb +31 -0
  59. data/lib/dtn/messages/level2/level2_update.rb +38 -0
  60. data/lib/dtn/messages/level2/market_maker_name.rb +20 -0
  61. data/lib/dtn/messages/message_with_simple_parser.rb +38 -0
  62. data/lib/dtn/messages/news/base.rb +34 -0
  63. data/lib/dtn/messages/news/config.rb +24 -0
  64. data/lib/dtn/messages/news/headline.rb +25 -0
  65. data/lib/dtn/messages/news/story.rb +20 -0
  66. data/lib/dtn/messages/news/story_count.rb +21 -0
  67. data/lib/dtn/messages/quote/level1.rb +150 -0
  68. data/lib/dtn/messages/quote/level1_fundamental.rb +17 -0
  69. data/lib/dtn/messages/quote/level1_news.rb +27 -0
  70. data/lib/dtn/messages/quote/level1_regional.rb +31 -0
  71. data/lib/dtn/messages/quote/level1_summary.rb +19 -0
  72. data/lib/dtn/messages/quote/level1_update.rb +21 -0
  73. data/lib/dtn/messages/symbol/base.rb +35 -0
  74. data/lib/dtn/messages/symbol/by_filter.rb +11 -0
  75. data/lib/dtn/messages/symbol/by_naic.rb +22 -0
  76. data/lib/dtn/messages/symbol/by_sic.rb +22 -0
  77. data/lib/dtn/messages/system/client_stats.rb +46 -0
  78. data/lib/dtn/messages/system/customer_info.rb +30 -0
  79. data/lib/dtn/messages/system/end_of_message_characters.rb +22 -0
  80. data/lib/dtn/messages/system/error.rb +20 -0
  81. data/lib/dtn/messages/system/generic.rb +98 -0
  82. data/lib/dtn/messages/system/no_data_characters.rb +22 -0
  83. data/lib/dtn/messages/system/stats.rb +38 -0
  84. data/lib/dtn/messages/system/symbol_not_found.rb +19 -0
  85. data/lib/dtn/messages/system/timestamp.rb +16 -0
  86. data/lib/dtn/messages/unknown.rb +15 -0
  87. data/lib/dtn/registry.rb +57 -0
  88. data/lib/dtn/streaming/client.rb +105 -0
  89. data/lib/dtn/streaming/clients/admin.rb +20 -0
  90. data/lib/dtn/streaming/clients/bar.rb +49 -0
  91. data/lib/dtn/streaming/clients/level2.rb +25 -0
  92. data/lib/dtn/streaming/clients/quote.rb +57 -0
  93. data/lib/dtn/streaming/messages_recorder_observer.rb +26 -0
  94. data/lib/dtn/streaming/request.rb +27 -0
  95. data/lib/dtn/streaming/request_builder.rb +57 -0
  96. data/lib/dtn/streaming/requests/admin/register_client_app.rb +24 -0
  97. data/lib/dtn/streaming/requests/admin/remove_client_app.rb +22 -0
  98. data/lib/dtn/streaming/requests/admin/save_login_info.rb +18 -0
  99. data/lib/dtn/streaming/requests/admin/set_autoconnect.rb +18 -0
  100. data/lib/dtn/streaming/requests/admin/set_client_stats.rb +20 -0
  101. data/lib/dtn/streaming/requests/admin/set_loginid.rb +21 -0
  102. data/lib/dtn/streaming/requests/admin/set_password.rb +21 -0
  103. data/lib/dtn/streaming/requests/bar/unwatch.rb +18 -0
  104. data/lib/dtn/streaming/requests/bar/unwatch_all.rb +16 -0
  105. data/lib/dtn/streaming/requests/bar/watch.rb +81 -0
  106. data/lib/dtn/streaming/requests/bar/watches.rb +21 -0
  107. data/lib/dtn/streaming/requests/level2/connect.rb +16 -0
  108. data/lib/dtn/streaming/requests/level2/disconnect.rb +16 -0
  109. data/lib/dtn/streaming/requests/level2/market_maker_by_id.rb +18 -0
  110. data/lib/dtn/streaming/requests/level2/unwatch.rb +18 -0
  111. data/lib/dtn/streaming/requests/level2/watch.rb +18 -0
  112. data/lib/dtn/streaming/requests/quote/all_update_fieldnames.rb +16 -0
  113. data/lib/dtn/streaming/requests/quote/connect.rb +16 -0
  114. data/lib/dtn/streaming/requests/quote/current_update_fieldnames.rb +16 -0
  115. data/lib/dtn/streaming/requests/quote/fundamental_fieldnames.rb +16 -0
  116. data/lib/dtn/streaming/requests/quote/news_switch.rb +18 -0
  117. data/lib/dtn/streaming/requests/quote/refresh.rb +29 -0
  118. data/lib/dtn/streaming/requests/quote/regional_switch.rb +26 -0
  119. data/lib/dtn/streaming/requests/quote/set_client_name.rb +16 -0
  120. data/lib/dtn/streaming/requests/quote/set_protocol.rb +16 -0
  121. data/lib/dtn/streaming/requests/quote/timestamp.rb +21 -0
  122. data/lib/dtn/streaming/requests/quote/timestamp_switch.rb +18 -0
  123. data/lib/dtn/streaming/requests/quote/trades.rb +21 -0
  124. data/lib/dtn/streaming/requests/quote/unwatch.rb +22 -0
  125. data/lib/dtn/streaming/requests/quote/unwatch_all.rb +16 -0
  126. data/lib/dtn/streaming/requests/quote/update_fields.rb +40 -0
  127. data/lib/dtn/streaming/requests/quote/watch.rb +22 -0
  128. data/lib/dtn/streaming/requests/quote/watches.rb +21 -0
  129. data/lib/dtn/version.rb +1 -1
  130. data/lib/ext/business_day.rb +15 -0
  131. data/lib/tasks/spec_date.rake +13 -0
  132. metadata +126 -6
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Level2
7
+ # Watch a symbol.
8
+ #
9
+ # :param symbol: A valid symbol for a security or derivative.
10
+ class Watch < Request
11
+ def call(symbol:)
12
+ socket.puts "w#{symbol.upcase}\r\n"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Request a list of all fields for level1 summary & updates messages.
8
+ class AllUpdateFieldnames < Request
9
+ def call
10
+ socket.print "S,REQUEST ALL UPDATE FIELDNAMES\r\n"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Connect request
8
+ class Connect < Request
9
+ def call
10
+ socket.print "S,CONNECT\r\n"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Request a list of all current fields for level1 summary & updates messages.
8
+ class CurrentUpdateFieldnames < Request
9
+ def call
10
+ socket.print "S,REQUEST CURRENT UPDATE FIELDNAMES\r\n"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Request a list of all fields in the fundamentals message.
8
+ class FundamentalFieldnames < Request
9
+ def call
10
+ socket.print "S,REQUEST FUNDAMENTAL FIELDNAMES\r\n"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Turn on/off real-time news messages.
8
+ #
9
+ # Can be done for entire client watches only
10
+ class NewsSwitch < Request
11
+ def call(turned_on: true, **)
12
+ socket.puts "S,NEWS#{turned_on ? "ON" : "OFF"}\r\n"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Request a refresh for the symbol.
8
+ #
9
+ # :param symbol: A valid symbol for a security or derivative.
10
+ #
11
+ # IQFeed.exe will send a summary message and a fundamental message
12
+ # for this security after it receives this message. This is useful if
13
+ # for some reason you believe you have bad data for the security in
14
+ # your cache. It cannot be used to get a data snapshot for a symbol
15
+ # you have not subscribed to. IQFeed.exe will ignore refresh requests
16
+ # for symbols you are not watching.
17
+ #
18
+ # It is a good idea to do this for all symbols you are watching if
19
+ # the feed disconnects and reconnects and you haven't gotten an
20
+ # update shortly after the reconnection.
21
+ class Refresh < Request
22
+ def call(symbol:)
23
+ socket.puts "f#{symbol.upcase}\r\n"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Request updates when the regional quote for a symbol changes.
8
+ #
9
+ # :param symbol: A valid symbol for a security or derivative.
10
+ #
11
+ # IQFeed.exe will send a regional message for the symbol whenever
12
+ # the top of book quote on a regional exchange changes. This is
13
+ # the top of book on each exchange where the security or derivative
14
+ # trades, as opposed to the market-wide top of book which you get when
15
+ # you call watch on a symbol. It is NOT the full order book.
16
+ #
17
+ # This produce `level1_summary` message
18
+ class RegionalSwitch < Request
19
+ def call(symbol:, turned_on: true, **)
20
+ socket.puts "S,REG#{turned_on ? "ON" : "OFF"},#{symbol.upcase}\r\n"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Set client name request
8
+ class SetClientName < Request
9
+ def call(name:)
10
+ socket.print "S,SET CLIENT NAME,#{name}\r\n"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Set protocol
8
+ class SetProtocol < Request
9
+ def call
10
+ socket.print "S,SET PROTOCOL,#{Client::PROTOCOL_VERSION}\r\n"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Ask IQFeed.exe to send you a single timestamp message
8
+ # The timestamp message sent by IQFeed.exe is in addition to the
9
+ # messages normally. By default IQFeed.exe sends a timestamp
10
+ # message every second, but you can turn off and turn back on
11
+ # those messages. You probably only want to use this if you have
12
+ # turned off the once a second timestamp messages.
13
+ class Timestamp < Request
14
+ def call(**)
15
+ socket.puts "T\r\n"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Turn on/off automatic (1 msg/sec) timestamp messages.
8
+ #
9
+ # Can be done for entire client watches only
10
+ class TimestampSwitch < Request
11
+ def call(turned_on: true, **)
12
+ socket.puts "S,TIMESTAMPS#{turned_on ? "ON" : "OFF"}\r\n"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Watch a symbol requesting updates only when a trade happens.
8
+ #
9
+ # :param symbol: A valid symbol for a security or derivative.
10
+ #
11
+ # IQFeed.exe will send a summary message for the symbol followed
12
+ # by an update message every time there is a trade.
13
+ class Trades < Request
14
+ def call(symbol:)
15
+ socket.puts "t#{symbol.upcase}\r\n"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Stop watching a symbol.
8
+ #
9
+ # :param symbol: A valid symbol for a security or derivative.
10
+ #
11
+ # IQFeed.exe will send stop sending updates for this security. This
12
+ # unwatches trades watches and trades and quotes watches. This also
13
+ # stops all regional quote updates for this security.
14
+ class Unwatch < Request
15
+ def call(symbol:)
16
+ socket.puts "r#{symbol.upcase}\r\n"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Unwatch all symbols.
8
+ class UnwatchAll < Request
9
+ def call
10
+ socket.puts "S,UNWATCH ALL\r\n"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Set list of fields for level1 summary & updates messages.
8
+ class UpdateFields < Request
9
+ def call(list:)
10
+ arr = normalize(list: list)
11
+ validate(arr: arr)
12
+ arr.delete("Symbol")
13
+ arr.unshift("Symbol")
14
+ client.quote_update_fields = arr
15
+
16
+ socket.print "S,SELECT UPDATE FIELDS,#{arr.join(",")}\r\n"
17
+ end
18
+
19
+ private
20
+
21
+ def normalize(list:)
22
+ case list
23
+ when Array then list
24
+ when String then list.split(",")
25
+ else raise("Only Array or ',' separated string is supported")
26
+ end.map(&:to_s)
27
+ end
28
+
29
+ def validate(arr:)
30
+ diff = arr - Messages::Quote::Level1::ALL_FIELDS.keys
31
+
32
+ return if diff.empty?
33
+
34
+ raise "Found unsupported fields #{diff.join(", ")}"
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Watch a symbol requesting updates for both trades and quotes.
8
+ #
9
+ # :param symbol: A valid symbol for a security or derivative.
10
+ #
11
+ # IQFeed.exe will send a summary message and a fundamental message for
12
+ # the symbol followed by an update message every time there is trade or
13
+ # the top of book quote changes.
14
+ class Watch < Request
15
+ def call(symbol:)
16
+ socket.puts "w#{symbol.upcase}\r\n"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dtn
4
+ module Streaming
5
+ module Requests
6
+ module Quote
7
+ # Request a current watches message.
8
+ #
9
+ # IQFeed.exe will send you a list of all securities currently watched
10
+ #
11
+ # process_watched_symbols is called in each listener when the list of
12
+ # current watches message is received.
13
+ class Watches < Request
14
+ def call
15
+ socket.puts "S,REQUEST WATCHES\r\n"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
data/lib/dtn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dtn
4
- VERSION = "0.0.0"
4
+ VERSION = "0.1.0"
5
5
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "business_time"
4
+ require "holidays"
5
+
6
+ Holidays.between(2.years.ago, Date.today + 1, :us).each do |holiday|
7
+ BusinessTime::Config.holidays << holiday[:date]
8
+ end
9
+
10
+ # Some dates might be manually moved by government, so we should update the the
11
+ # settings accordingly
12
+ BusinessTime::Config.holidays << Date.new(2021, 7, 5)
13
+
14
+ BusinessTime::Config.beginning_of_workday = BusinessTime::ParsedTime.parse("9:30 am")
15
+ BusinessTime::Config.end_of_workday = BusinessTime::ParsedTime.parse("4:00 pm")
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :spec do
4
+ desc "Use previous working day as a date for specs"
5
+ task :set_spec_date do
6
+ require "ext/business_day"
7
+
8
+ day = 1.business_day.ago.to_date
9
+ File.open("spec/current_day", "w") { |f| f.puts day }
10
+
11
+ puts "Set #{day} as a spec working day"
12
+ end
13
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kvokka
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-21 00:00:00.000000000 Z
11
+ date: 2021-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: dry-configurable
14
+ name: concurrent-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.12.0
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.12.0
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: zeitwerk
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".circleci/config.yml"
49
+ - ".env.example"
49
50
  - ".gitignore"
50
51
  - ".hound.yml"
51
52
  - ".rspec"
@@ -58,9 +59,128 @@ files:
58
59
  - Rakefile
59
60
  - bin/console
60
61
  - bin/setup
62
+ - docker-compose.yml
61
63
  - dtn.gemspec
62
64
  - lib/dtn.rb
65
+ - lib/dtn/concerns/id.rb
66
+ - lib/dtn/concerns/validation.rb
67
+ - lib/dtn/helpers/catalog.rb
68
+ - lib/dtn/lookups/catalog/listed_markets.rb
69
+ - lib/dtn/lookups/catalog/naic_codes.rb
70
+ - lib/dtn/lookups/catalog/security_types.rb
71
+ - lib/dtn/lookups/catalog/sic_codes.rb
72
+ - lib/dtn/lookups/catalog/trade_conditions.rb
73
+ - lib/dtn/lookups/historical/base.rb
74
+ - lib/dtn/lookups/historical/daily_datapoint.rb
75
+ - lib/dtn/lookups/historical/daily_timeframe.rb
76
+ - lib/dtn/lookups/historical/datapoint.rb
77
+ - lib/dtn/lookups/historical/interval.rb
78
+ - lib/dtn/lookups/historical/interval_datapoint.rb
79
+ - lib/dtn/lookups/historical/interval_day.rb
80
+ - lib/dtn/lookups/historical/interval_timeframe.rb
81
+ - lib/dtn/lookups/historical/monthly_datapoint.rb
82
+ - lib/dtn/lookups/historical/tick.rb
83
+ - lib/dtn/lookups/historical/tick_datapoint.rb
84
+ - lib/dtn/lookups/historical/tick_day.rb
85
+ - lib/dtn/lookups/historical/tick_timeframe.rb
86
+ - lib/dtn/lookups/historical/weekly_datapoint.rb
87
+ - lib/dtn/lookups/news/base.rb
88
+ - lib/dtn/lookups/news/config.rb
89
+ - lib/dtn/lookups/news/headline.rb
90
+ - lib/dtn/lookups/news/story.rb
91
+ - lib/dtn/lookups/news/story_count.rb
92
+ - lib/dtn/lookups/request.rb
93
+ - lib/dtn/lookups/symbol/base.rb
94
+ - lib/dtn/lookups/symbol/by_filter.rb
95
+ - lib/dtn/lookups/symbol/by_naic.rb
96
+ - lib/dtn/lookups/symbol/by_sic.rb
97
+ - lib/dtn/message.rb
98
+ - lib/dtn/messages/bar/base.rb
99
+ - lib/dtn/messages/bar/current_bar.rb
100
+ - lib/dtn/messages/bar/historical_bar.rb
101
+ - lib/dtn/messages/bar/update_bar.rb
102
+ - lib/dtn/messages/catalog/code.rb
103
+ - lib/dtn/messages/catalog/listed_markets.rb
104
+ - lib/dtn/messages/catalog/naic_codes.rb
105
+ - lib/dtn/messages/catalog/security_types.rb
106
+ - lib/dtn/messages/catalog/sic_codes.rb
107
+ - lib/dtn/messages/catalog/trade_conditions.rb
108
+ - lib/dtn/messages/historical/daily_weekly_monthly.rb
109
+ - lib/dtn/messages/historical/interval.rb
110
+ - lib/dtn/messages/historical/tick.rb
111
+ - lib/dtn/messages/level2/level2_update.rb
112
+ - lib/dtn/messages/level2/market_maker_name.rb
113
+ - lib/dtn/messages/message_with_simple_parser.rb
114
+ - lib/dtn/messages/news/base.rb
115
+ - lib/dtn/messages/news/config.rb
116
+ - lib/dtn/messages/news/headline.rb
117
+ - lib/dtn/messages/news/story.rb
118
+ - lib/dtn/messages/news/story_count.rb
119
+ - lib/dtn/messages/quote/level1.rb
120
+ - lib/dtn/messages/quote/level1_fundamental.rb
121
+ - lib/dtn/messages/quote/level1_news.rb
122
+ - lib/dtn/messages/quote/level1_regional.rb
123
+ - lib/dtn/messages/quote/level1_summary.rb
124
+ - lib/dtn/messages/quote/level1_update.rb
125
+ - lib/dtn/messages/symbol/base.rb
126
+ - lib/dtn/messages/symbol/by_filter.rb
127
+ - lib/dtn/messages/symbol/by_naic.rb
128
+ - lib/dtn/messages/symbol/by_sic.rb
129
+ - lib/dtn/messages/system/client_stats.rb
130
+ - lib/dtn/messages/system/customer_info.rb
131
+ - lib/dtn/messages/system/end_of_message_characters.rb
132
+ - lib/dtn/messages/system/error.rb
133
+ - lib/dtn/messages/system/generic.rb
134
+ - lib/dtn/messages/system/no_data_characters.rb
135
+ - lib/dtn/messages/system/stats.rb
136
+ - lib/dtn/messages/system/symbol_not_found.rb
137
+ - lib/dtn/messages/system/timestamp.rb
138
+ - lib/dtn/messages/unknown.rb
139
+ - lib/dtn/registry.rb
140
+ - lib/dtn/streaming/client.rb
141
+ - lib/dtn/streaming/clients/admin.rb
142
+ - lib/dtn/streaming/clients/bar.rb
143
+ - lib/dtn/streaming/clients/level2.rb
144
+ - lib/dtn/streaming/clients/quote.rb
145
+ - lib/dtn/streaming/messages_recorder_observer.rb
146
+ - lib/dtn/streaming/request.rb
147
+ - lib/dtn/streaming/request_builder.rb
148
+ - lib/dtn/streaming/requests/admin/register_client_app.rb
149
+ - lib/dtn/streaming/requests/admin/remove_client_app.rb
150
+ - lib/dtn/streaming/requests/admin/save_login_info.rb
151
+ - lib/dtn/streaming/requests/admin/set_autoconnect.rb
152
+ - lib/dtn/streaming/requests/admin/set_client_stats.rb
153
+ - lib/dtn/streaming/requests/admin/set_loginid.rb
154
+ - lib/dtn/streaming/requests/admin/set_password.rb
155
+ - lib/dtn/streaming/requests/bar/unwatch.rb
156
+ - lib/dtn/streaming/requests/bar/unwatch_all.rb
157
+ - lib/dtn/streaming/requests/bar/watch.rb
158
+ - lib/dtn/streaming/requests/bar/watches.rb
159
+ - lib/dtn/streaming/requests/level2/connect.rb
160
+ - lib/dtn/streaming/requests/level2/disconnect.rb
161
+ - lib/dtn/streaming/requests/level2/market_maker_by_id.rb
162
+ - lib/dtn/streaming/requests/level2/unwatch.rb
163
+ - lib/dtn/streaming/requests/level2/watch.rb
164
+ - lib/dtn/streaming/requests/quote/all_update_fieldnames.rb
165
+ - lib/dtn/streaming/requests/quote/connect.rb
166
+ - lib/dtn/streaming/requests/quote/current_update_fieldnames.rb
167
+ - lib/dtn/streaming/requests/quote/fundamental_fieldnames.rb
168
+ - lib/dtn/streaming/requests/quote/news_switch.rb
169
+ - lib/dtn/streaming/requests/quote/refresh.rb
170
+ - lib/dtn/streaming/requests/quote/regional_switch.rb
171
+ - lib/dtn/streaming/requests/quote/set_client_name.rb
172
+ - lib/dtn/streaming/requests/quote/set_protocol.rb
173
+ - lib/dtn/streaming/requests/quote/timestamp.rb
174
+ - lib/dtn/streaming/requests/quote/timestamp_switch.rb
175
+ - lib/dtn/streaming/requests/quote/trades.rb
176
+ - lib/dtn/streaming/requests/quote/unwatch.rb
177
+ - lib/dtn/streaming/requests/quote/unwatch_all.rb
178
+ - lib/dtn/streaming/requests/quote/update_fields.rb
179
+ - lib/dtn/streaming/requests/quote/watch.rb
180
+ - lib/dtn/streaming/requests/quote/watches.rb
63
181
  - lib/dtn/version.rb
182
+ - lib/ext/business_day.rb
183
+ - lib/tasks/spec_date.rake
64
184
  homepage: https://github.com/kvokka/dtn
65
185
  licenses:
66
186
  - MIT
@@ -83,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
203
  - !ruby/object:Gem::Version
84
204
  version: '0'
85
205
  requirements: []
86
- rubygems_version: 3.1.4
206
+ rubygems_version: 3.2.15
87
207
  signing_key:
88
208
  specification_version: 4
89
209
  summary: Unofficial DTN (IQfeed) API.