【Quant102】 经典技术指标 Pandas 实现(第一部分)(3)https://developer.aliyun.com/article/1524458
KDJ 策略
假设你是个高级程序员和量化研究员,编写函数实现KDJ策略。函数接受数据帧
df
,K/D/J列名称k_col
、d_col
、j_col
,inplace
参数控制是否原地更新df
。买卖信号应保存在signal
列中。最后返回df
。
def kdj_strategy(df, k_col='K', d_col='D', j_col='J', inplace=False): """ 实现KDJ策略,生成买卖信号。 参数: df : DataFrame 包含KDJ指标数据的DataFrame,必须包含'k_col', 'd_col', 'j_col'列。 k_col : str K值的列名。 d_col : str D值的列名。 j_col : str J值的列名。 inplace : bool, optional 是否在原地更新DataFrame,默认为False。 返回: df : DataFrame 原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。 """ # 复制DataFrame以避免修改原始数据 if not inplace: df = df.copy() # 初始化信号列,默认为无操作 df['signal'] = 0 # 产生买入信号:K值上穿D值 df.loc[(df[k_col] > df[d_col]) & (df[k_col].shift(1) <= df[d_col].shift(1)), 'signal'] = 1 # 产生卖出信号:K值下穿D值 df.loc[(df[k_col] < df[d_col]) & (df[k_col].shift(1) >= df[d_col].shift(1)), 'signal'] = -1 return df
CCI 指标
假设你是个高级程序员和量化研究员,编写函数实现 CCI 指标。函数接受数据帧
df
,inplace
参数控制是否原地更新df
。df
包含四个列:open
开盘价、high
最高价、low
最低价和close
收盘价。所有指标都应当保存到df
中,最后返回df
。
def cci(df, cci_col='cci', n=20, inplace=False): """ 计算CCI指标,并更新DataFrame。 参数: df : DataFrame 包含价格数据的DataFrame,必须包含'open', 'high', 'low', 'close'列。 n : int, optional CCI指标的时间窗口,默认为20。 inplace : bool, optional 是否在原地更新DataFrame,默认为False。 返回: df : DataFrame 包含CCI指标的新DataFrame(如果inplace为False)。 """ # 复制DataFrame以避免修改原始数据 if not inplace: df = df.copy() # 计算移动平均值 sma = df['close'].rolling(window=n).mean() # 计算标准差 std = df['close'].rolling(window=n).std() # 计算CCI df[cci_col] = (df['close'] - sma) / (0.015 * std) return df
【Quant102】 经典技术指标 Pandas 实现(第一部分)(5)https://developer.aliyun.com/article/1524461