diff --git a/zipline/transforms/ta.py b/zipline/transforms/ta.py index 54a2f102..9c7c918b 100644 --- a/zipline/transforms/ta.py +++ b/zipline/transforms/ta.py @@ -19,12 +19,22 @@ import copy from zipline.transforms import BatchTransform -def make_transform(talib_fn): +def make_transform(talib_fn, name): """ A factory for BatchTransforms based on TALIB abstract functions. """ + # make class docstring + header = '\n#---- TA-Lib docs\n\n' + talib_docs = getattr(talib, talib_fn.info['name']).__doc__ + divider1 = '\n#---- Default mapping (TA-Lib : Zipline)\n\n' + mappings = '\n'.join(' {0} : {1}'.format(k, v) + for k, v in talib_fn.input_names.items()) + divider2 = '\n\n#---- Zipline docs\n' + help_str = (header + talib_docs + divider1 + mappings + + divider2) + class TALibTransform(BatchTransform): - """ + __doc__ = help_str + """ TA-Lib keyword arguments must be passed at initialization. For example, to construct a moving average with timeperiod of 5, pass "timeperiod=5" during initialization. @@ -71,6 +81,7 @@ def make_transform(talib_fn): **kwargs : any arguments to be passed to the TA-Lib function. """ + def __init__(self, sid, close='price', @@ -152,18 +163,7 @@ def make_transform(talib_fn): return 'Zipline BatchTransform: {0}'.format( self.talib_fn.info['name']) - # make class docstring - header = '\n#---- TA-Lib docs\n\n' - talib_docs = getattr(talib, talib_fn.info['name']).__doc__ - divider1 = '\n#---- Default mapping (TA-Lib : Zipline)\n\n' - mappings = '\n'.join(' {0} : {1}'.format(k, v) - for k, v in talib_fn.input_names.items()) - divider2 = '\n\n#---- Zipline docs\n' - help_str = (header + talib_docs + divider1 + mappings - + divider2 + TALibTransform.__doc__) - # TODO: Properly set a __doc__ string. - TALibTransform.help_str = help_str - + TALibTransform.__name__ = name #return class return TALibTransform @@ -172,4 +172,4 @@ def make_transform(talib_fn): for name in talib.abstract.__all__: fn = getattr(talib.abstract, name) if name != 'Function': - locals()[name] = make_transform(fn) + locals()[name] = make_transform(fn, name)