- delta = delta_in_base
- # sell:
- # I have 10 BTC worth of FOO, and I want to sell 9 BTC worth of it
- # At rate 1 Foo = 0.1 BTC
- # Action: "buy" "9 BTC" at rate "1/0.1" "FOO" on market
- # buy:
- # I want to buy 9 / 0.1 FOO
- # Action: "sell" "9 BTC" at rate "1/0.1" "FOO" on "market"
- if self.value_to == 0:
- rate = self.value_from.linked_to.value / self.value_from.value
- # Recompute the rate to avoid any rounding error
+ if self.action == "dispose":
+ filled = self.filled_amount(in_base_currency=True)
+ # Base is FOO
+
+ delta = (delta_in_base.in_currency(self.currency, self.market, rate=1/self.value_from.rate)
+ - filled).in_currency(self.base_currency, self.market, rate=1/rate)
+ # I have 10 BTC worth of FOO, and I want to sell 9 BTC worth of it
+ # computed at rate 1 Foo = 0.01 BTC
+ # Computation says I should sell it at 125 FOO / BTC
+ # -> delta_in_base = 9 BTC
+ # -> delta = (9 * 1/0.01 FOO) * 1/125 = 7.2 BTC
+ # Action: "buy" "7.2 BTC" at rate "125" "FOO" on market
+
+ # I already bought 300/125 BTC, only 600/125 left
+ else:
+ filled = self.filled_amount(in_base_currency=False)
+ # Base is FOO
+
+ delta = delta_in_base
+ # I have 1 BTC worth of FOO, and I want to buy 9 BTC worth of it
+ # At rate 100 Foo / BTC
+ # Computation says I should buy it at 125 FOO / BTC
+ # -> delta_in_base = 9 BTC
+ # Action: "sell" "9 BTC" at rate "125" "FOO" on market
+
+ delta = delta - filled
+ # I already sold 4 BTC, only 5 left