From 9d95c82982a83e55ad388cb8c33ea1b738391095 Mon Sep 17 00:00:00 2001 From: Saleh Mir Date: Mon, 21 Feb 2022 10:20:49 +0100 Subject: [PATCH] implement order.is_stop_loss and order.is_take_profit properties --- jesse/models/Order.py | 8 +++++++ .../TestOrderIsStopLossProperty/__init__.py | 23 +++++++++++++++++++ .../TestOrderIsTakeProfitProperty/__init__.py | 17 ++++++++++++++ tests/test_order.py | 11 ++++++++- 4 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 jesse/strategies/TestOrderIsStopLossProperty/__init__.py create mode 100644 jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py diff --git a/jesse/models/Order.py b/jesse/models/Order.py index ec795e3..083e746 100644 --- a/jesse/models/Order.py +++ b/jesse/models/Order.py @@ -124,6 +124,14 @@ class Order(Model): def is_close(self) -> bool: return self.flag == order_flags.CLOSE + @property + def is_stop_loss(self): + return self.submitted_via == 'stop-loss' + + @property + def is_take_profit(self): + return self.submitted_via == 'take-profit' + @property def to_dict(self): return { diff --git a/jesse/strategies/TestOrderIsStopLossProperty/__init__.py b/jesse/strategies/TestOrderIsStopLossProperty/__init__.py new file mode 100644 index 0000000..9d53299 --- /dev/null +++ b/jesse/strategies/TestOrderIsStopLossProperty/__init__.py @@ -0,0 +1,23 @@ +from jesse.strategies import Strategy +import jesse.helpers as jh + + +class TestOrderIsStopLossProperty(Strategy): + def should_long(self): + return False + + def should_short(self): + return self.index == 0 + + def should_cancel(self): + return False + + def go_long(self): + pass + + def go_short(self): + self.sell = 1, self.price + self.stop_loss = 1, self.price + 5 + + def on_close_position(self, order) -> None: + assert order.is_stop_loss == True diff --git a/jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py b/jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py new file mode 100644 index 0000000..6af6e3c --- /dev/null +++ b/jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py @@ -0,0 +1,17 @@ +from jesse.strategies import Strategy +import jesse.helpers as jh + + +class TestOrderIsTakeProfitProperty(Strategy): + def should_long(self): + return self.index == 0 + + def should_cancel(self): + return False + + def go_long(self): + self.buy = 1, self.price + self.take_profit = 1, self.price + 5 + + def on_close_position(self, order) -> None: + assert order.is_take_profit == True diff --git a/tests/test_order.py b/tests/test_order.py index 8e5073e..1a4e92b 100644 --- a/tests/test_order.py +++ b/tests/test_order.py @@ -2,7 +2,7 @@ import jesse.helpers as jh from jesse.enums import sides, order_statuses from jesse.models import Order from jesse.enums import order_types -from .utils import set_up +from .utils import set_up, single_route_backtest def test_cancel_order(): @@ -50,3 +50,12 @@ def test_execute_order(): assert order.is_executed is True assert order.executed_at == jh.now_to_timestamp() + + +def test_order_is_stop_loss_property(): + single_route_backtest('TestOrderIsStopLossProperty') + + +def test_order_is_take_profit_property(): + single_route_backtest('TestOrderIsTakeProfitProperty') +