This commit is contained in:
Marius
2026-05-21 01:08:00 +03:00
parent c48beb6989
commit 504ab69eff
6 changed files with 189 additions and 23 deletions

View File

@@ -55,7 +55,7 @@ SESSIONS = ["A1", "A2", "A3", "B", "C", "D", "Other"]
INDICATORS = ["DIA", "US30", "SPY", "QQQ", "ES", "NQ"]
TIMEFRAMES = ["1min", "3min", "15min"]
DIRECTIONS = ["Buy", "Sell"]
OUTCOMES = ["SL", "TP0 only", "TP1", "TP2"]
OUTCOMES = ["SL", "TP0", "TP1", "TP2"]
# Cele 5 strategii de management (sufix folosit în numele coloanelor) + label friendly
STRAT_KEYS = ["tp0only", "tp1only", "tp2only", "hybrid_be", "hybrid_nobe"]
@@ -135,13 +135,13 @@ def build_config(wb: Workbook) -> None:
ws["B4"] = 10000
ws["C4"] = "Balanța inițială pentru calcule $ și HWM (model abstract)"
ws["A5"] = "Risk per Trade (%)"
ws["A5"] = "Risk reper (%)"
ws["B5"] = 1.0
ws["C5"] = "% din account riscat per trade (= -1R)"
ws["C5"] = "Reper opțional; $_* se calculează din SL% × Account Size Start"
ws["A6"] = "Risk per Trade ($)"
ws["A6"] = "Risk reper ($)"
ws["B6"] = "=B4*B5/100"
ws["C6"] = "Auto — derivat din B4 și B5"
ws["C6"] = "Auto — informativ; nu este folosit în formulele $_*"
for r in (4, 5):
ws.cell(row=r, column=2).fill = INPUT_FILL
@@ -270,7 +270,7 @@ def _f_r_tp1only(r: int) -> str:
tp1 = f'{COL["TP1 %"]}{r}'
return (
f'=IF({o}="","",'
f'IF(OR({o}="SL",{o}="TP0 only"),-1,{tp1}/{sl}))'
f'IF(OR({o}="SL",{o}="TP0"),-1,{tp1}/{sl}))'
)
@@ -289,7 +289,7 @@ def _f_r_hybrid_be(r: int) -> str:
return (
f'=IF({o}="","",'
f'IF({o}="SL",-1,'
f'IF({o}="TP0 only",0.5*{tp0}/{sl},'
f'IF({o}="TP0",0.5*{tp0}/{sl},'
f'0.5*({tp0}+{tp1})/{sl})))'
)
@@ -302,7 +302,7 @@ def _f_r_hybrid_nobe(r: int) -> str:
return (
f'=IF({o}="","",'
f'IF({o}="SL",-1,'
f'IF({o}="TP0 only",0.5*{tp0}/{sl}-0.5,'
f'IF({o}="TP0",0.5*{tp0}/{sl}-0.5,'
f'0.5*({tp0}+{tp1})/{sl})))'
)
@@ -317,8 +317,10 @@ R_FN: dict[str, callable] = {
def _f_dollar(r: int, r_col: str) -> str:
"""$ P&L pe contul abstract. Variabil per trade = R × SL%/100 × Account Size."""
rc = f"{COL[r_col]}{r}"
return f'=IF({rc}="","",{rc}*Config!$B$6)'
sl = f"{COL['SL %']}{r}"
return f'=IF({rc}="","",{rc}*{sl}/100*Config!$B$4)'
def _f_balance(r: int, dollar_col: str) -> str:
@@ -566,8 +568,8 @@ METRIC_HINTS: dict[str, str] = {
),
"Average Loss ($)": (
"Pierderea medie pe trade-urile negative (cifra apare cu minus).\n"
"Cu Risk per Trade fix, ar trebui să fie aproape de 1R în dolari.\n"
"Dacă e mult mai mare decât Risk per Trade, ai SL-uri sărite (slippage, gap-uri)."
"În dolari reali, 1R depinde de SL%: pierdere ≈ SL% × Account Size Start.\n"
"Dacă e mult mai mare decât riscul calculat din SL, ai SL-uri sărite (slippage, gap-uri)."
),
"Best Trade ($)": (
"Cel mai mare câștig individual.\n"
@@ -576,7 +578,7 @@ METRIC_HINTS: dict[str, str] = {
),
"Worst Trade ($)": (
"Cea mai mare pierdere individuală.\n"
"Ar trebui să fie aproximativ egală cu 1R (Risk per Trade din Config).\n"
"Ar trebui să fie aproximativ egală cu 1R calculat din SL% × Account Size Start.\n"
"Dacă e semnificativ mai mare, ai depășit risk-ul plănuit — SL ratat, slippage, gap overnight."
),
"Profit Factor": (
@@ -590,13 +592,13 @@ METRIC_HINTS: dict[str, str] = {
"Cu R:R mare poți avea Win Ratio mic și tot să faci bani."
),
"Expectancy (R)": (
"Cât bani câștigi în medie pe UN trade (în R; 1R = Risk per Trade, default $100).\n"
"+0.30R = câștigi $30 pe trade. Pe 100 trade-uri: +$3.000.\n"
"0.10R = pierzi $10 pe trade. Pe 100 trade-uri: $1.000.\n"
"Cât câștigi în medie pe UN trade, exprimat în R.\n"
"+0.30R = câștigi 0.30 × riscul mediu al trade-urilor.\n"
"0.10R = pierzi 0.10 × riscul mediu al trade-urilor.\n"
"Pragul de GO LIVE: +0.20R sau mai mult."
),
"Expectancy ($)": (
"Aceeași expectancy convertită în dolari, folosind Risk per Trade din Config.\n"
"Aceeași expectancy convertită în dolari, folosind SL% × Account Size Start per trade.\n"
"Util ca să vezi cât câștigi în medie pe trade în bani reali, nu doar în R."
),
"Cumulative P&L ($)": (