调用函数遍历DataFrame字典计算成交量均线时遇错误,求解决方案
问题分析与修正
你的代码问题主要出在循环传参错误,以及函数默认参数存在的隐患:
错误点1:循环传参类型不对
你定义的dataframes字典里,键是字符串(比如'M1'),值才是对应的DataFrame对象(M1、H4)。但循环里你调用volume_ma(name)时,传的是字符串类型的键,而函数需要的是DataFrame实例,自然会报错(字符串没有tick_volume这个列)。
错误点2:函数默认参数的潜在问题
函数定义里timeframe=M15,如果M15这个变量没有提前定义,会直接触发NameError。建议去掉默认值,强制传入DataFrame,避免不必要的错误。
修正后的代码
修正后的函数
def volume_ma(timeframe, length=20): # 给传入的DataFrame添加成交量均线列 timeframe['volume_ma'] = ta.sma(timeframe['tick_volume'], length=length)
修正后的循环
dataframes = {'M1': M1, 'H4': H4} # 循环时传入字典的value,也就是对应的DataFrame对象 for name, df in dataframes.items(): volume_ma(df) # 如果不同周期需要不同均线长度,可按需传入length参数: # 比如M1用10周期,H4用20周期 # if name == 'M1': # volume_ma(df, length=10) # else: # volume_ma(df, length=20)
这样就能批量给两个时间周期的DataFrame计算并添加成交量均线列了。
内容的提问来源于stack exchange,提问作者Bahram Shakiba
相关产品推荐
相关产品推荐

