sqa 0.0.1 → 0.0.2
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/docs/average_true_range.md +9 -0
- data/docs/data_frame.md +164 -0
- data/docs/fibonacci_retracement.md +30 -0
- data/docs/identify_wave_condition.md +14 -0
- data/docs/peaks_and_valleys.md +11 -0
- data/docs/stochastic_oscillator.md +4 -0
- data/lib/sqa/cli.rb +1 -1
- data/lib/sqa/data_frame/yahoo_finance.rb +24 -0
- data/lib/sqa/data_frame.rb +11 -0
- data/lib/sqa/indicator/average_true_range.rb +22 -9
- data/lib/sqa/indicator/bollinger_bands.rb +2 -2
- data/lib/sqa/indicator/candlestick_pattern_recognizer.rb +1 -1
- data/lib/sqa/indicator/donchian_channel.rb +1 -1
- data/lib/sqa/indicator/double_top_bottom_pattern.rb +1 -1
- data/lib/sqa/indicator/elliott_wave_theory.rb +57 -0
- data/lib/sqa/indicator/exponential_moving_average.rb +25 -0
- data/lib/sqa/indicator/exponential_moving_average_trend.rb +36 -0
- data/lib/sqa/indicator/fibonacci_retracement.rb +5 -7
- data/lib/sqa/indicator/head_and_shoulders_pattern.rb +1 -1
- data/lib/sqa/indicator/{classify_market_profile.rb → market_profile.rb} +7 -8
- data/lib/sqa/indicator/mean_reversion.rb +1 -1
- data/lib/sqa/indicator/momentum.rb +9 -7
- data/lib/sqa/indicator/moving_average_convergence_divergence.rb +1 -1
- data/lib/sqa/indicator/peaks_and_valleys.rb +29 -0
- data/lib/sqa/indicator/{relative_strength_index.md.rb → relative_strength_index.rb} +2 -2
- data/lib/sqa/indicator/simple_moving_average.rb +6 -3
- data/lib/sqa/indicator/simple_moving_average_trend.rb +15 -14
- data/lib/sqa/indicator/stochastic_oscillator.rb +32 -3
- data/lib/sqa/indicator/true_range.rb +14 -12
- data/lib/sqa/indicator.rb +4 -4
- data/lib/sqa/stock.rb +6 -13
- data/lib/sqa/version.rb +1 -1
- data/lib/sqa.rb +27 -6
- metadata +30 -29
- data/lib/sqa/datastore/active_record.rb +0 -89
- data/lib/sqa/datastore/csv/yahoo_finance.rb +0 -51
- data/lib/sqa/datastore/csv.rb +0 -93
- data/lib/sqa/datastore/sqlite.rb +0 -7
- data/lib/sqa/datastore.rb +0 -6
- data/lib/sqa/indicator/average_true_range.md +0 -9
- data/lib/sqa/indicator/ema_analysis.rb +0 -70
- data/lib/sqa/indicator/fibonacci_retracement.md +0 -3
- data/lib/sqa/indicator/identify_wave_condition.md +0 -6
- data/lib/sqa/indicator/identify_wave_condition.rb +0 -40
- data/lib/sqa/indicator/stochastic_oscillator.md +0 -5
- /data/{lib/sqa/indicator → docs}/README.md +0 -0
- /data/{lib/sqa/indicator → docs}/bollinger_bands.md +0 -0
- /data/{lib/sqa/indicator → docs}/candlestick_pattern_recognizer.md +0 -0
- /data/{lib/sqa/indicator → docs}/donchian_channel.md +0 -0
- /data/{lib/sqa/indicator → docs}/double_top_bottom_pattern.md +0 -0
- /data/{lib/sqa/indicator/ema_analysis.md → docs/exponential_moving_average.md} +0 -0
- /data/{lib/sqa/indicator → docs}/head_and_shoulders_pattern.md +0 -0
- /data/{lib/sqa/indicator/classify_market_profile.md → docs/market_profile.md} +0 -0
- /data/{lib/sqa/indicator → docs}/mean_reversion.md +0 -0
- /data/{lib/sqa/indicator → docs}/momentum.md +0 -0
- /data/{lib/sqa/indicator → docs}/moving_average_convergence_divergence.md +0 -0
- /data/{lib/sqa/indicator → docs}/relative_strength_index.md +0 -0
- /data/{lib/sqa/indicator → docs}/simple_moving_average.md +0 -0
- /data/{lib/sqa/indicator → docs}/true_range.md +0 -0
@@ -1,70 +0,0 @@
|
|
1
|
-
# lib/sqa/indicator/ema_analysis.rb
|
2
|
-
|
3
|
-
module SQA::Indicator; class << self
|
4
|
-
|
5
|
-
def ema_analysis(
|
6
|
-
prices, # Array of prices
|
7
|
-
period # Integer number of entries to consider
|
8
|
-
)
|
9
|
-
return {} if prices.empty? || period <= 0
|
10
|
-
|
11
|
-
ema_values = []
|
12
|
-
ema_values << prices.first
|
13
|
-
|
14
|
-
multiplier = (2.0 / (period + 1))
|
15
|
-
|
16
|
-
(1...prices.length).each do |i|
|
17
|
-
ema = (prices[i] - ema_values.last) * multiplier + ema_values.last
|
18
|
-
ema_values << ema.round(2)
|
19
|
-
end
|
20
|
-
|
21
|
-
analysis = {}
|
22
|
-
|
23
|
-
analysis[:ema_values] = ema_values
|
24
|
-
analysis[:trend] = ema_determine_trend(ema_values)
|
25
|
-
analysis[:support] = ema_determine_support(ema_values)
|
26
|
-
analysis[:resistance] = ema_determine_resistance(ema_values)
|
27
|
-
|
28
|
-
analysis
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
# @param ema_values [Array] An array of EMA values.
|
33
|
-
# @return [Symbol] The trend: :up, :down, or :sideways.
|
34
|
-
#
|
35
|
-
private def ema_determine_trend(ema_values)
|
36
|
-
return :sideways if ema_values.empty?
|
37
|
-
|
38
|
-
last_ema = ema_values.last
|
39
|
-
previous_ema = ema_values[-2]
|
40
|
-
|
41
|
-
if last_ema > previous_ema
|
42
|
-
:up
|
43
|
-
elsif last_ema < previous_ema
|
44
|
-
:down
|
45
|
-
else
|
46
|
-
:sideways
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
# @param ema_values [Array] An array of EMA values.
|
52
|
-
# @return [Float] The support level.
|
53
|
-
#
|
54
|
-
private def ema_determine_support(ema_values)
|
55
|
-
return 0.0 if ema_values.empty?
|
56
|
-
|
57
|
-
ema_values.min
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
# @param ema_values [Array] An array of EMA values.
|
62
|
-
# @return [Float] The resistance level.
|
63
|
-
private def ema_determine_resistance(ema_values)
|
64
|
-
return 0.0 if ema_values.empty?
|
65
|
-
|
66
|
-
ema_values.max
|
67
|
-
end
|
68
|
-
|
69
|
-
end; end
|
70
|
-
|
@@ -1,6 +0,0 @@
|
|
1
|
-
# Wave Theory
|
2
|
-
|
3
|
-
Wave theory, such as Elliott Wave Theory, suggests that price movements follow repetitive patterns or waves. It aims to identify and predict these patterns to make trading decisions.
|
4
|
-
|
5
|
-
Identifies a wave condition in a stock's price history based on a given price series.
|
6
|
-
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# lib/sqa/indicator/identify_wave_condition.rb
|
2
|
-
|
3
|
-
module SQA::Indicator; class << self
|
4
|
-
|
5
|
-
def identify_wave_condition?(
|
6
|
-
prices, # Array of prices
|
7
|
-
wave_length, # Integer expected length of a wave pattern
|
8
|
-
tolerance # Float delta change in price that would indicate a wave
|
9
|
-
)
|
10
|
-
return false if prices.length < wave_length
|
11
|
-
|
12
|
-
wave_start = 0
|
13
|
-
wave_end = wave_length - 1
|
14
|
-
|
15
|
-
while wave_end < prices.length
|
16
|
-
wave = prices[wave_start..wave_end]
|
17
|
-
|
18
|
-
if wave.length == wave_length &&
|
19
|
-
wave_pattern?(wave, tolerance)
|
20
|
-
return true
|
21
|
-
end
|
22
|
-
|
23
|
-
wave_start += 1
|
24
|
-
wave_end += 1
|
25
|
-
end
|
26
|
-
|
27
|
-
false
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
private def wave_pattern?(wave, tolerance)
|
32
|
-
wave.each_cons(2) do |a, b|
|
33
|
-
return false if (b - a).abs > tolerance
|
34
|
-
end
|
35
|
-
|
36
|
-
true
|
37
|
-
end
|
38
|
-
|
39
|
-
end; end
|
40
|
-
|
@@ -1,5 +0,0 @@
|
|
1
|
-
# Stochastic Oscillator
|
2
|
-
|
3
|
-
Calculates the Stochastic Oscillator for a given set of price data.
|
4
|
-
|
5
|
-
Stochastic Oscillator: The Stochastic Oscillator compares a security's closing price to its price range over a specified period. It helps identify potential trend reversals and overbought/oversold conditions.
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|