成功的量化交易——量化交易环境(7)

avatar
· 阅读量 153


成功的量化交易——量化交易环境(7)

关于Securities Masters的MySQL


既然我们已经讨论了Securities Masters数据库背后的思想,现在就应该实际构建一个数据库了。为此,我们将使用两种开源技术:MySQL数据库和Python编程语言。在本章结束时,你将有一个完全成熟的Securities Masters,与此进行进一步的定量交易研究的数据分析。

安装MySQL-在Ubuntu中安装MySQL很简单。只需打开终端并输入以下代码:

sudo apt-get install mysql-server



最终,将提示您输入根密码。这是您的主要管理密码,所以不要忘记它!输入密码,安装将继续并完成。

配置MySQL-现在MySQL已经安装在您的系统上,我们可以创建一个新的数据库和一个与之交互的用户。安装时将提示您输入根密码。要从命令行登录MySQL,请使用以下命令行,然后输入密码:

mysql -u root -p



一旦登录到MySQL,就可以创建一个名为securities_master的新数据库然后选择它:

mysql> CREATE DATABASE securities_master;


mysql> USE securities_master;



创建数据库之后,需要添加一个新用户来与数据库进行交互。

虽然可以使用根用户,但是从安全性的角度来看,这是一种不好的做法,因为它授予了太多的权限,可能会导致系统受到损害。在本地机器上,这几乎无关紧要,但在远程生产环境中,您肯定需要创建权限较低的用户。在这个实例中,我们的用户将被称为sec_user。记得用安全密码替换密码:

mysql> CREATE USER ’sec_user’@’localhost’ IDENTIFIED BY ’password’; 


mysql> GRANT ALL PRIVILEGES ON securities_master.* TO ’sec_user’@’localhost’; 


mysql> FLUSH PRIVILEGES;


上面的三行代码创建并授权用户使用securities_master并应用这些特权。从现在开始,与数据库发生的任何交互都将使用sec_user user。

EOD股票的模式设计-我们现在已经安装了MySQL,并配置了一个用户来与数据库进行交互。在这个阶段,我们准备构造必要的表来保存我们的财务数据。对于一个简单、直接的securities_master,我们将创建四个表:


Exchange


Exchange表列出了我们希望从哪些交易所获得股票定价信息。在这种情况下,几乎完全是纽约证券交易所(NYSE)和全美证券交易商自动报价协会(NASDAQ)。


DataVendor


此表列出了关于历史定价数据供应商的信息。我们将使用Yahoo Finance来获取我们的最终(EOD)数据。通过引入这个表,我们可以很容易地在必要时添加更多的供应商,比如谷歌Finance。



Symbol


Symbol表存储了股票代码和公司信息的列表。现在,我们将避免不同的共享类和多个符号名称等问题。


daily price


此表存储每种证券的每日价格信息。如果增加许多证券,它会变得非常大。因此,有必要对其进行性能优化。

MySQL是一个非常灵活的数据库,它允许您定制数据在底层存储引擎中的存储方式。MySQL中的两个主要竞争者是MyISAM和InnoDB。MyISAM能够快速阅读(如跨大量的价格信息查询),但是它不支持事务(必要完全回滚一个多步骤操作,但是在中部会失败)。InnoDB虽然是事务安全的,但是读起来比较慢。

InnoDB在写操作时也允许行级锁定,而MyISAM在写操作时锁定整个表。当将大量信息写入表中的任意点(例如使用UPDATE语句)时,可能会出现性能问题。

我们将使用InnoDB,因为它本身是事务安全的,并且提供行级锁。如果我们发现一个表读起来很慢,我们可以创建索引作为第一步,然后如果性能仍然是个问题,就更改底层存储引擎。我们所有的表都将使用UTF-8字符集,因为我们希望支持国际交流。

让我们从模式开始,为exchange表创建表SQL代码。它存储了交易所的缩写和名称(即NYSE - New York Stock exchange)以及地理位置。它还支持从UTC偏移的货币和时区。我们还为自己的内部目的存储一个创建好的和最近更新的日期。最后,我们将主索引键设置为一个自动递增的整数ID(足以处理2的32次方条记录):

