(stock: str, start_idx: int, end_idx: int)
| 12 | |
| 13 | |
| 14 | def generate_order(stock: str, start_idx: int, end_idx: int) -> bool: |
| 15 | dataset = pd.read_pickle(DATA_PATH / f"{stock}.pkl") |
| 16 | df = dataset.handler.fetch(level=None).reset_index() |
| 17 | if len(df) == 0 or df.isnull().values.any() or min(df["$volume0"]) < 1e-5: |
| 18 | return False |
| 19 | |
| 20 | df["date"] = df["datetime"].dt.date.astype("datetime64") |
| 21 | df = df.set_index(["instrument", "datetime", "date"]) |
| 22 | df = df.groupby("date", group_keys=False).take(range(start_idx, end_idx)).droplevel(level=0) |
| 23 | |
| 24 | order_all = pd.DataFrame(df.groupby(level=(2, 0), group_keys=False).mean().dropna()) |
| 25 | order_all["amount"] = np.random.lognormal(-3.28, 1.14) * order_all["$volume0"] |
| 26 | order_all = order_all[order_all["amount"] > 0.0] |
| 27 | order_all["order_type"] = 0 |
| 28 | order_all = order_all.drop(columns=["$volume0"]) |
| 29 | |
| 30 | order_train = order_all[order_all.index.get_level_values(0) <= pd.Timestamp("2021-06-30")] |
| 31 | order_test = order_all[order_all.index.get_level_values(0) > pd.Timestamp("2021-06-30")] |
| 32 | order_valid = order_test[order_test.index.get_level_values(0) <= pd.Timestamp("2021-09-30")] |
| 33 | order_test = order_test[order_test.index.get_level_values(0) > pd.Timestamp("2021-09-30")] |
| 34 | |
| 35 | for order, tag in zip((order_train, order_valid, order_test, order_all), ("train", "valid", "test", "all")): |
| 36 | path = OUTPUT_PATH / tag |
| 37 | os.makedirs(path, exist_ok=True) |
| 38 | if len(order) > 0: |
| 39 | order.to_pickle(path / f"{stock}.pkl.target") |
| 40 | return True |
| 41 | |
| 42 | |
| 43 | np.random.seed(1234) |
no test coverage detected