项目地址:https://github.com/wbbyfd/UniversalRotation
注:实际进行轮动的时候只需要UniversalRotation.py和UniversalRotation.xlsm即可,其他source code仅为Pycharm工程文件。
使用前准备
1. 安装Python3:https://www.python.org/ftp/python/3.8.7/python-3.8.7-amd64.exe
2. 打开cmd窗口输入:pip install schedule xlwings pandas requests pysnowball browser-cookie3
3. 启用Microsoft Office(不要使用WPS)的Excel中的xlwings宏:
(1)、命令行安装加载项:xlwings addin install。
(2)、在excel中启用加载项: 文件>选项>信任中心>信任中心设置>宏设置 中,选择“启用所有并勾选”并勾选“对VBA对象模型的信任访问”。
4. 使用电脑浏览器Chrome/Firefox/Opera/Edge/Chromium访问任意一个雪球网站以便获取token,不需要登录雪球账号。
注1:如遇到如下报错就代表token过期了: Exception: b'{"error_description":"\xe9\x81\x87","error_uri":"/v5/stock/quote.json","error_data":null,"error_code":"400016"}'。 由于我们在Python调用雪球API前需要设置xq_a_token,但它大约只有20天的有效期,之前都是使用F12各种查找xq_a_token然后复制粘贴到我们的Python程序, 搜索发现可以使用browser-cookie3自动化获取电脑浏览器已缓存的cookies(当然浏览器的cookies肯定也会过期,我们只需要坚持每20天左右使用电脑浏览器访问任意一个雪球网站即可刷新电脑浏览器的cookies)。
注2:作为一个Android程序员,从2022.2月份开始边学边练第一次写Python项目进行量化投资,语法格式肯定不完美,勿喷,仅仅是为了解放调仓的苦恼而写的小玩意,分享出来仅用于学习研究,不可用于商业用途!
(一)、使用Python+Excel可视化你的持仓和最新排名的差异,解决买什么卖什么的烦恼
1. 这里以"低溢价可转债策略"、"双低可转债策略"为例子,我做了2个轮动的sheet表格:《低溢价可转债轮动》和《双低可转债轮动》。
2. 点击《可转债实时数据》里面的“点击更新”按钮。
3. 分别点击《低溢价可转债轮动》和《双低可转债轮动》里面的“点击更新”按钮,如果有其他任何自定义排名也可以手动更新”最新VIP可转债排名“。
4. 从券商PC端软件导出最新的低溢价可转债持仓和双低可转债持仓的Excel表格,并分别更新到“我的低溢价可转债持仓”、“我的双低可转债持仓”,这时候就可以看到需要轮动的结果了。
注3:这里依赖的是Excel自带的各种公式,忽然发现Excel解放手脚的强大了吧?神不神奇惊不惊喜,意不意外?
注4:每个sheet页我都做了双排名(即自定义的”最新VIP可转债排名“),满足用户自定义的需求。
注5:这里的2个sheet页仅是2个可转债的例子,填充了持仓和最新排名。用户可以将它应用于任何的“依据各种因子进行排名的量化轮动策略”。 大家可以将这两个sheet作为壳子,替换成任何你们自己的轮动品种,比如小市值低价股票策略、低估股票策略、A/H轮动等等。
(二)、关于《20天净值增长率和溢价率轮动LOF、ETF和封基》和《20天净值增长率和溢价率轮动债券和境外基金》
1. 点击“点击更新”按钮,即可更新这2个策略的最新的排名数据。
2. 从券商PC端软件导出我的持仓放在左侧列表,即可看到目前持仓排名了。
作者:wbb任我行
链接:https://xueqiu.com/8003408867/219734332
来源:雪球
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
风险提示:本文所提到的观点仅代表个人的意见,所涉及标的不作推荐,据此买卖,风险自负。
赞同来自: wbb渐入佳境
没解决。chrome版本换成了跟楼主一样的版本,还是不成功。换过火狐、edge,都是同样的报错。这个Python程序估计只适配楼主的电脑环境。我解决了此类问题,目前可以正常运行了。
参考了一个大佬的帖子,但是贴链接不让发,发给标题把:
【Python小技巧】browser_cookie3访问Chrome浏览器Cookies文件报错的解决办法
我遇到的报错信息:
{{{
Error
Traceback (most recent call last):File "<string>", line 1, in <module>
File "e:\code\universalrotation-main\UniversalRotation.py", line 263, in refresh_convertible_bond
pysnowball.set_token(get_xq_a_token())
File "e:\code\universalrotation-main\UniversalRotation.py", line 102, in get_xq_a_token
cj = browser_cookie3.load()
File "D:\veighna_studio\lib\site-packages\browser_cookie3__init__.py", line 1233, in load
for cookie in cookie_fn(domain_name=domain_name):
File "D:\veighna_studio\lib\site-packages\browser_cookie3__init__.py", line 1160, in chrome
return Chrome(cookie_file, domain_name, key_file).load()
File "D:\veighna_studio\lib\site-packages\browser_cookie3__init__.py", line 489, in load
with _DatabaseConnetion(self.cookie_file) as con:
File "D:\veighna_studio\lib\site-packages\browser_cookie3__init__.py", line 349, in __enter__
return self.get_connection()
File "D:\veighna_studio\lib\site-packages\browser_cookie3__init__.py", line 383, in get_connection
con = method()
File "D:\veighna_studio\lib\site-packages\browser_cookie3__init__.py", line 374, in __get_connection_legacy
shutil.copyfile(self.__database_file, self.__temp_cookie_file)
File "D:\veighna_studio\lib\shutil.py", line 254, in copyfile
with open(src, 'rb') as fsrc:
PermissionError: [Errno 13] Permission denied: 'C:\Users\jxs_u\AppData\Roaming\..\Local\Google\Chrome\User Data\Default\Network\Cookies'
Press Ctrl+C to copy this message to the clipboard.
确定
}}}解决办法:
打开D:\veighna_studio\lib\shutil.py下的文件,将Line1232行中的:
for cookie_fn in [chrome, chromium, opera, opera_gx, brave, edge, vivaldi, firefox, librewolf, safari]:
修改为:
for cookie_fn in [firefox, librewolf, safari]:
同时把默认浏览器设置为火狐即可
------------------------20天净值增长率和溢价率轮动LOF、ETF和封基----------------------
Traceback (most recent call last):
File "D:\python\UniversalRotation-main\UniversalRotation.py", line 479, in <module>
main()
File "D:\python\UniversalRotation-main\UniversalRotation.py", line 473, in main
main_function()
File "D:\python\UniversalRotation-main\UniversalRotation.py", line 460, in main_function
File "D:\python\UniversalRotation-main\UniversalRotation.py", line 239, in rotate_LOF_ETF
File "D:\python\lib\shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: 'C:\Users\Admin\AppData\Roaming\..\Local\Google\Chrome\User Data\Default\Network\Cookies'
- 打开cmd窗口输入:pip install schedule xlwings pandas requests pysnowball browser-cookie3
运行这一步,CMD窗口闪退怎么解决啊?百度了多种方案也不行,哪位集友帮忙指导下,谢谢!
赞同来自: 梦苏
(1)添加场内基金的60天、120天、250天、500天累计净值增长率。
(2)更新场内基金列表:
SZ159629 富国中证1000ETF 场内ETF
SH560010 广发中证1000ETF 场内ETF
SZ159633 易方达中证1000ETF 场内ETF
SH560110 汇添富中证1000ETF 场内ETF
SZ159638 嘉实中证高端装备细分50ETF 场内ETF
SH561190 富国中证上海环交所碳中和ETF 场内ETF
SH562990 易方达中证上海环交所碳中和ETF 场内ETF
SZ159639 南方中证上海环交所碳中和ETF 场内ETF
SH561700 博时中证全指电力公用事业ETF 场内ETF
SH560550 广发中证上海环交所碳中和ETF 场内ETF
SH562000 华宝中证100ETF 场内ETF
SH561160 富国中证电池主题ETF 场内ETF
SZ159641 招商中证上海环交所碳中和ETF 场内ETF
SZ159615 南方恒生香港上市生物科技ETF(QDII) 场内ETF
SZ159636 工银瑞信国证港股通科技30ETF 场内ETF
SH561510 华泰柏瑞中证中药ETF 场内ETF
SZ159628 万家国证2000ETF 场内ETF
SZ159609 浦银安盛中证光伏产业ETF 场内ETF
SZ159640 工银瑞信中证上海环交所碳中和ETF 场内ETF
SZ159632 华安纳斯达克100ETF(QDII) 场内ETF
SH560990 中金中证科技先锋ETF 场内ETF
SH560060 汇添富中证上海环交所碳中和ETF 场内ETF
SH562350 银华中证全指电力公用事业ETF 场内ETF
SZ159647 鹏华中证中药ETF 场内ETF
SZ159642 大成中证上海环交所碳中和ETF 场内ETF
SZ159616 建信中证农牧主题ETF 场内ETF
SH517780 浦银安盛中华交易服务沪深港300ETF 场内ETF
SZ159603 天弘中证科创创业50ETF 场内ETF
SH561150 富国中证500ESG基准ETF 场内ETF
SH562390 银华中证中药ETF 场内ETF
SH513120 广发中证香港创新药ETF(QDII) 场内ETF
SH515670 中银中证100ETF 场内ETF
SH513280 汇添富恒生香港上市生物科技ETF(QDII) 场内ETF
SH513220 招商中证全球中国互联网ETF(QDII) 场内ETF
SZ159617 华夏中证智选500价值稳健策略ETF 场内ETF
SH515760 华夏中证浙江国资创新发展ETF 场内ETF
SZ159635 华夏中证基建ETF 场内ETF
SH517500 国泰中证沪港深动漫游戏ETF 场内ETF
SH562530 华夏中证智选1000价值稳健策略ETF 场内ETF
SZ159620 华夏中证智选500成长创新策略ETF 场内ETF
SH515160 招商MSCI中国A股国际通ETF 场内ETF
SZ159804 国寿安保创精选88ETF 场内ETF
SH560900 上投摩根中证创新药产业ETF 场内ETF
SZ159959 银华中证央企结构调整ETF 场内ETF
请问安装其他第三方库的时候,python setup.py install 报错如下,如何解决,感谢喝高了吧,兄弟?
我帖子哪来的setup.py?这根本就不是Python库呀,哪有这样install的命令?
再说,即使是第三方库安装失败,和本程序无关,去问问百度就知道了。
自给自足丰衣足食喔。
2022.7.1更新:需要命令行先执行 “pip install schedule”。
修复场内溢价率不准确的问题;自动打开默认浏览器更新token;部署每天7:00执行更新数据任务;
赞同来自: ergouzizzz 、体能狂魔
Python调用雪球API前需要设置xq_a_token,但它大约只有20天的有效期,之前都是使用F12各种查找xq_a_token然后复制粘贴到我们的Python程序, 搜索发现可以使用browser-cookie3自动化获取电脑浏览器已缓存的cookies(当然浏览器的cookies肯定也会过期,我们只需要坚持每20天左右使用电脑浏览器访问任意一个雪球网站即可刷新电脑浏览器的cookies)。
赞同来自: gaokui16816888 、wbb渐入佳境
我后悔了,我已实现自动化!Just one day,i made it!我还在用原始的EXCEL和东方财富软件内置的导出功能相结合的半自动化,有时感觉自己太懒;作为一个非会员向一个非会员问声好,哈哈
Python真是世界上最好的语言!
赞同来自: gaokui16816888 、aladdin898 、zsp950 、newbison
我这个tool的基金数据是爬的。我后悔了,我已实现自动化!Just one day,i made it!
而可转债数据我觉得直接从集思录copy就行了,根本就不用爬。
Python真是世界上最好的语言!
mengyao - 持有etf不动 、转债摊大饼
请仔细读源码,策略里用到2个因子:多谢,明白了,主要是对雪球的取数不熟悉。^-^
1. 20天净值增长率=================》取自ttjj
2. 溢价率======================》取自雪球
哪来的“现价”?
mengyao - 持有etf不动 、转债摊大饼
一个进程访问ttjj网还经常time out呢,好气人,我还故意加了delay延时。ttjj数据是爬的吧?
唉,就没必要多线程咯!
赞同来自: 剃刀与哑铃
请教为啥报错呢:D:\program\Python\Python38\Scripts>xlwings addin installxlwings version: 0.27.7FileNotFoundError(2, 'No such file or directory')遇事不决问百度呀,尤其是程序报错这样的事情。先给你个帖子你详细学习下https://zhuanlan.zhihu.com/p/88888698
xlwings version: 0.27.7
FileNotFoundError(2, 'No such file or directory')
赞同来自: gaokui16816888
@wbb任我行 能提供一个将账户持仓数据自动导入excel的模板吗?每天在证券软件导入导出太麻烦了。这么牛的功能,我也想做,可是全国这么多券商,众口难调。
另外个人投资者不知道如何才能get到券商的API接口呀,真要是能做到,我做出来tool,你使用tool的时候不担心泄露密码吗?哈哈
赞同来自: gaokui16816888 、hnhaiou 、七星7757
策略也加在python里就完美了调仓可视化,我使用可转债的2个流行策略作为例子,填充了持仓和最新排名。
大家可以将这两个sheet作为壳子,替换成任何你们自己的轮动品种【比如小市值股票策略,低估股票策略,等等】。
而LOF和境外,我是使用Python写的一个基于净值增长率和溢价率的2个策略,网友可以学习使用。