portfolio-engine / tests /test_perf.py
engineportf's picture
Initial Deployment from Local Engine
208fbf8 verified
Raw
History Blame Contribute Delete
1.78 kB
import numpy as np
import time
import pandas as pd
from cvxpy_engine import CVXPYOptimizationEngine
from core_types import ForecastResult, CovarianceResult
def run_perf():
n = 200
np.random.seed(42)
rets = np.random.randn(1000, n) * 0.01
df = pd.DataFrame(rets)
Sigma = df.cov()
fr = ForecastResult(
expected_returns=pd.Series(df.mean() * 252),
covariance_result=CovarianceResult(Sigma, df.corr(), pd.Series(df.std())),
betas=pd.Series(np.ones(n)),
garch_info={},
js_alpha=0.0,
capm_rets=pd.Series(np.ones(n)),
ff_betas=pd.DataFrame(),
periods=252,
historical_returns=pd.Series(df.mean() * 252)
)
cfg = {"risk_free_rate": 0.04, "gross_leverage_cap": 1.0, "sector_limit": 0.35, "single_asset_max": 0.40, "tc_volume_profile": 0.10}
state = type('obj', (object,), {'current_weights': np.zeros(n), 'total_capital': 1000000.0})()
start = time.time()
for i in range(5):
engine = CVXPYOptimizationEngine(
forecast=fr, state=state, cfg=cfg, tickers=list(range(n)), n=n,
macro={}, spread_map={}, risk_input=5.0, risk_factor=1.0,
capital=1_000_000.0, adv_proxy=50_000_000.0, safe_min=0.0, asset_max=0.4,
sector_limit=0.35, allow_shorts=False, durations=np.zeros(n),
b_min=0.0, b_max=0.0, has_basis=False, max_turnover=1.0,
stability_spreads=np.zeros(n), stab_lambda=0.0
)
engine.setup_data()
engine.solve(use_beta=False, use_dur=False, use_factors=False, is_deep_relaxation=False, cur_min=0.0, cur_max=0.4, cur_sec=0.35, cur_turn=1.0)
print(f"Total time 5 iterations n={n}: {time.time() - start:.3f}s")
if __name__ == "__main__":
run_perf()