需求:股票的量化交易指标很多,我想做一个自己的量化交易图表:
- 展示每天交易量和股价振幅的关系图
- 进一步的话想知道单位金额对股价振幅的影响,
- 最终实现大概估计需要多少买入成交量能拉升多少股价)
,
目前未实现,没有拿到具体的每天的买入金额
一 注册https://tushare.pro/网站账号:tushare官网
二 Pyhon实现
# 导入必要的库
import tushare as ts
import matplotlib.pyplot as plt
import matplotlib
import pandas as pd# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体显示中文
matplotlib.rcParams['axes.unicode_minus'] = False # 解决负号显示问题# 初始化pro接口
pro = ts.pro_api('eedfd24d5c70593c9ca6f9ea1178e7c4ff414')# 拉取数据
df = pro.daily(**{"ts_code": "000001.SZ","trade_date": "","start_date": 20250101,"end_date": 20250117,"offset": "","limit": ""
}, fields=["ts_code", # 股票代码"trade_date", # 交易日期"open", # 开盘价"high", # 最高价"low", # 最低价"close", # 收盘价"pre_close", # 前收盘价"change", # 涨跌额"pct_chg", # 涨跌幅 【基于除权后的昨收计算的涨跌幅:(今收-除权昨收)/除权昨收 】"vol", # 成交量 (手)"amount" # 成交额 (千元)
])print(df)# 检查数据是否有缺失值
if df.isnull().values.any():print("数据包含缺失值,需要处理缺失值")df.dropna(inplace=True)# 确保amount和percentage是数值类型
df['amount'] = pd.to_numeric(df['amount'], errors='coerce')
df['open'] = pd.to_numeric(df['open'], errors='coerce')
df['close'] = pd.to_numeric(df['close'], errors='coerce')# 计算新的Y轴数据
df['percentage'] = abs(df['open'] - df['close']) / df['open']# 检查计算后的数据是否有缺失值
if df['percentage'].isnull().values.any():print("计算后的百分比数据包含缺失值,需要处理缺失值")df.dropna(subset=['percentage'], inplace=True)# 检查数据范围
print("amount范围:", df['amount'].min(), df['amount'].max())
print("percentage范围:", df['percentage'].min(), df['percentage'].max())# 打印前几行数据以检查
print("前几行数据:")
print(df.head())# 将trade_date转换为日期格式
df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')# 按trade_date排序
df = df.sort_values(by='trade_date')# 绘制柱状图
plt.figure(figsize=(12, 8))
bars = plt.bar(df['trade_date'], df['percentage'], width=0.5, color='blue', label='百分比')
# 在每个柱子的顶端显示成交额
for bar, amount in zip(bars, df['amount']):yval = bar.get_height()plt.text(bar.get_x() + bar.get_width() / 2, yval, f'{amount:.0f}', ha='center', va='bottom', fontsize=9,color='black')plt.xlabel('交易日期')
plt.ylabel('百分比')
plt.title('交易日期与拉升股价比率关系图')
plt.xticks(rotation=45)
plt.grid(True)
plt.legend()
plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域
plt.show()# 绘制第二个柱状图,展示成交额
plt.figure(figsize=(12, 8))
plt.bar(df['trade_date'], df['amount'], width=0.5, color='green', label='成交额 (千元)')
plt.xlabel('交易日期')
plt.ylabel('成交额 (千元)')
plt.title('交易日期与成交额关系图')
plt.xticks(rotation=45)
plt.grid(True)
plt.legend()
plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域
plt.show()