Skip to content

Commit 8eab6ae

Browse files
committed
cancel only not complete orders
1 parent e70a6cf commit 8eab6ae

File tree

3 files changed

+98
-2
lines changed

3 files changed

+98
-2
lines changed

omspy/base.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,15 @@ def cancel_all_orders(
241241
keys_to_copy = ()
242242
if not (keys_to_add):
243243
keys_to_add = {}
244+
statuses = ("complete",)
244245
for order in self.orders:
246+
status = order.get("status")
247+
if not (status):
248+
status == "pending"
249+
else:
250+
status = str(status).lower()
245251
order_id = order.get("order_id")
246-
if order_id:
252+
if order_id and status not in statuses:
247253
final_args = {}
248254
for key in keys_to_copy:
249255
final_args[key] = order.get(key)

tests/brokers/test_zerodha.py

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ def test_order_place(mock_kite):
119119
"quantity": 1,
120120
"order_type": "MARKET",
121121
}
122-
print(broker.kite.place_order.call_args_list)
123122
assert broker.kite.place_order.call_args_list[-1] == call(**kwargs)
124123

125124

@@ -191,3 +190,92 @@ def test_order_cancel_return_error(mock_kite):
191190
response = broker.order_cancel(order_type="market")
192191
broker.kite.cancel_order.assert_not_called()
193192
assert response == {"error": "No order_id"}
193+
194+
195+
def test_close_all_positions(mock_kite):
196+
broker = mock_kite
197+
with open("tests/data/kiteconnect/positions.json") as f:
198+
mock_data = json.load(f)
199+
broker.kite.positions.return_value = mock_data
200+
broker.close_all_positions()
201+
assert broker.kite.place_order.call_count == 2
202+
call_args = [
203+
dict(
204+
tradingsymbol="GOLDGUINEA17DECFUT",
205+
order_type="MARKET",
206+
quantity=3,
207+
transaction_type="buy",
208+
),
209+
dict(
210+
tradingsymbol="LEADMINI17DECFUT",
211+
order_type="MARKET",
212+
quantity=1,
213+
transaction_type="sell",
214+
),
215+
]
216+
order_args = broker.kite.place_order.call_args_list
217+
assert order_args[0] == call(**call_args[0])
218+
assert order_args[1] == call(**call_args[1])
219+
220+
221+
def test_close_all_positions(mock_kite):
222+
broker = mock_kite
223+
with open("tests/data/kiteconnect/positions.json") as f:
224+
mock_data = json.load(f)
225+
broker.kite.positions.return_value = mock_data
226+
broker.close_all_positions(
227+
keys_to_copy=("exchange", "product"), keys_to_add={"variety": "regular"}
228+
)
229+
assert broker.kite.place_order.call_count == 2
230+
call_args = [
231+
dict(
232+
tradingsymbol="GOLDGUINEA17DECFUT",
233+
order_type="MARKET",
234+
quantity=3,
235+
transaction_type="buy",
236+
exchange="MCX",
237+
product="NRML",
238+
variety="regular",
239+
),
240+
dict(
241+
tradingsymbol="LEADMINI17DECFUT",
242+
order_type="MARKET",
243+
quantity=1,
244+
transaction_type="sell",
245+
exchange="MCX",
246+
product="NRML",
247+
variety="regular",
248+
),
249+
]
250+
order_args = broker.kite.place_order.call_args_list
251+
assert order_args[0] == call(**call_args[0])
252+
assert order_args[1] == call(**call_args[1])
253+
254+
255+
def test_cancel_all_orders(mock_kite):
256+
broker = mock_kite
257+
with open("tests/data/kiteconnect/orders.json") as f:
258+
mock_data = json.load(f)
259+
mock_data["data"][3]["status"] = "pending"
260+
broker.kite.orders.return_value = mock_data
261+
broker.cancel_all_orders(
262+
keys_to_copy=("product", "instrument_token"), keys_to_add={"variety": "regular"}
263+
)
264+
assert broker.kite.cancel_order.call_count == 2
265+
call_args = [
266+
dict(
267+
order_id="100000000000000",
268+
instrument_token=412675,
269+
product="NRML",
270+
variety="regular",
271+
),
272+
dict(
273+
order_id="700000000000000",
274+
instrument_token=58424839,
275+
product="NRML",
276+
variety="regular",
277+
),
278+
]
279+
order_args = broker.kite.cancel_order.call_args_list
280+
assert order_args[0] == call(**call_args[0])
281+
assert order_args[1] == call(**call_args[1])

tests/test_base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
# Load some mock data
99
with open("tests/data/kiteconnect/orders.json") as f:
1010
orders = json.load(f)["data"]
11+
for order in orders:
12+
order["status"] = "pending"
1113
with open("tests/data/kiteconnect/trades.json") as f:
1214
trades = json.load(f)["data"]
1315
with open("tests/data/kiteconnect/positions.json") as f:

0 commit comments

Comments
 (0)