#python #pandas #ta-lib
Вопрос:
Я пишу оболочку вокруг TA-lib для вызова функций как части конвейера. Некоторые функции имеют ожидаемые и необязательные параметры. Я ожидал, что просто буду использовать бородавки и сопоставлять именованные параметры, но, похоже, это только сопоставление ожидаемых параметров и не сопоставление необязательных параметров.
import pandas as pd
from talib import abstract
class TALibAugments():
"""
Augment with TA-lib functions
Parameter documentation: https://mrjbq7.github.io/ta-lib/
Function Sample: real = MA(close, timeperiod=30, matype=0)
"""
def __init__(self, function_name, out_cols, **kwargs):
self.ta_lib_function = abstract.Function(function_name)
self.out_cols = out_cols
self.ta_lib_kwargs = kwargs
def augment(self, df, concat=False):
fn_result = self.ta_lib_function(self.ta_lib_kwargs) # Problem here
df_out = None
if len(self.out_cols) == 1:
df_out = pd.DataFrame(fn_result, index=df.index, columns=self.out_cols)
else:
df_out = pd.DataFrame()
for i in range(0, len(fn_result)):
df_out[self.out_cols[i]] = pd.Series(fn_result[i], index=df.index)
return df_out
Создан таким образом
ma_slow_augments = TALibAugments("MA", ["ma_slow"], close=df_resampled["close"], timeperiod=100, matype=0)
Я не уверен, что _функция делает
Это код из аннотации TA-lib.Функция функция:
def Function(function_name, *args, **kwargs):
func_name = function_name.upper()
if func_name not in _func_obj_mapping:
raise Exception('%s not supported by TA-LIB.' % func_name)
return _Function(
func_name, _func_obj_mapping[func_name], *args, **kwargs
)
Комментарии:
1. Разве это не должно быть:
self.ta_lib_function(**self.ta_lib_kwargs)
?2. Я попробовал это: Ошибка типа: Аргумент «высокий» имеет неправильный тип (ожидаемый numpy.ndarray, получил нетип), вызывается, когда определяется как atr_augment = TALibAugments(«ATR», [«atr»], высокий=df_resampled[«высокий»], низкий=df_resampled[«низкий»], закрыть=df_resampled[«закрыть»]). Подпись TA-LIB: real = ATR(максимум, минимум, закрытие, временной интервал=14)
3. Ну, это , по-видимому, указывает на это
high
low
иclose
не является аргументом ключевого слова, так что вам следует попробовать использовать*args
его для них.