问题描述
解决方案
在PTrade中,使用一键新股申购功能时,可以通过 ipo_stocks_order 函数的 black_stocks 参数来排除特定的股票。
核心方法
调用 ipo_stocks_order 函数时,将不需要申购的股票代码赋值给 black_stocks 参数。
- 参数说明:
black_stocks - 数据类型:字符串(单个股票)或 列表(多个股票)。
- 代码格式:支持6位数字代码(如
'787001')或带后缀的代码(如'787001.SS')。
策略代码示例
以下是一个完整的策略示例,展示了如何在每日交易中执行一键申购,同时排除指定的股票代码。
def initialize(context):
# 初始化策略,设置一个默认股票池(打新策略对此依赖不大,但需符合框架规范)
g.security = '600570.SS'
set_universe(g.security)
# 定义一个全局变量,用于控制当天是否已经执行过申购
g.has_ipo_ordered = False
def before_trading_start(context, data):
# 每天盘前重置申购状态,确保每天都会尝试申购
g.has_ipo_ordered = False
def handle_data(context, data):
# 如果当天还没有执行过申购
if not g.has_ipo_ordered:
# 定义黑名单列表(不想申购的股票代码)
# 支持6位代码,也支持带后缀的代码
# 假设我们要排除一只科创板股票和一只创业板股票
exclude_list = ['787001', '300001.SZ']
# 执行一键申购
# market_type=None 表示申购所有市场的新股
# black_stocks=exclude_list 表示排除列表中的股票
ipo_result = ipo_stocks_order(market_type=None, black_stocks=exclude_list)
# 打印日志方便查看
log.info("执行一键新股申购")
log.info("排除的股票列表: %s" % exclude_list)
log.info("申购结果: %s" % ipo_result)
# 将标志位设为True,防止在同一天内重复调用
g.has_ipo_ordered = True
详细参数说明
ipo_stocks_order(market_type=None, black_stocks=None)
-
market_type (可选):
- 如果不传或传
None,默认申购所有板块的新股。 - 如果只想申购特定板块,可以传入整数:
0:上证普通代码1:上证科创板代码2:深证普通代码3:深证创业板代码4:可转债代码
- 如果不传或传
-
black_stocks (可选):
- 这是实现你需求的关键参数。
- 传入单个股票字符串:
black_stocks='787001' - 传入股票列表:
black_stocks=['787001', '300015.SZ'] - 被列入此参数的股票将不会被申购。
注意事项
- 运行环境:
ipo_stocks_order函数仅在交易模块(实盘/模拟盘)可用,在回测模块中无法使用。 - 执行频率:建议配合标志位(如示例中的
g.has_ipo_ordered)使用,确保每天只调用一次,避免重复发送请求。 - 代码格式:虽然支持不带后缀的6位代码,但为了避免跨市场代码冲突(极少见但理论存在),建议尽量使用带后缀的标准格式(如
.SS,.SZ)。
Q&A
Q: 如果我想只申购科创板的新股,同时排除某一只特定的科创板股票,该怎么写?
A: 你需要同时指定 market_type 和 black_stocks。代码如下:
ipo_stocks_order(market_type=1, black_stocks=['787xxx.SS'])
其中 market_type=1 代表仅申购上证科创板。
Q: black_stocks 参数可以排除可转债吗?
A: 可以。如果你在进行可转债申购(market_type=4 或默认全部申购)时,可以将不想申购的可转债代码放入 black_stocks 列表中。
Q: 如果我不设置 black_stocks,会发生什么?
A: 如果不设置该参数(默认为 None),系统将按照 market_type 指定的范围,自动申购当日所有可申购的新股或可转债。