-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.py
More file actions
84 lines (66 loc) · 4.33 KB
/
Copy pathconfig.py
File metadata and controls
84 lines (66 loc) · 4.33 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
"""
config.py — All runtime settings. Values override via .env.
"""
import os
from dotenv import load_dotenv
load_dotenv()
# ── Currency ──────────────────────────────────────────────────────────────────
BASE_CURRENCY = "EUR"
CONVERT_TO_EUR = True
# ── FinBERT ───────────────────────────────────────────────────────────────────
FINBERT_MODEL = "ProsusAI/finbert"
FINBERT_MAX_HEADLINES = 32
FINBERT_DEVICE = -1 # -1 = CPU; 0 = first CUDA GPU
# ── NER (Named Entity Recognition — semantic headline filter) ─────────────────
NER_ENABLED = True
NER_SPACY_MODEL = "en_core_web_sm"
# ── Data Sources ──────────────────────────────────────────────────────────────
ALPHA_VANTAGE_API_KEY = os.getenv("ALPHA_VANTAGE_API_KEY", "")
# ── Async I/O ─────────────────────────────────────────────────────────────────
MAX_ASYNC_WORKERS = 10
# ── Scanning ──────────────────────────────────────────────────────────────────
HIST_PERIOD = "5y"
TOP_PER_SECTOR = 3
TOP_GLOBAL = 3
# ── Scoring Weights (must sum to 100) ─────────────────────────────────────────
WEIGHT_FUNDAMENTALS = 30
WEIGHT_STEWARDSHIP = 30
WEIGHT_TECHNICAL = 15
WEIGHT_SENTIMENT = 25
# ── Position Sizing ───────────────────────────────────────────────────────────
KELLY_FRACTION = 0.25
TARGET_VOLATILITY = 0.15
MAX_POSITION_PCT = 0.10
# ── Backtest ──────────────────────────────────────────────────────────────────
BACKTEST_PERIOD_DAYS = 365
COMMISSION_SLIPPAGE = 0.0015
# Walk-Forward Optimization
WFO_IS_DAYS = 365
WFO_OOS_DAYS = 90
WFO_STEP_DAYS = 90
# ── Optional email reporting ──────────────────────────────────────────────────
SMTP_USER = os.getenv("SMTP_USER", "")
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD", "")
REPORT_TO = os.getenv("REPORT_TO", "")
# ── Strategy ──────────────────────────────────────────────────────────────────
STRATEGY_NAME = "High_Efficiency_Growth"
# ── Fast Filter / Screener Thresholds ─────────────────────────────────────────
FILTER_MAX_PE = 25.0
FILTER_MIN_ROE = 0.20
# ── Fundamental Grade Thresholds ──────────────────────────────────────────────
STRUCT_MAX_PE = 20.0
STRUCT_MAX_PEG = 1.5
STRUCT_MIN_ROE = 0.15
# ── Stewardship (Non-Financials) ──────────────────────────────────────────────
STW_GEN_MAX_DE = 0.5
STW_GEN_MID_DE = 1.0
STW_GEN_MIN_ROE = 0.10
STW_GEN_HI_ROE = 0.20
STW_GEN_MIN_ICR = 5.0
# ── Stewardship (Financials/Banks) ────────────────────────────────────────────
STW_FIN_MIN_PB = 1.0
STW_FIN_MAX_PB = 1.5
STW_FIN_MIN_ICR = 3.0
# ── Allocation Logic Thresholds ───────────────────────────────────────────────
MIN_STRUCT_GRADE_FOR_BUY = 75
MIN_TACT_GRADE_FOR_BUY = 70