Skip to content

Commit 74a4afc

Browse files
committed
fix: decimal float precision
1 parent 9c08824 commit 74a4afc

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

sjtrade/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
trading with shioaji
33
"""
44

5-
__version__ = "0.4.5"
5+
__version__ = "0.4.6"
66

77
def inject_env():
88
import os

sjtrade/trader.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ def cancel_preorder_handler(self, exchange: Exchange, tick: sj.TickSTKv1):
191191
api = self.api
192192
# 8:55 - 8:59:55
193193
if tick.simtrade:
194-
if position.cond.quantity < 0 and tick.close == position.contract.limit_up:
194+
if position.cond.quantity < 0 and float(tick.close) == position.contract.limit_up:
195195
with position.lock:
196196
position.status.cancel_preorder = True
197197
for trade in self.positions[tick.code].entry_trades:
@@ -217,7 +217,7 @@ def re_entry_order(self, position: Position, tick: sj.TickSTKv1):
217217
self.open_price[tick.code] = tick.close
218218
if (
219219
position.status.cancel_preorder
220-
and tick.close < position.cond.stop_loss_price[0].price
220+
and float(tick.close) < position.cond.stop_loss_price[0].price
221221
): # TODO check min or max
222222
trade = api.place_order(
223223
contract=position.contract,
@@ -263,7 +263,7 @@ def stop_profit(self, position: Position, tick: sj.TickSTKv1):
263263
op = operator.le
264264
cross = "under"
265265
for price_set in position.cond.stop_profit_price:
266-
if op(tick.close, price_set.price):
266+
if op(float(tick.close), price_set.price):
267267
if abs(price_set.quantity) == abs(price_set.in_transit_quantity):
268268
continue
269269
self.place_cover_order(position, [price_set])
@@ -286,7 +286,7 @@ def stop_loss(self, position: Position, tick: sj.TickSTKv1):
286286
op = operator.ge
287287
cross = "over"
288288
for price_set in position.cond.stop_loss_price:
289-
if op(tick.close, price_set.price):
289+
if op(float(tick.close), price_set.price):
290290
if abs(price_set.quantity) == abs(price_set.in_transit_quantity):
291291
continue
292292
self.place_cover_order(position, [price_set])

tests/test_trader.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ def test_sjtrader_place_entry_order(
224224
def test_sjtrader_cancel_preorder_handler(
225225
sjtrader_entryed: SJTrader, mocker: MockerFixture, logger: loguru._logger.Logger
226226
):
227-
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 43.3, True)
227+
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("43.3"), True)
228228

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

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

265-
tick = TickSTKv1("1605", "2022-05-25 09:00:01", 35, False)
265+
tick = TickSTKv1("1605", "2022-05-25 09:00:01", Decimal("35"), False)
266266
sjtrader_entryed.re_entry_order(position, tick)
267267
sjtrader_entryed.api.place_order.assert_called_with(
268268
contract=position.contract,
@@ -283,7 +283,7 @@ def make_cancel_order_status(trade, timeout):
283283
def test_sjtrader_stop_profit(
284284
sjtrader_entryed: SJTrader, mocker: MockerFixture, logger: loguru._logger.Logger
285285
):
286-
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 35.5, False)
286+
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("35.5"), False)
287287
position = sjtrader_entryed.positions["1605"]
288288
position.status.open_quantity = -1
289289
sjtrader_entryed.place_cover_order = mocker.MagicMock()
@@ -295,7 +295,7 @@ def test_sjtrader_stop_profit(
295295
def test_sjtrader_stop_loss(
296296
sjtrader_entryed: SJTrader, mocker: MockerFixture, logger: loguru._logger.Logger
297297
):
298-
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 43.3, False)
298+
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("43.3"), False)
299299
position = sjtrader_entryed.positions["1605"]
300300
position.status.open_quantity = -1
301301
sjtrader_entryed.place_cover_order = mocker.MagicMock()
@@ -305,7 +305,7 @@ def test_sjtrader_stop_loss(
305305

306306

307307
def test_sjtrader_intraday_handler(sjtrader_entryed: SJTrader, mocker: MockerFixture):
308-
tick = TickSTKv1("1605", "2022-05-25 08:45:01", 43.3, True)
308+
tick = TickSTKv1("1605", "2022-05-25 08:45:01", Decimal("43.3"), True)
309309
sjtrader_entryed.re_entry_order = mocker.MagicMock()
310310
sjtrader_entryed.stop_profit = mocker.MagicMock()
311311
sjtrader_entryed.stop_loss = mocker.MagicMock()

0 commit comments

Comments
 (0)