问题描述
解决方案
在聚宽(JoinQuant)平台中,获取并分析一只股票的历史融资买入额主要使用 get_mtss 函数。该函数专门用于获取融资融券信息。
以下是具体的步骤、代码实现及分析方法。
1. 核心 API 说明
- 函数名:
get_mtss(security_list, start_date=None, end_date=None, fields=None, count=None) - 关键字段 (
fields):fin_buy_value: 融资买入额(元)fin_value: 融资余额(元)sec_value: 融券余量(股)
- 适用范围: 仅适用于融资融券标的股票。
2. 代码实现
以下代码展示了如何在研究环境中获取平安银行(000001.XSHE)过去一年的融资买入额,并绘制趋势图进行简单分析。
# -*- coding: utf-8 -*-
from jqdata import *
import pandas as pd
import matplotlib.pyplot as plt
import datetime
# 1. 设置参数
security = '000001.XSHE' # 标的:平安银行
end_date = datetime.datetime.now().date() # 结束日期:今天
start_date = end_date - datetime.timedelta(days=365) # 开始日期:一年前
# 2. 获取融资融券数据
# fields=['date', 'fin_buy_value'] 分别代表日期和融资买入额
df = get_mtss(
security_list=[security],
start_date=start_date,
end_date=end_date,
fields=['date', 'fin_buy_value', 'fin_value']
)
# 3. 数据预处理与分析
if df is not None and not df.empty:
# 将日期设置为索引,方便绘图
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
# 计算融资买入额的移动平均线(例如20日均线),观察趋势
df['MA20_buy'] = df['fin_buy_value'].rolling(window=20).mean()
# 打印最近5条数据
print("最近5个交易日的融资数据:")
print(df.tail())
# 4. 可视化分析
plt.figure(figsize=(15, 6))
# 绘制融资买入额
plt.plot(df.index, df['fin_buy_value'], label='Financing Buy Value (Daily)', color='blue', alpha=0.5)
# 绘制20日均线
plt.plot(df.index, df['MA20_buy'], label='20-Day Moving Average', color='red', linewidth=2)
plt.title(f'{security} Financing Buy Value Analysis')
plt.xlabel('Date')
plt.ylabel('Value (CNY)')
plt.legend()
plt.grid(True)
plt.show()
else:
print(f"未获取到 {security} 的融资融券数据,请确认该股票是否为两融标的。")
3. 分析思路
获取数据后,通常可以从以下几个维度进行分析:
-
趋势分析:
- 观察
fin_buy_value的绝对值变化。如果融资买入额持续放大,通常代表市场情绪偏向多头,资金看好后市。 - 结合
fin_value(融资余额) 分析。如果融资买入额增加,且融资余额同步创出新高,说明资金在持续流入且持仓意愿强。
- 观察
-
情绪拐点:
- 当股价下跌但融资买入额异常放大时,可能是资金在“抄底”。
- 当股价上涨但融资买入额开始萎缩时,可能预示着多头力量减弱。
-
量价配合:
- 可以将融资买入额与股价(通过
get_price获取)叠加分析,计算两者的相关性。融资买入额通常被视为“聪明钱”或激进资金的动向指标。
- 可以将融资买入额与股价(通过
Q&A
Q1: 为什么调用 get_mtss 返回的数据是空的?
A1: 可能原因有二:一是该股票不是融资融券标的(只有部分大盘股和活跃股是两融标的);二是查询的时间段内该股票暂停了融资买入。
Q2: fin_buy_value 和 fin_value 有什么区别?
A2: fin_buy_value (融资买入额) 是当天的流量数据,表示当天借钱买入了多少;fin_value (融资余额) 是存量数据,表示截至当天收盘,投资者一共借了多少钱还没还。
Q3: 这个数据在回测中可以使用吗?
A3: 可以。在回测中调用 get_mtss 时,系统会自动处理未来函数问题,即在策略运行到 T 日时,只能获取到 T-1 日及之前的融资融券数据(因为交易所通常在收盘后晚间公布当日两融数据)。
Q4: 如何获取全市场的融资买入总额?
A4: get_mtss 支持传入多只股票列表。你可以先通过 get_margincash_stocks() 获取所有融资标的列表,然后传入 get_mtss 进行批量获取并求和(注意数据量较大,建议分批处理)。