基于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.rpm
cd /etc/yum.repos.d/
yum install mysql-server
systemctl start mysqld #启动MySQL
#获取临时密码
sudo grep 'temporary password' /var/log/mysqld.log
mysql -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
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 pd
import urllib.request
import json
from sqlalchemy import Column, Integer, String, Date, create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = 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()