vlambda博客
学习文章列表

基于mysql建立自有高频数据

 大数据时代,数据为王。

    高频金融数据即指日内的金融时间序列, 是以小时、分钟或秒为采集频率的、按时间先后顺序排列的金融类数据。相比以日、月、年为频度的低频数据,金融高频数据中提供了除交易价格外,包括与交易相连的询价和报价、交易数量、交易之间的时间间隔、相似资产的现价等方面的具有高度持续性的交易信息。应当说,基于金融高频数据进行的数量分析,是关于“以不同时间间隔观察到的、具有不规则强度、既有离散变量又有连续变量的”复杂多变量问题。而在分析连续性影响证券价格变化的金融市场信息,尤其是股指期货等金融衍生品市场交易动态时,基于低频数据的离散模型就必然造成信息的丢失,据此之上建立的策略模型和趋势分析就会缺乏准确性,影响投资判断。此外,在进行金融衍生品套利分析中,如何把握其高波动性、短线交易的特性,依托高频数据建立拟合度更高的现货组合、准确计算套利成本,并监控由于保证金不足造成的流动性风险、把握合适的开仓/平仓时机等方面,高频数据均表现出传统的低频数据完全不能替代的作用。可以说,高频金融数据在现代投资分析中,尤其是金融衍生品市场中的应用,已经远远超出金融市场计量学的理论研究层面,而成为了投资决策体系中不可或缺的“制胜法宝”。


01

mysql的安装

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,所以你不需要支付额外的费用。

  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

  • MySQL 使用标准的 SQL 数据语言形式。

  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。

MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

centos7下面mysql安装:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpmcd /etc/yum.repos.d/yum install mysql-serversystemctl start mysqld #启动MySQL

#获取临时密码sudo grep 'temporary password' /var/log/mysqld.logmysql -u root -p#修改密码mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

默认环境下,其它机器不能访问服务器的3306端口,因此,需要打开3306端口。

同时,如果是用root进行远程连接,还需要打开root的远程连接权限。

#设置防火墙,打开数据库端口firewall-cmd --zone=public --add-port=3306/tcp --permanent  #允许root进行远程连接mysql>grant all privileges on *.* to root@'%' identified by '123456';

命令含义: –zone #作用域

–add-port=3306/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效


02


建立数据库

03

sqlalchemy ORM入库

创建数据库表:

create table if not exists mydata.equity_history( trade_date datetime not null, ticker varchar(10) not null, open float null, high float null, low float null, close float null, volume int null, primary key (trade_date, ticker));

sqlalchemy ORM入库

import pandas as pdimport urllib.requestimport jsonfrom sqlalchemy import Column, Integer, String, Date, create_enginefrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()engine = create_engine('mysql+mysqlconnector://root:[email protected]/mydata')def get_data_sina(url): fp = urllib.request.urlopen(url, timeout=5) content = fp.read() stockdata=content.decode('utf-8') jsondata = json.loads(stockdata) return jsondata[0]['day'],jsondata[0]['open'],jsondata[0]['high'],jsondata[0]['low'],jsondata[0]['close'],jsondata[0]['volume']def SaveStock(content): stockdata = json.load(content)class Stockhistory(Base): # 表的名字: __tablename__ = 'equity_history' # 表的结构: trade_date = Column('trade_date', DateTime, primary_key=True) ticker = Column('ticker', string(10), primary_key=True) open = Column(Double) high = Column(Double) low = Column(Double) close = Column(Double) volume = Column(Integer)if __name__ == '__main__': # 创建session类型 DBSession = sessionmaker(bind=engine) session = DBSession() tickers=['sz300033','sh600519','sh600276','sz002415'] url = "http://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData?symbol={}&scale=5&ma=no&datalen=1" for ticker in tickers: d,t,o,h,l,c,v = get_data_sina(url.format(ticker)) print(d,o,h,l,c,v) stockhistory1= Stockhistory(trade_date=d,ticker=t,open=o,high=h,low=l,close=c,volume=v) session.add(stockhistory1)    session.commit()