def from_csv(cls, filepath_or_buffer):
# Import pandas lazily since it can take a moment to import
try:
import pandas as pd
except ImportError:
raise ImportError("pandas must be installed to use ZiplineBacktestResult")
zipline_result = cls()
results = pd.read_csv(
filepath_or_buffer,
parse_dates=["date"],
index_col=["dataframe", "index", "date", "column"])["value"]
# Extract returns
returns = results.loc["returns"].unstack()
returns.index = returns.index.droplevel(0).tz_localize("UTC")
zipline_result.returns = returns["returns"].astype(float)
# Extract positions
positions = results.loc["positions"].unstack()
positions.index = positions.index.droplevel(0).tz_localize("UTC")
zipline_result.positions = positions.astype(float)
# Extract transactions
transactions = results.loc["transactions"].unstack()
transactions.index = transactions.index.droplevel(0).tz_localize("UTC")
zipline_result.transactions = transactions.apply(pd.to_numeric, errors='ignore')
# Extract benchmark returns
benchmark_returns = results.loc["benchmark"].unstack()
benchmark_returns.index = benchmark_returns.index.droplevel(0).tz_localize("UTC")
zipline_result.benchmark_returns = benchmark_returns["benchmark"].astype(float)
# Extract performance dataframe
perf = results.loc["perf"].unstack()
perf.index = perf.index.droplevel(0).tz_localize("UTC")
zipline_result.perf = perf.apply(pd.to_numeric, errors='ignore')
return zipline_result
评论列表
文章目录