43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import unittest
|
|
|
|
from deltaforge_skeleton.dsl import Asset, PlanDelta, StrategyDelta
|
|
from deltaforge_skeleton.curator import Curator
|
|
from deltaforge_skeleton.adapters.equity_feed import generate_equity_signals
|
|
from deltaforge_skeleton.adapters.options_feed import generate_options_signals
|
|
from deltaforge_skeleton.execution import ExecutionEngine
|
|
from deltaforge_skeleton.backtester import Backtester
|
|
|
|
|
|
class TestDeltaForgeSkeleton(unittest.TestCase):
|
|
def test_end_to_end_scenario(self):
|
|
# Simple two-asset delta hedge: AAPL and MSFT across two venues (conceptual)
|
|
aapl = Asset(symbol="AAPL", asset_type="equity")
|
|
msft = Asset(symbol="MSFT", asset_type="equity")
|
|
|
|
# Create two simple plan deltas to simulate actions on each venue
|
|
plan = PlanDelta(actions=[StrategyDelta(asset=aapl, delta=1.0), StrategyDelta(asset=msft, delta=-1.0)], timestamp=123.0)
|
|
|
|
curator = Curator()
|
|
# Shared signals and dual vars are placeholders for this MVP
|
|
class Dummy:
|
|
pass
|
|
shared = Dummy()
|
|
duals = Dummy()
|
|
curated = curator.enforce(plan, shared, duals)
|
|
|
|
eng = ExecutionEngine()
|
|
routed = eng.route(curated)
|
|
|
|
bt = Backtester()
|
|
pnl = bt.replay(curated)
|
|
|
|
self.assertTrue(len(routed) >= 1)
|
|
self.assertIsInstance(pnl, float)
|
|
|
|
|
|
def main():
|
|
unittest.main()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|