金融量化AI研究--Claude, Python

这里用来记录一些本人运用Claude编程的心得或笔记

导航

详解股票数据分析库--stockstats

Github地址:https://github.com/jealous/stockstats

Python stockstats是一个用于股票数据分析的库,提供了丰富的功能和工具,可以帮助投资者和分析师进行股票市场的数据分析和研究。
本文将深入探讨stockstats库的安装、特性、基本功能、高级功能、实际应用场景等方面。

安装stockstats库非常简单,可以通过pip命令进行安装:
pip install stockstats

安装完成后,即可开始使用stockstats库进行股票数据分析。
特性:

  • 支持多种股票指标计算,如移动平均线、相对强弱指标等。
  • 提供了丰富的股票数据分析工具,如趋势分析、波动率分析等。
  • 支持多种数据源,可以从不同的股票数据API获取数据。

一个例子:使用tushare获得数据,再用stockstats分析

1,获取股票的OCHL数据,并提取相关列

import tushare as ts
from datetime import date

# 设置API密钥
ts.set_token('yourkeyhere')
pro = ts.pro_api()

#Getting the stock data
def get_stock_data(ticker, start, end, seq):
    ticker_data = pro.query(seq, ts_code=ticker, start_date=start, end_date=end)  # downloading the stock data from START to TODAY
    ticker_data = ticker_data[['trade_date', 'open', 'high', 'low', 'close', 'pre_close', 'vol']]
    columns = ['date', 'open', 'high', 'low', 'close', 'adj_close', 'volume']
    ticker_data.columns = columns
    return ticker_data

begin_time = '20200101'
end_time = '20250801'
code = "002230.sz"
seq = 'daily'
stock = get_stock_data(code, begin_time, end_time, seq)

image

获得了股票的基础数据之后,要对dataframe进行初始化,初始化有两种方式:

2,使用stockstats初始化dataframe

wrap方法

from stockstats import wrap
stockStat = wrap(stock) #把stock初始化为stockStat,stockStat可以直接提取想要数据列

注意:unwrap命令可用于将dataframe转换回去. 请注意,这不会重置列和索引。unwrap pandas.DataFrame unwrap

StockDataFrame.retype(stock) 方法

import stockstats
stockStat = stockstats.StockDataFrame.retype(stock)

无论是以上哪种方法,得到的stockStat都一样,如下(以日期为索引):
image
而从tushare下载的原始数据的样式如下:
image

3,股票指标计算(重点/亮点)

在stockstats中, StockDataFrame是pandas.DataFrame的子类,它具有DataFrame的所有功能。
用户可以使用某些指定的列名直接访问指标结果,例如:kdjk, macd, rsi等,这些列的值是在您第一次访问StockDataFrame时计算出来的。
例如:
macd = stockStat['macd']
rsi = stockStat.get('rsi')
这是stockstats特有的参数计算和传递方式,简单直接,非常方便。如果你要重新计算这些指标,请先删除这些已经生成的列。

单参数指标:格式:_

例如:
6 periods RSI: rsi_6
10 periods CCI: cci_10
13 periods ATR: atr_13

(注意:RSI - 相对强弱指数,RSI默认窗口大小为 14, 可通过配置set_dft_window('rsi', n)
或:
df['rsi']:14 个周期 RSI
df['rsi_6']:6 个周期的 RSI)

引用方式:初始化OCHL数据之后, 如果要引用指标,则直接访问stockStat['rsi_6'],stockStat['cci_10'],stockStat['atr_13'],
或 stockStat['kdjk_3'] ,就可以制定使用 kdjk 指标,同时设置周期3天。
其中,有些指标有默认窗口,可查看相关文档以获取详细信息。

计算相对强弱指标RSI

stock_data['rsi'] = stock_data['rsi_14']

双参数指标:格式:

某些统计信息需要列名和窗口大小,如delta、shift、简单移动平均线等,可以用双参数检索
例子:

  • 最高价的5个周期简单移动平均线:high_5_sma
  • 收盘价的 10 个周期指数移动平均线:close_10_ema
  • 最高价的1个周期delta:high_-1_d。 减号表示向后看。

计算移动平均线

stock_data['ma5'] = stock_data['close_5_sma']
stock_data['ma20'] = stock_data['close_20_sma']

时间增量

使用该模式检索不同时期之间的增量,格式:__d
您也可以用delta代替-1_d
例子:

  • df['close_-1_d'],检索当前周期和前一个周期之间的收盘价增量。
  • df['close_delta'],与df['close_-1_d']相同
  • df['high_2_d'],检索当前和 2 天后之间的最高价增量

前后位移(Shift Periods)

向后或向前移动列,它需要 2 个参数:

  • 要移动的列的名称
  • 要转移的周期,可以是负数
    这种情况下,我们用最接近的数据填充头部和尾部。

请参阅以下示例:

In [15]: df[['close', 'close_-1_s', 'close_2_s']]
Out[15]:
          close  close_-1_s  close_2_s
