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

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

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

MACD 指标

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

def macd(df, dea_col='dea', dif_col='dif', hist_col='macd_hist', fast_window=12, slow_window=26, signal_window=9, inplace=False):
    """
    计算MACD指标,并更新DataFrame。
    
    参数:
    df : DataFrame
        包含价格数据的DataFrame,必须包含'open', 'high', 'low', 'close'列。
    fast_window : int, optional
        快速EMA的窗口大小,默认为12。
    slow_window : int, optional
        慢速EMA的窗口大小,默认为26。
    signal_window : int, optional
        信号线的窗口大小,默认为9。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        包含MACD指标的新DataFrame(如果inplace为False)。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 计算快速EMA
    fast_ema = df['close'].ewm(span=fast_window, adjust=False).mean()
    
    # 计算慢速EMA
    slow_ema = df['close'].ewm(span=slow_window, adjust=False).mean()
    
    # 计算MACD线
    df[dea_col] = fast_ema - slow_ema
    
    # 计算信号线
    df[dif_col] = df[dea_col].ewm(span=signal_window, adjust=False).mean()
    
    # 计算MACD柱
    df[hist_col] = df[dea_col] - df[dif_col]
    
    return df

MACD 策略

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

def macd_strategy(df, dea_col='dea', dif_col='dif', hist_col='macd_hist', inplace=False):
    """
    实现MACD策略,生成买卖信号。
    
    参数:
    df : DataFrame
        包含MACD指标数据的DataFrame,必须包含'dea_col', 'dif_col', 'hist_col'列。
    dea_col : str
        DEA(信号线)的列名。
    dif_col : str
        DIF(MACD线)的列名。
    hist_col : str
        MACD柱状图的列名。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        原始DataFrame,增加了一个名为'signal'的列,包含买卖信号。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 初始化信号列,默认为无操作
    df['signal'] = 0
    
    # 产生买入信号:DIF上穿DEA
    df.loc[(df[dif_col] > df[dea_col]) & (df[dif_col].shift(1) <= df[dea_col].shift(1)), 'signal'] = 1
    
    # 产生卖出信号:DIF下穿DEA
    df.loc[(df[dif_col] < df[dea_col]) & (df[dif_col].shift(1) >= df[dea_col].shift(1)), 'signal'] = -1
    
    return df

RSI 指标

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

def rsi(df, rsi_col='rsi', window=14, inplace=False):
    """
    计算RSI指标,并更新DataFrame。
    
    参数:
    df : DataFrame
        包含价格数据的DataFrame,必须包含'open', 'high', 'low', 'close'列。
    window : int, optional
        RSI指标的窗口大小,默认为14。
    inplace : bool, optional
        是否在原地更新DataFrame,默认为False。
    
    返回:
    df : DataFrame
        包含RSI指标的新DataFrame(如果inplace为False)。
    """
    
    # 复制DataFrame以避免修改原始数据
    if not inplace:
        df = df.copy()
    
    # 计算价格变动
    chg = df['close'].diff()
    
    # 计算上涨和下跌的平均值
    up_avg = chg.where(chg > 0).rolling(window=window).mean()
    down_avg = -chg.where(chg < 0).rolling(window=window).mean()
    
    # 防止除以零
    up_avg.fillna(0, inplace=True)
    down_avg.fillna(0, inplace=True)
    
    # 计算RSI
    df[rsi_col] = 100 - (100 / (1 + (up_avg / down_avg)))
    
    return df

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

相关文章
|
4月前
|
程序员 Python
【Quant102】 经典技术指标 Pandas 实现(第一部分)(5)
【Quant102】 经典技术指标 Pandas 实现(第一部分)
28 0
|
4月前
|
程序员 Python
【Quant102】 经典技术指标 Pandas 实现(第一部分)(4)
【Quant102】 经典技术指标 Pandas 实现(第一部分)
22 0
|
4月前
|
程序员 Python
【Quant102】 经典技术指标 Pandas 实现(第一部分)(1)
【Quant102】 经典技术指标 Pandas 实现(第一部分)
18 0
|
4月前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
2月前
|
机器学习/深度学习 数据可视化 搜索推荐
Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。
【7月更文挑战第5天】Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。流程包括数据获取、预处理、探索、模型选择、评估与优化,以及结果可视化。示例展示了用户行为、话题趋势和用户画像分析。Python的丰富生态使得社交媒体洞察变得高效。通过学习和实践,可以提升社交媒体分析能力。
61 1
|
2月前
|
数据挖掘 Python
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
120 0
|
7天前
|
机器学习/深度学习 数据采集 监控
Pandas与Matplotlib:Python中的动态数据可视化
Pandas与Matplotlib:Python中的动态数据可视化
|
22天前
|
存储 数据可视化 前端开发
7个Pandas&Jupyter特殊技巧,让Python数据分析更轻松
7个Pandas&Jupyter特殊技巧,让Python数据分析更轻松
|
1月前
【Pandas+Python】初始化一个全零的Dataframe
初始化一个100*3的0矩阵,变为Dataframe类型,并为每列赋值一个属性。
20 2
|
2月前
|
SQL 并行计算 API
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。