Вызов функции, использующей только кварги, когда ожидается args, кварги

#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 его для них.