
关于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命令,将创建四个必要的表。
【交易学习】
【交易员洞察】
【基础知识】
【货币交易】
【黄金交易】
Tuyên bố miễn trừ trách nhiệm: Nội dung trên chỉ thể hiện quan điểm của tác giả hoặc khách mời. Nó không đại diện cho bất kỳ quan điểm hoặc vị trí nào của FOLLOWME và không có nghĩa là FOLLOWME đồng ý với tuyên bố hoặc mô tả của nó, cũng không cấu thành bất kỳ lời khuyên đầu tư nào. Đối với tất cả các hành động do khách truy cập thực hiện dựa trên thông tin do cộng đồng FOLLOWME cung cấp, cộng đồng không chịu bất kỳ hình thức trách nhiệm pháp lý nào trừ khi được cam kết bằng văn bản.
Trang web cộng đồng giao dịch FOLLOWME: www.followme.asia
Tải thất bại ()