大家好,我是林路。小夥伴們期盼已久的量化交易教程,今天它來了!
有不少小夥伴,一直很關心我量化交易的實戰情況,經常會被問到:5 萬元,現在賺了多少?
這裡統一回復下,目前浮盈 6%。
遠低於我的預期,這跟大盤的走弱脫不開關係。9 月開始即巔峰,一路慘遭滑鐵盧,大盤再也沒回到過 3700 點,屬實有些慘淡。
不過越是這種冷清的時候,越是充能學習的時刻。
我最成功的一筆投資,不是買了哪支股票,而是自學了很多有趣的技術。
我還是那句話,最好的投資,就是投資自己!
回顧了自己的這一年,收穫良多,我學到了很多新技術。
今天,我們繼續聊量化交易
量化交易,說白了,主要分為三個部分:
- 炒股資料獲取
- 選股& 擇時策略
- 交易系統
對於一些低頻的交易策略,甚至都用不上交易系統,手動操作都行。
Udata
一個穩定的炒股資料獲取介面很重要,可以自己寫爬蟲爬資料,但這樣太不穩定。
今天給大家推薦一個好用的 API 介面:
https://udata.hs.net
Udata 大牌子,是深耕金融領域 30 年的恆生電子推出的金融資料社群。
恆生電子大家應該都聽過,近千億市值的大公司,用資料這種事,找這類背景好的社群準沒錯。
今天我就以 Udata 提供的 API 股票介面為例,來一期保姆級的量化交易教程。
Udata 安裝
我們先從 Udata 的安裝開始講起。
首先要搭建一個 Python 的開發環境,Python 開發環境不會搭建的,可以看我之前釋出的一篇教程:
一勞永逸的 Python 環境搭建方法
Udata 可以使用 pip 安裝。
pip install hs_udata
這樣就表明安裝好了。
然後註冊個 Udata 賬戶,訂閱一個體驗套餐。各個社群都是一樣的,都有免費的體驗套餐給初學者使用。
註冊並訂閱號後,獲取 token。
https://udata.hs.net/console/overAllView
開啟連結,就能看到 token 獲取方式,直接複製即可。
然後使用如下程式碼,就可以獲取資料了。
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')
# 獲取 股票列表資料,返回格式為 dataframe
data = stock_list()
# 列印資料前 5 行
print(data.head())
有正確的資料結果了,那恭喜你,配置成功!
量化分析
資料搞定了,我們就可以利用這個 API 介面,做一些策略。
無論是選股,還是擇時交易,都可以使用這個 API 介面的資料進行。
Udata 的 API 文件寫得很全面:
https://udata.hs.net/datas/202/
應有盡有:
之前的教程,給大家講解過 ETF 動量輪動策略。
今天來點不一樣的,基礎的分析技巧,也是我們必備的基本功。
比如畫個 K 線,視覺化工具,可以直接使用 pyecharts。
如果沒有安裝這個庫,可以先使用 pip 安裝一下。
pip install pyecharts
pyecharts 的使用非常簡單,可以直接看手冊。
https://pyecharts.org/#/zh-cn/intro
我們結合 Udata 的資料獲取 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 天的資料
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]
# 去掉非交易日資料
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 檔案,就可以看到繪製效果了。
可能有小夥伴會問,這都是炒股軟體現成的,為什麼要自己繪製?
只有親自寫程式碼後,你才能深刻認識到每個資料背後所代表的含義。這是一個很好的,幫助我們學習的過程。更重要的是,等我們熟練之後,可以根據自己的各種需求,定製化自己獨家炒股介面。
你可以監控自己想要監控的所有資訊。
像什麼 KDJ、MACD 等各種指標,我們都是可以自己計算並可視化出來的。
不再受限於炒股軟體的一些指標,甚至一些炒股軟體的付費因子,我們都可以自己計算。
再比如,我們可以使用資料,做一些自己不瞭解的分析。舉個非常簡單的例子,你知道 A 股的行業分佈情況嗎?
幾行程式碼就可以搞定。
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):
# 獲取股票行業資訊
data = udata.industry_category(en_prod_code = code)
industry_name_csrc = data['industry_name_csrc'][0].split("-")[0]
# print(industry_name_csrc)
# 統計行業數量
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 股股票行業分佈"),
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 股股票的行業分佈情況。
製造業半壁江山啊!
除了這種簡單的行業統計,我們還可以統計每日的龍虎榜情況,監控股東持股情況,資金流向等。
根據股票的每日價格,我們還可以計算各種因子,輔助我們決策。
根據自己的需求,來個私人定製,搭建自己的交易體系。
當然了,師傅領進門,修行看個人。能寫的內容太多了,篇幅有限,今天先教一些基礎的玩法。這個系列教程,還會繼續更新的。
絮叨
最後再多說兩句,一直有不少小夥伴問我,賣系統不?賣原始碼不?賣服務不?
這樣的詢問,自從發了那期量化炒股的文章後,就沒有斷過。
說實話,還是建議自己學技術,自己寫策略,那多香啊!真的,一切並沒有那麼難,日積月累,慢慢學,學習用程式碼賺錢的過程,是一件很有趣的事情。
作者:Jack Cui
原文連結:https://mp.weixin.qq.com/s/80jJbVZinbEz-ocwQsjfPw