-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathanalyze_strategy_debug.py
More file actions
51 lines (39 loc) · 1.67 KB
/
Copy pathanalyze_strategy_debug.py
File metadata and controls
51 lines (39 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import argparse
import pandas as pd
def analyze(path: str) -> pd.DataFrame:
df = pd.read_csv(path, parse_dates=["date"]).set_index("date")
print("Span:", df.index.min().date(), "to", df.index.max().date())
print("Avg deployed:", df["deployed_p"].mean())
print("Pct days >80% deployed:", (df["deployed_p"] > 0.8).mean())
print("Pct days 0% deployed:", (df["deployed_p"] < 1e-9).mean())
# Buys above T>1.3
viol_buy = (df["deployed_p"].diff() > 1e-3) & (df["temp"] > 1.3)
print("buys_above_1.3:", int(viol_buy.sum()))
if viol_buy.any():
print(df.loc[viol_buy, ["temp", "deployed_p", "target_p", "base_p"]].head())
# Sells when sell-block was active
viol_sell = (df["deployed_p"].diff() < -1e-3) & (df["block_sell"] == 1)
print("sells_when_blocked:", int(viol_sell.sum()))
if viol_sell.any():
print(
df.loc[
viol_sell,
["temp", "deployed_p", "target_p", "base_p", "ret_3", "ret_6", "ret_12", "ret_22"],
].head()
)
print("first_nonzero_deploy_date:", df.index[df["deployed_p"] > 1e-9].min())
print("forced_derisk_events:", int(df["forced_derisk"].sum()))
if (df["forced_derisk"] == 1).any():
print("first_forced_derisk_dates:", df.index[df["forced_derisk"] == 1][:5].tolist())
return df
def main():
parser = argparse.ArgumentParser(description="Inspect strategy reserve debug CSV")
parser.add_argument(
"--csv",
default="strategy_tqqq_reserve_debug.csv",
help="Path to the debug CSV produced by strategy_tqqq_reserve.py",
)
args = parser.parse_args()
analyze(args.csv)
if __name__ == "__main__":
main()