date
20040817  11.20       11.20      10.53
20040818  10.29       11.20      10.55
20040819  10.53       10.29      10.10
20040820  10.55       10.53      10.25
...         ...         ...        ...
20160812  39.10       38.70      39.66
20160815  39.58       39.10      40.45
20160816  39.66       39.58      40.45
20160817  40.45       39.66      40.45

df.init_all()查看所有指标

某些指标(例如 KDJ、BOLL、MFI)具有快捷方式,可以用.init_all()查看。
我专门看了以下,生成的指标列有:
Index(['open', 'high', 'low', 'close', 'adj_close', 'volume', 'change',
'rs_14', 'rsi', 'rsi_14', 'stochrsi', 'rate', 'middle', 'tp', 'boll',
'boll_ub', 'boll_lb', 'macd', 'macds', 'macdh', 'ppo', 'ppos', 'ppoh',
'rsv_9', 'kdjk_9', 'kdjk', 'kdjd_9', 'kdjd', 'kdjj_9', 'kdjj', 'cr',
'cr-ma1', 'cr-ma2', 'cr-ma3', 'cci', 'tr', 'atr', 'high_delta', 'um',
'low_delta', 'dm', 'pdm', 'pdm_14_ema', 'pdm_14', 'atr_14', 'pdi_14',
'pdi', 'mdm', 'mdm_14_ema', 'mdm_14', 'mdi_14', 'mdi', 'dx_14', 'dx',
'adx', 'adxr', 'trix', 'tema', 'vr', 'close_10_sma', 'close_50_sma',
'dma', 'vwma', 'chop', 'log-ret', 'mfi', 'wt1', 'wt2', 'wr',
'supertrend_ub', 'supertrend_lb', 'supertrend', 'aroon', 'ao'],
dtype='object')

对数收益率

Logarithmic return = ln( close / last close)
直接使用:df['log-ret']

其他指标计算,请参考手册:https://github.com/chengjon/stockstats/blob/master/README.md
以及这篇文章:https://yanghuaiyuan.blog.csdn.net/article/details/78578548

4,趋势分析

stockstats库还提供了趋势分析功能,可以识别股票的上涨趋势、下跌趋势等,帮助用户把握市场走势。
stock_data['trend'] = stock_data['close_50_sma'] - stock_data['close_200_sma']

5,策略分析

通过结合多个股票指标和因子,stockstats库支持多因子策略分析,可以帮助用户制定更有效的交易策略。

# 计算MACD指标
stock_data['macd'] = stock_data['macd']

# 制定交易策略
if stock_data['macd'] > 0 and stock_data['rsi'] > 70:
    print("卖出信号")
elif stock_data['macd'] < 0 and stock_data['rsi'] < 30:
    print("买入信号")
else:
    print("观望")

备注

https://github.com/chengjon/stockstats/blob/master/README.md

支持的指标名称

stockstats支持的统计数据/指标包括:

delta
排列(从零开始)
日志返回
最大范围内的
范围内的最小值
中间 = (收盘价 + 最高价 + 最低价) / 3
比较:LE、GE、LT、GT、EQ、NE
计数:向后 (C) 和向前 (fc)
交叉:包括向上交叉和向下交叉
SMA:简单移动平均线
EMA:指数移动平均线
MSTD:移动标准差
MVAR:移动方差
RSV:原始随机值
RSI:相对强弱指数
KDJ:随机震荡指标
布林:布林带
MACD:移动平均收敛散度
CR:能量指数(中间意愿指数)
WR:威廉姆斯超买/超卖指数
CCI:商品通道指数
TR:真实范围
ATR:平均真实范围
DMA:移动平均线的不同 (10, 50)
DMI:方向移动指数,包括
+DI:正方向指示器
-DI:负方向指示器
ADX:平均方向运动指数
ADXR:ADX 的平滑移动平均线
TRIX:三重指数移动平均线
TEMA:另一个三重指数移动平均线
VR:成交量变化指数
MFI:资金流量指数
VWMA:成交量加权移动平均线
CHOP:波涛指数
KER:考夫曼效率比
KAMA:考夫曼自适应移动平均线
PPO:价格振荡器百分比
StochRSI:随机 RSI
WT:LazyBear 的波浪趋势
超级趋势:上轨和下轨
Aroon:Aroon 振荡器
Z:Z 分数
AO:很棒的振荡器
BOP:权力平衡
MAD:平均绝对偏差
ROC:变化率
科波克:科波克曲线
Ichimoku:Ichimoku 云
CTI:相关趋势指标
LRMA:线性回归移动平均线
ERI:接骨木射线指数
FTR:高斯费舍尔变换价格反转指标
RVGI:相对活力指数
惯性:惯性指标
KST:知道确定的事情
PGO:相当不错的振荡器
PSL:心理线
PVO:百分比音量振荡器
QQE:定量定性估计

posted on 2025-08-03 02:26  chengjon  阅读(282)  评论(0)    收藏  举报