From 278d9830af0766f7a7bc0293d416fb1a0e76391c Mon Sep 17 00:00:00 2001 From: zhaoli Date: Mon, 21 Sep 2026 12:02:16 +0000 Subject: [PATCH] start experiment 78 (exp/78-scheduled-algo-retrain-on-2026-09-18-tac) --- code/MANIFEST.txt | 19 +++------- .../__pycache__/__init__.cpython-312.pyc | Bin 374 -> 0 bytes .../data/__pycache__/__init__.cpython-312.pyc | Bin 216 -> 0 bytes .../data/__pycache__/handler.cpython-312.pyc | Bin 21533 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 319 -> 0 bytes .../__pycache__/rank_ensemble.cpython-312.pyc | Bin 9461 -> 0 bytes .../__pycache__/rank_gbdt.cpython-312.pyc | Bin 12288 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 301 -> 0 bytes .../__pycache__/long_short.cpython-312.pyc | Bin 19672 -> 0 bytes .../__pycache__/optimal_stop.cpython-312.pyc | Bin 10428 -> 0 bytes .../contrib/strategy/weekly_rebalance.py | 35 ++++++++++++++---- .../data/__pycache__/__init__.cpython-312.pyc | Bin 522 -> 522 bytes .../data/__pycache__/config.cpython-312.pyc | Bin 11507 -> 11507 bytes .../__pycache__/providers.cpython-312.pyc | Bin 13340 -> 13340 bytes 14 files changed, 33 insertions(+), 21 deletions(-) delete mode 100644 code/tac-qlib/tac_qlib/contrib/__pycache__/__init__.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/data/__pycache__/__init__.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/data/__pycache__/handler.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/model/__pycache__/__init__.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/model/__pycache__/rank_ensemble.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/model/__pycache__/rank_gbdt.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/strategy/__pycache__/__init__.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/strategy/__pycache__/long_short.cpython-312.pyc delete mode 100644 code/tac-qlib/tac_qlib/contrib/strategy/__pycache__/optimal_stop.cpython-312.pyc diff --git a/code/MANIFEST.txt b/code/MANIFEST.txt index 4beca79..faf6ff7 100644 --- a/code/MANIFEST.txt +++ b/code/MANIFEST.txt @@ -1,34 +1,25 @@ # TradeAC custom-qlib-code snapshot (auto-generated) -# parent repo HEAD : ce2e0c1a7cf2277108b3c6e469e225579f9cf259 +# parent repo HEAD : f9c8fbe9459f8f9738c502f96ebc34ec1b347367 # tac-qlib/tac_qlib/contrib # tac-qlib/tac_qlib/data # per-file hashes (git hash-object): 1b6298c4a5652f2e863cbdc385a1014a570fcd59 tac-qlib/tac_qlib/contrib/__init__.py - 6c57851807631dfa1a525f87538a1b0a495fd7b2 tac-qlib/tac_qlib/contrib/__pycache__/__init__.cpython-312.pyc 2224424d0ff193be4f55d1b791f8fce89439c5d2 tac-qlib/tac_qlib/contrib/backtest/__init__.py 0bf40dee440ddbded357d7bbb4efc67c62c4b084 tac-qlib/tac_qlib/contrib/backtest/tradeac_exchange.py c76a9f17f680e74eea766eff27f7624359749ed6 tac-qlib/tac_qlib/contrib/data/__init__.py - 1acd2cb845eac1bcee54450004a4af36484544ed tac-qlib/tac_qlib/contrib/data/__pycache__/__init__.cpython-312.pyc - 2ef18965f77e8955580334d2edc09bd381204355 tac-qlib/tac_qlib/contrib/data/__pycache__/handler.cpython-312.pyc 3bba0f1696e4ab4b3deebec3f31f269b2e713899 tac-qlib/tac_qlib/contrib/data/handler.py b151d139a0dcde87d74b21e7c4b729176ba5c39b tac-qlib/tac_qlib/contrib/model/__init__.py - c975d2b978f2cc08a388a5d921938704a3dd592d tac-qlib/tac_qlib/contrib/model/__pycache__/__init__.cpython-312.pyc - 009ebd83c5156ca3d7039a112e0d277dd416ca86 tac-qlib/tac_qlib/contrib/model/__pycache__/rank_ensemble.cpython-312.pyc - 1716b680b5623394229f7600ad4c81ad07fa6a2b tac-qlib/tac_qlib/contrib/model/__pycache__/rank_gbdt.cpython-312.pyc d3f051f3a8650c42fedc7b367b966f7c74fb5789 tac-qlib/tac_qlib/contrib/model/rank_ensemble.py d03e6611338918d4aac5eea4adf26f85a3763652 tac-qlib/tac_qlib/contrib/model/rank_gbdt.py 184f80da8edf944bad3c8fb4d4d3d189bf4f082b tac-qlib/tac_qlib/contrib/strategy/__init__.py - 9c9f7743970b1a3827bb72768bb6e8be03040759 tac-qlib/tac_qlib/contrib/strategy/__pycache__/__init__.cpython-312.pyc - 6e38a7fa8584b80410ccc88e5feff228a7ece38b tac-qlib/tac_qlib/contrib/strategy/__pycache__/long_short.cpython-312.pyc - f983d5c2472cd16ef9f14a240674ec0a7f41e81c tac-qlib/tac_qlib/contrib/strategy/__pycache__/optimal_stop.cpython-312.pyc 896ef74ae47bcd1ed388e1e5d9c8d70c28097fe9 tac-qlib/tac_qlib/contrib/strategy/kelly_dropout.py 9090fc6dfbd339f2f4df4b0c9b87f400ecb5c9d5 tac-qlib/tac_qlib/contrib/strategy/long_short.py 79aaad9e39fcc740a773f4f63c512ce1086cfde0 tac-qlib/tac_qlib/contrib/strategy/optimal_stop.py 5b9acfb4340111b204249add7760bd53c6ae03f1 tac-qlib/tac_qlib/contrib/strategy/regime_gate.py - fe60bacdfedd48617863be31f24b7c7daebfac5a tac-qlib/tac_qlib/contrib/strategy/weekly_rebalance.py + 839abb89ad40cd516eabcfd91fe1be626b9f091f tac-qlib/tac_qlib/contrib/strategy/weekly_rebalance.py 92e6e90eb0cd0a25142034560f27adb6b705b1a8 tac-qlib/tac_qlib/data/__init__.py - a0e969bd6504bb8d9220f4641cc01e960c3120e4 tac-qlib/tac_qlib/data/__pycache__/__init__.cpython-312.pyc - 2f8c537d11135155539276bee342d087aad8743e tac-qlib/tac_qlib/data/__pycache__/config.cpython-312.pyc - 53cf7828c425f6b5032b206b93a238607111a6ed tac-qlib/tac_qlib/data/__pycache__/providers.cpython-312.pyc + 0f1eb6f41d44bd9064b1f16f529dac6bb9d7c3fd tac-qlib/tac_qlib/data/__pycache__/__init__.cpython-312.pyc + cf99dd8a481f6e2d1f323f8d8d754730eadb357a tac-qlib/tac_qlib/data/__pycache__/config.cpython-312.pyc + ddac5bab6578399c0301390d71bae13511a56cb1 tac-qlib/tac_qlib/data/__pycache__/providers.cpython-312.pyc 1953fb2a6371525db7f7b0e1c9dfbf3492d82110 tac-qlib/tac_qlib/data/config.py 8d0644f6f0d1efb94798ed444cc73e63b643459b tac-qlib/tac_qlib/data/providers.py diff --git a/code/tac-qlib/tac_qlib/contrib/__pycache__/__init__.cpython-312.pyc b/code/tac-qlib/tac_qlib/contrib/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 6c57851807631dfa1a525f87538a1b0a495fd7b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmY+9Jx&8L5QWD-`=dZoqy-8(7720zgaj!7DS$*MkQ>WnSJ8sKyEvvunFCPM({Tl^ zzztSfQBct#(or#9LBSMH-K}&9H%TVOcm^>V(-4@3oPa809R9 zYp~2)?j`W@f25A2R9Z{<3`9%Ks>zXKam=0)zL+^yzyyoc|; m*V(@9;Zgsm*&50xBZM^2e}jz%)*IMtVC#$X6}pJ*D&{|nURogl diff --git a/code/tac-qlib/tac_qlib/contrib/data/__pycache__/__init__.cpython-312.pyc b/code/tac-qlib/tac_qlib/contrib/data/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 1acd2cb845eac1bcee54450004a4af36484544ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 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 diff --git a/code/tac-qlib/tac_qlib/contrib/model/__pycache__/rank_ensemble.cpython-312.pyc b/code/tac-qlib/tac_qlib/contrib/model/__pycache__/rank_ensemble.cpython-312.pyc deleted file mode 100644 index 009ebd83c5156ca3d7039a112e0d277dd416ca86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9461 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 diff --git a/code/tac-qlib/tac_qlib/contrib/model/__pycache__/rank_gbdt.cpython-312.pyc b/code/tac-qlib/tac_qlib/contrib/model/__pycache__/rank_gbdt.cpython-312.pyc deleted file mode 100644 index 1716b680b5623394229f7600ad4c81ad07fa6a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 tuple: @@ -53,13 +62,25 @@ class WeeklyRebalanceDropoutStrategy(TopkDropoutStrategy): trade_step = self.trade_calendar.get_trade_step() trade_start_time, trade_end_time = self.trade_calendar.get_step_time(trade_step) - cur_week = self._iso_week(trade_start_time) - prev_week = getattr(self, "_last_week", None) - self._last_week = cur_week + if self.rebalance_every_n_days > 0: + # daily gating: count trading steps since last rebalance + step_num = trade_step + if hasattr(self, "_last_rebal_step"): + if (step_num - self._last_rebal_step) < self.rebalance_every_n_days: + return TradeDecisionWO([], self) + self._last_rebal_step = step_num + else: + cur_week = self._iso_week(trade_start_time) + prev_week = getattr(self, "_last_week", None) + self._last_week = cur_week - if prev_week is not None and prev_week == cur_week: - # not the first trading day of this ISO week -> hold - return TradeDecisionWO([], self) + if prev_week is not None and prev_week == cur_week: + return TradeDecisionWO([], self) + + if self.rebalance_every_n_weeks > 1: + week_num = cur_week[1] + if prev_week is not None and (week_num % self.rebalance_every_n_weeks) != 1: + return TradeDecisionWO([], self) pred_start_time, pred_end_time = self.trade_calendar.get_step_time(trade_step, shift=1) pred_score = self.signal.get_signal(start_time=pred_start_time, end_time=pred_end_time) diff --git a/code/tac-qlib/tac_qlib/data/__pycache__/__init__.cpython-312.pyc b/code/tac-qlib/tac_qlib/data/__pycache__/__init__.cpython-312.pyc index a0e969bd6504bb8d9220f4641cc01e960c3120e4..0f1eb6f41d44bd9064b1f16f529dac6bb9d7c3fd 100644 GIT binary patch delta 20 acmeBT>0;qN&CAQh00hr8)^6nf&j0;qN&CAQh00a@cdN*?aX9NH-^#yVO diff --git a/code/tac-qlib/tac_qlib/data/__pycache__/config.cpython-312.pyc b/code/tac-qlib/tac_qlib/data/__pycache__/config.cpython-312.pyc index 2f8c537d11135155539276bee342d087aad8743e..cf99dd8a481f6e2d1f323f8d8d754730eadb357a 100644 GIT binary patch delta 20 acmewy`8ksNG%qg~0}wpZSi6z?g$@8tk_R3D delta 20 acmewy`8ksNG%qg~0}w>)>fOlwLI(g%d)>fOjKXaWF12nC}6