Skip to content

Commit

Permalink
fix: decimal float precision
Browse files Browse the repository at this point in the history
  • Loading branch information
Yvictor committed Jul 21, 2022
1 parent 9c08824 commit 74a4afc
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 11 deletions.
2 changes: 1 addition & 1 deletion sjtrade/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
trading with shioaji
"""

__version__ = "0.4.5"
__version__ = "0.4.6"

def inject_env():
import os
Expand Down
8 changes: 4 additions & 4 deletions sjtrade/trader.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ def cancel_preorder_handler(self, exchange: Exchange, tick: sj.TickSTKv1):
api = self.api
# 8:55 - 8:59:55
if tick.simtrade:
if position.cond.quantity < 0 and tick.close == position.contract.limit_up:
if position.cond.quantity < 0 and float(tick.close) == position.contract.limit_up:
with position.lock:
position.status.cancel_preorder = True
for trade in self.positions[tick.code].entry_trades:
Expand All @@ -217,7 +217,7 @@ def re_entry_order(self, position: Position, tick: sj.TickSTKv1):
self.open_price[tick.code] = tick.close
if (
position.status.cancel_preorder
and tick.close < position.cond.stop_loss_price[0].price
and float(tick.close) < position.cond.stop_loss_price[0].price
): # TODO check min or max
trade = api.place_order(
contract=position.contract,
Expand Down Expand Up @@ -263,7 +263,7 @@ def stop_profit(self, position: Position, tick: sj.TickSTKv1):
op = operator.le
cross = "under"
for price_set in position.cond.stop_profit_price:
if op(tick.close, price_set.price):
if op(float(tick.close), price_set.price):
if abs(price_set.quantity) == abs(price_set.in_transit_quantity):
continue
self.place_cover_order(position, [price_set])
Expand All @@ -286,7 +286,7 @@ def stop_loss(self, position: Position, tick: sj.TickSTKv1):
op = operator.ge
cross = "over"
for price_set in position.cond.stop_loss_price:
if op(tick.close, price_set.price):
if op(float(tick.close), price_set.price):
if abs(price_set.quantity) == abs(price_set.in_transit_quantity):
continue
self.place_cover_order(position, [price_set])
Expand Down
12 changes: 6 additions & 6 deletions tests/test_trader.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ def test_sjtrader_place_entry_order(
def test_sjtrader_cancel_preorder_handler(
sjtrader_entryed: SJTrader, mocker: MockerFixture, logger: loguru._logger.Logger
):
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 43.3, True)
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("43.3"), True)

def make_cancel_order_status(trade):
trade.status.status = sj.order.Status.Cancelled
Expand All @@ -250,7 +250,7 @@ def make_cancel_order_status(trade):
def test_sjtrader_re_entry_order(
sjtrader_entryed: SJTrader, mocker: MockerFixture, logger: loguru._logger.Logger
):
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 43.3, True)
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("43.3"), True)

def make_cancel_order_status(trade, timeout):
trade.status.status = sj.order.Status.Cancelled
Expand All @@ -262,7 +262,7 @@ def make_cancel_order_status(trade, timeout):
position = sjtrader_entryed.positions["1605"]
sjtrader_entryed.cancel_preorder_handler(position, tick)

tick = TickSTKv1("1605", "2022-05-25 09:00:01", 35, False)
tick = TickSTKv1("1605", "2022-05-25 09:00:01", Decimal("35"), False)
sjtrader_entryed.re_entry_order(position, tick)
sjtrader_entryed.api.place_order.assert_called_with(
contract=position.contract,
Expand All @@ -283,7 +283,7 @@ def make_cancel_order_status(trade, timeout):
def test_sjtrader_stop_profit(
sjtrader_entryed: SJTrader, mocker: MockerFixture, logger: loguru._logger.Logger
):
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 35.5, False)
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("35.5"), False)
position = sjtrader_entryed.positions["1605"]
position.status.open_quantity = -1
sjtrader_entryed.place_cover_order = mocker.MagicMock()
Expand All @@ -295,7 +295,7 @@ def test_sjtrader_stop_profit(
def test_sjtrader_stop_loss(
sjtrader_entryed: SJTrader, mocker: MockerFixture, logger: loguru._logger.Logger
):
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 43.3, False)
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("43.3"), False)
position = sjtrader_entryed.positions["1605"]
position.status.open_quantity = -1
sjtrader_entryed.place_cover_order = mocker.MagicMock()
Expand All @@ -305,7 +305,7 @@ def test_sjtrader_stop_loss(


def test_sjtrader_intraday_handler(sjtrader_entryed: SJTrader, mocker: MockerFixture):
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 43.3, True)
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("43.3"), True)
sjtrader_entryed.re_entry_order = mocker.MagicMock()
sjtrader_entryed.stop_profit = mocker.MagicMock()
sjtrader_entryed.stop_loss = mocker.MagicMock()
Expand Down

0 comments on commit 74a4afc

Please sign in to comment.