Files
etf/framework/tests/test_integration.py
aszerW 95c0d79172 feat(framework): 完成框架入口与集成测试
核心组件:
- ConfigLoader: 配置加载器(YAML支持)
- StrategyConfig: 策略配置数据类
- framework/__init__.py: 框架统一入口

导出接口:
- FactorBase, FactorRegistry, FactorCombiner
- SignalGenerator, TopNSelector, TrendFollower, ReversalTrader
- StrategyBase, RotationStrategy
- RiskControl, StopLossControl, PositionLimitControl
- Executor, BacktestExecutor, DryRunExecutor
- ConfigLoader

集成测试:
- 轮动策略完整流程验证
- 趋势策略完整流程验证
- 回调钩子完整流程验证

总计:62个测试全部通过,框架核心实现完成
2026-05-11 22:19:26 +08:00

101 lines
3.2 KiB
Python

"""
框架核心测试
验证框架整体功能
"""
import pandas as pd
import numpy as np
import pytest
from framework.factors import FactorBase, FactorRegistry, FactorCombiner
from framework.factors.momentum import MomentumFactor, TrendFactor, ReversalFactor, VolatilityFactor
from framework.signals import TopNSelector, TrendFollower, ReversalTrader
from framework.risk import StopLossControl, CallbackHook, Position, premium_filter_callback
class TestFrameworkIntegration:
"""测试框架集成"""
def test_rotation_strategy_workflow(self):
"""测试轮动策略完整流程"""
# 清空注册表
FactorRegistry.clear()
# 1. 注册因子
FactorRegistry.register(MomentumFactor)
FactorRegistry.register(VolatilityFactor)
# 2. 创建因子组合
factors = FactorCombiner([
FactorRegistry.get('momentum', n_days=25, crash_filter=True),
], weights=[1.0])
# 3. 生成测试数据(需要'close'列)
dates = pd.date_range('2020-01-01', periods=100)
data = pd.DataFrame({
'close': np.random.randn(100).cumsum() + 100,
'code1': np.random.randn(100).cumsum() + 100,
'code2': np.random.randn(100).cumsum() + 100,
'code3': np.random.randn(100).cumsum() + 100,
}, index=dates)
# 4. 计算因子
factor_result = factors.compute(data)
# 5. 生成信号
selector = TopNSelector(select_num=2)
signals = selector.generate(factor_result)
# 6. 验证结果
assert 'signal' in signals.columns
assert len(signals) == len(data)
def test_trend_strategy_workflow(self):
"""测试趋势策略完整流程"""
FactorRegistry.clear()
FactorRegistry.register(TrendFactor)
factors = FactorCombiner([
FactorRegistry.get('trend', method='ma_cross', fast=5, slow=20),
])
dates = pd.date_range('2020-01-01', periods=100)
data = pd.DataFrame({
'close': np.random.randn(100).cumsum() + 100,
}, index=dates)
factor_result = factors.compute(data)
follower = TrendFollower(entry_threshold=0.02)
signals = follower.generate(factor_result)
assert 'signal' in signals.columns
def test_callbacks_workflow(self):
"""测试回调钩子完整流程"""
hook = CallbackHook()
# 注册回调
hook.register('before_entry', premium_filter_callback(0.10))
hook.register('dynamic_stoploss', lambda pos: -0.05)
# 测试入场前回调
result = hook.trigger('before_entry', 'code1', 100.0, premium=0.05)
assert result == True
# 测试动态止损
position = Position(
code='code1',
entry_price=100.0,
entry_date=pd.Timestamp('2020-01-01'),
current_price=95.0,
current_date=pd.Timestamp('2020-01-10'),
quantity=100,
weight=0.33
)
stoploss = hook.trigger('dynamic_stoploss', position)
assert stoploss == -0.05
if __name__ == '__main__':
pytest.main([__file__, '-v'])