前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >个人量化投资体系搭建(一)

个人量化投资体系搭建(一)

原创
作者头像
zucchiniy
修改2020-09-23 22:40:33
1.6K0
修改2020-09-23 22:40:33
举报
文章被收录于专栏:洞明学问洞明学问

个人量化投资体系搭建(一)

简介

最近股市波动,不少 厮杀多年的投资人 老韭菜也关灯吃面。

作为一名技术人员利用量化交易来进行投资,才能让自己更理智的面对动荡不安的A股。如何建立起一个成熟的投资策略,是非常重要的,关键时刻也许可以让我们避免被割。

想建立一个成熟的投资体系,最重要的就是数据和策略。实现自己的策略后,不仅需要数据进行回测来看自己的策略在不同的交易周期是否正确,也可以让我们找到A股利好利空的方向。尽快的调整自己的投资策略。避免被割减少被割的次数。

建立数据体系

想要回看自己的策略是否成功,首先需要有一整套数据才行,最方便的就是从 Tushare 上获取,但是因为现在的积分制改革,或许有一天我们就不能自由的获取了,所以自己建一个数据库是最合适的方法。

安装数据库

本人是在Windows机器上搭建的,所以说一下在Windows上安装的过程。

首先是从网站上下载数据库的安装文件,但是从官方网站上下载太慢了,这里我选用的是从 清华源 下载的MySQL。

选择对应的版本,飞速下载之后,双击安装包安装。安装完成后才是开始。

首先需要新建一个数据文件夹,用来存放MySQL的数据文件,这里命名为 mysqldata,当然也可以是其它的名字。

然后在 MySQL 根目录下,新建一个 my.ini 文件。

文件内容如下:

[mysqld] 
# 设置mysql的安装目录,也就是刚才我们安装的目录
basedir=<安装目录>
# 设置mysql数据库的数据的存放目录,刚才创建的mysqldata目录
datadir=<新建目录>
# 设置默认使用的端口
port=3306
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人试图攻击数据库
max_connect_errors=10
# 服务端使用的字符集
character-set-server=utf8mb4
# 数据库字符集对应一些排序等规则使用的字符集
collation-server=utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件作为认证加密方式
# MySQL8.0默认认证加密方式为caching_sha2_password
default_authentication_plugin=mysql_native_password
 
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
 
[client]
default-character-set=utf8mb4
port=3306

然后需要初始化数据库,一共有三步命令:

# 初始化MySQL
mysqld --initialize-insecure --user=mysql --console
# 安装MySQL服务
msyqld --install
# 启动服务
net start mysql

注意:在启动服务前需要管理权限,而且执行命令需要到mysql/bin目录下,否则会提示系统错误2。

获取数据

获取所有的A股的股票,因为是从Tushare上获取,所以需要先建立股票的基本库。用来存对应的股票代码。

CREATE TABLE `stocks`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `ts_code` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `symbol` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `area` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `industry` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `fullname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `market` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `list_status` varchar(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `list_date` timestamp(0) NULL DEFAULT NULL,
  `delist_date` timestamp(0) NULL DEFAULT NULL,
  `is_hs` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `idx_stocks_ts_code`(`ts_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3836 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

然后建立日交易数据库,用来存放日交易数据。

CREATE TABLE `trade_data`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `ts_code` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `trade_date` timestamp(0) NULL DEFAULT NULL,
  `open` float NOT NULL DEFAULT 0,
  `high` float NOT NULL DEFAULT 0,
  `low` float NOT NULL,
  `close` float NOT NULL,
  `pre_close` float NOT NULL,
  `change` float NOT NULL,
  `pct_chg` float NOT NULL,
  `vol` float NOT NULL,
  `amount` float NOT NULL DEFAULT 0,
  `cdate` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `idx_trade_code_date`(`ts_code`, `trade_date`) USING BTREE,
  INDEX `idx_date_pct_chg`(`trade_date`, `pct_chg`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7187583 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '2002年至今日交易数据' ROW_FORMAT = Dynamic;

建立数据库之后,需要先下载股票的数据。Tushare需要先配置上自己的token然后利用新的pro的接口进行下载。

ts.set_token(token)
pro = ts.pro_api()

engine = create_engine('mysql+pymysql://root:@localhost/stocks?charset=utf8')
data = pro.stock_basic(fields='ts_code,symbol,name,fullname,area,industry,market,list_status,list_date,delist_date,'
                              'is_hs')
pd.io.sql.to_sql(data, 'stocks', con=engine, index=False, if_exists='append', chunksize=500)

之后再更新每日的交易数据。

pro = ts.pro_api()

engine = create_engine('mysql+pymysql://root:@localhost/stocks?charset=utf8')
DBSession = sessionmaker(bind=engine)
Base = declarative_base()
md = MetaData(bind=engine)


class dbStock(Base):
    # 加载原表中的数据
    __table__ = Table('stocks', md, autoload=True)


class dbDatas(Base):
    __table__ = Table('trade_data', md, autoload=True)


session = DBSession()


# stock_count = session.query(func.count(dbStock.id)).scalar()
# datas_count = session.query(func.count(dbDatas.id)).filter(dbDatas.ts_code == '000001.SZ').scalar()


def update_trade(start_date, end_date):
    global session
    data = session.query(dbStock).filter().all()
    for dt in data:
        daily = pro.daily(ts_code=dt.ts_code, start_date=start_date, end_date=end_date)
        print('stock:%s,count:%s' % (dt.id, daily.shape[0]))
        pd.io.sql.to_sql(daily, 'trade_data', con=engine, index=False, if_exists='append', chunksize=500)
    print('finshed')


update_trade('20180917', '20200923')

这里数据库的连接是利用的sqlalchemy操作的,因为已经建立的数据库,所以在数据表中加载原数据表即可。

总结

本次文章主要是利用 Tushare 上的数据来搭建自己的数据基础,后面会分享利用 Backtrader 来进行策略编写,回测对应的股票数据。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 个人量化投资体系搭建(一)
    • 简介
      • 建立数据体系
        • 安装数据库
        • 获取数据
      • 总结
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档