本方案由 EasyQuant AI量化助手 提供。
问题背景
实盘策略中,股票触及涨跌停后,普通买卖逻辑可能无法正常成交。若不提前判断涨跌停状态,容易出现买入失败、卖出失败或重复委托。
PTrade 提供 check_limit() 接口,可快速获取股票当前的涨跌停状态。
状态说明
-
2:触板涨停,已到涨停价但仍有卖盘。 -
1:涨停。 -
0:未涨停、未跌停。 -
-1:跌停。 -
-2:触板跌停,已到跌停价但仍有买盘。
完整代码示例
def initialize(context):
g.stocks = [
"510300.SS",
"600519.SS",
"000001.SZ"
]
set_universe(g.stocks)
def handle_data(context, data):
# 批量查询涨跌停状态
limit_status = check_limit(g.stocks)
if not limit_status:
log.info("未获取到涨跌停状态")
return
for stock in g.stocks:
status = limit_status.get(stock, 0)
if status == 1:
log.info("%s 当前涨停,不追涨买入" % stock)
elif status == 2:
log.info("%s 当前触板涨停,存在开板风险" % stock)
elif status == -1:
log.info("%s 当前跌停,卖出可能无法成交" % stock)
elif status == -2:
log.info("%s 当前触板跌停,关注买盘变化" % stock)
else:
log.info("%s 当前未触及涨跌停" % stock)
def can_buy(stock):
"""
涨停或触板涨停时不买入。
"""
status = check_limit(stock).get(stock, 0)
return status not in [1, 2]
def can_sell(stock):
"""
跌停或触板跌停时不卖出。
"""
status = check_limit(stock).get(stock, 0)
return status not in [-1, -2]
def trade_example(context, data):
stock = "510300.SS"
# 买入前检查涨停状态
if can_buy(stock):
order(stock, 100)
log.info("提交买入委托:%s" % stock)
else:
log.info("涨停状态,不提交买入委托")
注意事项
-
check_limit()仅支持 PTrade 交易模块。 -
触板状态不等于一定成交,盘口可能随时变化。
-
涨跌停判断应与持仓、未完成订单和可用资金检查一起使用。
-
股票无涨跌停限制时,不能仅按普通涨跌停逻辑处理。
-
避免在每个极短周期内反复查询和反复下单。
总结
check_limit() 是 PTrade 实盘策略的重要交易状态接口。将其加入买入、卖出和撤单逻辑中,可减少涨跌停环境下的无效委托。

1196

被折叠的 条评论
为什么被折叠?



