Files
NewQuant/futures_trading_strategies/rb/KalmanStrategy/KalmanStrategy.ipynb

458 lines
272 KiB
Plaintext
Raw Normal View History

2025-11-07 16:37:16 +08:00
{
"cells": [
{
"cell_type": "code",
"id": "522f09ca7b3fe929",
"metadata": {
"ExecuteTime": {
"end_time": "2025-11-19T08:39:29.864187Z",
"start_time": "2025-11-19T08:39:29.213759Z"
2025-11-07 16:37:16 +08:00
}
},
"source": [
"from datetime import datetime\n",
"\n",
"import sys\n",
"\n",
"if '/mnt/d/PyProject/NewQuant/' not in sys.path:\n",
" sys.path.append('/mnt/d/PyProject/NewQuant/')\n",
" \n",
"from src.data_processing import load_raw_data\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n"
],
"outputs": [],
"execution_count": 1
},
{
"cell_type": "code",
"id": "c00ccfeec592844c",
"metadata": {
"ExecuteTime": {
"end_time": "2025-11-19T08:39:30.209279Z",
"start_time": "2025-11-19T08:39:29.867199Z"
2025-11-07 16:37:16 +08:00
}
},
"source": [
"from turtle import down\n",
"from src.analysis.result_analyzer import ResultAnalyzer\n",
"# 导入所有必要的模块\n",
"from src.data_manager import DataManager\n",
"from src.backtest_engine import BacktestEngine\n",
"from src.indicators.indicator_list import INDICATOR_LIST\n",
"from src.indicators.indicators import *\n",
"\n",
"# 导入您自己的 SMC 策略\n",
"from futures_trading_strategies.rb.KalmanStrategy.KalmanStrategy2 import DualModeKalmanStrategy\n",
"# from src.strategies.KalmanStrategy.KalmanStrategy2 import DualModeKalmanStrategy\n",
"\n",
"# --- 配置参数 ---\n",
"# 获取当前脚本所在目录,假设数据文件在项目根目录下的 data 文件夹内\n",
"data_file_path = 'D:/PyProject/NewQuant/data/data/KQ_m@SHFE_rb/KQ_m@SHFE_rb_min15.csv'\n"
],
"outputs": [],
"execution_count": 2
},
{
"cell_type": "code",
"id": "7599fa7cd2cb3d45",
"metadata": {
"ExecuteTime": {
"end_time": "2025-11-19T08:39:30.231461Z",
"start_time": "2025-11-19T08:39:30.209279Z"
2025-11-07 16:37:16 +08:00
}
},
"source": [
"\n",
"initial_capital = 100000.0\n",
"slippage_rate = 0.000 # 假设每笔交易0.1%的滑点\n",
"commission_rate = 0.0001 # 假设每笔交易0.02%的佣金\n",
"\n",
"global_config = {\n",
" 'symbol': 'KQ_m@SHFE_rb', # 确保与数据文件中的 symbol 匹配\n",
"}\n",
"\n",
"# 回测时间范围\n",
"# start_time = datetime(2021, 1, 1)\n",
"# end_time = datetime(2025, 1, 1)\n",
2025-11-07 16:37:16 +08:00
"\n",
"start_time = datetime(2024, 6, 1)\n",
"end_time = datetime(2025, 12, 1)\n",
2025-11-07 16:37:16 +08:00
"\n",
"\n",
"indicators = INDICATOR_LIST\n",
"indicators = []\n",
"\n",
"# 确保 DataManager 能够重置以进行多次回测\n",
"# data_manager.reset() # 首次运行不需要重置"
],
"outputs": [],
"execution_count": 3
},
{
"cell_type": "code",
"id": "f903fd2761d446cd",
"metadata": {
"ExecuteTime": {
"end_time": "2025-11-19T08:39:38.385870Z",
"start_time": "2025-11-19T08:39:30.237478Z"
2025-11-07 16:37:16 +08:00
}
},
"source": [
"from src.indicators.indicators import ROC_MA\n",
"\n",
"# --- 1. 初始化数据管理器 ---\n",
"print(\"初始化数据管理器...\")\n",
"data_manager = DataManager(file_path=data_file_path, symbol=global_config['symbol'], start_time=start_time,\n",
" end_time=end_time)\n",
"\n",
"strategy_parameters = {\n",
" 'main_symbol': 'rb', # <-- 替换为你的交易品种代码,例如 'GC=F' (黄金期货), 'ZC=F' (玉米期货)\n",
" 'trade_volume': 1,\n",
" 'order_direction': ['SELL', 'BUY'],\n",
" 'indicators': [PriceRangeToVolatilityRatio(7, 21, 4, 5), PriceRangeToVolatilityRatio(7, 21, 4, 5)],\n",
" 'enable_log': False\n",
"}\n",
"\n",
"\n",
"\n",
"# --- 2. 初始化回测引擎并运行 ---\n",
"print(\"\\n初始化回测引擎...\")\n",
"engine = BacktestEngine(\n",
" data_manager=data_manager,\n",
" strategy_class=DualModeKalmanStrategy, # <--- 更改为您的 SMC 策略类\n",
" # current_segment_symbol 参数已从 SMCPureH1LongStrategy 中移除,不需要设置\n",
" strategy_params=strategy_parameters,\n",
" initial_capital=initial_capital,\n",
" slippage_rate=slippage_rate,\n",
" commission_rate=commission_rate,\n",
" roll_over_mode=True,\n",
" start_time=start_time,\n",
" end_time=end_time,\n",
" indicators=indicators # 如果您的 SMC 策略不使用这些指标,也可以考虑移除\n",
")\n",
"\n",
"print(\"\\n开始运行回测...\")\n",
"engine.run_backtest()\n",
"print(\"\\n回测运行完毕。\")\n",
"\n",
"# --- 3. 获取回测结果 ---\n",
"results = engine.get_backtest_results()\n",
"portfolio_snapshots = results[\"portfolio_snapshots\"]\n",
"trade_history = results[\"trade_history\"]\n",
"initial_capital_result = results[\"initial_capital\"]\n",
"bars = results[\"all_bars\"]\n"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"初始化数据管理器...\n",
"数据加载成功: D:/PyProject/NewQuant/data/data/KQ_m@SHFE_rb/KQ_m@SHFE_rb_min15.csv\n",
"数据范围从 2020-12-31 14:45:00 到 2025-11-19 14:30:00\n",
"总计 26922 条记录。\n",
2025-11-07 16:37:16 +08:00
"\n",
"初始化回测引擎...\n",
"模拟器初始化:初始资金=100000.00, 滑点率=0.0, 佣金率=0.0001\n",
"内存仓储已初始化管理ID: 'futures_trading_strategies.rb.KalmanStrategy.KalmanStrategy2.DualModeKalmanStrategy_c7bd93715d42fbef1ec746ee2635a5d3'\n",
"\n",
"--- 回测引擎初始化完成 ---\n",
" 策略: DualModeKalmanStrategy\n",
" 初始资金: 100000.00\n",
" 换月模式: 启用\n",
"\n",
"开始运行回测...\n",
"\n",
"--- 回测开始 ---\n",
"DualModeKalmanStrategy 策略初始化回调被调用。\n",
"开始将 DataFrame 转换为 Bar 对象流...\n",
"Bar 对象流生成完毕。\n",
"\n",
"--- 回测结束,检查并平仓所有剩余持仓 ---\n",
"\n",
"--- 批量计算指标并赋值到Trade ---\n",
2025-11-07 16:37:16 +08:00
"--- 回测结束 ---\n",
"总计处理了 8130 根K线。\n",
"总计发生了 87 笔交易。\n",
"最终总净值: 100542.77\n",
"总收益率: 0.54%\n",
2025-11-07 16:37:16 +08:00
"\n",
"回测运行完毕。\n"
]
}
],
"execution_count": 4
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-11-19T08:39:38.655387Z",
"start_time": "2025-11-19T08:39:38.393885Z"
2025-11-07 16:37:16 +08:00
}
},
"cell_type": "code",
"source": [
"\n",
"# --- 4. 结果分析与可视化 ---\n",
"if portfolio_snapshots:\n",
" analyzer = ResultAnalyzer(portfolio_snapshots, trade_history, bars, initial_capital_result, INDICATOR_LIST)\n",
"\n",
" analyzer.generate_report()\n",
" analyzer.plot_performance()\n",
" metrics = analyzer.calculate_all_metrics()\n",
" print(metrics)\n",
"\n",
" analyzer.analyze_indicators(profit_offset=1)\n",
"else:\n",
" print(\"\\n没有生成投资组合快照无法进行结果分析。\")"
],
"id": "7b191529e909c4d3",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"--- 结果分析器初始化完成 ---\n",
"\n",
"--- 交易明细 ---\n",
" 2024-07-05 13:30:00 | SELL | SHFE.rb2410 | Vol: 1 | Price: 3566.00 | Comm: 0.36\n",
" 2024-07-11 13:30:00 | CLOSE_SHORT | SHFE.rb2410 | Vol: 1 | Price: 3531.00 | Comm: 0.35 | PnL: 35.00\n",
" 2024-07-17 13:45:00 | SELL | SHFE.rb2410 | Vol: 1 | Price: 3514.00 | Comm: 0.35\n",
" 2024-07-26 09:00:00 | CLOSE_SHORT | SHFE.rb2410 | Vol: 1 | Price: 3390.00 | Comm: 0.34 | PnL: 124.00\n",
" 2024-07-30 21:30:00 | SELL | SHFE.rb2410 | Vol: 1 | Price: 3284.00 | Comm: 0.33\n",
" 2024-07-30 22:30:00 | CLOSE_SHORT | SHFE.rb2410 | Vol: 1 | Price: 3324.00 | Comm: 0.33 | PnL: -40.00\n",
" 2024-08-12 09:00:00 | SELL | SHFE.rb2410 | Vol: 1 | Price: 3226.00 | Comm: 0.32\n",
" 2024-08-19 21:15:00 | CLOSE_SHORT | SHFE.rb2410 | Vol: 1 | Price: 3164.00 | Comm: 0.32 | PnL: 62.00\n",
" 2024-09-24 09:15:00 | BUY | SHFE.rb2501 | Vol: 1 | Price: 3164.00 | Comm: 0.32\n",
" 2024-09-24 10:00:00 | CLOSE_LONG | SHFE.rb2501 | Vol: 1 | Price: 3135.00 | Comm: 0.31 | PnL: -29.00\n",
" 2024-09-24 13:45:00 | BUY | SHFE.rb2501 | Vol: 1 | Price: 3192.00 | Comm: 0.32\n",
" 2024-10-08 13:45:00 | CLOSE_LONG | SHFE.rb2501 | Vol: 1 | Price: 3477.00 | Comm: 0.35 | PnL: 285.00\n",
" 2024-10-17 14:30:00 | SELL | SHFE.rb2501 | Vol: 1 | Price: 3328.00 | Comm: 0.33\n",
" 2024-10-18 14:45:00 | CLOSE_SHORT | SHFE.rb2501 | Vol: 1 | Price: 3362.00 | Comm: 0.34 | PnL: -34.00\n",
" 2024-10-25 22:00:00 | BUY | SHFE.rb2501 | Vol: 1 | Price: 3425.00 | Comm: 0.34\n",
" 2024-10-31 22:15:00 | CLOSE_LONG | SHFE.rb2501 | Vol: 1 | Price: 3401.00 | Comm: 0.34 | PnL: -24.00\n",
" 2024-11-01 09:00:00 | SELL | SHFE.rb2501 | Vol: 1 | Price: 3380.00 | Comm: 0.34\n",
" 2024-11-01 09:45:00 | CLOSE_SHORT | SHFE.rb2501 | Vol: 1 | Price: 3399.00 | Comm: 0.34 | PnL: -19.00\n",
" 2024-11-06 11:15:00 | SELL | SHFE.rb2501 | Vol: 1 | Price: 3358.00 | Comm: 0.34\n",
" 2024-11-06 13:45:00 | CLOSE_SHORT | SHFE.rb2501 | Vol: 1 | Price: 3389.00 | Comm: 0.34 | PnL: -31.00\n",
" 2024-11-08 10:45:00 | SELL | SHFE.rb2501 | Vol: 1 | Price: 3388.00 | Comm: 0.34\n",
" 2024-11-19 14:15:00 | CLOSE_SHORT | SHFE.rb2501 | Vol: 1 | Price: 3318.00 | Comm: 0.33 | PnL: 70.00\n",
" 2024-11-22 11:00:00 | SELL | SHFE.rb2501 | Vol: 1 | Price: 3293.00 | Comm: 0.33\n",
" 2024-11-22 22:15:00 | CLOSE_SHORT | SHFE.rb2501 | Vol: 1 | Price: 3328.00 | Comm: 0.33 | PnL: -35.00\n",
" 2024-11-29 11:15:00 | BUY | SHFE.rb2501 | Vol: 1 | Price: 3346.00 | Comm: 0.33\n",
" 2024-11-29 14:30:00 | CLOSE_LONG | SHFE.rb2501 | Vol: 1 | Price: 3329.00 | Comm: 0.33 | PnL: -17.00\n",
" 2024-12-05 11:00:00 | SELL | SHFE.rb2501 | Vol: 1 | Price: 3293.00 | Comm: 0.33\n",
" 2024-12-05 14:45:00 | CLOSE_SHORT | SHFE.rb2501 | Vol: 1 | Price: 3283.00 | Comm: 0.33 | PnL: 10.00\n",
" 2024-12-18 14:45:00 | SELL | SHFE.rb2505 | Vol: 1 | Price: 3309.00 | Comm: 0.33\n",
" 2024-12-26 09:45:00 | CLOSE_SHORT | SHFE.rb2505 | Vol: 1 | Price: 3321.00 | Comm: 0.33 | PnL: -12.00\n",
" 2025-01-10 22:30:00 | BUY | SHFE.rb2505 | Vol: 1 | Price: 3238.00 | Comm: 0.32\n",
" 2025-01-21 21:30:00 | CLOSE_LONG | SHFE.rb2505 | Vol: 1 | Price: 3327.00 | Comm: 0.33 | PnL: 89.00\n",
" 2025-02-11 11:00:00 | SELL | SHFE.rb2505 | Vol: 1 | Price: 3285.00 | Comm: 0.33\n",
" 2025-02-17 21:00:00 | CLOSE_SHORT | SHFE.rb2505 | Vol: 1 | Price: 3289.00 | Comm: 0.33 | PnL: -4.00\n",
" 2025-02-18 13:45:00 | BUY | SHFE.rb2505 | Vol: 1 | Price: 3318.00 | Comm: 0.33\n",
" 2025-02-21 21:15:00 | CLOSE_LONG | SHFE.rb2505 | Vol: 1 | Price: 3346.00 | Comm: 0.33 | PnL: 28.00\n",
" 2025-02-25 09:45:00 | SELL | SHFE.rb2505 | Vol: 1 | Price: 3288.00 | Comm: 0.33\n",
" 2025-02-26 11:00:00 | CLOSE_SHORT | SHFE.rb2505 | Vol: 1 | Price: 3316.00 | Comm: 0.33 | PnL: -28.00\n",
" 2025-03-04 09:45:00 | SELL | SHFE.rb2505 | Vol: 1 | Price: 3263.00 | Comm: 0.33\n",
" 2025-03-04 13:30:00 | CLOSE_SHORT | SHFE.rb2505 | Vol: 1 | Price: 3273.00 | Comm: 0.33 | PnL: -10.00\n",
" 2025-04-21 09:15:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3109.00 | Comm: 0.31\n",
" 2025-04-22 10:30:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3098.00 | Comm: 0.31 | PnL: -11.00\n",
" 2025-04-23 14:00:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3126.00 | Comm: 0.31\n",
" 2025-04-24 13:45:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3105.00 | Comm: 0.31 | PnL: -21.00\n",
" 2025-04-25 21:15:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3143.00 | Comm: 0.31\n",
" 2025-04-28 10:45:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3125.00 | Comm: 0.31 | PnL: -18.00\n",
" 2025-05-08 13:45:00 | SELL | SHFE.rb2510 | Vol: 1 | Price: 3056.00 | Comm: 0.31\n",
" 2025-05-12 09:15:00 | CLOSE_SHORT | SHFE.rb2510 | Vol: 1 | Price: 3047.00 | Comm: 0.30 | PnL: 9.00\n",
" 2025-05-12 13:45:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3075.00 | Comm: 0.31\n",
" 2025-05-16 21:15:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3086.00 | Comm: 0.31 | PnL: 11.00\n",
" 2025-05-26 09:30:00 | SELL | SHFE.rb2510 | Vol: 1 | Price: 3016.00 | Comm: 0.30\n",
" 2025-06-04 14:15:00 | CLOSE_SHORT | SHFE.rb2510 | Vol: 1 | Price: 2972.00 | Comm: 0.30 | PnL: 44.00\n",
" 2025-06-26 22:30:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 2994.00 | Comm: 0.30\n",
" 2025-06-30 21:15:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 2987.00 | Comm: 0.30 | PnL: -7.00\n",
" 2025-07-01 22:45:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3013.00 | Comm: 0.30\n",
" 2025-07-02 09:00:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3013.00 | Comm: 0.30 | PnL: 0.00\n",
" 2025-07-02 14:15:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3051.00 | Comm: 0.31\n",
" 2025-07-15 13:30:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3108.00 | Comm: 0.31 | PnL: 57.00\n",
" 2025-07-18 21:15:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3179.00 | Comm: 0.32\n",
" 2025-07-28 09:00:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3248.00 | Comm: 0.32 | PnL: 69.00\n",
" 2025-07-29 11:15:00 | BUY | SHFE.rb2510 | Vol: 1 | Price: 3319.00 | Comm: 0.33\n",
" 2025-07-30 14:15:00 | CLOSE_LONG | SHFE.rb2510 | Vol: 1 | Price: 3294.00 | Comm: 0.33 | PnL: -25.00\n",
" 2025-07-30 21:15:00 | SELL | SHFE.rb2510 | Vol: 1 | Price: 3279.00 | Comm: 0.33\n",
" 2025-08-05 21:00:00 | CLOSE_SHORT | SHFE.rb2510 | Vol: 1 | Price: 3235.00 | Comm: 0.32 | PnL: 44.00\n",
" 2025-08-13 21:15:00 | SELL | SHFE.rb2510 | Vol: 1 | Price: 3210.00 | Comm: 0.32\n",
" 2025-08-22 21:30:00 | CLOSE_SHORT | SHFE.rb2510 | Vol: 1 | Price: 3144.00 | Comm: 0.31 | PnL: 66.00\n",
" 2025-09-05 14:00:00 | BUY | SHFE.rb2601 | Vol: 1 | Price: 3140.00 | Comm: 0.31\n",
" 2025-09-05 22:30:00 | CLOSE_LONG | SHFE.rb2601 | Vol: 1 | Price: 3121.00 | Comm: 0.31 | PnL: -19.00\n",
" 2025-09-09 21:30:00 | SELL | SHFE.rb2601 | Vol: 1 | Price: 3095.00 | Comm: 0.31\n",
" 2025-09-10 09:45:00 | CLOSE_SHORT | SHFE.rb2601 | Vol: 1 | Price: 3110.00 | Comm: 0.31 | PnL: -15.00\n",
" 2025-09-12 14:00:00 | BUY | SHFE.rb2601 | Vol: 1 | Price: 3114.00 | Comm: 0.31\n",
" 2025-09-12 14:15:00 | CLOSE_LONG | SHFE.rb2601 | Vol: 1 | Price: 3112.00 | Comm: 0.31 | PnL: -2.00\n",
" 2025-09-18 10:45:00 | SELL | SHFE.rb2601 | Vol: 1 | Price: 3135.00 | Comm: 0.31\n",
" 2025-09-18 21:15:00 | CLOSE_SHORT | SHFE.rb2601 | Vol: 1 | Price: 3153.00 | Comm: 0.32 | PnL: -18.00\n",
" 2025-09-26 21:00:00 | SELL | SHFE.rb2601 | Vol: 1 | Price: 3115.00 | Comm: 0.31\n",
" 2025-10-09 21:15:00 | CLOSE_SHORT | SHFE.rb2601 | Vol: 1 | Price: 3121.00 | Comm: 0.31 | PnL: -6.00\n",
" 2025-10-13 09:30:00 | SELL | SHFE.rb2601 | Vol: 1 | Price: 3078.00 | Comm: 0.31\n",
" 2025-10-13 09:30:00 | SELL | SHFE.rb2601 | Vol: 1 | Price: 3071.00 | Comm: 0.31\n",
" 2025-10-13 10:45:00 | CLOSE_SHORT | SHFE.rb2601 | Vol: 2 | Price: 3084.00 | Comm: 0.62 | PnL: -19.00\n",
" 2025-10-17 21:15:00 | BUY | SHFE.rb2601 | Vol: 1 | Price: 3074.00 | Comm: 0.31\n",
" 2025-10-17 22:30:00 | CLOSE_LONG | SHFE.rb2601 | Vol: 1 | Price: 3056.00 | Comm: 0.31 | PnL: -18.00\n",
" 2025-10-24 21:15:00 | BUY | SHFE.rb2601 | Vol: 1 | Price: 3075.00 | Comm: 0.31\n",
" 2025-10-30 13:45:00 | CLOSE_LONG | SHFE.rb2601 | Vol: 1 | Price: 3110.00 | Comm: 0.31 | PnL: 35.00\n",
" 2025-11-04 21:15:00 | SELL | SHFE.rb2601 | Vol: 1 | Price: 3033.00 | Comm: 0.30\n",
" 2025-11-10 14:15:00 | CLOSE_SHORT | SHFE.rb2601 | Vol: 1 | Price: 3047.00 | Comm: 0.30 | PnL: -14.00\n",
" 2025-11-17 09:15:00 | BUY | SHFE.rb2601 | Vol: 1 | Price: 3072.00 | Comm: 0.31\n",
" 2025-11-19 14:30:00 | CLOSE_LONG | SHFE.rb2601 | Vol: 1 | Price: 3081.00 | Comm: 0.31 | PnL: 9.00\n",
2025-11-07 16:37:16 +08:00
"正在计算绩效指标...\n",
"total_return: 0.005440807999999464, annualized_return:0.0025638938818390855, 252 / total_days:0.47191011235955055\n",
2025-11-07 16:37:16 +08:00
"绩效指标计算完成。\n",
"\n",
"--- 回测绩效报告 ---\n",
"初始资金 : 100000.00\n",
"最终资金 : 100544.08\n",
"总收益率 : 0.54%\n",
"年化收益率 : 0.26%\n",
"最大回撤 : 0.33%\n",
"夏普比率 : 0.22\n",
"卡玛比率 : 0.78\n",
"总交易次数 : 87\n",
"总实现盈亏 : 571.00\n",
"交易成本 : 28.23\n",
2025-11-07 16:37:16 +08:00
"\n",
"--- 交易详情 ---\n",
"盈利交易次数 : 17\n",
"亏损交易次数 : 25\n",
"胜率 : 40.48%\n",
"盈亏比 : 3.23\n",
"平均每次盈利 : 61.59\n",
"平均每次亏损 : -19.04\n",
2025-11-07 16:37:16 +08:00
"正在绘制绩效图表...\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 1400x1000 with 2 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAABWgAAAPdCAYAAAAXpIG4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3QecE3X6x/En2d5AutgLCjYQC8qBXVFO9AAFFUVPPcU77AVF7L3fWRBB0TvL2VFPRTx7/YsKCipFQD1QQVgQ2F7zfz0TZjNJJtmUSf+8X6997aZsMpnMTDLfeeb5uTwej0cAAAAAAAAAAEnnTv5TAgAAAAAAAAAUAS0AAAAAAAAApAgBLQAAAAAAAACkCAEtAAAAAAAAAKQIAS0AAAAAAAAApAgBLQAAAAAAAACkCAEtAAAAAAAAAKQIAS0AAAAAAAAApAgBLQAAWcTj8aR6EsD7AABp+5mUjtMEAEA+swAAgNjMnj1bTj31VNvbCgoKpKysTLbffns56qijZMyYMVJYWJiwWd3Q0CAPP/yw5OfnyznnnON32y+//CI33nijfPnll9LU1CS77rqrPP3001E/R+/evY3f3333nfE86tBDDzUe/7///a9su+224qSff/5ZDjvssIjvf+utt8rIkSMlWcaOHSuff/65PPbYY/KHP/yh3fch03366ady+umny4ABA+SJJ56IeP4E0vWgoqJCdtxxRznyyCNl9OjRCV03kuGkk06SuXPnyuOPPy777befZJOamhqZOXOmvP766/LTTz9JZWWlsW3bZZdd5JhjjpHhw4dLXl6eZLPW1lb585//LEVFRcb6bUe3ryeffLLx98SJE437h2K33Yx1W5qu78/GjRvlvvvuk912201GjBgh6aClpUWeeeYZ+fHHH+Wqq66K6TF+/fVX+eMf/yiTJk2SUaNGOT6NAIDcRUALAECcSktLg4JE3RHUHdQvvvhCvvrqK3nrrbfkn//8pxHcJoKGBvfff79tKDhhwgQjPNhyyy1ljz32MELjTKNBQ3u22WYbSbVw70Ou6t+/v2y11VZtl/UggYZI8+fPNwLcf//730bI3aNHj5ROJ4LpduPSSy+VlStXGqH6zjvvbGxD9LIeoPq///s/efHFF43lXkPBbDV9+nQjgNcQNBSdD0oPNjz77LNhA9pceH/0gNmMGTPkpptuknTx6quvyg033BDR50koW2yxhZx11lly8803y/777y9bb721o9MIAMhdBLQAAMSpU6dOctddd4WsAtXqWd2RfuqppxK20x7ulM158+YZv7W6zxqUOUFDZw3cdKc1kULN31S6/fbbpa6uzu+1c+psMK2QtatsXrNmjVx55ZXy4Ycfyl/+8hcjSMr0StpsooHkaaedZlSPXnjhhcbZAtaQb9myZXLJJZfInDlzZNy4cUZVtcvlkmyjVa0PPPCAUSUdqrJVq1hnzZolO+ywg1EZrgfkNCBNZDV1ur8/6bgt1HnlhDPOOMM4C+W6664zwnsAAJxAD1oAABJIA1ENn5SeupoKGqCqzTff3PHH1qpVDSQSVRmczjSY1ddeUlKS6knJSN26dTOqjbXq7/vvv4+p7QYSo7a21qjMbG5uNkKov/71r0EVmLrsP/LII7LZZpsZZwq8/fbbWfl26Gn6ug3VUC6UN954w5hngwYNMk5/V3oqfaLw/qSWbvO1hcvHH39stH4BAMAJBLQAACSYWXW1du3aoDYIWlV73HHHyZ577mn86N9PPvmkEYxYaTWW9oDV0yq1Ekp7nvbr18+ozj344IONCi/10EMPGffT4Et3IM2+sUp7Aeplreo1afuFc889VwYOHCi77767HHLIIXLttdcap8hGQvsm6mP+73//87v+999/lzvvvNPoMaqPq31LzzzzTPnggw8kWTRU0VN7jz76aOnbt6/RhmLKlClSVVVlTLNWxAXOX+t17b1Oc/6aO+h6H7v34dFHHzX+1mo2O19//bVxuz5ee3S5eP75543KOa3O0/dU563+r93p1zpN++yzjzQ2NhrTMmTIEOP9OOigg4xTj/V9CqT3nTZtmhE06TJ2+OGHG5d1eXVacXFx23zRVgdWOk/+9Kc/GW0QtI+znrqt0699NtWGDRuM16TVuXvvvbfxugYPHiznn3++0T7BpOuYPtY111wT9Px6qrLeptXQgU488UTjNu05afr222/lb3/7m7G+aOsG/X8Nl0OJdB2/4447jOeaOnVq0GPo+6C36eMEOvDAA43H1N7Hul7r/XT6Vq9ebfRB1fmh803XAV0OI30P9WCSVo5qv2qtgA6la9euRnCp80OryUOtG1Z62rvepgFwJNs3nV+hHkvpcqy3B/ZF1r6sOh26bOhj6bJkVvxHatWqVcZp8Rq89uzZs932Brqc6jpXXl5uVNEGbvOdEu/7E8/nzw8//GCsY7r90e2qrn/m6zfpfV966SXjb+31qpf1fVdXXHGFcVnX6/POO894DG0VoO+NSauRzz77bGO+63qt76G+Tp1euypY3Wbp/+u06Hqpr1crirU636TLgq4TSt9TnQadFut2ePz48cb7Z92W6PV2dF5pb99QPYkBAIgWLQ4AAEgwM8CxngqvgYrugH722WdGZZru7Orpp7ojrAN6vfPOO0ZYE3jKt+5wakiooZzeXx9Tdya116A+j1Yj6o6n/uhAVdrXU3dG1bBhw4z/0Z65SisWtR+f7vBqgKEVtosWLTIqv3QHWXc8dec5WitWrJBTTjnFCDf0+XWHV4NAnUatONJqPD0lN5E0hNFAWOdnx44djSBL+57+4x//kAULFiTkOTXItHsfNFy45557jArD6upqI7yxMoMM3eFv75RhDTTeffdd4zXpe6aDFi1dutQIO/RHA6HAgev0/dVTnPV2DS+08lGXOw209PRnDXzNQd90vmnoqLdrZaTOt3Xr1hnTr/+XCBrG6evQ4FWXGWult74eXV50OdfARENIPeCh12uAunz5cqNKXQMenXYdwO7NN9805pEu3xpO6gEMXc4DAz69v7YeUYGDmWn4qyFvnz592tZbPbigBzM0DNIwS5dtnX8a6ge+p9Gu4zqNeqq0TqO+VyYNWvVUdaX/Zw5CpXRd/e2334wDDzr/rK0jjj/+eCOQM8NbrXDVEFpDvauvvrrd90QrQs1wuL3T4nV6rdMcD7vtmx6E0GBcD0CYg/FZQ0bdVunyqyG0ScN47QOrBwB0G6b9WfW90r6o+hx6ACWSdhqvvPKK8RzhBivUAae03YCeTaDruk730KFDjfXqhRdecGzeOPn+xPr5o9saHRhLlzfdlqxfv944yKetSnSdMauMtcerBpv6WaDLoPZpDewRrsuhblsOOOAA43HNg4kauOu2SatU99prL2Pd0mVCW/Xoj67zZtBqtpfQ59Xn0+2iGUbrOq2vR5cFXW902dF1XqdXtxk6/fqjdD7omS76Xutz6meqTrtuS3Re6AEqDYsDw29dtnSd1YM4iW7zAwDIAR4AABCTzz77zLPzzjt7DjnkkJD3WbhwoWffffc17vfCCy+0XX/rrbca140aNcqzdu3atusrKys9xx13nHGb3ifwufTn4Ycfbru+paXF+H3fffcZt91zzz1B02D+X1NTk9909enTx9O3b1/Phx9+6Pd4999/v3H/Aw880FNXVxf2cfS163U//fSTcbm1tdUzYsQI47qrr77a09jY2HbfefPmeQYMGGDc9s4777Q7f1esWNH2nNGaOnWq8X86Lb///nvb9W+++aZnl112MW478cQTg+av9TqrwNepTjnlFOO6Tz75pO26UO/D+PHjjeuff/55v+sbGhqM5aN///6e2trasK9Jp10f4/jjj/dUV1fbvt4jjjjCdroHDRrkWbRoUdv1P//8c9t78d5777VdP3369LblcsOGDW3Xv//++57ddtvNuE1fdyTM+fPiiy+2e98//vGPxn0//fTTtuvM937cuHHGcmVd3m+88UbjthtuuKHtNlVfX+/561//atw2adKktuuPPvpo4zpdpkxffPGFcZ0uD/pTVVXVdtvrr79u3Pb3v//duKzzW+dh7969Pa+
2025-11-07 16:37:16 +08:00
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
},
{
"data": {
"text/plain": [
"<Figure size 1400x700 with 1 Axes>"
],
"image/png": "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
2025-11-07 16:37:16 +08:00
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"图表绘制完成。\n",
"{'初始资金': 100000.0, '最终资金': np.float64(100544.08079999995), '总收益率': np.float64(0.005440807999999464), '年化收益率': np.float64(0.0025638938818390855), '最大回撤': np.float64(0.0033025608648247773), '夏普比率': np.float64(0.21938583397711986), '卡玛比率': np.float64(0.7763350886722014), '总交易次数': 87, '交易成本': 28.227300000000003, '总实现盈亏': 571.0, '胜率': 0.40476190476190477, '盈亏比': 3.2346762234305486, '盈利交易次数': 17, '亏损交易次数': 25, '平均每次盈利': 61.588235294117645, '平均每次亏损': -19.04, 'initial_capital': 100000.0, 'final_capital': np.float64(100544.08079999995), 'total_return': np.float64(0.005440807999999464), 'annualized_return': np.float64(0.0025638938818390855), 'max_drawdown': np.float64(0.0033025608648247773), 'sharpe_ratio': np.float64(0.21938583397711986), 'calmar_ratio': np.float64(0.7763350886722014), 'sortino_ratio': np.float64(0.16632916898352068), 'total_trades': 87, 'transaction_costs': 28.227300000000003, 'total_realized_pnl': 571.0, 'win_rate': 0.40476190476190477, 'profit_loss_ratio': 3.2346762234305486, 'winning_trades_count': 17, 'losing_trades_count': 25, 'avg_profit_per_trade': 61.588235294117645, 'avg_loss_per_trade': -19.04}\n",
"将进行 43 组开仓-平仓配对分析\n",
"指标 'rsi_5' 没有有效数据,跳过绘图。\n",
"指标 'rsi_7' 没有有效数据,跳过绘图。\n",
"指标 'rsi_10' 没有有效数据,跳过绘图。\n",
"指标 'rsi_14' 没有有效数据,跳过绘图。\n",
"指标 'rsi_15' 没有有效数据,跳过绘图。\n",
"指标 'rsi_20' 没有有效数据,跳过绘图。\n",
"指标 'rsi_25' 没有有效数据,跳过绘图。\n",
"指标 'rsi_30' 没有有效数据,跳过绘图。\n",
"指标 'rsi_35' 没有有效数据,跳过绘图。\n",
"指标 'rsi_40' 没有有效数据,跳过绘图。\n",
"指标 'range_0' 没有有效数据,跳过绘图。\n",
"指标 'range_1' 没有有效数据,跳过绘图。\n",
"指标 'range_6' 没有有效数据,跳过绘图。\n",
"指标 'range_13' 没有有效数据,跳过绘图。\n",
"指标 'range_20' 没有有效数据,跳过绘图。\n",
"指标 'stoch_k_14_3' 没有有效数据,跳过绘图。\n",
"指标 'stoch_k_5_3' 没有有效数据,跳过绘图。\n",
"指标 'stoch_k_21_5' 没有有效数据,跳过绘图。\n",
"指标 'roc_5' 没有有效数据,跳过绘图。\n",
"指标 'roc_10' 没有有效数据,跳过绘图。\n",
"指标 'roc_15' 没有有效数据,跳过绘图。\n",
"指标 'roc_20' 没有有效数据,跳过绘图。\n",
"指标 'roc_ma_5_5' 没有有效数据,跳过绘图。\n",
"指标 'roc_ma_5_10' 没有有效数据,跳过绘图。\n",
"指标 'roc_ma_10_10' 没有有效数据,跳过绘图。\n",
"指标 'roc_ma_10_20' 没有有效数据,跳过绘图。\n",
"指标 'roc_ma_20_20' 没有有效数据,跳过绘图。\n",
"指标 'roc_ma_20_40' 没有有效数据,跳过绘图。\n",
"指标 'natr_5' 没有有效数据,跳过绘图。\n",
"指标 'natr_14' 没有有效数据,跳过绘图。\n",
"指标 'natr_21' 没有有效数据,跳过绘图。\n",
"指标 'adx_7' 没有有效数据,跳过绘图。\n",
"指标 'adx_14' 没有有效数据,跳过绘图。\n",
"指标 'adx_30' 没有有效数据,跳过绘图。\n",
"指标 'adx_60' 没有有效数据,跳过绘图。\n",
"指标 'adx_120' 没有有效数据,跳过绘图。\n",
"指标 'adx_240' 没有有效数据,跳过绘图。\n",
"指标 'bbw_10_15' 没有有效数据,跳过绘图。\n",
"指标 'bbw_20_20' 没有有效数据,跳过绘图。\n",
"指标 'bbw_50_25' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n3_atr5' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n3_atr14' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n3_atr21' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n7_atr5' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n7_atr14' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n7_atr21' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n21_atr5' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n21_atr14' 没有有效数据,跳过绘图。\n",
"指标 'price_range_to_vol_ratio_n21_atr21' 没有有效数据,跳过绘图。\n",
"指标 'conviction_n3_idx1' 没有有效数据,跳过绘图。\n",
"指标 'z_atr_7_100' 没有有效数据,跳过绘图。\n",
"指标 'z_atr_14_100' 没有有效数据,跳过绘图。\n",
"指标 'fft_trend_46_2' 没有有效数据,跳过绘图。\n",
"指标 'fft_trend_46_1' 没有有效数据,跳过绘图。\n",
"指标 'atr_volume_7' 没有有效数据,跳过绘图。\n",
"指标 'atr_volume_14' 没有有效数据,跳过绘图。\n",
"指标 'atr_volume_21' 没有有效数据,跳过绘图。\n",
"指标 'atr_volume_230' 没有有效数据,跳过绘图。\n",
"指标 'fft_phase_46_0.5' 没有有效数据,跳过绘图。\n",
"指标 'vol_skew_20_60' 没有有效数据,跳过绘图。\n",
"指标 'vol_trend_rel_20_3' 没有有效数据,跳过绘图。\n",
2025-11-07 16:37:16 +08:00
"\n",
"所有指标分析完成。\n"
2025-11-07 16:37:16 +08:00
]
}
],
"execution_count": 5
}
],
"metadata": {
"kernelspec": {
"display_name": "quant",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}