dtn 0.0.0 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +21 -5
- data/.env.example +5 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +7 -0
- data/CHANGELOG.md +5 -1
- data/Gemfile +3 -1
- data/README.md +288 -9
- data/Rakefile +2 -0
- data/docker-compose.yml +34 -0
- data/dtn.gemspec +1 -1
- data/lib/dtn.rb +18 -1
- data/lib/dtn/concerns/id.rb +36 -0
- data/lib/dtn/concerns/validation.rb +71 -0
- data/lib/dtn/helpers/catalog.rb +32 -0
- data/lib/dtn/lookups/catalog/listed_markets.rb +12 -0
- data/lib/dtn/lookups/catalog/naic_codes.rb +12 -0
- data/lib/dtn/lookups/catalog/security_types.rb +12 -0
- data/lib/dtn/lookups/catalog/sic_codes.rb +12 -0
- data/lib/dtn/lookups/catalog/trade_conditions.rb +12 -0
- data/lib/dtn/lookups/historical/base.rb +43 -0
- data/lib/dtn/lookups/historical/daily_datapoint.rb +13 -0
- data/lib/dtn/lookups/historical/daily_timeframe.rb +34 -0
- data/lib/dtn/lookups/historical/datapoint.rb +27 -0
- data/lib/dtn/lookups/historical/interval.rb +14 -0
- data/lib/dtn/lookups/historical/interval_datapoint.rb +31 -0
- data/lib/dtn/lookups/historical/interval_day.rb +32 -0
- data/lib/dtn/lookups/historical/interval_timeframe.rb +37 -0
- data/lib/dtn/lookups/historical/monthly_datapoint.rb +13 -0
- data/lib/dtn/lookups/historical/tick.rb +14 -0
- data/lib/dtn/lookups/historical/tick_datapoint.rb +24 -0
- data/lib/dtn/lookups/historical/tick_day.rb +34 -0
- data/lib/dtn/lookups/historical/tick_timeframe.rb +31 -0
- data/lib/dtn/lookups/historical/weekly_datapoint.rb +13 -0
- data/lib/dtn/lookups/news/base.rb +85 -0
- data/lib/dtn/lookups/news/config.rb +25 -0
- data/lib/dtn/lookups/news/headline.rb +40 -0
- data/lib/dtn/lookups/news/story.rb +40 -0
- data/lib/dtn/lookups/news/story_count.rb +36 -0
- data/lib/dtn/lookups/request.rb +92 -0
- data/lib/dtn/lookups/symbol/base.rb +11 -0
- data/lib/dtn/lookups/symbol/by_filter.rb +58 -0
- data/lib/dtn/lookups/symbol/by_naic.rb +26 -0
- data/lib/dtn/lookups/symbol/by_sic.rb +26 -0
- data/lib/dtn/message.rb +29 -0
- data/lib/dtn/messages/bar/base.rb +30 -0
- data/lib/dtn/messages/bar/current_bar.rb +11 -0
- data/lib/dtn/messages/bar/historical_bar.rb +11 -0
- data/lib/dtn/messages/bar/update_bar.rb +11 -0
- data/lib/dtn/messages/catalog/code.rb +22 -0
- data/lib/dtn/messages/catalog/listed_markets.rb +20 -0
- data/lib/dtn/messages/catalog/naic_codes.rb +10 -0
- data/lib/dtn/messages/catalog/security_types.rb +20 -0
- data/lib/dtn/messages/catalog/sic_codes.rb +10 -0
- data/lib/dtn/messages/catalog/trade_conditions.rb +20 -0
- data/lib/dtn/messages/historical/daily_weekly_monthly.rb +25 -0
- data/lib/dtn/messages/historical/interval.rb +28 -0
- data/lib/dtn/messages/historical/tick.rb +31 -0
- data/lib/dtn/messages/level2/level2_update.rb +38 -0
- data/lib/dtn/messages/level2/market_maker_name.rb +20 -0
- data/lib/dtn/messages/message_with_simple_parser.rb +38 -0
- data/lib/dtn/messages/news/base.rb +34 -0
- data/lib/dtn/messages/news/config.rb +24 -0
- data/lib/dtn/messages/news/headline.rb +25 -0
- data/lib/dtn/messages/news/story.rb +20 -0
- data/lib/dtn/messages/news/story_count.rb +21 -0
- data/lib/dtn/messages/quote/level1.rb +150 -0
- data/lib/dtn/messages/quote/level1_fundamental.rb +17 -0
- data/lib/dtn/messages/quote/level1_news.rb +27 -0
- data/lib/dtn/messages/quote/level1_regional.rb +31 -0
- data/lib/dtn/messages/quote/level1_summary.rb +19 -0
- data/lib/dtn/messages/quote/level1_update.rb +21 -0
- data/lib/dtn/messages/symbol/base.rb +35 -0
- data/lib/dtn/messages/symbol/by_filter.rb +11 -0
- data/lib/dtn/messages/symbol/by_naic.rb +22 -0
- data/lib/dtn/messages/symbol/by_sic.rb +22 -0
- data/lib/dtn/messages/system/client_stats.rb +46 -0
- data/lib/dtn/messages/system/customer_info.rb +30 -0
- data/lib/dtn/messages/system/end_of_message_characters.rb +22 -0
- data/lib/dtn/messages/system/error.rb +20 -0
- data/lib/dtn/messages/system/generic.rb +98 -0
- data/lib/dtn/messages/system/no_data_characters.rb +22 -0
- data/lib/dtn/messages/system/stats.rb +38 -0
- data/lib/dtn/messages/system/symbol_not_found.rb +19 -0
- data/lib/dtn/messages/system/timestamp.rb +16 -0
- data/lib/dtn/messages/unknown.rb +15 -0
- data/lib/dtn/registry.rb +57 -0
- data/lib/dtn/streaming/client.rb +105 -0
- data/lib/dtn/streaming/clients/admin.rb +20 -0
- data/lib/dtn/streaming/clients/bar.rb +49 -0
- data/lib/dtn/streaming/clients/level2.rb +25 -0
- data/lib/dtn/streaming/clients/quote.rb +57 -0
- data/lib/dtn/streaming/messages_recorder_observer.rb +26 -0
- data/lib/dtn/streaming/request.rb +27 -0
- data/lib/dtn/streaming/request_builder.rb +57 -0
- data/lib/dtn/streaming/requests/admin/register_client_app.rb +24 -0
- data/lib/dtn/streaming/requests/admin/remove_client_app.rb +22 -0
- data/lib/dtn/streaming/requests/admin/save_login_info.rb +18 -0
- data/lib/dtn/streaming/requests/admin/set_autoconnect.rb +18 -0
- data/lib/dtn/streaming/requests/admin/set_client_stats.rb +20 -0
- data/lib/dtn/streaming/requests/admin/set_loginid.rb +21 -0
- data/lib/dtn/streaming/requests/admin/set_password.rb +21 -0
- data/lib/dtn/streaming/requests/bar/unwatch.rb +18 -0
- data/lib/dtn/streaming/requests/bar/unwatch_all.rb +16 -0
- data/lib/dtn/streaming/requests/bar/watch.rb +81 -0
- data/lib/dtn/streaming/requests/bar/watches.rb +21 -0
- data/lib/dtn/streaming/requests/level2/connect.rb +16 -0
- data/lib/dtn/streaming/requests/level2/disconnect.rb +16 -0
- data/lib/dtn/streaming/requests/level2/market_maker_by_id.rb +18 -0
- data/lib/dtn/streaming/requests/level2/unwatch.rb +18 -0
- data/lib/dtn/streaming/requests/level2/watch.rb +18 -0
- data/lib/dtn/streaming/requests/quote/all_update_fieldnames.rb +16 -0
- data/lib/dtn/streaming/requests/quote/connect.rb +16 -0
- data/lib/dtn/streaming/requests/quote/current_update_fieldnames.rb +16 -0
- data/lib/dtn/streaming/requests/quote/fundamental_fieldnames.rb +16 -0
- data/lib/dtn/streaming/requests/quote/news_switch.rb +18 -0
- data/lib/dtn/streaming/requests/quote/refresh.rb +29 -0
- data/lib/dtn/streaming/requests/quote/regional_switch.rb +26 -0
- data/lib/dtn/streaming/requests/quote/set_client_name.rb +16 -0
- data/lib/dtn/streaming/requests/quote/set_protocol.rb +16 -0
- data/lib/dtn/streaming/requests/quote/timestamp.rb +21 -0
- data/lib/dtn/streaming/requests/quote/timestamp_switch.rb +18 -0
- data/lib/dtn/streaming/requests/quote/trades.rb +21 -0
- data/lib/dtn/streaming/requests/quote/unwatch.rb +22 -0
- data/lib/dtn/streaming/requests/quote/unwatch_all.rb +16 -0
- data/lib/dtn/streaming/requests/quote/update_fields.rb +40 -0
- data/lib/dtn/streaming/requests/quote/watch.rb +22 -0
- data/lib/dtn/streaming/requests/quote/watches.rb +21 -0
- data/lib/dtn/version.rb +1 -1
- data/lib/ext/business_day.rb +15 -0
- data/lib/tasks/spec_date.rake +13 -0
- 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
|
+
# 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,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
@@ -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.
|
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-
|
11
|
+
date: 2021-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: concurrent-ruby
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
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:
|
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.
|
206
|
+
rubygems_version: 3.2.15
|
87
207
|
signing_key:
|
88
208
|
specification_version: 4
|
89
209
|
summary: Unofficial DTN (IQfeed) API.
|