【发布时间】:2020-05-24 11:12:26
【问题描述】:
我有以下代码通过计算订单来检测股票交易:
import json
orders = '[{"side": "SELL", "executedQty": "0.046"}, {"side": "SELL", "executedQty": "0.041"}, {"side": "SELL", "executedQty": "0.056"}, {"side": "SELL", "executedQty": "0.140"}, {"side": "BUY", "executedQty": "0.283"}]'
orders = json.loads(orders)
cur_qty = 0
raw_trades = []
trade = []
trade_side = None
for order in orders:
if trade_side is None:
trade_side = order['side']
numbers_after_decimal = len(order['executedQty'].split('.')[-1])
order_qty = float(order['executedQty'])
order_qty = round(order_qty, numbers_after_decimal)
if trade_side == order['side']:
cur_qty += order_qty
else:
cur_qty -= order_qty
trade.append(order)
if cur_qty == 0:
raw_trades.append(trade)
trade_side = None
trade = []
在这个例子中,订单只有 1 笔交易(我们卖出 0.046 + 0.041 + 0.056 + 0.140 = 0.283(入场),我们买入 0.283(离场))
问题是,当运行此代码时,由于某种原因,当在 for 循环中时,顺序是 {"side": "SELL", "executedQty": "0.140"} 和 cur_qty = 0.143,当我添加它们时,结果是 0.28300000000000003。
这弄乱了整个计数,因为我搜索 cur_qty == 0 以知道交易已经结束(我卖掉了我买的所有东西,反之亦然)。
试图将浮点数四舍五入到它的字符串小数位数,但它一直在发生。
任何想法如何解决这个问题,四舍五入没有帮助
【问题讨论】:
-
请参阅:stackoverflow.com/questions/588004/… 在作为单独问题提问之前在网站上搜索答案是一种健康的做法。
-
@user79161,我确实在网上搜索过,但没有找到这个答案。然而,答案是谈论它为什么会发生,而不是说四舍五入(我已经尝试过),我没有看到其他解决方案,这就是这个问题的意义所在。我该如何克服这个问题并获得
0.283而不是0.28300000000000003 -
你没有得到答案。 错误不能以一般方式克服。一般方式,我的意思是一种可以应用于以该形式表示的所有分数的方法。至少这是我在阅读我提到的答案和其中提供的链接后得出的结论。我相信你应该再读一遍。
标签: python floating-point decimal