今年,我最成功的一笔投资!

Jack Cui

共 5996字,需浏览 12分钟

 ·

2021-12-29 13:25

大家好,我是 Jack。

小伙伴们期盼已久的量化交易教程,今天它来了!

有不少小伙伴,一直很关心的我量化交易的实战情况,经常会被问到:5 万元,现在赚了多少?

这里统一回复下,目前浮盈 6%。

远低于我的预期,这跟大盘的走弱脱不开关系。9 月开始即巅峰,一路惨遭滑铁卢,大盘再也没回到过 3700 点,属实惨淡。

不过越是这种冷清的时候,越是充能学习的时刻。

我最成功的一笔投资,不是买了哪支股票,而是自学了很多有趣的技术。

我还是那句话,最好的投资,就是投资自己!

回顾了自己的这一年,收获良多,我学到了很多新技术。

今天,我们继续聊量化交易,上两期教程没看的小伙伴,可以看这里:

https://github.com/Jack-Cherish/quantitative

或者在公众号的精选文章->量化交易的栏目里查看往期教程。


量化交易,说白了,主要分为三个部分:

  • 炒股数据获取
  • 选股& 择时策略
  • 交易系统

对于一些低频的交易策略,甚至都用不上交易系统,手动操作都行。

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 学技术吧!

哦对了, Udata 还有小程序社区,社区也有自己的技术教程,有很多干货文章和源代码。

我在里面也看了一些文章,社区的内容还是很丰富的,有很多学习量化交易的小伙伴们交流,也有一些大佬做技术分享。



絮叨

最后再多说两句,一直有不少小伙伴问我,卖系统不?卖源码不?卖服务不?

这样的询问,自从发了那期量化炒股的视频后,就没有断过,这是最近一次的这类对话。

说实话,还是建议自己学技术,自己写策略,那多香啊!

真的,一切并没有那么难,日积月累,慢慢学,学习用代码赚钱的过程,是一件很有趣的事情。

我是 Jack,我们下期见~

PS:Udata 社区的链接,为了方便大家查看,我放在了左下角的阅读原文里,点击即可查看。

·················END·················
浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报