我这辈子似乎都无法得到我想要的结构并让它正常运行,所以我一怒之下来找你们。
设置:我有一个名为 Futures_Contracts 的目录,里面有大约 30 个文件夹,所有文件夹都以标的资产命名,最后是 6 个最近到期的 csv 格式合约。每个 csv 格式相同,包含 Date、O、H、L、C、V、OI、Expiration Month。
注意:OHLCV OI 是开盘价、最高价、最低价、收盘价、交易量、持仓量(对于那些不熟悉的人)也假设收盘价是结算的同义词
任务:从这里开始,目标是将期货数据加载到多索引 pandas 数据框中,其中顶级索引是基础商品符号,中级索引是到期月份,最后OHLC 数据。最终目标是拥有一些我可以在 zipline 模块上开始破解的东西,让它在期货上运行。所以在视觉上:
我的微弱尝试:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pandas import DataFrame, Series
import datetime
plt.figsize(16,8)
deliveries = {}
commoidities = {}
columns = 'open', 'high', 'low', 'settle', 'volume', 'interest', 'delivery' #Contract fields
path = os.getcwdu()+'/Futures_Contracts/' #Futures Path
for sym in os.listdir(path):
if sym[0] != '.': #Weed out hidden files
deliveries[sym] = []
i = 0
for contract in os.listdir(path + sym):
temp = pd.io.parsers.read_csv(path + sym + '/' + contract, index_col=0, parse_dates = True, names = columns)#pull in the csv
deliveries[sym].append(str(contract[:-4][-1] + contract[:-4][:-1][-2:])) #add contract to dict in form of MonthCode-YY
commodities[sym] = deliveries[sym]
commodities[sym][i] = temp
i += 1
这有点工作,但是这实际上是一个嵌套的字典,最后包含一个数据框。因此切片非常笨重:
commodities['SB2'][0]['settle'].plot()
commodities['SB2'][3]['settle'].plot()
commodities['SB2'][4]['settle'].plot()
commodities['SB2'][3]['settle'].plot()
commodities['SB2'][4]['settle'].plot()
commodities['SB2'][5]['settle'].plot()
和产量
理想情况下,我将能够对每个索引进行切片,以便我可以比较资产、到期、日期和价值的数据。此外,标记我正在查看的内容,正如您在 matplotlib 图表中看到的那样,所有内容都简单地命名为“解决”
肯定有办法做到这一点,但我只是不够聪明,无法弄清楚。