【Quant102】 经典技术指标 Pandas 实现(第一部分)(5)

简介: 【Quant102】 经典技术指标 Pandas 实现(第一部分)

【Quant102】 经典技术指标 Pandas 实现(第一部分)(4)https://developer.aliyun.com/article/1524459

CCI 策略

假设你是个高级程序员和量化研究员,编写函数实现CCI策略。函数接受数据帧df,CCI列名称cci_colinplace参数控制是否原地更新df。买卖信号应保存在signal列中。最后返回df

def cci_strategy(df, cci_col='cci', inplace=False):
    """
    实现CCI策略,生成买卖信号。
    
    参数:
    df : DataFrame
        包含CCI指标数据的DataFrame,必须包含'cci_col'列。
    cci_col : str
        CCI指标的列名。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 初始化信号列,默认为无操作
    df['signal'] = 0
    
    # 产生买入信号:CCI低于-100
    df.loc[df[cci_col] < -100, 'signal'] = 1
    
    # 产生卖出信号:CCI高于+100
    df.loc[df[cci_col] > 100, 'signal'] = -1
    
    return df

OBV 指标

假设你是个高级程序员和量化研究员,编写函数实现 OBV 指标。函数接受数据帧dfinplace参数控制是否原地更新dfdf包含四个列:open开盘价、high最高价、low最低价和close收盘价。所有指标都应当保存到df中,最后返回df

def obv(df, obv_col='obv', inplace=False):
    """
    计算OBV指标,并更新DataFrame。
    
    参数:
    df : DataFrame
        包含价格数据的DataFrame,必须包含'open', 'high', 'low', 'close'列。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        包含OBV指标的新DataFrame(如果inplace为False)。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
  # 计算收盘价差异的符号
    chg = df['close'].diff()
  sgn = np.sign(chg)
  sgn.iloc[0] = 0
  # 计算OBV
  df[obv_col] = (df['volume'] * sgn).cumsum()
    
    return df

OBV 策略

假设你是个高级程序员和量化研究员,编写函数实现OBV策略。函数接受数据帧df,OBV列名称obv_colinplace参数控制是否原地更新df。买卖信号应保存在signal列中。最后返回df

def obv_strategy(df, obv_col, inplace=False):
    """
    实现OBV策略,生成买卖信号。
    
    参数:
    df : DataFrame
        包含OBV指标数据的DataFrame,必须包含'obv_col'列。
    obv_col : str
        OBV指标的列名。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 初始化信号列,默认为无操作
    df['signal'] = 0
    
    # 产生买入信号:OBV连续上升
    df.loc[df[obv_col].rolling(window=3).sum() > 0, 'signal'] = 1
    
    # 产生卖出信号:OBV连续下降
    df.loc[df[obv_col].rolling(window=3).sum() < 0, 'signal'] = -1
    
    return df

ADX 指标

假设你是个高级程序员和量化研究员,编写函数实现 ADX 指标。函数接受数据帧dfinplace参数控制是否原地更新dfdf包含四个列:open开盘价、high最高价、low最低价和close收盘价。所有指标都应当保存到df中,最后返回df

def adx(df, window=14, inplace=False):
    """
    计算ADX指标,并更新DataFrame。
    
    参数:
    df : DataFrame
        包含价格数据的DataFrame,必须包含'open', 'high', 'low', 'close'列。
    window : int, optional
        ADX指标的时间窗口,默认为14。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        包含ADX指标的新DataFrame(如果inplace为False)。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 计算最高价和最低价之间的差异
    df['range'] = df['high'] - df['low']
    
    # 计算动量(Momentum)
    plus_dm = np.where(df['close'] - df['open'] > 0, df['range'], 0)
    minus_dm = np.where(df['open'] - df['close'] > 0, -df['range'], 0)
    
    # 计算ADM和ADN
    plus_dm_mean = plus_dm.rolling(window=window).mean()
    minus_dm_mean = minus_dm.rolling(window=window).mean()
    
    # 计算DX
    dx = (plus_dm_mean - minus_dm_mean) / (plus_dm_mean + minus_dm_mean)
    dx_mean = dx.rolling(window=window).mean()
    
    # 计算ADX
    df['adx'] = (100 - 100 / (1 + np.sqrt(dx_mean)))
    
    return df

ADX 策略

假设你是个高级程序员和量化研究员,编写函数实现ADX策略。函数接受数据帧df,ADX列名称adx_colinplace参数控制是否原地更新df。买卖信号应保存在signal列中。最后返回df

def adx_strategy(df, adx_col='adx', inplace=False):
    """
    实现ADX策略,生成买卖信号。
    
    参数:
    df : DataFrame
        包含ADX指标数据的DataFrame,必须包含'adx_col'列。
    adx_col : str
        ADX指标的列名。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 初始化信号列,默认为无操作
    df['signal'] = 0
    
    # 产生买入信号:ADX超过25
    df.loc[df[adx_col] > 25, 'signal'] = 1
    
    # 产生卖出信号:ADX低于25
    df.loc[df[adx_col] < 25, 'signal'] = -1
    
    return df

VWAP 指标

假设你是个高级程序员和量化研究员,编写函数实现 VWAP 指标。函数接受数据帧dfinplace参数控制是否原地更新dfdf包含四个列:open开盘价、high最高价、low最低价和close收盘价。所有指标都应当保存到df中,最后返回df

def vwap(df, vwap_col='vwap', inplace=False):
    """
    计算VWAP指标,并更新DataFrame。
    
    参数:
    df : DataFrame
        包含价格数据的DataFrame,必须包含'open', 'high', 'low', 'close', 'volume'列。
    window : int, optional
        滚动窗口的大小,默认为1。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        包含VWAP指标的新DataFrame(如果inplace为False)。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 计算VWAP
    df['vwap'] = (df['open'] + df['high'] + df['low'] + df['close']) / 4 * df['volume']
        
    return df

VWAP 策略

假设你是个高级程序员和量化研究员,编写函数实现VWAP策略。函数接受数据帧df,VWAP列名称vwap_colinplace参数控制是否原地更新df。买卖信号应保存在signal列中。最后返回df

def vwap_strategy(df, vwap_col='vwap', inplace=False):
    """
    实现VWAP策略,生成买卖信号。
    
    参数:
    df : DataFrame
        包含VWAP指标数据的DataFrame,必须包含'vwap_col'列。
    vwap_col : str
        VWAP指标的列名。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 初始化信号列,默认为无操作
    df['signal'] = 0
    
    # 产生买入信号:价格突破VWAP
    df.loc[df['close'] > df[vwap_col], 'signal'] = 1
    
    # 产生卖出信号:价格跌破VWAP
    df.loc[df['close'] < df[vwap_col], 'signal'] = -1
    
    return df


相关文章
|
6月前
|
程序员 Python
【Quant102】 经典技术指标 Pandas 实现(第一部分)(4)
【Quant102】 经典技术指标 Pandas 实现(第一部分)
28 0
|
6月前
|
程序员 Python
【Quant102】 经典技术指标 Pandas 实现(第一部分)(2)
【Quant102】 经典技术指标 Pandas 实现(第一部分)
27 0
|
6月前
|
程序员 Python
【Quant102】 经典技术指标 Pandas 实现(第一部分)(1)
【Quant102】 经典技术指标 Pandas 实现(第一部分)
27 0
|
6月前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
23天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
53 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
79 0
|
24天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
31 2
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
87 3
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
42 1
|
2月前
|
机器学习/深度学习 数据采集 监控
Pandas与Matplotlib:Python中的动态数据可视化
Pandas与Matplotlib:Python中的动态数据可视化
下一篇
无影云桌面