Ptrade挂单后撤单函数 实现

在ptrade的每一笔挂单,都不一定能够保证很成功,比如刚挂了单,股票就飞了。
 所以也需要有撤单,重新挂的动作。
 
    order(code,amount) # 买入或者卖出

time.sleep(CANCEL_ORDER_TIME) # 等待片刻

cancel_order_reorder(context) # 进入撤单函数

中间需要有个等待时间。
1。 买入后,并不一定买上成交,需要一点时间消化,尤其是量大的单子,得要慢慢吃掉。
2。 成交回报并不是实时的。记住,ptrade的成交回报是有个延时,约9秒。 也就是你成交后,立即调用get_positions函数 看看你持仓,是无法看到你刚刚买入的股票数据的。
 
比如:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)

def handle_data(context, data):
order(g.security,100)
position = get_position(g.security)
log.info(position)
这样你是无法获取的你的持仓的。
 
 
下面的示例代码,获取还在挂单的委托单子,然后逐个撤销,重新按照最新的市价下单。
 
def cancel_order_reorder(context):
'''
取消订单,重新下单
:return:
'''

open_orders = get_open_orders()

for _order in open_orders:
_id = _order.id
amount=_order.amount
filled=_order.filled
next_amount = amount-filled
code = _order.symbol
log.info('撤单{} - {}'.format(code,next_amount))
cancel_order(_id)

# time.sleep(1)
log.info('重新下单{} 数量{}'.format(code,next_amount))
order(code,next_amount)

 
后话:
很多投资者没有编程基础,学习起来会很吃力,耗费大量的时间,得不偿失。写出来的代码也是很多bug而不自知。等到实盘了用真金白银 得到了教训,还不如早期跟一两个人有经验的人学习,甚至找个代写代码就好了。
 当然,能力超强,精力旺盛的大神就无视了,这个人折腾起来什么都可以搞得有模有样。 
 

0 个评论

要回复文章请先登录注册