ENH: Add Rate of change Percentage indicator

This commit is contained in:
Elizaveta239
2016-06-04 12:06:19 -07:00
committed by Richard Frank
parent 4a0629b894
commit 8a32c2b7ce
3 changed files with 49 additions and 0 deletions
+17
View File
@@ -15,6 +15,7 @@ from zipline.pipeline.factors import (
Aroon,
FastStochasticOscillator,
IchimokuKinkoHyo,
RateOfChangePercentage,
)
from zipline.testing import ExplodingObject, parameter_space
from zipline.testing.fixtures import WithAssetFinder, ZiplineTestCase
@@ -354,3 +355,19 @@ class IchimokuKinkoHyoTestCase(ZiplineTestCase):
str(e.exception),
'%s must be <= the window_length: 53 > 52' % arg,
)
class TestRateOfChangePercentage(ZiplineTestCase):
def test_rate_of_change_per(self):
rocp = RateOfChangePercentage(
inputs=(USEquityPricing.close,),
window_length=10
)
today = pd.Timestamp('2014')
assets = np.arange(5, dtype=np.int64)
data = np.ones((10, 5))
data[0, :] = np.full((1, 5), 2.0)
out = np.zeros(data.shape[1])
rocp.compute(today, assets, out, data)
assert_equal(out, np.full((5,), -50.0))
+2
View File
@@ -24,6 +24,7 @@ from .technical import (
FastStochasticOscillator,
IchimokuKinkoHyo,
MaxDrawdown,
RateOfChangePercentage,
Returns,
RSI,
SimpleMovingAverage,
@@ -47,6 +48,7 @@ __all__ = [
'IchimokuKinkoHyo',
'Latest',
'MaxDrawdown',
'RateOfChangePercentage',
'RecarrayField',
'Returns',
'RollingLinearRegressionOfReturns',
+30
View File
@@ -590,3 +590,33 @@ class IchimokuKinkoHyo(CustomFactor):
out.senkou_span_a = (tenkan_sen + kijun_sen) / 2
out.senkou_span_b = (high.max(axis=0) + low.min(axis=0)) / 2
out.chikou_span = close[chikou_span_length]
class RateOfChangePercentage(CustomFactor):
"""
Rate of change Percentage
ROC measures the percentage change in price from one period to the next.
The ROC calculation compares the current price with the price `n`
periods ago.
Formula for calculation: ((price - prevPrice) / prevPrice) * 100
price - the current price
prevPrice - the price n days ago, equals window length
**Default Inputs**: [USEquityPricing.close]
**Default Window Length**: 10
"""
inputs = (USEquityPricing.close,)
window_length = 10
def compute(self, today, assets, out, close):
today_close = close[-1]
prev_close = close[0]
evaluate('((tc - pc) / pc) * 100',
local_dict={
'tc': today_close,
'pc': prev_close
},
global_dict={},
out=out,
)