indicators 0.0.1 → 0.1.0
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.
- data/README.md +14 -3
- data/lib/indicators/data.rb +1 -1
- data/lib/indicators/main.rb +53 -0
- data/lib/indicators/version.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
A gem for calculating technical analysis indicators.
|
4
4
|
|
5
|
-
[](http://travis-ci.org/Nedomas/indicators)
|
6
|
-
|
7
5
|
Current functionality demo of Indicators and Securities gems synergy can be tested at http://strangemuseum.heroku.com.
|
8
6
|
|
7
|
+
[](http://travis-ci.org/Nedomas/indicators)
|
8
|
+
|
9
9
|
## Installation
|
10
10
|
|
11
11
|
Add this line to your application's Gemfile:
|
@@ -71,6 +71,14 @@ Variables have to be specified as an array [faster periods, slower periods, sign
|
|
71
71
|
|
72
72
|
The more data it has, the more accurate RSI is.
|
73
73
|
|
74
|
+
# Full Stochastic Oscillator => :sto
|
75
|
+
|
76
|
+
my_data.calc(:type => :sto, :variables => [14, 3, 5])
|
77
|
+
|
78
|
+
Variables have to be specified as an array [lookback period, the number of periods to slow %K, the number of periods for the %D moving average] => [%K1, %K2, %D].
|
79
|
+
|
80
|
+
Stochastic output is [fast %K, slow %K, full %D].
|
81
|
+
|
74
82
|
## To Do
|
75
83
|
|
76
84
|
* Make defaults mechanism more versatile.
|
@@ -82,7 +90,10 @@ The more data it has, the more accurate RSI is.
|
|
82
90
|
* More moving averages (CMA, WMA, MMA).
|
83
91
|
* ROC.
|
84
92
|
* CCI.
|
85
|
-
*
|
93
|
+
* Williams %R.
|
94
|
+
* ADX.
|
95
|
+
* Parabolic SAR.
|
96
|
+
* StochRSI.
|
86
97
|
|
87
98
|
## Contributing
|
88
99
|
|
data/lib/indicators/data.rb
CHANGED
data/lib/indicators/main.rb
CHANGED
@@ -21,6 +21,7 @@ module Indicators
|
|
21
21
|
when :bb then bb(Indicators::Parser.parse_data(stock_data), parameters[:variables])
|
22
22
|
when :macd then macd(Indicators::Parser.parse_data(stock_data), parameters[:variables])
|
23
23
|
when :rsi then rsi(Indicators::Parser.parse_data(stock_data), parameters[:variables])
|
24
|
+
when :sto then sto(Indicators::Parser.parse_data(stock_data), parameters[:variables])
|
24
25
|
end
|
25
26
|
# Parser returns in {:date=>[2012.0, 2012.0, 2012.0], :open=>[409.4, 410.0, 414.95],} format
|
26
27
|
end
|
@@ -32,6 +33,7 @@ module Indicators
|
|
32
33
|
when :bb then bb(data, parameters[:variables])
|
33
34
|
when :macd then macd(data, parameters[:variables])
|
34
35
|
when :rsi then rsi(data, parameters[:variables])
|
36
|
+
when :sto then raise MainException, "You cannot calculate Stochastic Oscillator on closing prices. Use Securities hash instead."
|
35
37
|
end
|
36
38
|
end
|
37
39
|
return results
|
@@ -242,6 +244,57 @@ module Indicators
|
|
242
244
|
return rsi
|
243
245
|
end
|
244
246
|
|
247
|
+
#
|
248
|
+
# Full Stochastic Oscillator
|
249
|
+
|
250
|
+
# %K = (Current Close - Lowest Low)/(Highest High - Lowest Low) * 100
|
251
|
+
# %D = 3-day SMA of %K
|
252
|
+
# Lowest Low = lowest low for the look-back period
|
253
|
+
# Highest High = highest high for the look-back period
|
254
|
+
# %K is multiplied by 100 to move the decimal point two places
|
255
|
+
#
|
256
|
+
# Full %K = Fast %K smoothed with X-period SMA
|
257
|
+
# Full %D = X-period SMA of Full %K
|
258
|
+
#
|
259
|
+
# Input 14, 3, 5
|
260
|
+
# Returns [full %K, full %D]
|
261
|
+
def self.sto data, variables
|
262
|
+
k1_periods = get_variables(variables, 0, 14)
|
263
|
+
k2_periods = get_variables(variables, 1, 3)
|
264
|
+
d_periods = get_variables(variables, 2, 1)
|
265
|
+
high_data = Array.new
|
266
|
+
low_data = Array.new
|
267
|
+
adj_close_data = Array.new
|
268
|
+
high_data = get_data(data, k1_periods, :high)
|
269
|
+
low_data = get_data(data, k1_periods, :low)
|
270
|
+
adj_close_data = get_data(data, k1_periods, :adj_close)
|
271
|
+
|
272
|
+
k1 = []
|
273
|
+
k2 = []
|
274
|
+
d = []
|
275
|
+
sto = []
|
276
|
+
adj_close_data.each_with_index do |adj_close, index|
|
277
|
+
from = index-k1_periods+1
|
278
|
+
if index+1 >= k1_periods
|
279
|
+
k1[index] = (adj_close - low_data[from..index].min) / (high_data[from..index].max - low_data[from..index].min) * 100
|
280
|
+
if index+2 >= k1_periods + k2_periods
|
281
|
+
k2[index] = sma(k1[(k1_periods-1)..index], k2_periods).last
|
282
|
+
else
|
283
|
+
k2[index] = nil
|
284
|
+
end
|
285
|
+
if index+3 >= k1_periods + k2_periods + d_periods
|
286
|
+
d[index] = sma(k2[(k1_periods + k2_periods - 2)..index], d_periods).last
|
287
|
+
else
|
288
|
+
d[index] = nil
|
289
|
+
end
|
290
|
+
else
|
291
|
+
k1[index] = nil
|
292
|
+
end
|
293
|
+
sto[index] = [k1[index], k2[index], d[index]]
|
294
|
+
end
|
295
|
+
return sto
|
296
|
+
end
|
297
|
+
|
245
298
|
|
246
299
|
#
|
247
300
|
# Helper methods for RSI
|
data/lib/indicators/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: indicators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -95,7 +95,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
95
|
version: '0'
|
96
96
|
segments:
|
97
97
|
- 0
|
98
|
-
hash:
|
98
|
+
hash: 1434689323242091745
|
99
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
100
|
none: false
|
101
101
|
requirements:
|
@@ -104,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
104
|
version: '0'
|
105
105
|
segments:
|
106
106
|
- 0
|
107
|
-
hash:
|
107
|
+
hash: 1434689323242091745
|
108
108
|
requirements: []
|
109
109
|
rubyforge_project:
|
110
110
|
rubygems_version: 1.8.24
|