实现简单单品种回测
This commit is contained in:
77
main.py
Normal file
77
main.py
Normal file
@@ -0,0 +1,77 @@
|
||||
# main.py
|
||||
|
||||
from src.analysis.result_analyzer import ResultAnalyzer
|
||||
# 导入所有必要的模块
|
||||
from src.data_manager import DataManager
|
||||
from src.backtest_engine import BacktestEngine
|
||||
from src.strategies.simple_limit_buy_strategy import SimpleLimitBuyStrategy
|
||||
|
||||
|
||||
def main():
|
||||
# --- 配置参数 ---
|
||||
# 获取当前脚本所在目录,假设数据文件在项目根目录下的 data 文件夹内
|
||||
data_file_path = '/mnt/d/PyProject/NewQuant/data/data/SHFE_rb2501/SHFE_rb2501_m60_20240901_20241201_min60.csv'
|
||||
|
||||
initial_capital = 100000.0
|
||||
slippage_rate = 0.001 # 假设每笔交易0.1%的滑点
|
||||
commission_rate = 0.0002 # 假设每笔交易0.02%的佣金
|
||||
|
||||
strategy_parameters = {
|
||||
'symbol': "SHFE_rb2501", # 根据您的数据文件中的品种名称调整
|
||||
'trade_volume': 1, # 每次交易1手/股
|
||||
'limit_price_factor': 0.995, # 限价单价格为开盘价的99.5%
|
||||
'max_position': 10 # 最大持仓10手/股
|
||||
}
|
||||
|
||||
# --- 1. 初始化数据管理器 ---
|
||||
print("初始化数据管理器...")
|
||||
data_manager = DataManager(file_path=data_file_path)
|
||||
# 确保 DataManager 能够重置以进行多次回测
|
||||
# data_manager.reset() # 首次运行不需要重置
|
||||
|
||||
# --- 2. 初始化回测引擎并运行 ---
|
||||
print("\n初始化回测引擎...")
|
||||
engine = BacktestEngine(
|
||||
data_manager=data_manager,
|
||||
strategy_class=SimpleLimitBuyStrategy,
|
||||
strategy_params=strategy_parameters,
|
||||
initial_capital=initial_capital,
|
||||
slippage_rate=slippage_rate,
|
||||
commission_rate=commission_rate
|
||||
)
|
||||
|
||||
print("\n开始运行回测...")
|
||||
engine.run_backtest()
|
||||
print("\n回测运行完毕。")
|
||||
|
||||
# --- 3. 获取回测结果 ---
|
||||
results = engine.get_backtest_results()
|
||||
portfolio_snapshots = results["portfolio_snapshots"]
|
||||
trade_history = results["trade_history"]
|
||||
initial_capital_result = results["initial_capital"]
|
||||
|
||||
# --- 4. 结果分析与可视化 ---
|
||||
if portfolio_snapshots:
|
||||
analyzer = ResultAnalyzer(portfolio_snapshots, trade_history, initial_capital_result)
|
||||
|
||||
analyzer.generate_report()
|
||||
analyzer.plot_performance()
|
||||
else:
|
||||
print("\n没有生成投资组合快照,无法进行结果分析。")
|
||||
|
||||
# --- 4. 结果分析与可视化 (待实现) ---
|
||||
# if portfolio_snapshots:
|
||||
# analyzer = ResultAnalyzer(portfolio_snapshots, trade_history, initial_capital_result)
|
||||
# metrics = analyzer.calculate_all_metrics()
|
||||
# print("\n--- 绩效指标 ---")
|
||||
# for key, value in metrics.items():
|
||||
# print(f" {key}: {value:.4f}")
|
||||
#
|
||||
# print("\n--- 绘制绩效图表 ---")
|
||||
# analyzer.plot_performance()
|
||||
# else:
|
||||
# print("\n没有生成投资组合快照,无法进行结果分析。")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user