sqa 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41df647860d7465185b8f069d1fb51edcb540d4114cfd56c898e3373426e0bb8
4
- data.tar.gz: 130b1023a4530a645ea90bf323c16dd4fb22a887222e073209b8edbfeeb6731f
3
+ metadata.gz: 0fcc7dbda5b62549fa1fb9691bf7ef9af1a0ba5dfcff63494ce2cdf6ca7e578a
4
+ data.tar.gz: 9527508fa1573a09536ef4bf735671761d722d1611494d3aeb8615ba25385f2c
5
5
  SHA512:
6
- metadata.gz: b28c7bf4231e3ced4046e83f5afd256a0dc155500493b8d2c3cee43695e8ef203534a0642dc4028830f3d068653d6a9016a785b3343611a18209cb1cfb6f4694
7
- data.tar.gz: 20ee19fe13781e473953ed4fcae73ce8e687ce1808fc74fa02d834364b7b02df14c7dab4cc0390efbae0f48328d71f27aab96318fad28052588d7b623abf4fe3
6
+ metadata.gz: c5ce2164cd95cf91c62e054dad4fef84ed105d7713207bf5f5e39fbad282785184217ed303fe73b24801b871e9ca0db371c0f514949803aace37b788ebec6140
7
+ data.tar.gz: f7336d71e365388d571267e87fbdd82a66dbd532da8e386e9670e1a9f7034d2279202e6df16ce30d14410b2ab39923ecf4bb78e0941b554bf11ee3101fdb9a41
@@ -1 +1 @@
1
- c5eea4fb74e6ab7b7b1715a81598585ec540a3eb1e9b902ca339ff0a2ba9cc7624ae3f43e00b5fbbad1d3d510ed938e8f91154c0bee2e14d6503564b1b0ccfb1
1
+ ae291d1c8a3a80fc6f24a6a1194c6db1b6e1fbdbee586546ae34db6ee304a3e431ea59a154ea976af0f25f3b0d6519f2e0a1aad4ddf3c3cdf77b7d37aabf425f
@@ -0,0 +1 @@
1
+ d4f3ab1bf26de034f0f044a5cab9d86e61221fc2d160056c1c24c166586e7ce72d90095ebea01965f5cabf989c4116e7409f8fc6749cabe7d5a13e34f87f4b96
@@ -0,0 +1,62 @@
1
+ # Alpha Vantage
2
+ ## Technical Indicators
3
+
4
+ The following technical indicators are available from Alpha Vantage
5
+ using a free API key.
6
+
7
+ | Acronym | Indicator Description |
8
+ |-----------|----------------------------------------------------------|
9
+ | AD | Accumulation/Distribution |
10
+ | ADOSC | Accumulation/Distribution Oscillator |
11
+ | ADX | Average Directional Index |
12
+ | ADXR | Average Directional Movement Rating |
13
+ | APO | Absolute Price Oscillator |
14
+ | AROON | Aroon Indicator |
15
+ | AROONOSC | Aroon Oscillator |
16
+ | ATR | Average True Range |
17
+ | BBANDS | Bollinger Bands |
18
+ | BOP | Balance of Power |
19
+ | CCI | Commodity Channel Index |
20
+ | CMO | Chande Momentum Oscillator |
21
+ | DEMA | Double Exponential Moving Average |
22
+ | DX | Directional Movement Index |
23
+ | EMA | Exponential Moving Average |
24
+ | HT_DCPERIOD | Hilbert Transform - Dominant Cycle Period |
25
+ | HT_DCPHASE | Hilbert Transform - Dominant Cycle Phase |
26
+ | HT_PHASOR | Hilbert Transform - Phasor Components |
27
+ | HT_SINE | Hilbert Transform - SineWave |
28
+ | HT_TRENDLINE | Hilbert Transform - Instantaneous Trendline |
29
+ | HT_TRENDMODE | Hilbert Transform - Trend vs Cycle Mode |
30
+ | KAMA | Kaufman Adaptive Moving Average |
31
+ | MACD | Moving Average Convergence Divergence |
32
+ | MACDEXT | MACD with controllable MA type |
33
+ | MAMA | MESA Adaptive Moving Average |
34
+ | MFI | Money Flow Index |
35
+ | MIDPOINT | MidPoint over period |
36
+ | MIDPRICE | Midpoint Price over period |
37
+ | MINUS_DI | Minus Directional Indicator |
38
+ | MINUS_DM | Minus Directional Movement |
39
+ | MOM | Momentum |
40
+ | NATR | Normalized Average True Range |
41
+ | OBV | On Balance Volume |
42
+ | PLUS_DI | Plus Directional Indicator |
43
+ | PLUS_DM | Plus Directional Movement |
44
+ | PPO | Percentage Price Oscillator |
45
+ | ROC | Rate of Change |
46
+ | ROCR | Rate of Change Ratio |
47
+ | RSI | Relative Strength Index |
48
+ | SAR | Parabolic SAR |
49
+ | SMA | Simple Moving Average |
50
+ | STOCH | Stochastic Oscillator |
51
+ | STOCHF | Stochastic Fast |
52
+ | STOCHRSI | Stochastic Relative Strength Index |
53
+ | T3 | Triple Exponential Moving Average (T3) |
54
+ | TEMA | Triple Exponential Moving Average |
55
+ | TRANGE | True Range |
56
+ | TRIMA | Triangular Moving Average |
57
+ | TRIX | 1-day Rate of Change of a Triple Smooth EMA |
58
+ | ULTOSC | Ultimate Oscillator |
59
+ | VWAP | Volume Weighted Average Price |
60
+ | WILLR | Williams' %R |
61
+ | WMA | Weighted Moving Average |
62
+
@@ -1,6 +1,5 @@
1
1
  # lib/patches/daru/plotting/svg-graph.rb
