3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade回测系统中,限价单(Limit Order)如果没有达到指定价格,是不会成交的。
以下是关于回测中限价单成交机制的详细说明:
限价单是指您在下单时指定了具体的成交价格(limit_price)。在回测撮合时,系统会严格按照以下逻辑判断是否成交:
在PTrade的回测环境中,除了价格优先原则外,还有以下重要规则:
如果您希望在策略中下限价单,可以使用 order 函数并传入 limit_price 参数:
def handle_data(context, data):
# 获取当前价格
current_price = data['600570.SS']['close']
# 假设我们想以比当前价格低 2% 的价格挂单买入
target_price = current_price * 0.98
# 下限价单
# 如果后续行情没有跌到 target_price,这笔订单在回测中将不会成交,并在收盘后自动作废
order('600570.SS', 100, limit_price=target_price)
不会成交。 只要市场价格未触及您设定的限价,订单就会一直处于“未成交(Open)”状态,直到当天交易结束被系统自动撤单。
Q: 回测中未成交的限价单会自动转入第二天吗?
A: 不会。 PTrade回测机制中,未成交的订单会在当天收盘后自动取消,不会延续到下一个交易日。如果您希望第二天继续挂单,需要在第二天的策略逻辑中重新下单。
Q: 如何查询当天未成交的订单?
A: 您可以使用 get_open_orders() 函数来获取当前所有未完成的订单对象,并通过检查其状态来判断是否成交。
Q: 如果我想无论价格多少都必须成交,应该怎么办?
A: 您应该使用市价单(不设置 limit_price,或者在实盘交易函数中使用 order_market),或者将限价单的价格设置得非常宽泛(例如买入时设置涨停价,卖出时设置跌停价),以确保成交。