昨晚,我下定决心,杀掉了我的赔钱机器人。详情可以参考: 经过深思熟虑,我决定杀掉我的内盘交易机器人了
(图源:pixabay)
垂死挣扎的机器人
但是今早起床看了一眼steemd.com,竟然发现明明已经被我杀掉的机器人还在垂死挣扎。这生命力可真够旺盛的。
仔细一想就明了啦,我的机器人是根据市场行情在内部市场挂买单或者卖单。而挂单的失效期,我设置为1个月。所以,虽然我杀掉了机器人,但是内部市场的挂单还在。也就是说,不出意外的话,我的机器人还会在内部市场苟延残喘一个月之久。
既然我决定杀掉它,就要绝情到底,怎么能容忍它继续活那么久呢?强迫症表示这种情况,绝不容许发生!
登陆内部市场一看,哎呦我的乖乖,至少数千个挂单,手工挨个点取消的话,估计要点一个月吧。😭这我无法忍受。
如何批量取消订单
那么有没有办法批量取消订单呢。
还好,steem-python 不负所望,提供了接口:
不过orderid
是什么鬼啊?
看了一下下单的函数头
param int orderid: (optional) a 32bit orderid for tracking of the created order (random by default)
我觉得我比较方,首先我没在程序中指定orderid
,也就是说,我全是随机生成的;其次,我并没有在机器人程序中保存orderid
列表。
那莫非就取消不了吗?一定不是这样的!
我们之前的帖子中介绍过 steem rpc api 使用curl调用的例子,并且我们也介绍过database_api中的get_open_orders
可以获得用户的订单信息
生成以下命令来获取一下内部市场我的挂单:
curl --data '{"jsonrpc": "2.0", "method": "call", "params": ["database_api", "get_open_orders", ["xxxxx"]], "id": 1}' https://steemd.steemit.com
我们返回长长的订单列表信息,随便拽出其中一个订单:
耶,找到你了,原来订单信息中保持着orderid
呢。
但是使用curl返回的数据如何放到程序中处理,也是个麻烦事。还好,steem-python中提供了支持
那接下来的事情就简单了:
- 调用
get_open_orders()
获取所有订单列表 - 遍历订单列表
- 获取对应订单的
orderid
- 调用
cancel()
取消订单
- 获取对应订单的
有了上述分析,程序实现起来就没啥问题了。
代码就不贴上来了——因为我还没写出来呢😭
按条件取消订单
另外,根据上述分析,我们也可以实现按条件取消订单
- 根据订单类型(买单/卖单)取消
- 根据订单时间(超过5天/小于3天等条件)取消
- 根据订单成交情况(未成交/部分成交)取消
- 根据订单价格(大于多少/小于多少)等取消
好了,不多写了,我继续去杀人杀机器人去了。