diff --git a/sjtrade/__init__.py b/sjtrade/__init__.py index 99afecb..46b4a76 100644 --- a/sjtrade/__init__.py +++ b/sjtrade/__init__.py @@ -2,7 +2,7 @@ trading with shioaji """ -__version__ = "0.4.5" +__version__ = "0.4.6" def inject_env(): import os diff --git a/sjtrade/trader.py b/sjtrade/trader.py index c908013..b4cc992 100644 --- a/sjtrade/trader.py +++ b/sjtrade/trader.py @@ -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: @@ -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, @@ -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]) @@ -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]) diff --git a/tests/test_trader.py b/tests/test_trader.py index c092d79..84fab79 100644 --- a/tests/test_trader.py +++ b/tests/test_trader.py @@ -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 @@ -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 @@ -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, @@ -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() @@ -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() @@ -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()