模拟股票ETF交易,程序报错“ tbpy订阅Tick失败: 159915,510500,510210,,162411 订阅深度行情失败”,不知道是哪方面的原因
策略初始化完成,交易标的: ['510210.XSHG']
================================================================================
on_init: 策略初始化开始
================================================================================
成功加载关联规则,共 6 条
订阅Tick失败: 510210.XSHG 订阅深度行情失败
这个后缀难道不对吗?,在哪里查正确的
ETF代码后缀那里可以查到
就卡在这里啦,哎
我加上了后缀,根据代码前缀判断交易所,是这样吗:
- 5xxxx → 上海 (.XSHG)
- 1xxxx → 深圳 (.XSHE)
运行后显示
策略初始化完成,交易标的: ['510210.XSHG']
================================================================================
on_init: 策略初始化开始
================================================================================
成功加载关联规则,共 6 条
订阅Tick失败: 510210.XSHG 订阅深度行情失败
就是订阅行情失败,不知道啥原因
订阅账户已经在tbquant中登录,显示服务中
TB里对标的symbol的命名规则是合约名.交易所后缀
比如螺纹2610合约是rb2610.SHFE
之前是完全没了解过TB吗
# 订阅所有ETF标的的日线数据(用于计算因子特征)
ret = context.subscribe_bar(symbol=SYMBOL_CODES, frequency='1d', sliding_window=20)
if ret is not None:
print(f"订阅Bar失败: {ret}")
tbpy.exit()
return
程序代码如下:
# 从ETFpool.csv读取交易标的
ETFpool_path = 'ETFpool.csv'
SYMBOLS = {}
SYMBOL_CODES = []
if os.path.exists(ETFpool_path):
etf_df = pd.read_csv(ETFpool_path)
for _, row in etf_df.iterrows():
code = str(row['代码'])
name = row['基金名称']
SYMBOLS[code] = name # 使用原始代码作为字典键
SYMBOL_CODES.append(code)
print(f"从ETFpool.csv读取了 {len(SYMBOLS)} 个交易标的")
print(f"标的列表: {SYMBOL_CODES}")
else:
SYMBOLS = {'510210': '上证指数ETF'}
SYMBOL_CODES = ['510210']
print("ETFpool.csv不存在,使用默认标的")