1046 lines
35 KiB
Python
1046 lines
35 KiB
Python
import pandas as pd
|
|
from v2realbot.utils.utils import AttributeDict
|
|
|
|
from v2realbot.common.model import TradeEvent, TradeUpdate, Order
|
|
from v2realbot.enums.enums import OrderSide, OrderStatus, OrderType
|
|
import datetime
|
|
from uuid import UUID
|
|
|
|
#testing tradelist
|
|
tradeList = [
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('67affc55-fa98-446f-8ac0-eb0bb494f450'),
|
|
order=Order(
|
|
id=UUID('ae8b1fff-8a87-4ec2-af7d-48765c62afc5'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 17, 58, 1, 538364),
|
|
filled_at=datetime.datetime(2023, 3, 24, 17, 58, 30, 735317),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.56,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.56
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 17, 58, 30, 735317),
|
|
position_qty=10.0,
|
|
price=42.56,
|
|
qty=10.0,
|
|
value=425.6,
|
|
cash=99574.4,
|
|
pos_avg_price=42.56
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('51b872ed-98f1-4540-af13-6d8beb6ab660'),
|
|
order=Order(
|
|
id=UUID('5cae451b-6c46-47d5-8a43-023569eebcac'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 0, 43, 790484),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 0, 46, 336552),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.51,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.51
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 0, 46, 336552),
|
|
position_qty=20.0,
|
|
price=42.51,
|
|
qty=10.0,
|
|
value=425.09999999999997,
|
|
cash=99149.29999999999,
|
|
pos_avg_price=42.535000000000004
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('86e67324-8b74-4f67-bac7-16f2564f117d'),
|
|
order=Order(
|
|
id=UUID('f04a52b4-74e0-4de8-9ec3-a89d608e2c8d'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 3, 20, 914489),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 3, 22, 529390),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.44,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.44
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 3, 22, 529390),
|
|
position_qty=30.0,
|
|
price=42.44,
|
|
qty=10.0,
|
|
value=424.4,
|
|
cash=98724.9,
|
|
pos_avg_price=42.50333333333333
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('8ef5eb96-9dfa-486b-b52b-bd1cc10ab75d'),
|
|
order=Order(
|
|
id=UUID('fae4fd0d-d1e4-46e2-85e5-f32708780e77'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 3, 22, 575390),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 5, 37, 585264),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=30,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=30,
|
|
filled_avg_price=42.52,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.52
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 5, 37, 585264),
|
|
position_qty=0.0,
|
|
price=42.52,
|
|
qty=30.0,
|
|
value=1275.6000000000001,
|
|
cash=100000.5,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('1b3ea95a-b51c-4894-83e1-82364695047a'),
|
|
order=Order(
|
|
id=UUID('40aef04b-677f-4429-9a6f-05de170df1ae'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 10, 45, 566915),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 11, 6, 387022),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.42,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.42
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 11, 6, 387022),
|
|
position_qty=10.0,
|
|
price=42.42,
|
|
qty=10.0,
|
|
value=424.20000000000005,
|
|
cash=99576.3,
|
|
pos_avg_price=42.42
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('44baaa7c-4ff6-4e16-ac4a-0ae45a050c03'),
|
|
order=Order(
|
|
id=UUID('21b961ac-8129-4800-babd-81bb87eccfda'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 13, 20, 777011),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 14, 38, 586145),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.38,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.38
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 14, 38, 586145),
|
|
position_qty=20.0,
|
|
price=42.38,
|
|
qty=10.0,
|
|
value=423.8,
|
|
cash=99152.5,
|
|
pos_avg_price=42.4
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('28c9f825-4300-46ce-b73e-3af795a836a9'),
|
|
order=Order(
|
|
id=UUID('28c897f5-cb12-4b2c-9b20-abde056e1b12'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 14, 38, 632145),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 15, 13, 203500),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=20,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=20,
|
|
filled_avg_price=42.42,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.42
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 15, 13, 203500),
|
|
position_qty=0.0,
|
|
price=42.42,
|
|
qty=20.0,
|
|
value=848.4000000000001,
|
|
cash=100000.9,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('445a98ae-6fbe-415d-88e8-f98f5c6fb411'),
|
|
order=Order(
|
|
id=UUID('f1e8412c-7e36-4d0c-97a7-88e5dbab9b25'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 20, 0, 372031),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 20, 10, 239271),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.39,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.39
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 20, 10, 239271),
|
|
position_qty=10.0,
|
|
price=42.39,
|
|
qty=10.0,
|
|
value=423.9,
|
|
cash=99577.0,
|
|
pos_avg_price=42.39
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('e2e5cf75-6517-459b-89f8-f967a3442737'),
|
|
order=Order(
|
|
id=UUID('cf1cab4c-9e39-46a9-a804-d2e2337340bf'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 20, 10, 285271),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 20, 31, 861599),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.41,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.41
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 20, 31, 861599),
|
|
position_qty=0.0,
|
|
price=42.41,
|
|
qty=10.0,
|
|
value=424.09999999999997,
|
|
cash=100001.1,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('0f5308ae-bea1-4412-8922-344f6dac10ef'),
|
|
order=Order(
|
|
id=UUID('6f16c0c0-a86e-4e6f-b07e-7eb76347b223'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 43, 20, 376929),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 45, 52, 906738),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.99,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.99
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 45, 52, 906738),
|
|
position_qty=10.0,
|
|
price=42.99,
|
|
qty=10.0,
|
|
value=429.90000000000003,
|
|
cash=99571.20000000001,
|
|
pos_avg_price=42.99
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('98f17b2e-4392-47e5-8697-c23878e1c71a'),
|
|
order=Order(
|
|
id=UUID('afc5a626-c3cb-4cf9-b887-7571dded2f6c'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 45, 52, 952738),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 46, 0, 627175),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=43.01,
|
|
side=OrderSide.SELL,
|
|
limit_price=43.01
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 46, 0, 627175),
|
|
position_qty=0.0,
|
|
price=43.01,
|
|
qty=10.0,
|
|
value=430.09999999999997,
|
|
cash=100001.30000000002,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('5431e393-291c-4828-be51-706acc39deda'),
|
|
order=Order(
|
|
id=UUID('a3a6a1d1-8bf8-4fc6-995d-0d0766443c55'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 49, 41, 540044),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 50, 47, 441926),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.93,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.93
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 50, 47, 441926),
|
|
position_qty=10.0,
|
|
price=42.93,
|
|
qty=10.0,
|
|
value=429.3,
|
|
cash=99572.00000000001,
|
|
pos_avg_price=42.93
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('f10ca407-0604-4e2e-b0cf-4e4243e57947'),
|
|
order=Order(
|
|
id=UUID('246d819c-6e1d-4fc0-a91e-17404fcc5cea'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 50, 47, 487926),
|
|
filled_at=datetime.datetime(2023, 3, 24, 18, 54, 23, 727098),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.95,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.95
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 18, 54, 23, 727098),
|
|
position_qty=0.0,
|
|
price=42.95,
|
|
qty=10.0,
|
|
value=429.5,
|
|
cash=100001.50000000001,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('9fcef2d1-2b55-4a74-9927-8463a74e75e2'),
|
|
order=Order(
|
|
id=UUID('f250e354-2291-499f-b1f0-d56788211959'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 18, 52, 20, 117195),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 5, 39, 193071),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.86,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.86
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 5, 39, 193071),
|
|
position_qty=10.0,
|
|
price=42.86,
|
|
qty=10.0,
|
|
value=428.6,
|
|
cash=99572.90000000001,
|
|
pos_avg_price=42.86
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('ea4b0db4-998e-4e2a-b614-98b157106164'),
|
|
order=Order(
|
|
id=UUID('570e9c37-5c4e-4437-9dd4-a642029ca6a7'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 5, 39, 239071),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 5, 46, 747462),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.88,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.88
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 5, 46, 747462),
|
|
position_qty=0.0,
|
|
price=42.88,
|
|
qty=10.0,
|
|
value=428.8,
|
|
cash=100001.70000000001,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('abf993dc-5aee-4b89-b48c-92bbfcb4efe4'),
|
|
order=Order(
|
|
id=UUID('f3be9459-1c89-4594-bee0-b64ace83a12e'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 7, 22, 109412),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 7, 25, 509392),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.79,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.79
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 7, 25, 509392),
|
|
position_qty=10.0,
|
|
price=42.79,
|
|
qty=10.0,
|
|
value=427.9,
|
|
cash=99573.80000000002,
|
|
pos_avg_price=42.79
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('b30b01cf-b0da-4166-a5ee-9e398ce0caf7'),
|
|
order=Order(
|
|
id=UUID('44687505-271f-423d-b5eb-4022a3b0042e'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 7, 25, 555392),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 7, 49, 238057),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.81,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.81
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 7, 49, 238057),
|
|
position_qty=0.0,
|
|
price=42.81,
|
|
qty=10.0,
|
|
value=428.1,
|
|
cash=100001.90000000002,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('3d0bde12-75e4-4589-b51d-98f351c27f51'),
|
|
order=Order(
|
|
id=UUID('b4d1deb5-bedb-4792-87a2-d93d7a791245'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 42, 0, 124666),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 42, 3, 369522),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.97,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.97
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 42, 3, 369522),
|
|
position_qty=10.0,
|
|
price=42.97,
|
|
qty=10.0,
|
|
value=429.7,
|
|
cash=99572.20000000003,
|
|
pos_avg_price=42.97
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('726bc5e6-94fd-4618-bee0-91339dbfa88c'),
|
|
order=Order(
|
|
id=UUID('b32bb6d0-c972-45a5-b6ac-144273e956ea'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 42, 3, 415522),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 42, 34, 428260),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.99,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.99
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 42, 34, 428260),
|
|
position_qty=0.0,
|
|
price=42.99,
|
|
qty=10.0,
|
|
value=429.90000000000003,
|
|
cash=100002.10000000002,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('0f3ab616-6616-4ba5-b32f-8c7f1a6be8cb'),
|
|
order=Order(
|
|
id=UUID('345162e0-5e7b-4e0c-b5bf-dffad0508da9'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 42, 44, 484124),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 49, 6, 219276),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.98,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.98
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 49, 6, 219276),
|
|
position_qty=10.0,
|
|
price=42.98,
|
|
qty=10.0,
|
|
value=429.79999999999995,
|
|
cash=99572.30000000002,
|
|
pos_avg_price=42.98
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('53e0171c-6246-40ee-9dd8-f9155be32f11'),
|
|
order=Order(
|
|
id=UUID('826b174d-c894-4c7b-a25e-b42b23eaabad'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 49, 6, 265276),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 49, 57, 528455),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=43.005,
|
|
side=OrderSide.SELL,
|
|
limit_price=43.0
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 49, 57, 528455),
|
|
position_qty=0.0,
|
|
price=43.005,
|
|
qty=10.0,
|
|
value=430.05,
|
|
cash=100002.35000000002,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('d827dc6f-51e2-4149-acd8-e438a271fa75'),
|
|
order=Order(
|
|
id=UUID('d931a776-2739-41ba-bd16-d9b45dff59ec'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 52, 1, 100351),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 52, 7, 321771),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.94,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.94
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 52, 7, 321771),
|
|
position_qty=10.0,
|
|
price=42.94,
|
|
qty=10.0,
|
|
value=429.4,
|
|
cash=99572.95000000003,
|
|
pos_avg_price=42.94
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('20d15c7a-23c0-4815-85df-8a302e2e0f39'),
|
|
order=Order(
|
|
id=UUID('0419ba73-ad51-4df6-b211-ac4c42a6e032'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 28, 43, 668847),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 52, 41, 652899),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.9,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.9
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 52, 41, 652899),
|
|
position_qty=20.0,
|
|
price=42.9,
|
|
qty=10.0,
|
|
value=429.0,
|
|
cash=99143.95000000003,
|
|
pos_avg_price=42.92
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('a2f8bc9b-d2ad-4a0a-a5f3-2cc728d2e541'),
|
|
order=Order(
|
|
id=UUID('36d89e04-fdfc-410d-9608-fa6517a3034d'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 54, 43, 440852),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 54, 49, 709012),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.87,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.87
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 54, 49, 709012),
|
|
position_qty=30.0,
|
|
price=42.87,
|
|
qty=10.0,
|
|
value=428.7,
|
|
cash=98715.25000000003,
|
|
pos_avg_price=42.903333333333336
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('dace8d0b-6618-498c-aaea-7d6e43903c92'),
|
|
order=Order(
|
|
id=UUID('57222023-d25e-461b-811a-1abc87390971'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 54, 49, 755012),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 55, 45, 671150),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=30,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=30,
|
|
filled_avg_price=42.92,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.92
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 55, 45, 671150),
|
|
position_qty=0.0,
|
|
price=42.92,
|
|
qty=30.0,
|
|
value=1287.6000000000001,
|
|
cash=100002.85000000003,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('3ce200d5-3e8d-4af8-818d-41e3f49e91f9'),
|
|
order=Order(
|
|
id=UUID('09ada304-3920-4d21-a7c5-520116f60161'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 8, 3, 126555),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 59, 28, 62458),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.83,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.83
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 59, 28, 62458),
|
|
position_qty=10.0,
|
|
price=42.83,
|
|
qty=10.0,
|
|
value=428.29999999999995,
|
|
cash=99574.55000000003,
|
|
pos_avg_price=42.83
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('51b1ef83-e486-44a1-9809-fd5ebca18a50'),
|
|
order=Order(
|
|
id=UUID('c8894c95-83bc-455e-8501-6622e74ad267'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 19, 59, 28, 108458),
|
|
filled_at=datetime.datetime(2023, 3, 24, 19, 59, 40, 517988),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.85,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.85
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 19, 59, 40, 517988),
|
|
position_qty=0.0,
|
|
price=42.85,
|
|
qty=10.0,
|
|
value=428.5,
|
|
cash=100003.05000000003,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('1a0724f7-53de-42e3-9917-b65ecca4e7a0'),
|
|
order=Order(
|
|
id=UUID('14783679-6871-496c-8875-60c3d6ae0135'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 0, 21, 449585),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 0, 25, 189635),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.84,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.84
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 0, 25, 189635),
|
|
position_qty=10.0,
|
|
price=42.84,
|
|
qty=10.0,
|
|
value=428.40000000000003,
|
|
cash=99574.65000000004,
|
|
pos_avg_price=42.84
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('087b5b76-0cc5-4462-971b-782fe4c4c6ad'),
|
|
order=Order(
|
|
id=UUID('3b5bf7fb-cba2-4bfb-b3b7-74e191caf928'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 0, 25, 235635),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 1, 49, 107372),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.86,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.86
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 1, 49, 107372),
|
|
position_qty=0.0,
|
|
price=42.86,
|
|
qty=10.0,
|
|
value=428.6,
|
|
cash=100003.25000000004,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('0302b8e0-d427-4f93-9b23-ee1da32149bd'),
|
|
order=Order(
|
|
id=UUID('446f4bab-3bd7-4bbb-ba9b-1d0445cc6371'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 8, 0, 534518),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 8, 18, 36437),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.83,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.83
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 8, 18, 36437),
|
|
position_qty=10.0,
|
|
price=42.83,
|
|
qty=10.0,
|
|
value=428.29999999999995,
|
|
cash=99574.95000000004,
|
|
pos_avg_price=42.83
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('1c191c3f-fe56-4486-92f2-b4ab2e0d1d24'),
|
|
order=Order(
|
|
id=UUID('cb920785-4520-44e5-b6af-978da3927c59'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 10, 41, 294273),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 10, 45, 568943),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.78,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.78
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 10, 45, 568943),
|
|
position_qty=20.0,
|
|
price=42.78,
|
|
qty=10.0,
|
|
value=427.8,
|
|
cash=99147.15000000004,
|
|
pos_avg_price=42.80499999999999
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('ec034230-58ba-4300-82c1-7d30399d1be0'),
|
|
order=Order(
|
|
id=UUID('f111ec92-77d2-4e38-b789-90d6ed471c76'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 10, 45, 614943),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 11, 12, 853893),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=20,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=20,
|
|
filled_avg_price=42.82,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.82
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 11, 12, 853893),
|
|
position_qty=0.0,
|
|
price=42.82,
|
|
qty=20.0,
|
|
value=856.4,
|
|
cash=100003.55000000003,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('2343a817-dcd9-42a5-8645-bf9e9fcb41a2'),
|
|
order=Order(
|
|
id=UUID('24f0e7a7-b1ce-42b6-9514-8721b240b31d'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 14, 40, 530031),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 14, 57, 348700),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.74,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.74
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 14, 57, 348700),
|
|
position_qty=10.0,
|
|
price=42.74,
|
|
qty=10.0,
|
|
value=427.40000000000003,
|
|
cash=99576.15000000004,
|
|
pos_avg_price=42.74
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('57f57435-ff77-4e6f-96d6-b29b725c4693'),
|
|
order=Order(
|
|
id=UUID('b8470e7b-6773-47bb-984c-ab44832b3b3b'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 14, 57, 394700),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 15, 12, 621144),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.76,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.76
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 15, 12, 621144),
|
|
position_qty=0.0,
|
|
price=42.76,
|
|
qty=10.0,
|
|
value=427.59999999999997,
|
|
cash=100003.75000000004,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('069b4a2d-0377-4345-96b6-74e9fae89d9e'),
|
|
order=Order(
|
|
id=UUID('9a4bbe02-fc9e-4261-95d3-d609737662a9'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 25, 41, 185936),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 27, 34, 90412),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.86,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.86
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 27, 34, 90412),
|
|
position_qty=10.0,
|
|
price=42.86,
|
|
qty=10.0,
|
|
value=428.6,
|
|
cash=99575.15000000004,
|
|
pos_avg_price=42.86
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('6bdd0e17-b1c2-4080-8f26-c980d615f31f'),
|
|
order=Order(
|
|
id=UUID('070c371c-f8d4-4437-b42f-6a94d3962d7b'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 27, 34, 136412),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 28, 24, 695266),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.88,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.88
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 28, 24, 695266),
|
|
position_qty=0.0,
|
|
price=42.88,
|
|
qty=10.0,
|
|
value=428.8,
|
|
cash=100003.95000000004,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('303bbd02-4d8b-4940-9878-52c1dca92c73'),
|
|
order=Order(
|
|
id=UUID('247f87b0-4d97-4527-bcf1-2e0679c546b0'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 35, 0, 150590),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 35, 23, 954682),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.9,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.9
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 35, 23, 954682),
|
|
position_qty=10.0,
|
|
price=42.9,
|
|
qty=10.0,
|
|
value=429.0,
|
|
cash=99574.95000000004,
|
|
pos_avg_price=42.9
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('697ed9c5-40c3-439c-9811-29c9f4d74487'),
|
|
order=Order(
|
|
id=UUID('3ce9a256-059e-43ed-a290-286fa310fa21'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 35, 24, 682),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 36, 15, 43220),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.92,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.92
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 36, 15, 43220),
|
|
position_qty=0.0,
|
|
price=42.92,
|
|
qty=10.0,
|
|
value=429.20000000000005,
|
|
cash=100004.15000000004,
|
|
pos_avg_price=0.0
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('e0a33f84-91d1-4e89-95d9-e95a3a90b0fb'),
|
|
order=Order(
|
|
id=UUID('2889c4db-7c12-4b17-b35f-c81f53625c71'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 48, 0, 466959),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 48, 0, 901059),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.91,
|
|
side=OrderSide.BUY,
|
|
limit_price=42.91
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 48, 0, 901059),
|
|
position_qty=10.0,
|
|
price=42.91,
|
|
qty=10.0,
|
|
value=429.09999999999997,
|
|
cash=99575.05000000003,
|
|
pos_avg_price=42.91
|
|
),
|
|
TradeUpdate(
|
|
event=TradeEvent.FILL,
|
|
execution_id=UUID('bca37e22-3ec2-4cf4-9ce8-779675469324'),
|
|
order=Order(
|
|
id=UUID('65a65038-7cda-4b18-aa5b-c48af539d1ba'),
|
|
submitted_at=datetime.datetime(2023, 3, 24, 20, 48, 0, 947059),
|
|
filled_at=datetime.datetime(2023, 3, 24, 20, 48, 55, 262008),
|
|
canceled_at=None,
|
|
symbol='C',
|
|
qty=10,
|
|
status=OrderStatus.FILLED,
|
|
order_type=OrderType.LIMIT,
|
|
filled_qty=10,
|
|
filled_avg_price=42.93,
|
|
side=OrderSide.SELL,
|
|
limit_price=42.93
|
|
),
|
|
timestamp=datetime.datetime(2023, 3, 24, 20, 48, 55, 262008),
|
|
position_qty=0.0,
|
|
price=42.93,
|
|
qty=10.0,
|
|
value=429.3,
|
|
cash=100004.35000000003,
|
|
pos_avg_price=0.0
|
|
)
|
|
]
|
|
|
|
#create pandas
|
|
trade_dict = AttributeDict(orderid=[],timestamp=[],symbol=[],side=[],order_type=[],qty=[],price=[],position_qty=[],value=[],cash=[],pos_avg_price=[])
|
|
for t in tradeList:
|
|
if t.event == TradeEvent.FILL:
|
|
trade_dict.orderid.append(str(t.order.id))
|
|
trade_dict.timestamp.append(t.timestamp)
|
|
trade_dict.symbol.append(t.order.symbol)
|
|
trade_dict.side.append(t.order.side)
|
|
trade_dict.qty.append(t.qty)
|
|
trade_dict.price.append(t.price)
|
|
trade_dict.position_qty.append(t.position_qty)
|
|
trade_dict.value.append(t.value)
|
|
trade_dict.cash.append(t.cash)
|
|
trade_dict.order_type.append(t.order.order_type)
|
|
trade_dict.pos_avg_price.append(t.pos_avg_price)
|
|
|
|
trade_df = pd.DataFrame(trade_dict)
|
|
trade_df = trade_df.set_index('timestamp',drop=False)
|
|
|
|
#max positions-
|
|
max_positions = trade_df.groupby('side')['qty'].value_counts().reset_index(name='count').sort_values(['qty'], ascending=False)
|
|
max_positions = max_positions[max_positions['side'] == OrderSide.SELL]
|
|
max_positions = max_positions.drop(columns=['side'], axis=1)
|
|
|
|
#filt = max_positions['side'] == 'OrderSide.BUY'
|
|
res = dict(zip(max_positions['qty'], max_positions['count']))
|
|
|
|
ouput_dict=dict(maxpos=str(res))
|
|
|
|
print(ouput_dict)
|
|
#a = trade_df.value_counts(subset=['position_qty'])
|
|
#print(max_positions.to_dict('records'))
|
|
#print(max_positions.to_dict('list'))
|
|
#print(trade_df.describe(include='max_positions')) |