bsip33: add text about processing taker call order
This commit is contained in:
parent
c6dbe1880e
commit
97ed075555
1 changed files with 24 additions and 0 deletions
24
bsip-0033.md
24
bsip-0033.md
|
@ -33,6 +33,11 @@ means C is forced to "buy high" when have chance to "buy low".
|
||||||
This BSIP proposes a mechanism to change this behavior to: always match taker
|
This BSIP proposes a mechanism to change this behavior to: always match taker
|
||||||
orders with maker orders with better prices first.
|
orders with maker orders with better prices first.
|
||||||
|
|
||||||
|
This BSIP also sets a principle for dealing with [bitshares-core
|
||||||
|
issue #453](https://github.com/bitshares/bitshares-core/issues/453).
|
||||||
|
In that issue, it's described that sometimes a taker margin call order may be
|
||||||
|
matched with a maker limit order which is not on the top of the order book.
|
||||||
|
|
||||||
# Motivation
|
# Motivation
|
||||||
|
|
||||||
Make the exchange system more user-friendly.
|
Make the exchange system more user-friendly.
|
||||||
|
@ -46,6 +51,8 @@ matched with the orders on the opposite side which offerred best prices first.
|
||||||
|
|
||||||
# Specifications
|
# Specifications
|
||||||
|
|
||||||
|
## Matching a taker limit order
|
||||||
|
|
||||||
There is a parameter in price feed named MSSR, which stands for "maximum short
|
There is a parameter in price feed named MSSR, which stands for "maximum short
|
||||||
squeeze ratio". Maker price of margin call orders is MSSP, which stands for
|
squeeze ratio". Maker price of margin call orders is MSSP, which stands for
|
||||||
"maximum short squeeze price", is calculated as `feed_price / ( 100% + MSSR )`.
|
"maximum short squeeze price", is calculated as `feed_price / ( 100% + MSSR )`.
|
||||||
|
@ -64,6 +71,23 @@ Need to change the logic to:
|
||||||
* if the new order is still there, match it with call orders,
|
* if the new order is still there, match it with call orders,
|
||||||
* if the new order is still there, match it with rest limit orders.
|
* if the new order is still there, match it with rest limit orders.
|
||||||
|
|
||||||
|
## Matching taker margin call orders
|
||||||
|
|
||||||
|
For [bitshares-core
|
||||||
|
issue #453](https://github.com/bitshares/bitshares-core/issues/453),
|
||||||
|
in `check_call_orders(...)` function of `database` class,
|
||||||
|
iterator `limit_itr` will move forward when variable `filled_limit` is `true`.
|
||||||
|
`filled_limit` will be set to `true` when a limit order get completely filled.
|
||||||
|
However, since `filled_limit` is declared out of the `while` block,
|
||||||
|
it doesn't get reset to `false` after `limit_itr` moved forward. That means
|
||||||
|
after the first limit order get completedly filled, `filled_limit` will always
|
||||||
|
be `true`, so `limit_itr` will always move forward no matter whether *current*
|
||||||
|
limit order got completedly filled, so a taker call order may match
|
||||||
|
with a limit order that is not on the top of the order book.
|
||||||
|
|
||||||
|
To fix this, need to change the code to make sure `limit_itr` always references
|
||||||
|
the limit order on the top of the order book.
|
||||||
|
|
||||||
# Discussion
|
# Discussion
|
||||||
|
|
||||||
[to be added if any]
|
[to be added if any]
|
||||||
|
|
Loading…
Reference in a new issue