39 lines
1.3 KiB
Bash
39 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
echo "Running DeltaForge MVP tests..."
|
|
python3 -m build >/dev/null 2>&1 || true
|
|
if [ -f dist/*wheel* ]; then
|
|
echo "Wheel present, installing..."
|
|
python3 -m pip install dist/*.whl
|
|
fi
|
|
|
|
echo "Installing package in editable mode..."
|
|
python3 -m pip install -e . >/dev/null 2>&1 || true
|
|
|
|
echo "Running unit tests..."
|
|
python3 -m pip install -q pytest || true
|
|
pytest -q || python3 -m unittest discover -q
|
|
|
|
echo "Running deterministic backtest to verify MVP flow..."
|
|
python3 - <<'PY'
|
|
from deltaforge.dsl import Asset, MarketSignal, StrategyDelta
|
|
from deltaforge.core import Curator
|
|
from deltaforge.backtester import Backtester
|
|
from deltaforge.adapters.equity_feed import EquityFeedAdapter
|
|
from deltaforge.adapters.options_feed import OptionsFeedAdapter
|
|
from deltaforge.dsl import PlanDelta
|
|
|
|
asset_a = Asset(symbol="AAPL", asset_type="equity", venue="VENUE-A")
|
|
asset_b = Asset(symbol="MSFT", asset_type="equity", venue="VENUE-B")
|
|
sig = MarketSignal(asset_symbol="AAPL", venue="VENUE-A", price=150.0)
|
|
curator = Curator([asset_a, asset_b])
|
|
plan = curator.synthesize_plan([sig], [
|
|
StrategyDelta(asset=asset_a, target_delta=1.0, risk_budget=0.5, objective="delta-neutral"),
|
|
StrategyDelta(asset=asset_b, target_delta=-1.0, risk_budget=0.5, objective="delta-neutral"),
|
|
])
|
|
bt = Backtester()
|
|
res = bt.run(plan)
|
|
print(res)
|
|
PY
|