2
2
 
3
- require 'svg-graph'
4
3
 
5
4
  require_relative 'SvgGraph/category.rb'
6
5
  require_relative 'SvgGraph/vector.rb'
data/lib/sqa/cli.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # lib/sqa/cli.rb
2
2
 
3
- require 'tty-option'
4
3
 
5
4
  require_relative '../sqa'
6
5
 
data/lib/sqa/config.rb CHANGED
@@ -6,17 +6,18 @@
6
6
  # config file ..... overrides envar
7
7
  # command line parameters ...... overrides config file
8
8
 
9
- require 'hashie'
10
- require 'yaml'
11
- require 'json'
12
- require 'toml-rb'
13
-
14
9
 
15
10
  module SQA
16
11
  class Config < Hashie::Dash
17
12
  include Hashie::Extensions::Dash::PropertyTranslation
18
13
  include Hashie::Extensions::Coercion
19
- include Hashie::Extensions::Dash::PredefinedValues
14
+
15
+ # FIXME: Getting undefined error PredefinedValues
16
+ # I'm thinking that Ruby is dropping it from the ObjectSpace
17
+ # Looks like it is only used for the log level. Should
18
+ # able to work around that.
19
+ #
20
+ # include Hashie::Extensions::Dash::PredefinedValues
20
21
 
21
22
  property :config_file #,a String filepath for the current config overriden by cli options
22
23
  property :dump_config # a String filepath into which to dump the current config
@@ -4,8 +4,6 @@
4
4
  # Using the Alpha Vantage JSON interface
5
5
  #
6
6
 
7
- require 'faraday'
8
- require 'json'
9
7
 
10
8
  class SQA::DataFrame < Daru::DataFrame
11
9
  class AlphaVantage
@@ -1,8 +1,6 @@
1
1
  # lib/sqa/data_frame/yahoo_finance.rb
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'faraday'
5
- require 'nokogiri'
6
4
 
7
5
  class SQA::DataFrame < Daru::DataFrame
8
6
  class YahooFinance
data/lib/sqa/init.rb ADDED
@@ -0,0 +1,46 @@
1
+ # sqa/lib/sqa/init.rb
2
+
3
+ module SQA
4
+ class << self
5
+ @@config = nil
6
+
7
+ # Initializes the SQA modules
8
+ # returns the configuration
9
+ #
10
+ def init(argv=ARGV)
11
+ if argv.is_a? String
12
+ argv = argv.split()
13
+ end
14
+
15
+
16
+ # Ran at SQA::Config elaboration time
17
+ # @@config = Config.new
18
+
19
+ if defined? CLI
20
+ CLI.run(argv)
21
+ else
22
+ # There are no real command line parameters
23
+ # because the sqa gem is being required within
24
+ # the context of a larger program.
25
+ end
26
+
27
+ config.data_dir = homify(config.data_dir)
28
+
29
+ Daru.lazy_update = config.lazy_update
30
+ Daru.plotting_library = config.plotting_library
31
+
32
+ config
33
+ end
34
+
35
+ def debug?() = @@config.debug?
36
+ def verbose?() = @@config.verbose?
37
+
38
+ def homify(filepath) = filepath.gsub(/^~/, Nenv.home)
39
+ def data_dir() = Pathname.new(config.data_dir)
40
+ def config() = @@config
41
+
42
+ def config=(an_object)
43
+ @@config = an_object
44
+ end
45
+ end
46
+ end
data/lib/sqa/stock.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  # lib/sqa/stock.rb
2
2
 
3
- require 'active_support/core_ext/string' # for String#underscore
4
- require 'hashie' # for Hashie::Mash
5
-
6
3
 
