程序自动获取限购-溢价LOF基金套利,并推送到微信消息
最近2个月QDII的套利机会挺多的。
如前面的印度基金LOF,嘉实原油LOF,全球芯片LOF,到现在的标普500LOF。
如果平时工作繁忙,没有时间每天翻看基金的公告,或者没时间看大V们公众号消息推送。
或者自己想要遍历所有限购状态的LOF基金,并自动筛选出溢价的可套利标的,提前埋伏。
那么可以自己动手,写个简单的监控推送程序。
微信推送电脑安装必要的python环境,和pandas,akshare库。
获取所有基金的数据
得到大概2万个基金数据。
然后剩下的就是过滤条件了,因为这里面包含了很多货基,债基等我们不需要的基金类型。
用value_counts 就知道有多少种类型:
平时我们做套利的,一般以QDII基金为主,大部分的情况是因为外汇额度用完而导致的限购。
所以监控的品种可以选择QDII类型或者海外股票等。
示例里笔者选一个 指数型-海外股票
然后过来条件按照个人喜好来设定:
比如选择限购1万以下的LOF:
得到下面的结果:
因为上面的返回数据没有溢价率,所以我们就需要自己写个获取溢价率的函数去处理一下:
上面循环里会自动把没有对应场内基金的数据过滤掉。
运行2秒就得到了数据:
然后我们发现这几只限购的是处于轻微折价状态,只有易方达标普500LOF是溢价26%,只有它可以开拖拉机去套的。
微信推送
最后是发消息通知自己。早期开通的个人企业微信API,可以直接使用微信的API发送消息。如果现在申请,需要有自己的个人域名和备案。
可以设定溢价率大于某个阈值才发送消息。比如溢价率大于4以上才发送。
为了演示,去掉这个条件,把全部数据的都发送吧。
效果图
然后就可以把全部代码放在一起,用windows的定时任务或者linux的crontab自动运行了。
目前QMT,Ptrade不支持拖拉机账号,所以自动化拖拉机的功能就实现不了了哈。
PS:顺便附录一份全部限购1万以下的基金全表。
需要的关注公众号后台回复:基金限购名单
获取即可。
如前面的印度基金LOF,嘉实原油LOF,全球芯片LOF,到现在的标普500LOF。
如果平时工作繁忙,没有时间每天翻看基金的公告,或者没时间看大V们公众号消息推送。
或者自己想要遍历所有限购状态的LOF基金,并自动筛选出溢价的可套利标的,提前埋伏。
那么可以自己动手,写个简单的监控推送程序。
微信推送电脑安装必要的python环境,和pandas,akshare库。
获取所有基金的数据
import akshare as ak
fund_purchase_em_df = ak.fund_purchase_em()
得到大概2万个基金数据。
然后剩下的就是过滤条件了,因为这里面包含了很多货基,债基等我们不需要的基金类型。
用value_counts 就知道有多少种类型:
平时我们做套利的,一般以QDII基金为主,大部分的情况是因为外汇额度用完而导致的限购。
所以监控的品种可以选择QDII类型或者海外股票等。
示例里笔者选一个 指数型-海外股票
然后过来条件按照个人喜好来设定:
比如选择限购1万以下的LOF:
def filter_func(df,type='指数型-海外股票'):
df = df[~df['基金代码'].str.startswith('0')]
condition1 = df['申购状态']=='限大额'
condition2 = df['基金类型']==type
df = df[condition1 & condition2]
df= df[~df['基金简称'].str.contains('ETF')]
df = df[(df['日累计限定金额']>0) & (df['日累计限定金额']<=10000)]
df['基金代码'] = df['基金代码'].map(lambda x: 'SH'+x if x.startswith('5') else 'SZ'+x)
return df
得到下面的结果:
因为上面的返回数据没有溢价率,所以我们就需要自己写个获取溢价率的函数去处理一下:
import requests
cookies = # 雪球上获取,不一定需要登录状态
headers = {
'authority': 'stock.xueqiu.com',
'origin': 'https://xueqiu.com',
'user-agent': 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C28 Safari/419.3',
}
def fund_premium_rate(code):
params = {
'symbol': code,
'extend': 'detail',
}
response = requests.get('https://stock.xueqiu.com/v5/stock/quote.json', params=params,
cookies=cookies,
headers=headers)
try:
rate = response.json()['data']['quote']['premium_rate']
except Exception as e:
return None
else:
return rate
上面循环里会自动把没有对应场内基金的数据过滤掉。
运行2秒就得到了数据:
然后我们发现这几只限购的是处于轻微折价状态,只有易方达标普500LOF是溢价26%,只有它可以开拖拉机去套的。
微信推送
最后是发消息通知自己。早期开通的个人企业微信API,可以直接使用微信的API发送消息。如果现在申请,需要有自己的个人域名和备案。
可以设定溢价率大于某个阈值才发送消息。比如溢价率大于4以上才发送。
for code,name in code_name_mapper.items():
rate = fund_premium_rate(code)
if rate is not None:
print(f'{code} - {name}的溢价率是: {rate}')
if rate > 4:
send_message_via_wechat(f'{code} - {name}的溢价率是: {rate}, 可以关注套利。 公众号:可转债量化分析')
为了演示,去掉这个条件,把全部数据的都发送吧。
效果图
然后就可以把全部代码放在一起,用windows的定时任务或者linux的crontab自动运行了。
目前QMT,Ptrade不支持拖拉机账号,所以自动化拖拉机的功能就实现不了了哈。
PS:顺便附录一份全部限购1万以下的基金全表。
需要的关注公众号后台回复:基金限购名单
获取即可。