深度挖掘——富国天惠 161005
简介
富国天惠是一只大牛基,从2005年成立至今,15年涨了19.22倍,折合年化收益率21.78%,牛气冲天。
如果一直坚持持有,能赚不少钱。但由于该基金场内外都可以交易,如果能结合该基金的折溢价做套利,可以让我们收获意外的惊喜。先看看富国天惠的折溢价情况:
深度挖掘
我们的目标是想挖掘富国天惠的场内开盘价、最高价、最低价、收盘价、涨跌幅和场内外折溢价率等之间的关系,看看盘中有何操作机会。
那么首先需要获得相关的数据。
代码如下:
import time
import codecs
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}
def spyder(url):
res = requests.get(url, headers=headers)
html_con = res.content
# print(html_con)
con = BeautifulSoup(html_con, 'html.parser')
vms = con.find_all("tbody")[0]
records = vms.find_all("tr")
# print(records)
lines = list()
for i, tr in enumerate(records):
tds = tr.find_all("td")
# print(tds)
lin = [tds[0].get_text(), tds[1].get_text(), tds[2].find_all("span")[0].get_text(),
tds[6].find_all("span")[0].get_text()]
lines.append(",".join(lin))
return lines
def main():
for page in range(15):
url = "http://quotes.money.163.com/fund/zyjl_161005_%s.html?start=2017-01-01&end=2020-08-27&sort=TDATE&order=desc" % page
lines = spyder(url)
for line in lines:
with codecs.open("data/161005/161005.txt", "a", encoding="utf-8") as fw:
fw.write("%s\n" % line)
time.sleep(2)
return 0
if __name__ == '__main__':
main()
数据如下:
日期 | 收盘价 | 涨跌幅 | 折价率 |
---|---|---|---|
2017-01-03 | 1.6630 | 0.18% | -0.88% |
2017-01-04 | 1.6850 | 1.32% | -1.07% |
2017-01-05 | 1.6900 | 0.30% | -0.58% |
… | … | … | … |
2020-08-26 | 3.2910 | -0.75% | 0.65% |
2020-08-27 | 3.3050 | 0.43% | 0.25% |
2020-08-28 | 3.4000 | 2.87% | -0.01% |
历史净值
代码如下:
import codecs
import requests
def spyder(url):
headers = {"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Connection": "keep-alive",
"Cookie": "st_si=23148473072750; em_hq_fls=js; intellpositionL=749.188px; _qddaz=QD.a6su68.y7sfzq.kcooye0u; pgv_pvi=4405770240; pgv_si=s7320064000; EmPaVCodeCo=f5f63a21c25b43b1b04d7de97a720630; p_origin=https%3A%2F%2Fpassport2.eastmoney.com; uidal=6963335783755328%e9%80%90%e9%81%93%e5%a6%82%e4%b8%80; sid=141328622; ct=QiFbYA5m17nZFD_2_bIpFVh-_0I0Tp6mLxvp2XTQ3NP5PrCyeExjaz9fJ77T46fFdp2Xj1U6wIBOLxrHJ3rUqaVDigEfFB0ATJTts6T1FAo_XbSvXDTo2LHPfhYiMGOABFADjj-7R3KjXgvzqX2K3TQGgIYzzevpKb_1nAP2-xs; ut=FobyicMgeV7bfas_M05TDD5p-70s2Wib0etgSS7pVaoMpTNmsnXlckIHsP-d8YtSX6Bsi8kOJa55oWQnkKXG6bgfyQgH-56K6n8ZeM3RDiOv-kSSHpLYuylnKg_TvqsPTi8DrTKgtnJkYgfakW6B7P2XdvWbWk9PjZcfhdgnNcu5BFZ3JnGgZuL-ixm5a3oOdzg6hyY7Jse4r5wDnr7_vR1bxPQ6zFlcrpOdAeoqnTEu4b17vaSQ-InvZKkxoAtMoxerOptE-CzDNRxSeJCe5ymFAdvM1Odg; pi=6963335783755328%3bd6963335783755328%3b%e9%80%90%e9%81%93%e5%a6%82%e4%b8%80%3bBcYlOnoObR%2by0fu6gN4HrHRRGIqw7kGgtwCJaRyK7pq2uyFesnfOH0WjWNJupF4sQKhuIrR63wNQe0VXqx6AOGjvSzI2NvAUZ79FfZJMyTVs8zAiF0ki5RRpDYslwuAdJvXc1kp%2fg5UFKxuCv%2fLzr%2fgZpXbxbrgafpAtZNMiGtUBhRpQJVwgYD3GwkUqW%2fVJ5D%2fn80F2%3bBxRJT2Z19LmcTtWE7hht76BQajkibSabahaciJf8fl3qUn2NTPkY2HR4oD598ovJLtHRtmC8QujbF9oN4KG2ZbhzivIFk3RCnPm%2baPfqJKfhbUYRlRGM1M49rfzWrcmXsiXAPp6%2fHgUouyZElBfF3HNCnDxcEw%3d%3d; testtc=0.5218319668428353; vtpst=%7c; HAList=d-hk-02359%2Cd-hk-00700%2Cd-hk-03690%2Cd-hk-00241%2Ca-sh-601933-%u6C38%u8F89%u8D85%u5E02%2Cd-hk-00883%2Ca-sh-603912-%u4F73%u529B%u56FE%2Ca-sz-000761-%u672C%u94A2%u677F%u6750%2Ca-sz-002036-%u8054%u521B%u7535%u5B50%2Ca-sz-002382-%u84DD%u5E06%u533B%u7597%2Ca-sh-688208-%u9053%u901A%u79D1%u6280%2Ca-sz-002074-%u56FD%u8F69%u9AD8%u79D1; waptgshowtime=2020828; cowCookie=true; emshistory=%5B%22%E5%85%B4%E5%85%A8%E7%BB%BF%E8%89%B2%22%5D; cowminicookie=true; intellpositionT=455px; EmFundFavorVersion=1587131235961; st_asi=delete; EMFUND0=null; EMFUND1=07-15%2013%3A51%3A18@%23%24%u56FD%u6CF0%u521B%u4E1A%u677F%u6307%u6570%28LOF%29@%23%24160223; EMFUND2=08-12%2021%3A55%3A27@%23%24%u6613%u65B9%u8FBE%u4E2D%u6982%u4E92%u805450ETF@%23%24513050; EMFUND3=08-28%2020%3A33%3A40@%23%24%u4EA4%u94F6%u4E2D%u8BC1%u6D77%u5916%u4E2D%u56FD%u4E92%u8054%u7F51%u6307%u6570@%23%24164906; EMFUND4=08-05%2020%3A26%3A17@%23%24%u534E%u5B89%u5FB7%u56FD30%28DAX%29ETF@%23%24513030; EMFUND5=08-07%2010%3A31%3A56@%23%24%u534E%u5B89%u6807%u666E%u5168%u7403%u77F3%u6CB9%u6307%u6570@%23%24160416; EMFUND6=08-28%2021%3A03%3A00@%23%24%u5174%u5168%u7EFF%u8272%u6295%u8D44%u6DF7%u5408%28LOF%29@%23%24163409; EMFUND7=08-07%2011%3A51%3A47@%23%24%u5174%u5168%u8D8B%u52BF%u6295%u8D44%u6DF7%u5408%28LOF%29@%23%24163402; EMFUND8=08-12%2020%3A34%3A26@%23%24%u56FD%u6295%u745E%u94F6%u767D%u94F6%u671F%u8D27%28LOF%29@%23%24161226; qgqp_b_id=76c6dc55bfaf5a16e87e22095aed4d85; EMFUND9=08-29 21:20:52@#$%u5BCC%u56FD%u5929%u60E0%u6210%u957F%u6DF7%u5408A@%23%24161005; st_pvi=78692687601277; st_sp=2019-03-23%2020%3A49%3A53; st_inirUrl=https%3A%2F%2Fwww.baidu.com%2Flink; st_sn=535; st_psi=20200829214141365-0-9054522291",
"Referer": "http://fundf10.eastmoney.com/jjjz_161005.html",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}
res = requests.get(url, headers=headers)
# html_con = res.content
return res.json()
def main():
url = "http://api.fund.eastmoney.com/f10/lsjz?fundCode=161005&pageIndex=1&pageSize=897&startDate=2017-01-01&endDate=2020-08-28"
res = spyder1(url)
for r in res["Data"]["LSJZList"]:
with codecs.open("data/161005/161005_1.txt", "a", encoding="utf-8") as fw:
fw.write("%s,%s,%s\n" % (r["FSRQ"], r["DWJZ"], r["JZZZL"]))
return 0
if __name__ == '__main__':
main()
数据如下:
日期 | 净值 | 净值涨跌幅 |
---|---|---|
2017-01-03 | 1.6777 | 0.88% |
2017-01-04 | 1.7033 | 1.53% |
2017-01-05 | 1.6999 | -0.20% |
… | … | … |
2020-08-26 | 3.2696 | -1.03% |
2020-08-27 | 3.2967 | 0.83% |
2020-08-28 | 3.4004 | 3.15% |
历史场内交易数据
代码如下:
import codecs
import requests
def spyder(url):
res = requests.get(url)
return res.json()
def main():
url = "http://web.ifzq.gtimg.cn/appstock/app/fqkline/get?_var=¶m=sz161005,day,2017-01-01,2018-01-01,640,qfq"
url1 = "http://web.ifzq.gtimg.cn/appstock/app/fqkline/get?_var=¶m=sz161005,day,2018-01-01,2020-08-28,640,qfq"
for u in [url, url1]:
res = spyder(u)
for r in res["data"]["sz161005"]["qfqday"]:
with codecs.open("data/161005/161005_2.txt", "a", encoding="utf-8") as fw:
fw.write(",".join(r[:5]))
fw.write("\n")
return 0
if __name__ == '__main__':
main()
数据如下:
日期 | 开盘价 | 收盘价 | 最高价 | 最低价 |
---|---|---|---|---|
2017-01-03 | 1.653 | 1.663 | 1.666 | 1.651 |
2017-01-04 | 1.668 | 1.685 | 1.686 | 1.664 |
2017-01-05 | 1.683 | 1.690 | 1.693 | 1.683 |
… | … | … | … | |
2020-08-26 | 3.312 | 3.291 | 3.340 | 3.285 |
2020-08-27 | 3.279 | 3.305 | 3.305 | 3.249 |
2020-08-28 | 3.301 | 3.400 | 3.402 | 3.295 |