【模拟交易信号问题】实盘模拟信号建议以最近交易日生成,而不是昨天
由bqv93dy2创建,最终由bqv93dy2 被浏览 5 用户
设置每天早上5点钟运行模拟策略,在每次放假后的第一天 提示运行失败。
例如11月10号周一今天的报错。提示,ERROR: null sessions by start_date=2025-11-09, end_date=2025-11-09。就是说他以昨天周末设置起停时间。导致运行失败。
如果引用的数据源周末有调整,可能与实际结果不同。
建议修正模拟结果,以最近一个交易日作为启停时间,我记得平台函数有一个获取最近交易日的API。
下面代码检验,这段不报错
performance = bigtrader.run(
market=bigtrader.Market.CN_STOCK,
frequency=bigtrader.Frequency.DAILY,
start_date="2025-11-07",
end_date="2025-11-07",
capital_base=20000,
initialize=initialize,
handle_data= handle_data
)
performance.render()
这段报错
performance = bigtrader.run(
market=bigtrader.Market.CN_STOCK,
frequency=bigtrader.Frequency.DAILY,
start_date="2025-11-09",
end_date="2025-11-09",
capital_base=20000,
initialize=initialize,
handle_data= handle_data
)
performance.render()
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/pandas/core/indexes/base.py:3805, in Index.get_loc(self, key)
3804 try:
-> 3805 return self._engine.get_loc(casted_key)
3806 except KeyError as err:
File index.pyx:167, in pandas._libs.index.IndexEngine.get_loc()
File index.pyx:196, in pandas._libs.index.IndexEngine.get_loc()
File pandas/_libs/hashtable_class_helper.pxi:7081, in pandas._libs.hashtable.PyObjectHashTable.get_item()
File pandas/_libs/hashtable_class_helper.pxi:7089, in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'starting_cash'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
Cell In[6], line 75
72 weight = row["weight"]
73 context.order_target_percent(instrument, weight)
---> 75 performance = bigtrader.run(
76 market=bigtrader.Market.CN_STOCK,
77 frequency=bigtrader.Frequency.DAILY,
78 start_date="2025-11-09",
79 end_date="2025-11-09",
80 capital_base=20000,
81 initialize=initialize,
82 handle_data= handle_data
83 )
84 performance.render()
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/bigtrader/_v2/corerunners.py:203, in wrapper(*args, **kwargs)
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/bigtrader/_v2/core.py:100, in run(market, frequency, instruments, start_date, end_date, data, capital_base, initialize, before_trading_start, handle_data, handle_trade, handle_order, handle_tick, handle_l2order, handle_l2trade, after_trading, benchmark, options_data, before_start_days, volume_limit, order_price_field_buy, order_price_field_sell, user_data, engine, logger, account_type, backtest_only, _runner)
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/bigtrader/_v2/corerunners.py:344, in run(self)
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/bigtrader/_v2/engines/bigtradercpp.py:423, in run(p)
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/bigtrader/_v2/engines/bigtradercpp.py:174, in run(self)
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/bigtrader/_v2/engines/bigtradercpp.py:279, in _run(self)
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/pandas/core/frame.py:4090, in DataFrame.__getitem__(self, key)
4088 if self.columns.nlevels > 1:
4089 return self._getitem_multilevel(key)
-> 4090 indexer = self.columns.get_loc(key)
4091 if is_integer(indexer):
4092 indexer = [indexer]
File /opt/pyenv/versions/3.11.8/lib/python3.11/site-packages/pandas/core/indexes/base.py:3812, in Index.get_loc(self, key)
3807 if isinstance(casted_key, slice) or (
3808 isinstance(casted_key, abc.Iterable)
3809 and any(isinstance(x, slice) for x in casted_key)
3810 ):
3811 raise InvalidIndexError(key)
-> 3812 raise KeyError(key) from err
3813 except TypeError:
3814 # If we have a listlike key, _check_indexing_error will raise
3815 # InvalidIndexError. Otherwise we fall through and re-raise
3816 # the TypeError.
3817 self._check_indexing_error(key)
KeyError: 'starting_cash'
\