1、新增SMCPureH1LongStrategy策略

2、修复实盘bug
This commit is contained in:
2025-07-28 14:36:58 +08:00
parent 2fa952a3da
commit 52c5ec18d8
12 changed files with 982 additions and 852 deletions

View File

@@ -6,8 +6,8 @@
"id": "initial_id",
"metadata": {
"ExecuteTime": {
"end_time": "2025-07-12T14:39:30.843472Z",
"start_time": "2025-07-12T14:39:30.823755Z"
"end_time": "2025-07-22T07:44:51.375234Z",
"start_time": "2025-07-22T07:44:51.352161Z"
},
"collapsed": true
},
@@ -20,54 +20,44 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 2,
"id": "a559dfcf",
"metadata": {
"ExecuteTime": {
"end_time": "2025-07-12T14:39:35.610573Z",
"start_time": "2025-07-12T14:39:30.855663Z"
"end_time": "2025-07-22T07:44:56.927700Z",
"start_time": "2025-07-22T07:44:51.391111Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"初始化数据管理器...\n",
"数据加载成功: /mnt/d/PyProject/NewQuant/data/data/KQ_m@CZCE_MA/KQ_m@CZCE_MA_min60.csv\n",
"数据范围从 2021-12-31 14:00:00 到 2025-07-10 09:00:00\n",
"总计 5904 条记录。\n",
"\n",
"初始化回测引擎...\n",
"模拟器初始化:初始资金=100000.00, 滑点率=0.0, 佣金率=0.0001\n",
"\n",
"--- 回测引擎初始化完成 ---\n",
" 策略: SimpleLimitBuyStrategyShort\n",
" 初始资金: 100000.00\n",
" 换月模式: 启用\n",
"\n",
"开始运行回测...\n",
"\n",
"--- 回测开始 ---\n",
"SimpleLimitBuyStrategyShort 策略初始化回调被调用。\n",
"开始将 DataFrame 转换为 Bar 对象流...\n"
"ename": "ModuleNotFoundError",
"evalue": "No module named 'src'",
"output_type": "error",
"traceback": [
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
"\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)",
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mturtle\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m down\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01msrc\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01manalysis\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mresult_analyzer\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m ResultAnalyzer\n\u001b[32m 3\u001b[39m \u001b[38;5;66;03m# 导入所有必要的模块\u001b[39;00m\n\u001b[32m 4\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01msrc\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mdata_manager\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m DataManager\n",
"\u001b[31mModuleNotFoundError\u001b[39m: No module named 'src'"
]
}
],
"source": [
"\n",
"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 RSI, HistoricalRange, StochasticOscillator\n",
"from src.indicators.indicators import RSI, BollingerBandwidth, HistoricalRange, NormalizedATR, RateOfChange, StochasticOscillator\n",
"from src.strategies.OpenTwoFactorStrategy import SimpleLimitBuyStrategyLong, SimpleLimitBuyStrategyShort, SimpleLimitBuyStrategy\n",
"\n",
"\n",
"# --- 配置参数 ---\n",
"# 获取当前脚本所在目录,假设数据文件在项目根目录下的 data 文件夹内\n",
"# data_file_path = '/mnt/d/PyProject/NewQuant/data/data/SHFE_rb2510/SHFE_rb2510_min60.csv'\n",
"# data_file_path = \"/mnt/d/PyProject/NewQuant/data/data/KQ_m@CZCE_MA/KQ_m@CZCE_MA_min60.csv\"\n",
"# data_file_path = \"/mnt/d/PyProject/NewQuant/data/data/KQ_m@SHFE_rb/KQ_m@SHFE_rb_min60.csv\"\n",
"data_file_path = \"/mnt/d/PyProject/NewQuant/data/data/KQ_m@CZCE_MA/KQ_m@CZCE_MA_min60.csv\"\n",
"\n",
"initial_capital = 100000.0\n",
@@ -78,31 +68,33 @@
" 'symbol': 'KQ_m@CZCE_MA',\n",
"}\n",
"\n",
"# Short 可用\n",
"strategy_parameters = {\n",
" # 'symbol': \"SHFE_rb2501\", # 根据您的数据文件中的品种名称调整\n",
" 'main_symbol': \"MA\", # 根据您的数据文件中的品种名称调整\n",
" 'trade_volume': 1,\n",
" 'lag': 7,\n",
" # 'range_factor': 1.8, # 示例值,需要通过网格搜索优化\n",
" # 'profit_factor': 2.3, # 示例值\n",
" 'range_factor': 1.6, # 示例值,需要通过网格搜索优化\n",
" 'profit_factor': 2.1, # 示例值\n",
" # 'range_factor_l': 1.8, # 示例值,需要通过网格搜索优化\n",
" # 'profit_factor_l': 2.8, # 示例值\n",
" # 'range_factor_s': 1.6, # 示例值,需要通过网格搜索优化\n",
" # 'profit_factor_s': 2.1, # 示例值\n",
" # 'profit_factor': 2.8, # 示例值\n",
" # 'range_factor': 1.6, # 示例值,需要通过网格搜索优化\n",
" # 'profit_factor': 2.1, # 示例值\n",
" 'range_factor_l': 1.8, # 示例值,需要通过网格搜索优化\n",
" 'profit_factor_l': 2.8, # 示例值\n",
" 'range_factor_s': 1.6, # 示例值,需要通过网格搜索优化\n",
" 'profit_factor_s': 2.1, # 示例值\n",
" 'max_position': 10,\n",
" 'enable_log': False,\n",
" 'stop_loss_points': 15,\n",
" 'enable_log': True,\n",
" 'stop_loss_points': 20,\n",
" 'use_indicator': True,\n",
" # 'indicator': HistoricalRange(shift_window=20, down_bound=10, up_bound=24),\n",
" 'indicator': RSI(5, 15, 60),\n",
" # 'indicator_l': HistoricalRange(21, 10, 25),\n",
" # 'indicator_s': RSI(5, 20, 60),\n",
" # 'indicator': HistoricalRange(11, 25, 20),\n",
" # 'indicator': BollingerBandwidth(window=20, nbdev=2.0, down_bound=1.9, up_bound=3.25),\n",
" 'indicator_l': HistoricalRange(11, 25, 20),\n",
" 'indicator_s': BollingerBandwidth(window=20, nbdev=2.0, down_bound=1.9, up_bound=3.25),\n",
"}\n",
"start_time = datetime(2022, 1, 1)\n",
"start_time = datetime(2021, 1, 1)\n",
"end_time = datetime(2024, 6, 1)\n",
"\n",
"# start_time = datetime(2024, 6, 1)\n",
"# end_time = datetime(2025, 6, 1)\n",
"start_time = datetime(2024, 6, 1)\n",
"end_time = datetime(2025, 8, 1)\n",
"\n",
"\n",
"# --- 1. 初始化数据管理器 ---\n",
@@ -115,7 +107,7 @@
"print(\"\\n初始化回测引擎...\")\n",
"engine = BacktestEngine(\n",
" data_manager=data_manager,\n",
" strategy_class=SimpleLimitBuyStrategyShort,\n",
" strategy_class=SimpleLimitBuyStrategy,\n",
" # current_segment_symbol=strategy_parameters['symbol'],\n",
" strategy_params=strategy_parameters,\n",
" initial_capital=initial_capital,\n",