add_func + apply + lambd 嵌套:问题已经解决
发布于 4 个月前 作者 Rgveda 204 次浏览 来自 问答

我扩展了 QA.QA_fetch_crypto_asset_min_adv(),读取出来的DataFrame结构多一个索引 ‘’market

问题解决:需要重载方法

    def add_func(self, func, *arg, **kwargs):
        """QADATASTRUCT的指标/函数apply入口

        Arguments:
            func {[type]} -- [description]

        Returns:
            [type] -- [description]
        """

        return self.groupby(level=2, sort=False).apply(func, *arg, **kwargs)
#获取 huobi 主流币 list格式(转为大写后可以直接给 binance 等效)
codelist = QA.QAFetch.QAhuobi.FIRST_PRIORITY
print(codelist[0:30])

# 获取 BTC关联同趋势品种 数据 QADataStruct格式
data1 =  QA.QA_fetch_crypto_asset_min_adv(
            'binance',
            symbol=['BCHUSDT', 'BSVUSDT', 'BTCUSDT', 'EOSUSDT', 'ETHUSDT', 'ETCUSDT', 'DASHUSDT', 'LTCUSDT', 'XMRUSDT', 'XRPUSDT', 'ZECUSDT'],
            start='2019-12-21',
            end='2020-05-28 18:10:00',
            frequence='60min'
        )
		
print(data1.data.close)

火狐截图_2020-03-01T06-40-30.702Z.png

然后定义一个 add_func

def ifup20_TA(data):
    # TA-lib计算
	#datagroupby("symbol").apply(lambda x:print('apply + add_func 嵌套 这里想再执行(ifup20_TA)怎么办?', x.close))
    return (TA_MA(data.close, 5)-TA_MA(data.close, 20)).dropna() > 0

这个在这里就不能正常工作了。换几种写法都不行,求天神指导

data1.groupby("symbol").apply(lambda x:x.add_func(ifup20_TA))
#ind1 = data1.add_func(ifup20_TA)
#print(ind1)
#ind2 = data1.add_func(ifmaxfactor_greater_TA)



ind1 = data1.add_func(ifup20_TA)
# 是肯定不行的,
# 然后又尝试这样写,也不是想要的效果

data1_list = data1.splits()
data1_list = list(map(lambda x:x.add_func(ifup20_TA), data1_list))
print(data1_list)

5 回复

ind1 = data1.add_func(ifup20_TA) 是肯定不行的, 然后又尝试这样写,也不是想要的效果

data1_list = data1.splits() data1_list = list(map(lambda x:x.add_func(ifup20_TA), data1_list)) print(data1_list)

你能试试股票吗

解决问题我找到了。 QA_DataStruct_Crypto_Asset_min(_quotation_base) 需要修改大量 level=1 的类方法,重载! level=2

等我测试完了 PR 代码吧

@xiaopge 我这个本来就是扩展QA支持的数据类型。解决办法我找到了,

def add_func(self, func, *arg, **kwargs):
    """QADATASTRUCT的指标/函数apply入口

    Arguments:
        func {[type]} -- [description]

    Returns:
        [type] -- [description]
    """

    return self.groupby(level=2, sort=False).apply(func, *arg, **kwargs)
回到顶部