sqa 0.0.21 → 0.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.config/tocer/configuration.yml +1 -0
- data/CHANGELOG.md +4 -0
- data/README.md +141 -4
- data/checksums/sqa-0.0.21.gem.sha512 +1 -1
- data/checksums/sqa-0.0.22.gem.sha512 +1 -0
- data/checksums/sqa-0.0.23.gem.sha512 +1 -0
- data/checksums/sqa-0.0.24.gem.sha512 +1 -0
- data/docs/ta_lib.md +160 -0
- data/lib/patches/dry-cli.rb +228 -0
- data/lib/sqa/cli.rb +16 -127
- data/lib/sqa/{analysis.rb → commands/analysis.rb} +17 -14
- data/lib/sqa/commands/base.rb +139 -0
- data/lib/sqa/{web.rb → commands/web.rb} +78 -38
- data/lib/sqa/commands.rb +22 -0
- data/lib/sqa/config.rb +22 -9
- data/lib/sqa/data_frame/yahoo_finance.rb +7 -0
- data/lib/sqa/data_frame.rb +23 -12
- data/lib/sqa/indicator/average_true_range.rb +0 -10
- data/lib/sqa/init.rb +1 -1
- data/lib/sqa/plugin_manager.rb +20 -0
- data/lib/sqa/stock.rb +30 -1
- data/lib/sqa/strategy/common.rb +0 -2
- data/lib/sqa/version.rb +1 -1
- data/lib/sqa.rb +22 -2
- metadata +35 -13
@@ -13,8 +13,6 @@ class SQA::Indicator; class << self
|
|
13
13
|
true_ranges = true_range(high_prices, low_prices, close_prices)
|
14
14
|
atr_values = []
|
15
15
|
|
16
|
-
# debug_me{[ :period, :true_ranges ]}
|
17
|
-
|
18
16
|
window_span = period - 1
|
19
17
|
|
20
18
|
true_ranges.size.times do |inx|
|
@@ -25,14 +23,6 @@ class SQA::Indicator; class << self
|
|
25
23
|
|
26
24
|
window = true_ranges[start_inx..end_inx]
|
27
25
|
|
28
|
-
# debug_me{[
|
29
|
-
# :inx,
|
30
|
-
# :start_inx,
|
31
|
-
# :end_inx,
|
32
|
-
# :window,
|
33
|
-
# "window.mean"
|
34
|
-
# ]}
|
35
|
-
|
36
26
|
atr_values << window.mean
|
37
27
|
end
|
38
28
|
|
data/lib/sqa/init.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# lib/sqa/plugin_manager.rb
|
2
|
+
|
3
|
+
# This class gives plug-in commands a way
|
4
|
+
# to extend the SQA::Config class propertities.
|
5
|
+
|
6
|
+
module SQA
|
7
|
+
class PluginManager
|
8
|
+
@registered_properties = {}
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_accessor :registered_properties
|
12
|
+
|
13
|
+
# name (Symbol)
|
14
|
+
|
15
|
+
def new_property(name, options = {})
|
16
|
+
@registered_properties[name.to_sym] = options
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/sqa/stock.rb
CHANGED
@@ -16,6 +16,11 @@ class SQA::Stock
|
|
16
16
|
attr_accessor :klass # class of historical and current prices
|
17
17
|
attr_accessor :transformers # procs for changing column values from String to Numeric
|
18
18
|
|
19
|
+
# Holds the SQA::Strategy class name which seems to work
|
20
|
+
# the best for this stock.
|
21
|
+
attr_accessor :strategy # TODO: make part of the @data object
|
22
|
+
|
23
|
+
|
19
24
|
def initialize(
|
20
25
|
ticker:,
|
21
26
|
source: :alpha_vantage
|
@@ -101,7 +106,7 @@ class SQA::Stock
|
|
101
106
|
return if df2.nil? # CSV file is up to date.
|
102
107
|
|
103
108
|
df_nrows = @df.nrows
|
104
|
-
@df.append(df2)
|
109
|
+
@df.append!(df2)
|
105
110
|
|
106
111
|
if @df.nrows > df_nrows
|
107
112
|
@df.to_csv(@df_path)
|
@@ -146,6 +151,30 @@ class SQA::Stock
|
|
146
151
|
end
|
147
152
|
|
148
153
|
|
154
|
+
def associate_best_strategy(strategies)
|
155
|
+
best_strategy = nil
|
156
|
+
best_accuracy = 0
|
157
|
+
|
158
|
+
strategies.each do |strategy|
|
159
|
+
accuracy = evaluate_strategy(strategy)
|
160
|
+
|
161
|
+
if accuracy > best_accuracy
|
162
|
+
best_strategy = strategy
|
163
|
+
best_accuracy = accuracy
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
self.strategy = best_strategy
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
def evaluate_strategy(strategy)
|
172
|
+
# TODO: Implement this method to evaluate the accuracy of the strategy
|
173
|
+
# on the historical data of this stock.
|
174
|
+
end
|
175
|
+
|
176
|
+
|
177
|
+
|
149
178
|
#############################################
|
150
179
|
## Class Methods
|
151
180
|
|
data/lib/sqa/strategy/common.rb
CHANGED
data/lib/sqa/version.rb
CHANGED
data/lib/sqa.rb
CHANGED
@@ -13,12 +13,27 @@ unless defined?(HOME)
|
|
13
13
|
HOME = Pathname.new(ENV['HOME'])
|
14
14
|
end
|
15
15
|
|
16
|
+
# TODO: do we want to move the debug_me gem out of the
|
17
|
+
# development dependencies into the required?
|
18
|
+
#
|
19
|
+
if defined?(DebugMe)
|
20
|
+
unless respond_to?(:debug_me)
|
21
|
+
include DebugMe
|
22
|
+
end
|
23
|
+
else
|
24
|
+
require 'debug_me'
|
25
|
+
include DebugMe
|
26
|
+
end
|
27
|
+
|
28
|
+
$DEBUG_ME = true
|
29
|
+
|
16
30
|
#############################################
|
17
31
|
## Additional Libraries
|
18
32
|
|
19
33
|
require 'alphavantage'
|
20
34
|
require 'api_key_manager'
|
21
35
|
require 'amazing_print'
|
36
|
+
require 'dry/cli'
|
22
37
|
require 'faraday'
|
23
38
|
require 'hashie'
|
24
39
|
require 'lite/statistics'
|
@@ -26,18 +41,23 @@ require 'lite/statistics/monkey_patches' # patch to Enumerable
|
|
26
41
|
require 'nenv'
|
27
42
|
require 'sem_version'
|
28
43
|
require 'sem_version/core_ext'
|
29
|
-
require 'tty-option'
|
30
44
|
require 'tty-table'
|
31
45
|
|
32
46
|
|
33
47
|
#############################################
|
34
48
|
## Apply core class monkey patches
|
35
49
|
|
50
|
+
# Using these monkey patches to remove need for
|
51
|
+
# ActiveSupport
|
36
52
|
require_relative "patches/string.rb"
|
37
53
|
|
54
|
+
# Adds the global_header, global_footer, header, and footer
|
55
|
+
# class methods to enhance the HELP/Usage functionality
|
56
|
+
require_relative "patches/dry-cli.rb"
|
57
|
+
|
38
58
|
|
39
59
|
#############################################
|
40
|
-
## SQA
|
60
|
+
## SQA specific code
|
41
61
|
|
42
62
|
require_relative "sqa/version"
|
43
63
|
require_relative "sqa/errors"
|
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.
|
4
|
+
version: 0.0.24
|
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-
|
11
|
+
date: 2023-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: alphavantage
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-cli
|
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'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: faraday
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,7 +123,7 @@ dependencies:
|
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: tty-
|
126
|
+
name: tty-table
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - ">="
|
@@ -123,13 +137,13 @@ dependencies:
|
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
140
|
+
name: amazing_print
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
145
|
version: '0'
|
132
|
-
type: :
|
146
|
+
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
@@ -137,7 +151,7 @@ dependencies:
|
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
154
|
+
name: bundler
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - ">="
|
@@ -151,7 +165,7 @@ dependencies:
|
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
168
|
+
name: debug_me
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - ">="
|
@@ -165,7 +179,7 @@ dependencies:
|
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
182
|
+
name: minitest
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
185
|
- - ">="
|
@@ -179,7 +193,7 @@ dependencies:
|
|
179
193
|
- !ruby/object:Gem::Version
|
180
194
|
version: '0'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
196
|
+
name: rake
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
184
198
|
requirements:
|
185
199
|
- - ">="
|
@@ -193,7 +207,7 @@ dependencies:
|
|
193
207
|
- !ruby/object:Gem::Version
|
194
208
|
version: '0'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
210
|
+
name: simplecov
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
198
212
|
requirements:
|
199
213
|
- - ">="
|
@@ -207,7 +221,7 @@ dependencies:
|
|
207
221
|
- !ruby/object:Gem::Version
|
208
222
|
version: '0'
|
209
223
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
224
|
+
name: tocer
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
212
226
|
requirements:
|
213
227
|
- - ">="
|
@@ -248,6 +262,9 @@ files:
|
|
248
262
|
- checksums/sqa-0.0.2.gem.sha512
|
249
263
|
- checksums/sqa-0.0.20.gem.sha512
|
250
264
|
- checksums/sqa-0.0.21.gem.sha512
|
265
|
+
- checksums/sqa-0.0.22.gem.sha512
|
266
|
+
- checksums/sqa-0.0.23.gem.sha512
|
267
|
+
- checksums/sqa-0.0.24.gem.sha512
|
251
268
|
- checksums/sqa-0.0.3.gem.sha512
|
252
269
|
- checksums/sqa-0.0.4.gem.sha512
|
253
270
|
- checksums/sqa-0.0.5.gem.sha512
|
@@ -281,13 +298,18 @@ files:
|
|
281
298
|
- docs/simple_moving_average.md
|
282
299
|
- docs/stochastic_oscillator.md
|
283
300
|
- docs/strategy.md
|
301
|
+
- docs/ta_lib.md
|
284
302
|
- docs/terms_of_use.md
|
285
303
|
- docs/true_range.md
|
304
|
+
- lib/patches/dry-cli.rb
|
286
305
|
- lib/patches/string.rb
|
287
306
|
- lib/sqa.rb
|
288
307
|
- lib/sqa/activity.rb
|
289
|
-
- lib/sqa/analysis.rb
|
290
308
|
- lib/sqa/cli.rb
|
309
|
+
- lib/sqa/commands.rb
|
310
|
+
- lib/sqa/commands/analysis.rb
|
311
|
+
- lib/sqa/commands/base.rb
|
312
|
+
- lib/sqa/commands/web.rb
|
291
313
|
- lib/sqa/config.rb
|
292
314
|
- lib/sqa/constants.rb
|
293
315
|
- lib/sqa/data_frame.rb
|
@@ -317,6 +339,7 @@ files:
|
|
317
339
|
- lib/sqa/indicator/stochastic_oscillator.rb
|
318
340
|
- lib/sqa/indicator/true_range.rb
|
319
341
|
- lib/sqa/init.rb
|
342
|
+
- lib/sqa/plugin_manager.rb
|
320
343
|
- lib/sqa/portfolio.rb
|
321
344
|
- lib/sqa/stock.rb
|
322
345
|
- lib/sqa/strategy.rb
|
@@ -333,7 +356,6 @@ files:
|
|
333
356
|
- lib/sqa/ticker.rb
|
334
357
|
- lib/sqa/trade.rb
|
335
358
|
- lib/sqa/version.rb
|
336
|
-
- lib/sqa/web.rb
|
337
359
|
homepage: https://github.com/MadBomber/sqa
|
338
360
|
licenses:
|
339
361
|
- MIT
|