CREATE TABLE ‘exchange‘ (

‘id‘ int NOT NULL AUTO_INCREMENT,

‘abbrev‘ varchar(32) NOT NULL,

‘name‘ varchar(255) NOT NULL,

‘city‘ varchar(255) NULL,

‘country‘ varchar(255) NULL,

‘currency‘ varchar(64) NULL,

‘timezone_offset‘ time NULL,

‘created_date‘ datetime NOT NULL,

‘last_updated_date‘ datetime NOT NULL,

PRIMARY KEY (‘id‘)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



下面是模式并为data_vendor表创建表SQL代码。它存储名称、网站和支持电子邮件。随着时间的推移,我们可以为供应商添加更多有用的信息,如API端点URL:

CREATE TABLE ‘data_vendor‘ (

‘id‘ int NOT NULL AUTO_INCREMENT,

‘name‘ varchar(64) NOT NULL,

‘website_url‘ varchar(255) NULL,

‘support_email‘ varchar(255) NULL,

‘created_date‘ datetime NOT NULL,

‘last_updated_date‘ datetime NOT NULL,

PRIMARY KEY (‘id‘)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



下面是模式并为符号表创建表SQL代码。它包含一个与交易所(我们暂时只支持交易所交易工具)、一个股票代码(例如GOOG)、一个工具类型(“股票”或“指数”)、股票或股票市场指数的名称、一个股票部门和一种货币的外国关键链接。

CREATE TABLE ‘symbol‘ (

‘id‘ int NOT NULL AUTO_INCREMENT,

‘exchange_id‘ int NULL,

‘ticker‘ varchar(32) NOT NULL,

‘instrument‘ varchar(64) NOT NULL,

‘name‘ varchar(255) NULL,

‘sector‘ varchar(255) NULL,

‘currency‘ varchar(32) NULL,

‘created_date‘ datetime NOT NULL,

‘last_updated_date‘ datetime NOT NULL,

PRIMARY KEY (‘id‘),

KEY ‘index_exchange_id‘ (‘exchange_id‘)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



下面是模式并为daily_price表创建表SQL代码。该表是实际存储历史定价数据的地方。我们用daily_作为表名的前缀,因为我们可能希望稍后在单独的表中创建分钟或秒的分辨率数据,以便采用更高的频率策略。该表包含两个外键——一个指向数据供应商,另一个指向符号。这唯一地标识了数据点,并允许我们在同一个表中为多个供应商存储相同的价格数据。我们还存储一个价格日期(即OHLC数据有效的每日周期)和为我们自己的目的创建的和最近更新的日期。

其余字段存储开-高-低-关和调整后的收盘价。雅虎金融为我们提供股息和股票分割,其价格最终在adj_close_price列。注意,数据类型是decimal(19,4)。在处理财务数据时,绝对有必要做到精确。如果我们使用了float数据类型,由于float数据在内部存储的性质,最终会出现舍入错误。最后一个字段存储当天的交易量。这使用bigint数据类型,这样我们就不会意外地截断非常高的成交量的日子。

CREATE TABLE ‘daily_price‘ (

‘id‘ int NOT NULL AUTO_INCREMENT,

‘data_vendor_id‘ int NOT NULL,

‘symbol_id‘ int NOT NULL,

‘price_date‘ datetime NOT NULL,

‘created_date‘ datetime NOT NULL,

‘last_updated_date‘ datetime NOT NULL,

‘open_price‘ decimal(19,4) NULL,

‘high_price‘ decimal(19,4) NULL,

‘low_price‘ decimal(19,4) NULL,

‘close_price‘ decimal(19,4) NULL,

‘adj_close_price‘ decimal(19,4) NULL,

‘volume‘ bigint NULL,

PRIMARY KEY (‘id‘),

KEY ‘index_data_vendor_id‘ (‘data_vendor_id‘),

KEY ‘index_symbol_id‘ (‘symbol_id‘)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



通过在MySQL命令行中输入上述所有SQL命令,将创建四个必要的表。





【交易学习】

【交易员洞察】

金融寒冬中的一束星火—ALPHA金融人才孵化计划

中国量化交易的现状与未来前景如何

人类历史上最早的泡沫故事——“郁金香热”始末

从个人交易员成长为机构交易员


【基础知识】

小白如何学金融

全球央行货币政策及财政政策解析

金融行业组织架构及岗位分布

什么叫宏观交易员?


【货币交易】

人民币货币市场全景图

详解货币交易术语

保证金账户运作机制


【黄金交易】

世界黄金浮生纪事

中国黄金的前世今生

黄金价格走势及内在机理

风险提示:以上内容仅代表作者或嘉宾的观点,不代表 FOLLOWME 的任何观点及立场,且不代表 FOLLOWME 同意其说法或描述,也不构成任何投资建议。对于访问者根据 FOLLOWME 社区提供的信息所做出的一切行为,除非另有明确的书面承诺文件,否则本社区不承担任何形式的责任。

FOLLOWME 交易社区网址: www.followme.ceo

喜欢的话,赞赏支持一下
avatar
回复 0

加载失败()

  • tradingContest