如何在Cufflink中添加自定义List或Pandas Series类型技术指标
是否支持直接传入List/Pandas Series作为自定义指标?
目前Cufflinks的QuantFig类没有原生支持直接传入外部List或Pandas Series添加自定义指标的公开方法,现有预置的add_*类方法均为内部自动计算指标值,不接收外部传入的计算结果。
无需修改源码的替代实现方案
你可以直接操作QuantFig生成的Plotly figure对象插入自定义指标trace,无需改动源码即可实现需求,示例代码如下:
import pandas as pd import cufflinks as cf # 提前计算好自定义指标,需保证和初始化QuantFig的df索引对齐 # 这里custom_indicator可以是List或者Pandas Series,如果是List需要手动匹配索引 custom_indicator = pd.Series([你的自定义指标数值], index=df.index) # 原有QuantFig初始化及预置指标添加逻辑 qf = cf.QuantFig(df, title="Apple's stock price in 2021", name='AAPL') qf.add_sma([10, 50], width=2, color=['blue', 'red']) qf.add_rsi(periods=14, color='green') qf.add_bollinger_bands(periods=20, boll_std=2 ,colors=['orange','grey'], fill=True) qf.add_macd() # 提取figure对象添加自定义指标trace fig = qf.figure() # 示例:添加主图指标,和价格同Y轴 fig.add_scatter( x=custom_indicator.index, y=custom_indicator.values, name='自定义指标', line=dict(color='purple', width=2), yaxis='y' # 如果要添加到副图,比如和RSI同轴改为yaxis='y2',新增副图自行补充y轴配置即可 ) # 出图 fig.show()
修改源码新增自定义指标添加方法的方案
完全可以通过修改Cufflinks源码新增内置方法实现该需求,操作步骤如下:
- 找到Cufflinks安装路径下的
quantfig.py文件,定位到QuantFig类的定义代码块 - 在类内部新增如下公共方法:
def add_custom_indicator(self, data, name, color='black', width=1, yaxis='y', **kwargs): """ 添加外部传入的自定义指标 参数说明: data: 外部传入的自定义指标值,支持List或Pandas Series name: 指标图例显示名称 color: 指标线条颜色 width: 指标线条宽度 yaxis: 绑定的Y轴,'y'为主图轴,'y2'为第一个副图轴,依次类推 **kwargs: 其他透传给Plotly Scatter trace的参数 """ # 处理List类型输入,自动匹配索引 if isinstance(data, list): y_values = data x_values = self.data[0]['x'] # 处理Series类型输入 elif isinstance(data, pd.Series): y_values = data.values x_values = data.index else: raise TypeError("data仅支持List或Pandas Series类型") trace = { 'x': x_values, 'y': y_values, 'name': name, 'line': {'color': color, 'width': width}, 'yaxis': yaxis, 'type': 'scatter', 'mode': 'lines', **kwargs } self['data'].append(trace) return self
- 保存修改后重新导入Cufflinks,即可直接调用该方法添加自定义指标,调用逻辑和原有预置方法一致:
qf.add_custom_indicator(custom_indicator, name='自定义指标', color='purple', width=2) qf.iplot(layout=layout_cf)
内容的提问来源于stack exchange,提问作者Anthraxff
相关产品推荐
相关产品推荐

