如何批量取消内部市场订单

昨晚,我下定决心,杀掉了我的赔钱机器人。详情可以参考: 经过深思熟虑,我决定杀掉我的内盘交易机器人了


(图源: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天等条件)取消
  • 根据订单成交情况(未成交/部分成交)取消
  • 根据订单价格(大于多少/小于多少)等取消

好了,不多写了,我继续去杀人杀机器人去了。

H2
H3
H4
3 columns
2 columns
1 column
14 Comments