
由于我们有意长期使用期货数据作为更广泛的证券主数据库策略的一部分,我们希望将期货数据存储到磁盘上。因此,我们需要创建一个目录来保存E-Mini合同CSV文件。在Mac/Linux(终端/控制台)中,这是通过以下命令实现的:
cd /PATH/TO/YOUR/quandl_data.py
mkdir -p quandl/futures/ES
注意:用quandl_data.py文件所在的目录替换/PATH/TO/YOUR,这将创建一个名为quandl的子目录,其中包含另外两个子目录,分别用于期货和ES合同。这将帮助我们以一种持续的方式组织我们的下载。为了使用Python实现下载,我们需要导入一些库。我们特别需要requests来下载并且用pandas和matplotlib用于绘图和数据操作:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# quandl_data.py
from __future__ import print_function
import matplotlib.pyplot as plt
import pandas as pd
import requests
代码中的第一个函数将生成希望下载的期货品种列表。我添加了开始和结束年份的关键字参数,将它们设置为2010年和2014年的合理值。当然,您可以选择使用其他时间框架:
def construct_futures_symbols(
symbol, start_year=2010, end_year=2014
):
"""
构造一个期货合约代码列表
用于特定的符号和时间框架。"""
futures = []
# March, June, September and
# December delivery codes
months = ’HMUZ’
for y in range(start_year, end_year+1):
for m in months:
futures.append("%s%s%s" % (symbol, m, y))
return futures
现在,我们需要循环遍历每个品种,从Quandl获取特定契约的CSV文件,然后将其写入磁盘,以便以后访问:
def download_contract_from_quandl(contract, dl_dir):
"""
从Quandl下载一个单独的期货合约,然后
将它存储到磁盘的' dl_dir '目录中。
需要auth_token,它在注册时从Quandl获得。.
"""
# 从契约和auth_token构造API调用
api_call = "http://www.quandl.com/api/v1/d..."
api_call += "OFDP/FUTURE_%s.csv" % contract
# 如果您希望为更多的下载添加一个auth令牌,很简单
# 注释下面的行并用MY_AUTH_TOKEN替换
# 您的验证令牌在下面的行中
params = "?sort_order=asc"
#params = "?auth_token=MY_AUTH_TOKEN&sort_order=asc"
full_url = "%s%s" % (api_call, params)
# 从Quandl下载数据data = requests.get(full_url).text
# 将数据存储到磁盘
fc = open(’%s/%s.csv’ % (dl_dir, contract), ’w’)
fc.write(data)
fc.close()
现在我们把以上两个功能结合起来下载所有需要的合约:
def download_historical_contracts(
symbol, dl_dir, start_year=2010, end_year=2014
):
"""
下载指定品种的所有期货合约
在start_year和end_year之间。
"""
contracts = construct_futures_symbols(
symbol, start_year, end_year
)
for c in contracts:
print("Downloading contract: %s" % c)
download_contract_from_quandl(c, dl_dir)
最后,我们可以使用主函数将其中一个期货价格添加到pandas数据流中。然后我们可以使用matplotlib来绘制结算价格:
if __name__ == "__main__":
symbol = ’ES’
# 确保你已经创建了这个
# 相对目录
dl_dir = ’quandl/futures/ES’
# 创造开始和结束的年份
start_year = 2010
end_year = 2014
# 将契约下载到目录中
download_historical_contracts(
symbol, dl_dir, start_year, end_year
)
# 通过read_csv打开一个契约
# 然后标出结算价格
es = pd.io.parsers.read_csv(
"%s/ESH2010.csv" % dl_dir, index_col="Date"
)
es["Settle"].plot()
plt.show()
下图是输出结果:

如有需要,可修改上述代码,从Quandl收集任何期货合约组合。请记住,除非获取更高的API请求,否则代码每天只能发出50个API请求。
【交易学习】
【交易员洞察】
【基础知识】
【货币交易】
【黄金交易】
風險提示:本文所述僅代表作者個人觀點,不代表 Followme 的官方立場。Followme 不對內容的準確性、完整性或可靠性作出任何保證,對於基於該內容所採取的任何行為,不承擔任何責任,除非另有書面明確說明。

暫無評論,立馬搶沙發