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

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

原创
作者头像
zucchiniy
修改于 2020-09-23 14:40:33
修改于 2020-09-23 14:40:33
1.8K00
代码可运行
举报
文章被收录于专栏:洞明学问洞明学问
运行总次数:0
代码可运行

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

简介

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

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

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

建立数据体系

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

安装数据库

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

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

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

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

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

文件内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 初始化MySQL
mysqld --initialize-insecure --user=mysql --console
# 安装MySQL服务
msyqld --install
# 启动服务
net start mysql

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

获取数据

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的接口进行下载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何获取沪深股市历史数据并入库
作为一个技术男,一开始总想着怎么去爬数据。然而一旦发现有免费的数据接口时,瞬间感觉爬来的不香了。。。
全栈程序员站长
2022/09/12
9320
如何获取沪深股市历史数据并入库
开源 – QQ频道机器人
QQ频道是一个集社交、群聊、小程序应用于一体的娱乐协作平台,它允许开发者自己开发自己的机器人,但是很多小白可能入手都比较头疼,不知道该如何下手,今天分享一个自己用python写的 示例 ,使用的数据库依旧是mysql ::(懒得理)
Blank.
2023/04/13
1.2K0
开源 – QQ频道机器人
MySQL数据类型大小测试
(1)数字类型最大支持位数:int 9 位,bigint 18 位,flat 38 位,double 82 位,char 255 位、varchar 255 位
静谧星空TEL
2021/04/27
6440
韩旭个人博客SpringBoot + Mybatis + Thymeleaf + MySQL
1.1.1 问题的提出 高效率的完成博客博文内容的管理,开发一个具有高效率和有意义的博客文章管理系统。 1.1.2 本课题的意义 通过对自己日常学习过程种 学习课程、课程笔记、浏览记录、编写日记等相关内容进行分析,完成具有博文管理、分类管理、标签管理等相关功能的小型数据库管理应用系统。 1.2 开发环境与工具介绍 本系统采用Java SpringBoot开发框架 1.2.1 SpringBoot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 1.2.2 博客博文管理系统研究状况 博客文章管理是各大自媒体工作者的主要日常管理工作之一,涉及到增删改查的诸多方面,随着博客风格的不断改革,尤其是公众号、微博 朋友圈 等交流平台的展开和深入,日常博客博文的管理工作及保存管理日趋繁重和复杂。迫切需要研制开发一款功能强大,操作简单,具有人性化的高效率的博客博文管理系统。。。。。。。。。 纵观目前国内研究现状,在安全性和信息更新化方面存在有一定的不足,。。。。 2 系统需求分析与设计
韩旭051
2021/04/14
5570
韩旭个人博客SpringBoot + Mybatis + Thymeleaf + MySQL
2021-2-18:请你说说MySQL的字符集与排序规则对开发有哪些影响?
任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。
干货满满张哈希
2021/04/12
1.4K0
【Nuxt.js】案例练习入门
SQL表 /* Navicat Premium Data Transfer Source Server : localhost_3306 Source Server Type : MySQL Source Server Version : 50549 Source Host : localhost:3306 Source Schema : vue02 Target Server Type : MySQL Target Ser
陶然同学
2023/02/24
1.3K0
【Nuxt.js】案例练习入门
1.Spring Cloud 基础环境搭建-99%的人都看了
本篇文章介绍了利用docker技术,进行SpringCloud脚手架项目的基础环境(mysql、reids、nacos)搭建,后面会持续更新脚手架搭建相关的文章
AI码师
2022/09/19
3110
SpringCloud Alibaba实战(3:存储设计与基础架构设计)
在上一章中,我们已经完成了基本业务流程的梳理和服务模块的划分,接下来,开始设计数据存储。
三分恶
2021/06/11
4860
SpringCloud Alibaba实战(3:存储设计与基础架构设计)
图书租借系统V0.0.2
在用户登录服务端时,获取用户ip与id绑定,放入channelgroup,每次循环遍历这个ip对应的channel,否则返回false,在用户状态取到是否在线,离线之后的消息/留言还不知道怎么处理。
疯狂的KK
2019/12/31
8380
SpringCloud➕Mybatis➕Eureka➕Feign➕Seata分布式事务???
Seata(Simple Extensible Autonomous Transaction Architecture) 是 阿里开源的分布式事务中间件,以高效并且对业务 0 侵入的方式,解决微服务场景下面临的分布式事务问题。
Cheng_Blog
2022/02/25
6990
SpringCloud➕Mybatis➕Eureka➕Feign➕Seata分布式事务???
MySQL字符集utf8mb4
Unicode是编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。随着互联网的发展,对同一字库集的要求越来越迫切,Unicode标准也就自然而然的出现。它几乎涵盖了各个国家语言可能出现的符号和文字,并将为他们编号。
HLee
2021/07/23
1.6K0
MySQL字符集utf8mb4
基于web的酒店管理系统_新锐酒店管理系统
小型酒店管理系统采用Vue前端框架、SpringBoot框架实现项目前后端分离,并通过Mysql存储数据。本系统实现针对不同用户的登录验证;客户信息、前台管理员以及超级管理员等信息存取;客户信息登记、预约、入住、消费等功能;前台管理员对客户操作的管理;超级管理员对客户以及前台管理员操作进行控制等的功能,系统功能基本实现,测试良好。
全栈程序员站长
2022/11/08
1.5K0
基于web的酒店管理系统_新锐酒店管理系统
账号微服务+流量包设计(第七章)海量数据处理-商用短链
第七章 商用短链平台实战-账号微服务+流量包设计 第1集 账号微服务和流量包数据库表+索引规范讲解《上》 简介:账号微服务和流量包数据库表+索引规范讲解 短链平台大课难度层级曲线图:由浅入深 索引规范 主键索引名为 pk_字段名; pk即 primary key; 唯一索引名为 uk_字段名;uk 即 unique key 普通索引名则为 idx_字段名;idx 即index 的简称 account表 CREATE TABLE `account` ( `id` bigint unsig
高大北
2022/09/23
3140
账号微服务+流量包设计(第七章)海量数据处理-商用短链
Mybatis-Plus动态表名插件实现数据库分表查询
Mybatis-Plus中提供了各种插件,乐观锁、多租户、动态表名。。。。今天来研究一下基于动态表名插件实现分表的案例
鱼找水需要时间
2023/02/16
2.8K0
Mybatis-Plus动态表名插件实现数据库分表查询
springcloud seata_seata github
linux后台启动方式 :nohup ./seata-server.sh > /dev/seata-service.log 2>&1 &
全栈程序员站长
2022/09/24
2910
springcloud seata_seata github
使用OAuth2实现授权服务
OAuth 2发明之初是为了解决登录认证过程中的安全性问题,使用“委托”的形式使第三方应用获得数据权限及功能。OAuth 2.0协议中,使用访问令牌ACCESS_TOKEN代替传统的账号密码,提高了互联网环境下的安全性。
关忆北.
2022/09/28
1.5K0
使用OAuth2实现授权服务
【手把手教你】搭建自己的量化分析数据库
数据是金融量化分析的重要基础,包括股票历史交易数据、上市公司基本面数据、宏观和行业数据等。随着信息流量的日益膨胀,学会获取、查询和加工数据信息变得越来越重要。对于鼓捣量化交易的人来说,怎么能说不会玩数据库呢?目前常用的开源(免费)数据库有MySQL、Postgresql 、Mongodb 和 SQLite (Python自带),在2018-2019年DB-Engines 排行榜上位居前十(见下图),可见其使用量和受欢迎程度较高。这几个数据库各有自己的特点和适用环境,关于该学习哪一个或如何学习网上有很多相关资料。本文主要为大家简单介绍如何使用 Python 操作 Postgresql 数据库(其他数据库类似),利用 psycopg2 和 sqlalchemy 实现 postgresql 与 pandas 的 dataframe 进行交互,一步步搭建自己的量化分析数据库。
Python进阶者
2019/05/27
3.6K0
SpringBoot 集成 Shiro 极简教程(实战版)
Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,提供了认证,授权,加密,和会话管理。
Java小咖秀
2021/04/20
3K0
SpringBoot 集成 Shiro 极简教程(实战版)
电商管理系统的数据库设计思路和数据库代码
实现用户注册、登录和个人信息管理功能,并对不同用户类型(普通用户、商家、管理员)进行权限管理。
GeekLiHua
2025/01/21
540
MySQL中的数据类型_请列举MySQL中常见的数据类型
  我在网上也搜过很多,就是想知道在数据库中的建表语句的字段类型对应Java实体类中属性的类型是什么。
全栈程序员站长
2022/10/03
2K0
MySQL中的数据类型_请列举MySQL中常见的数据类型
推荐阅读
相关推荐
如何获取沪深股市历史数据并入库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验