今年,我最成功的一筆投資!
大家好,我是 Jack。
小伙伴們期盼已久的量化交易教程,今天它來了!
有不少小伙伴,一直很關心的我量化交易的實戰(zhàn)情況,經(jīng)常會被問到:5 萬元,現(xiàn)在賺了多少?
這里統(tǒng)一回復下,目前浮盈 6%。
遠低于我的預期,這跟大盤的走弱脫不開關系。9 月開始即巔峰,一路慘遭滑鐵盧,大盤再也沒回到過 3700 點,屬實慘淡。
不過越是這種冷清的時候,越是充能學習的時刻。
我最成功的一筆投資,不是買了哪支股票,而是自學了很多有趣的技術(shù)。
我還是那句話,最好的投資,就是投資自己!
回顧了自己的這一年,收獲良多,我學到了很多新技術(shù)。
今天,我們繼續(xù)聊量化交易,上兩期教程沒看的小伙伴,可以看這里:
https://github.com/Jack-Cherish/quantitative
或者在公眾號的精選文章->量化交易的欄目里查看往期教程。
量化交易,說白了,主要分為三個部分:
炒股數(shù)據(jù)獲取 選股& 擇時策略 交易系統(tǒng)
對于一些低頻的交易策略,甚至都用不上交易系統(tǒng),手動操作都行。
Udata
一個穩(wěn)定的炒股數(shù)據(jù)獲取接口很重要,可以自己寫爬蟲爬數(shù)據(jù),但這樣太不穩(wěn)定。
今天給大家推薦一個好用的 API 接口:
https://udata.hs.net
Udata 大牌子,是深耕金融領域 30 年的恒生電子推出的金融數(shù)據(jù)社區(qū)。
恒生電子大家應該都聽過,近千億市值的大公司,用數(shù)據(jù)這種事,找這類背景好的社區(qū)準沒錯。
今天我就以 Udata 提供的 API 股票接口為例,來一期保姆級的量化交易教程。
Udata 安裝
我們先從 Udata 的安裝開始講起。
首先要搭建一個 Python 的開發(fā)環(huán)境,Python 開發(fā)環(huán)境不會搭建的,可以看我之前發(fā)布的一篇教程:
Udata 可以使用 pip 安裝。
pip?install?hs_udata
這樣就表明安裝好了。

然后注冊個 Udata 賬戶,訂閱一個體驗套餐。各個社區(qū)都是一樣的,都有免費的體驗套餐給初學者使用。
注冊并訂閱號后,獲取 token。
https://udata.hs.net/console/overAllView
打開鏈接,就能看到 token 的獲取方式,直接復制即可。

然后使用如下代碼,就可以獲取數(shù)據(jù)了。
from?hs_udata?import?set_token,?stock_list????????#?引入?hs_udata?模塊中?set_token?和?stock_list
if?__name__?==?"__main__":
????#?替換你的 token,查看 token 地址:https://udata.hs.net/console/overAllView
????set_token(token?=?'xxxxx')
????#?獲取?股票列表數(shù)據(jù),返回格式為?dataframe????
????data?=?stock_list()
????#?打印數(shù)據(jù)前?5?行
????print(data.head())
有正確的數(shù)據(jù)結(jié)果了,那恭喜你,配置成功!

量化分析
數(shù)據(jù)搞定了,我們就可以利用這個 API 接口,做一些策略。
無論是選股,還是擇時交易,都可以使用這個 API 接口的數(shù)據(jù)進行。
Udata 的 API 文檔寫的很全面:
https://udata.hs.net/datas/202/
應有盡有:

之前的教程,給大家講解過 ETF 動量輪動策略。
今天來點不一樣的,基礎的分析技巧,也是我們必備的基本功。
比如畫個 K 線,可視化工具,可以直接使用 pyecharts。
如果沒有安裝這個庫,可以先使用 pip 安裝一下。
pip?install?pyecharts
pyecharts 的使用非常簡單,可以直接看手冊。
https://pyecharts.org/#/zh-cn/intro
我們結(jié)合 Udata 的數(shù)據(jù)獲取 api 接口和 pyecharts 可視化工具,就可以自己繪制 K 線。
import?hs_udata?as?udata
from?datetime?import?datetime,?timedelta
import?time
from?pyecharts?import?options?as?opts
from?pyecharts.charts?import?Kline
if?__name__?==?"__main__":
????#?替換你的 token,查看 token 地址:https://udata.hs.net/console/overAllView
????udata.set_token(token?=?'xxxxx')
????current_dt?=?time.strftime("%Y-%m-%d",?time.localtime())
????current_dt?=?datetime.strptime(current_dt,?'%Y-%m-%d')
????#?獲取?30?天的數(shù)據(jù)
????day_num?=?30
????all_data?=?[]
????all_date?=?[]
????for?i?in?range(1,?day_num?+?1)[::-1]:
????????search_date?=?current_dt?-?timedelta(days?=?i)
????????search_date?=?search_date.strftime("%Y%m%d")
????????
????????#?恒生電子近?30?日的股價
????????data?=?udata.stock_quote_daily(en_prod_code?=?"600570.SH",?trading_date?=?search_date)
????????#?開盤價
????????open_price?=?data['open_price'][0]
????????#?收盤價
????????close_price?=?data['close_price'][0]
????????#?最低價
????????low_price?=?data['low_price'][0]
????????#?最高價
????????high_price?=?data['high_price'][0]
????????#?去掉非交易日數(shù)據(jù)
????????if?len(open_price)?==?0:
????????????continue
????????all_date.append(search_date)
????????all_data.append([float(open_price),?float(close_price),?float(low_price),?float(high_price)])
????
????#?使用?pyecharts?繪制?K?線
????c?=?(
????????Kline()
????????.add_xaxis(all_date)
????????.add_yaxis(
????????????"K線",
????????????all_data,
????????????itemstyle_opts?=?opts.ItemStyleOpts(
????????????????color?=?"#ec0000",
????????????????color0?=?"#00da3c",
????????????????border_color?=?"#8A0000",
????????????????border_color0?=?"#008F28",
????????????),
????????)
????????.set_global_opts(
????????????xaxis_opts?=?opts.AxisOpts(is_scale?=?True),
????????????yaxis_opts?=?opts.AxisOpts(
????????????????is_scale?=?True,
????????????????splitarea_opts?=?opts.SplitAreaOpts(
????????????????????is_show?=?True,?areastyle_opts?=?opts.AreaStyleOpts(opacity?=?1)
????????????????),
????????????),
????????????datazoom_opts?=?[opts.DataZoomOpts(type_?=?"inside")],
????????????title_opts?=?opts.TitleOpts(title?=?"恒生電子近?30?日?K?線"),
????????)
????????.render("kline.html")
????)
運行成功后,會生成一個 kline.html 文件,用瀏覽器打開這個 html 文件,就可以看到繪制效果了。

