3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
是的,ptrade 交易系统完全支持查询新股和可转债的中签信息。
在 ptrade 交易环境中,您可以通过调用内置的 get_lucky_info 接口,获取指定时间范围内的历史中签数据(包括新股与新债)。
get_lucky_info用于获取指定时间范围内的中签信息。为了减小对柜台的压力,该函数在股票交易模块中同一分钟内多次调用时,会返回当前分钟首次查询的缓存数据。
jz_ufx 柜台的环境暂不支持该函数。get_lucky_info(start_date, end_date)
str):开始日期,格式为 "YYYYmmdd",例如 "20220928"。str):结束日期,格式为 "YYYYmmdd",例如 "20220929"。正常返回一个列表套字典的数据结构。若无中签信息或异常则返回空列表 []。
返回数据示例如下:
[
{
'stock_code': '371002.SZ', # 证券代码
'occur_amount': 10.0, # 中签数量(发生数量)
'business_price': 100.0, # 成交价格(发行价/面值)
'stock_name': '高新发债', # 证券名称
'init_date': 20220928 # 交易日期
}
]
以下是一个实用的 ptrade 策略源码。该策略在每天盘前(before_trading_start)自动获取上一交易日至今日的中签信息,并在盘中实时监控,一旦中签标的上市交易,则自动执行卖出套利。
# -*- coding: utf-8 -*-
def initialize(context):
# 初始化策略,设置一个默认股票池
g.security = '600570.SS'
set_universe(g.security)
# 存储中签标的信息的全局字典
g.lucky_stocks = {}
g.checked_today = False
def before_trading_start(context, data):
g.checked_today = False
g.lucky_stocks.clear()
# 1. 获取上一交易日和今天的日期
pre_date = str(get_trading_day(-1)).replace("-", "")
current_date = context.blotter.current_dt.strftime("%Y%m%d")
log.info("正在查询 %s 至 %s 的中签信息..." % (pre_date, current_date))
try:
# 2. 调用 ptrade API 获取中签信息
lucky_info = get_lucky_info(pre_date, current_date)
if lucky_info:
log.info("发现中签信息:%s" % str(lucky_info))
for item in lucky_info:
code = item['stock_code']
name = item['stock_name']
amount = item['occur_amount']
# 记录中签代码与数量
g.lucky_stocks[code] = {
'name': name,
'amount': amount
}
else:
log.info("该时间段内无中签信息。")
except Exception as e:
log.error("获取中签信息失败,错误: %s" % str(e))
def handle_data(context, data):
# 限制每日只在开盘初期执行一次上市状态检查与卖出委托
if g.checked_today:
return
if not g.lucky_stocks:
g.checked_today = True
return
# 遍历中签标的,检查是否已上市并有持仓,若有则直接市价卖出
for code, info in list(g.lucky_stocks.items()):
# 获取当前标的持仓
pos = get_position(code)
# 如果账户中已有该中签标的的可用持仓,说明已上市到账,执行卖出
if pos and pos.enable_amount > 0:
log.info("检测到中签标的 %s (%s) 已上市到账,可用持仓: %s,准备卖出!" % (code, info['name'], pos.enable_amount))
# 使用最优五档即时成交剩余撤销(market_type=4)快速市价卖出
order_market(code, -pos.enable_amount, market_type=4)
# 移除已处理的标的
del g.lucky_stocks[code]
g.checked_today = True