7
4
  # SMELL: SQA::Stock is now pretty coupled to the Alpha Vantage
8
5
  # API service. Should that stuff be extracted into a
@@ -101,13 +98,13 @@ class SQA::Stock
101
98
  def top
102
99
  return @@top unless @@top.nil?
103
100
 
104
- mash = Hashie::Mash.new(
105
- JSON.parse(
106
- CONNECTION.get(
107
- "/query?function=TOP_GAINERS_LOSERS&apikey=#{Nenv.av_api_key}"
108
- ).to_hash[:body]
109
- )
110
- )
101
+ a_hash = JSON.parse(
102
+ CONNECTION.get(
103
+ "/query?function=TOP_GAINERS_LOSERS&apikey=#{Nenv.av_api_key}"
104
+ ).to_hash[:body]
105
+ )
106
+
107
+ mash = Hashie::Mash.new(a_hash)
111
108
 
112
109
  keys = mash.top_gainers.first.keys
113
110
 
data/lib/sqa/version.rb CHANGED
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'sem_version'
4
- require 'sem_version/core_ext'
5
-
6
3
  module SQA
7
- VERSION = "0.0.14"
4
+ VERSION = "0.0.15"
8
5
 
9
6
  class << self
10
7
  def version
data/lib/sqa/web.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # lib/sqa/command/web.rb
2
2
 
3
- require 'tty-option'
3
+ # require 'tty-option'
4
4
 
5
5
 
6
6
  module SQA
data/lib/sqa.rb CHANGED
@@ -1,77 +1,57 @@
1
1
  # lib/sqa.rb
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'active_support'
5
- require 'active_support/core_ext/string'
6
- require 'amazing_print'
7
- require 'daru'
8
- require 'date'
9
- require 'descriptive_statistics'
10
- require 'nenv'
11
- require 'pathname'
4
+ # TODO: Create a new gem for the dumbstockapi website
12
5
 
13
- require_relative "sqa/version"
14
- require_relative "sqa/errors"
6
+ #############################################
7
+ ## Standard Libraries
15
8
 
9
+ require 'date'
10
+ require 'pathname'
16
11
 
17
12
  unless defined?(HOME)
18
- HOME = Pathname.new(Nenv.home)
13
+ HOME = Pathname.new(ENV['HOME'])
19
14
  end
20
15
 
16
+ #############################################
17
+ ## Additional Libraries
21
18
 
22
- module SQA
23
- class << self
24
- @@config = nil
25
-
26
- # Initializes the SQA modules
27
- # returns the configuration
28
- #
29
- def init(argv=ARGV)
30
- if argv.is_a? String
31
- argv = argv.split()
32
- end
33
-
34
-
35
- # Ran at SQA::Config elaboration time
36
- # @@config = Config.new
37
-
38
- if defined? CLI
39
- CLI.run(argv)
40
- else
41
- # There are no real command line parameters
42
- # because the sqa gem is being required within
43
- # the context of a larger program.
44
- end
45
-
46
- config.data_dir = homify(config.data_dir)
47
-
48
- Daru.lazy_update = config.lazy_update
49
- Daru.plotting_library = config.plotting_library
19
+ require 'active_support/core_ext/string'
20
+ require 'alphavantage' # TODO: add rate limiter to it
21
+ require 'amazing_print'
22
+ require 'daru' # TODO: Replace this gem with something better
23
+ require 'descriptive_statistics'
24
+ require 'faraday'
25
+ require 'hashie'
26
+ require 'nenv'
27
+ require 'sem_version'
28
+ require 'sem_version/core_ext'
29
+ require 'tty-option'
30
+ require 'tty-table'
50
31
 
51
- config
52
- end
53
32
 
54
- def debug?() = @@config.debug?
55
- def verbose?() = @@config.verbose?
33
+ #############################################
34
+ ## SQA soecufuc code
56
35
 
57
- def homify(filepath) = filepath.gsub(/^~/, Nenv.home)
58
- def data_dir() = Pathname.new(config.data_dir)
59
- def config() = @@config
36
+ require_relative "sqa/version"
37
+ require_relative "sqa/errors"
60
38
 
61
- def config=(an_object)
62
- @@config = an_object
63
- end
64
- end
65
- end
39
+ require_relative 'sqa/init.rb'
66
40
 
67
41
  # require_relative "patches/daru" # TODO: extract Daru::DataFrame in new gem sqa-data_frame
68
42
 
43
+ # TODO: Some of these components make direct calls to the
44
+ # Alpha Vantage API. Convert them to use the
45
+ # alphavantage gem.
46
+
69
47
  require_relative "sqa/config"