可能有小伙伴會問,這都是炒股軟件現(xiàn)成的,為什么要自己繪制?
只有親自寫代碼后,你才能深刻認識到每個數(shù)據(jù)背后所代表的含義。
這是一個很好的,幫助我們學習的過程。
更重要的是,等我們熟練之后,可以根據(jù)自己的各種需求,定制化自己獨家炒股界面。
你可以監(jiān)控自己想要監(jiān)控的所有信息。
像什么 KDJ、MACD 等各種指標,我們都是可以自己計算并可視化出來的。
不再受限于炒股軟件的一些指標,甚至一些炒股軟件的付費因子,我們都可以自己計算。
再比如,我們可以使用數(shù)據(jù),做一些自己不了解的分析。舉個非常簡單的例子,你知道 A 股的行業(yè)分布情況嗎?
幾行代碼就可以搞定。
import?hs_udata?as?udata
from?pyecharts?import?options?as?opts
from?pyecharts.charts?import?Pie
from?tqdm?import?tqdm
if?__name__?==?"__main__":
????#?替換你的 token,查看 token 地址:https://udata.hs.net/console/overAllView
????udata.set_token(token?=?'xxxxx')
????#?獲取所有股票
????data?=?udata.stock_list(listed_state?=?"1")
????codes?=?data['hs_code'].tolist()
????
????industry_name_dict?=?{}
????#?遍歷股票
????for?code?in?tqdm(codes):
????????#?獲取股票行業(yè)信息
????????data?=?udata.industry_category(en_prod_code?=?code)
????????industry_name_csrc?=?data['industry_name_csrc'][0].split("-")[0]
????????#?print(industry_name_csrc)
????????#?統(tǒng)計行業(yè)數(shù)量
????????if?industry_name_csrc?not?in?industry_name_dict.keys():
????????????industry_name_dict[industry_name_csrc]?=?1
????????else:
????????????industry_name_dict[industry_name_csrc]?+=?1
????#?可視化
????c?=?(
????????Pie()
????????.add(
????????????"",
????????????[
????????????????list(z)
????????????????for?z?in?zip(
????????????????????industry_name_dict.keys(),
????????????????????industry_name_dict.values(),
????????????????)
????????????],
????????????center=["40%",?"50%"],
????????)
????????.set_global_opts(
????????????title_opts=opts.TitleOpts(title="A?股股票行業(yè)分布"),
????????????legend_opts=opts.LegendOpts(type_="scroll",?pos_left="80%",?orient="vertical"),
????????)
????????.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:?{c}"))
????????.render("pie.html")
????)
運行代碼,打開 pie.html ,即可查看 A 股股票的行業(yè)分布情況。

制造業(yè)半壁江山啊!
除了這種簡單的行業(yè)統(tǒng)計,我們還可以統(tǒng)計每日的龍虎榜情況,監(jiān)控股東持股情況,資金流向等。
根據(jù)股票的每日價格,我們還可以計算各種因子,輔助我們決策。
根據(jù)自己的需求,來個私人定制,搭建自己的交易體系。
當然了,師傅領進門,修行看個人。
能寫的內(nèi)容太多了,篇幅有限,今天先教一些基礎的玩法。
這個系列教程,還會繼續(xù)出,跟著 Jack 學技術(shù)吧!
哦對了,?Udata 還有小程序社區(qū),社區(qū)也有自己的技術(shù)教程,有很多干貨文章和源代碼。
我在里面也看了一些文章,社區(qū)的內(nèi)容還是很豐富的,有很多學習量化交易的小伙伴們交流,也有一些大佬做技術(shù)分享。

絮叨
最后再多說兩句,一直有不少小伙伴問我,賣系統(tǒng)不?賣源碼不?賣服務不?
這樣的詢問,自從發(fā)了那期量化炒股的視頻后,就沒有斷過,這是最近一次的這類對話。

說實話,還是建議自己學技術(shù),自己寫策略,那多香啊!
真的,一切并沒有那么難,日積月累,慢慢學,學習用代碼賺錢的過程,是一件很有趣的事情。
我是 Jack,我們下期見~
PS:Udata 社區(qū)的鏈接,為了方便大家查看,我放在了左下角的閱讀原文里,點擊即可查看。

