import pandas as pd
import qcs
from qcs import AllocationSnapshot, Context, PricingContext
assets = qcs.import_assets_from_csv("examples/assets.csv")
histories = qcs.import_histories_from_csv(
"examples/histories.csv", sep=",", date_format="%Y-%m-%d"
)
context = Context(
date="2023-03-31",
horizon="1m",
local_db={"assets": assets, "histories": histories},
)
positions = [
{"ticker": "EQUITYEUR68", "size": 100.0, "expected_return": 0.01},
{"ticker": "EQUITYEUR70", "size": 200.0, "expected_return": 0.05},
{"ticker": "EUR", "size": 200.0, "expected_return": 0.02},
]
# Jay Walters method
snapshot = AllocationSnapshot(currency="USD", positions=positions)
df_returns = pd.DataFrame(
[
{"ticker": position.ticker, "prior_return": position.expected_return}
for position in snapshot.positions
]
)
print("\nMethod: Jay Walters")
print("\nPrior estimate of returns:")
print(df_returns)
snapshot_with_posterior_returns = snapshot.bl_returns(
context=context,
views=[0.02, 0.1],
confidences=[0.3, 0.9],
matrix_p=[[1, 0, 0], [0, 1, 1]],
tau=0.2,
uncertainty_method="jay_walters",
)
df_returns["posterior_return"] = [
position.expected_return
for position in snapshot_with_posterior_returns.positions
]
print("\nPosterior estimate of returns:")
print(df_returns)
# Idzorek method
reference_market = AllocationSnapshot(
currency="USD",
positions=[
{"ticker": "EQUITYEUR68", "allocation": 20},
{"ticker": "EQUITYEUR70", "allocation": 20},
{"ticker": "EUR", "allocation": 20},
],
)
pricing_context = PricingContext(risk_aversion=0.3)
snapshot = AllocationSnapshot(
currency="USD",
positions=positions,
reference_market=reference_market,
pricing_context=pricing_context,
)
df_returns = pd.DataFrame(
[
{"ticker": position.ticker, "prior_return": position.expected_return}
for position in snapshot.positions
]
)
print("\nMethod: Idzorek")
print("\nPrior estimate of returns:")
print(df_returns)
snapshot_with_posterior_returns = snapshot.bl_returns(
context=context,
views=[0.02, 0.1],
confidences=[0.3, 0.9],
matrix_p=[[1, 0, 0], [0, 1, 1]],
uncertainty_method="idzorek",
)
df_returns["posterior_return"] = [
position.expected_return
for position in snapshot_with_posterior_returns.positions
]
print("\nPosterior estimate of returns:")
print(df_returns)