mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-28 11:19:32 +08:00
ENH: Add Rate of change Percentage indicator
This commit is contained in:
committed by
Richard Frank
parent
4a0629b894
commit
8a32c2b7ce
@@ -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))
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user