Python实现ROC工具判断信号:股票技术分析的工具系列(7)

Python实现ROC工具判断信号:股票技术分析的工具系列(7)


介绍

ROC(变动率指标)是一种技术分析指标,用于衡量价格变动的速度和幅度,计算方式为当前收盘价与一定期间前收盘价的变动率。

先看看官方介绍:

ROC(变动率指标)
用法
1.本指标的超买超卖界限值随个股不同而不同,使用者应自行调整;
2.本指标的超买超卖范围,一般介于±6.5之间;
3.本指标用法请参考MTM 指标用法;
(1)ROC从下向上突破ROCMA,买入信号;
(2)ROC从上向下跌破ROCMA,卖出信号;
(3)股价续创新高,而ROC未配合上升,意味上涨动力减弱;
(4)股价续创新低,而ROC未配合下降,意味下跌动力减弱;
(5)股价与ROC在低位同步上升,将有反弹行情;反之,从高位同步下降,将有回落走势。
4.本指标可设参考线。

算法公式

ROC:100*(CLOSE-REF(CLOSE,N))/REF(CLOSE,N);
MAROC:MA(ROC,M);
优势描述
灵活性ROC指标的超买超卖界限值随个股不同而不同,使用者可以根据具体情况进行调整,使得指标更适合不同个股的特性。
清晰的买卖信号当ROC从下向上突破ROCMA时,产生买入信号;当ROC从上向下跌破ROCMA时,产生卖出信号。这提供了清晰的交易信号,有助于投资者抓住市场的买卖时机。
配合价格趋势ROC指标能够配合价格趋势进行分析,当股价续创新高而ROC未配合上升时,意味着上涨动力减弱;反之,当股价续创新低而ROC未配合下降时,意味着下跌动力减弱。
指示反弹或回落行情当股价与ROC在低位同步上升时,将有反弹行情;反之,当股价与ROC在高位同步下降时,将有回落走势。这为投资者提供了判断市场走势的重要参考。

劣势:

劣势描述
单一性ROC指标虽然能够提供清晰的买卖信号,但它只是从价格变动率的角度进行分析,缺乏对其他市场因素的考虑,可能无法全面反映市场的复杂情况。
市场噪音影响在市场波动较大或处于震荡状态时,ROC指标可能会产生虚假信号,影响投资者的交易决策。
需要进一步验证虽然ROC指标提供了买卖信号和趋势配合分析,但投资者仍需要结合其他指标和分析方法进行综合判断,以确认信号的有效性。

代码

rolling函数介绍

rolling 函数通常与其他函数(如 meansumstd 等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。

以下是 rolling 函数的基本语法:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
  • window: 用于计算统计量的窗口大小。
  • min_periods: 每个窗口最少需要的非空观测值数量。
  • center: 确定窗口是否居中,默认为 False
  • win_type: 窗口类型,例如 Noneboxcartriang 等,默认为 None
  • on: 在数据帧中执行滚动操作的列,默认为 None,表示对整个数据帧执行操作。
  • axis: 执行滚动操作的轴,默认为 0,表示按列执行操作。
  • closed: 确定窗口的哪一端是闭合的,默认为 None

完整代码

data代码

这里完整代码中的data部分,阔以通过下面资源文件下载,或者留下邮箱等发送。:

https://download.csdn.net/download/qq_36051316/88896567
ROC.py
 
import pandas as pd
import stock_data

data = {
    'DATE': stock_data.DATE,
    'CLOSE': stock_data.CLOSE,
    'HIGH': stock_data.HIGH,
    'LOW': stock_data.LOW,
    'OPEN': stock_data.OPEN,
    'CHANGE': stock_data.CHANGE,
    'VOL': stock_data.VOL,
    'CAPITAL': stock_data.CAPITAL
}

df = pd.DataFrame(data)


def calculate_roc(data, n):
    """
    计算ROC指标

    参数:
    data: pandas.DataFrame,包含股票数据的DataFrame
    n: int,窗口大小

    返回:
    pandas.Series,ROC指标数据
    """
    return 100 * (data['CLOSE'] - data['CLOSE'].shift(n)) / data['CLOSE'].shift(n)


def calculate_maroc(roc, m):
    """
    计算MAROC指标

    参数:
    roc: pandas.Series,ROC指标数据
    m: int,窗口大小

    返回:
    pandas.Series,MAROC指标数据
    """
    return roc.rolling(window=m).mean()


def generate_signals(v_df, day_index=-1):
    """
    生成信号

    参数:
    v_df: pandas.DataFrame,包含ROC和MAROC指标的DataFrame
    day_index: int,要检查的日期索引,默认为最后一天

    返回:
    str,表示信号的字符串,可能为"买入信号"、"卖出信号"或"无信号"
    """
    row = v_df.iloc[day_index]
    if row['ROC'] > row['MAROC']:
        return '买入信号'
    elif row['ROC'] < row['MAROC']:
        return '卖出信号'
    else:
        return '无信号'


n = 12
m = 6

df['ROC'] = calculate_roc(df, n)
df['MAROC'] = calculate_maroc(df['ROC'], m)
result = generate_signals(df)
print(result)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盗理者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值