feat: strategy builder
This commit is contained in:
@@ -5,7 +5,7 @@ from pydantic import BaseModel
|
||||
|
||||
from services.option_chain import get_chain_slice
|
||||
from services.vol_surface import build_surface, apply_scenario
|
||||
from services.strategy_engine import payoff_curves
|
||||
from services.strategy_engine import payoff_curves, DEFAULT_CONTRACT_SIZE
|
||||
from services.strategy_optimizer import optimize as run_optimizer
|
||||
from services.database import (
|
||||
save_scenario, get_scenarios, delete_scenario,
|
||||
@@ -34,6 +34,7 @@ class ScenarioIn(BaseModel):
|
||||
manual_grid: Optional[List[Dict[str, Any]]] = None
|
||||
rate: float = 0.05
|
||||
n_expiries: int = 3
|
||||
contract_size: float = DEFAULT_CONTRACT_SIZE
|
||||
|
||||
|
||||
class PriceRequest(BaseModel):
|
||||
@@ -121,6 +122,7 @@ def price(req: PriceRequest):
|
||||
result = payoff_curves(
|
||||
legs, chain_slice, surface_now, surface_scenario,
|
||||
req.scenario.horizon_days, req.scenario.rate,
|
||||
contract_size=req.scenario.contract_size,
|
||||
)
|
||||
result["spot"] = chain_slice["spot"]
|
||||
result["scenario_spot"] = surface_scenario.spot
|
||||
@@ -146,6 +148,7 @@ def optimize(req: OptimizeRequest):
|
||||
constraints=req.constraints.model_dump(),
|
||||
objective=req.constraints.objective,
|
||||
top_n=req.constraints.top_n,
|
||||
contract_size=req.scenario.contract_size,
|
||||
)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
|
||||
Reference in New Issue
Block a user