双均线策略
假设你是个高级程序员和量化研究员,编写函数实现双均线策略。函数接受数据帧
df
,较短均线的列名称short_col
和较长均线的列名称long_col
,inplace
参数控制是否原地更新df
。买卖信号应保存在signal
列中。最后返回df
。
def dual_moving_average_strategy(df, short_col='sma_short', long_col='sma_long', inplace=False): """ 实现双均线策略,生成买卖信号。 参数: df : DataFrame 包含价格数据的DataFrame。 short_col : str 短周期均线的列名。 long_col : str 长周期均线的列名。 返回: df : DataFrame 原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。 """ if not inplace: df = df.copy() # 初始化信号列,默认为无操作 df['signal'] = 0 # 产生买入信号:短周期均线由下向上穿越长周期均线 df.loc[(df[short_col] > df[long_col]) & (df[short_col].shift(1) <= df[long_col].shift(1)), 'signal'] = 1 # 产生卖出信号:短周期均线由上向下穿越长周期均线 df.loc[(df[short_col] < df[long_col]) & (df[short_col].shift(1) >= df[long_col].shift(1)), 'signal'] = -1 return df
布林带指标
假设你是个高级程序员和量化研究员,编写函数实现布林带指标。函数接受数据帧
df
,中布林带的列名称mid_col
,上布林带列名称upper_col
,下布林带列名称lower_col
,inplace
参数控制是否原地更新df
。df
包含四个列:open
开盘价、high
最高价、low
最低价和close
收盘价。所有指标都应当保存到df
中,最后返回df
。
def bollinger_bands( df, mid_col='mid_band', upper_col='upper_band', lower_col='lower_band', window=20, num_std=2, inplace=False ): """ 计算布林带指标,并更新DataFrame。 参数: df : DataFrame 包含价格数据的DataFrame,必须包含'open', 'high', 'low', 'close'列。 window : int, optional 计算简单移动平均线SMA的窗口大小,默认为20。 num_std : int, optional 计算布林带通道时使用的标准差倍数,默认为2。 inplace : bool, optional 是否在原地更新DataFrame,默认为False。 返回: df : DataFrame 包含布林带指标的新DataFrame(如果inplace为False)。 """ # 复制DataFrame以避免修改原始数据 if not inplace: df = df.copy() # 计算中轨(简单移动平均线SMA) df['mid_band'] = df['close'].rolling(window=window).mean() # 计算价格的标准差 std = df['close'].rolling(window=window).std() # 计算布林带上轨 df['upper_band'] = df['mid_band'] + (std * num_std) # 计算布林带下轨 df['lower_band'] = df['mid_band'] - (std * num_std) return df
布林带策略
假设你是个高级程序员和量化研究员,编写函数实现布林带策略。函数接受数据帧
df
,中轨的列名称mid_col
,上轨列名称upper_col
,下轨列名称lower_col
,inplace
参数控制是否原地更新df
。买卖信号应保存在signal
列中。最后返回df
。
def bollinger_bands_strategy(df, mid_col='mid_band', upper_col='upper_band', lower_col='lower_band', inplace=False): """ 实现布林带策略,生成买卖信号。 参数: df : DataFrame 包含价格数据的DataFrame,必须包含'mid_col', 'upper_col', 'lower_col'列。 mid_col : str 中轨(通常是简单移动平均线SMA)的列名。 upper_col : str 上轨的列名。 lower_col : str 下轨的列名。 inplace : bool, optional 是否在原地更新DataFrame,默认为False。 返回: df : DataFrame 原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。 """ # 复制DataFrame以避免修改原始数据 if not inplace: df = df.copy() # 初始化信号列,默认为无操作 df['signal'] = 0 # 产生买入信号:价格跌破下轨 df.loc[df['close'] < df[lower_col], 'signal'] = 1 # 产生卖出信号:价格突破上轨 df.loc[df['close'] > df[upper_col], 'signal'] = -1 return df
【Quant102】 经典技术指标 Pandas 实现(第一部分)(2)https://developer.aliyun.com/article/1524457