Python实现ROC工具判断信号:股票技术分析的工具系列(7)
- 介绍
- 算法公式
- 代码
- rolling函数介绍
- 完整代码
- data代码
- ROC.py
介绍
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
函数通常与其他函数(如 mean
、sum
、std
等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。
以下是 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
: 窗口类型,例如None
、boxcar
、triang
等,默认为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_datadata = {'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,包含股票数据的DataFramen: 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指标的DataFrameday_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 = 6df['ROC'] = calculate_roc(df, n)
df['MAROC'] = calculate_maroc(df['ROC'], m)
result = generate_signals(df)
print(result)