问答交流

【模拟交易信号问题】实盘模拟信号建议以最近交易日生成,而不是昨天

由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'

\

标签

模拟交易策略优化
评论
  • 补充说明,如果新建策略,好像会自动回溯最近的一个交易日生成信号。不会报错。
{link}