Python 实现 OSC 指标计算 (变动速率线):股票技术分析的利器系列(14)
- 介绍
- 算法公式
- 代码
- rolling函数介绍
- 核心代码
- 计算OSC
- 完整代码
介绍
OSC(变动速率线)是一种技术指标,通过计算价格的变动速率来衡量市场的动量,通常用于帮助分析价格趋势的强度和方向。
先看看官方介绍:
OSC(变动速率线)
用法
1.OSC 以100 为中轴线,OSC>100 为多头市场;OSC<100 为空头市场;
2.OSC 向上交叉其平均线时,买进;OSC 向下交叉其平均线时卖出;
3.OSC 在高水平或低水平与股价产生背离时,应注意股价随时有反转的可能;
4.OSC 的超买超卖界限值随个股不同而不同,使用者应自行调整。
算法公式
OSC:100*(CLOSE-MA(CLOSE,N));
MAOSC:EXPMEMA(OSC,M);
优势 | 劣势 |
---|---|
反映价格变动速率,有助于捕捉市场动量 | 可能存在滞后性 |
简单易懂,适用于新手和经验者 | 对突发事件的反应相对较慢 |
可以结合其他指标使用,增强分析效果 | 对参数的选择较为敏感 |
在特定市场环境下具有较好的表现 | 与价格走势有时会出现背离现象 |
代码
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
。
核心代码
计算OSC
# 计算OSC
def calculate_OSC(df, N):df['MA_CLOSE'] = df['CLOSE'].rolling(window=N).mean() # 计算收盘价的移动平均df['OSC'] = 100 * (df['CLOSE'] - df['MA_CLOSE'])return df
-
df['MA_CLOSE'] = df['CLOSE'].rolling(window=N).mean()
:- 该行代码计算了收盘价的移动平均,首先选取了DataFrame
df
中的 ‘CLOSE’ 列(收盘价数据),然后使用rolling(window=N).mean()
方法计算了这个收盘价的滚动窗口移动平均值。 rolling(window=N)
表示使用窗口大小为N
的滚动窗口,即取最近N
个数据进行移动平均计算。.mean()
表示对滚动窗口内的数据取平均值。- 最后,将计算得到的移动平均值存储到一个新的列 ‘MA_CLOSE’ 中。
- 该行代码计算了收盘价的移动平均,首先选取了DataFrame
-
df['OSC'] = 100 * (df['CLOSE'] - df['MA_CLOSE'])
:- 该行代码计算了OSC指标。首先从DataFrame
df
中取出 ‘CLOSE’ 列(收盘价数据)和刚刚计算得到的移动平均 ‘MA_CLOSE’ 列。 - 然后,计算了收盘价与移动平均之间的差值,并乘以100,得到OSC的数值。
- 最后,将计算得到的OSC数值存储到一个新的列 ‘OSC’ 中。
- 该行代码计算了OSC指标。首先从DataFrame
完整代码
import pandas as pddata = {'CLOSE': 填每日收盘的数据,'HIGH': 填每日最高的数据,'LOW': 填每日最低的数据'OPEN': 填每日开盘的数据'VOL': 填每日交易量的数据
}
df = pd.DataFrame(data)# 计算OSC
def calculate_OSC(df, N):df['MA_CLOSE'] = df['CLOSE'].rolling(window=N).mean() # 计算收盘价的移动平均df['OSC'] = 100 * (df['CLOSE'] - df['MA_CLOSE'])return df# 计算MAOSC
def calculate_MAOSC(df, M):df['MAOSC'] = df['OSC'].ewm(span=M, min_periods=M).mean() # 使用指数移动平均计算MAOSCreturn dfN = 20
M = 6# 计算OSC
df = calculate_OSC(df, N)# 计算MAOSC
df = calculate_MAOSC(df, M)# 打印结果
print(df)