私は一生、自分が望む構造を手に入れて適切に機能させることができないように見えるので、怒り狂って皆さんに来ます.
セットアップ: Futures_Contracts という名前のディレクトリがあり、その中に約 30 個のフォルダーがあり、すべて原資産の名前が付けられ、最後に最も近い 6 つの有効期限契約が csv 形式で含まれています。各 csv の形式は同じで、日付、O、H、L、C、V、OI、有効期限の月が含まれています。
注: OHLCV OI は、始値、高値、安値、終値、出来高、建玉 (詳しくない人向け) であり、終値は以下の決済と同義であると仮定します
タスク: ここからの目標は、最上位インデックスが基礎となる商品シンボル、中間レベル インデックスが有効期限の月-年、最後に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
これはある程度機能しますが、これは実際には、最後にデータフレームを保持するネストされた dict です。したがって、スライスは非常に扱いにくいです:
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 チャートでわかるように、私が見ているものにラベルを付けます。
確かにこれを行う方法はありますが、私はそれを理解するほど賢くありません.