70
- require_relative "sqa/constants"
71
- require_relative "sqa/data_frame"
48
+ require_relative "sqa/constants" # SMELL: more app than gem
49
+ require_relative "sqa/data_frame" # TODO: drop the daru gem
72
50
  require_relative "sqa/indicator"
73
51
  require_relative "sqa/portfolio"
74
52
  require_relative "sqa/strategy"
75
53
  require_relative "sqa/stock"
76
54
  require_relative "sqa/ticker"
77
- require_relative "sqa/trade"
55
+ require_relative "sqa/trade" # SMELL: Not really a core gem; more of an application thing
56
+
57
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-23 00:00:00.000000000 Z
11
+ date: 2023-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: daru
28
+ name: alphavantage
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,49 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: descriptive_statistics
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: hashie
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: nenv
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: tty-logger
42
+ name: daru
85
43
  requirement: !ruby/object:Gem::Requirement
86
44
  requirements:
87
45
  - - ">="
@@ -95,7 +53,7 @@ dependencies:
95
53
  - !ruby/object:Gem::Version
96
54
  version: '0'
97
55
  - !ruby/object:Gem::Dependency
98
- name: tty-markdown
56
+ name: descriptive_statistics
99
57
  requirement: !ruby/object:Gem::Requirement
100
58
  requirements:
101
59
  - - ">="
@@ -109,7 +67,7 @@ dependencies:
109
67
  - !ruby/object:Gem::Version
110
68
  version: '0'
111
69
  - !ruby/object:Gem::Dependency
112
- name: tty-option
70
+ name: faraday
113
71
  requirement: !ruby/object:Gem::Requirement
114
72
  requirements:
115
73
  - - ">="
@@ -123,21 +81,21 @@ dependencies:
123
81
  - !ruby/object:Gem::Version
124
82
  version: '0'
125
83
  - !ruby/object:Gem::Dependency
126
- name: tty-progressbar
84
+ name: hashie
127
85
  requirement: !ruby/object:Gem::Requirement
128
86
  requirements:
129
- - - ">="
87
+ - - "~>"
130
88
  - !ruby/object:Gem::Version
131
- version: '0'
89
+ version: 4.1.0
132
90
  type: :runtime
133
91
  prerelease: false
134
92
  version_requirements: !ruby/object:Gem::Requirement
135
93
  requirements:
136
- - - ">="
94
+ - - "~>"
137
95
  - !ruby/object:Gem::Version
138
- version: '0'
96
+ version: 4.1.0
139
97
  - !ruby/object:Gem::Dependency
140
- name: tty-prompt
98
+ name: nenv
141
99
  requirement: !ruby/object:Gem::Requirement
142
100
  requirements:
143
101
  - - ">="
@@ -151,7 +109,7 @@ dependencies:
151
109
  - !ruby/object:Gem::Version
152
110
  version: '0'
153
111
  - !ruby/object:Gem::Dependency
154
- name: tty-reader
112
+ name: sem_version
155
113
  requirement: !ruby/object:Gem::Requirement
156
114
  requirements:
157
115
  - - ">="
@@ -165,7 +123,7 @@ dependencies:
165
123
  - !ruby/object:Gem::Version
166
124
  version: '0'
167
125
  - !ruby/object:Gem::Dependency
168
- name: tty-spinner
126
+ name: tty-option
169
127
  requirement: !ruby/object:Gem::Requirement
170
128
  requirements:
171
129
  - - ">="
@@ -283,6 +241,7 @@ files:
283
241
  - checksums/sqa-0.0.12.gem.sha512
284
242
  - checksums/sqa-0.0.13.gem.sha512
285
243
  - checksums/sqa-0.0.14.gem.sha512
244
+ - checksums/sqa-0.0.15.gem.sha512
286
245
  - checksums/sqa-0.0.2.gem.sha512
287
246
  - checksums/sqa-0.0.3.gem.sha512
288
247
  - checksums/sqa-0.0.4.gem.sha512
@@ -293,6 +252,7 @@ files:
293
252
  - checksums/sqa-0.0.9.gem.sha512
294
253
  - docs/.gitignore
295
254
  - docs/README.md
255
+ - docs/alpha_vantage_technical_indicators.md
296
256
  - docs/average_true_range.md
297
257
  - docs/bollinger_bands.md
298
258
  - docs/candlestick_pattern_recognizer.md
@@ -356,6 +316,7 @@ files:
356
316
  - lib/sqa/indicator/simple_moving_average_trend.rb
357
317
  - lib/sqa/indicator/stochastic_oscillator.rb
358
318
  - lib/sqa/indicator/true_range.rb
319
+ - lib/sqa/init.rb
359
320
  - lib/sqa/portfolio.rb
360
321
  - lib/sqa/stock.rb
361
322
  - lib/sqa/strategy.rb