⟢ WEEKLY SELF-CRITIQUE (Opus C — audytor)
[DAILY BRIEFING]
Week: 2026-W19 | Generated: 2026-05-10T23:59:01.382484+00:00 |
Model: claude-opus-4-7 |
Tokens in/out: 49301/8446 |
Trades(50): 50 |
Concepts: 216
# 🔍 FRANTOLINI Weekly Critique — Week 2026-W19
---
## 1. Performance Summary (factual)
### Aggregate (50 closed trades, 2026-05-06 → 2026-05-08)
| Metryka | Wartość |
|---|---|
| N trades | 50 |
| WIN_FULL | 6 (12%) |
| PARTIAL_BE / TIME_STOP_AFTER_TP1 | 4 (8%) |
| LOSS | 34 (68%) |
| TIME_STOP (no profit) | 5 (10%) |
| Net PnL | **-$33,477.50** |
| Avg trade | **-$669.55** |
| Best trade | +$3,170 (GC EARLY_BUY 2026-05-07 06:40) |
| Worst trade | -$3,002.50 (SI EARLY_BUY 2026-05-08 15:14) |
| Profit Factor | ~0.30 (12,773 / 42,251) |
| Equity direction | **STROMO W DÓŁ** |
PF=0.30 to nie strategia z negative edge — to **strategia z dodatnimi sygnałami zatopionymi w spamie**.
### Per ticker
| Ticker | N | Win% | Net PnL | Komentarz |
|---|---|---|---|---|
| GC1! | 31 | ~13% | ~-$7,250 | Klaster 8 trades 2026-05-06 15:38-15:41 — wszystkie LOSS |
| SI1! | 15 | 0 WIN_FULL, 2 partial | ~-$24,800 | 6 SHORT trades w jednej minucie 2026-05-07 13:35 — wszystkie LOSS |
| PA1! | 2 | 0 | $0 (TIME_STOP) | TP zbyt daleki vs ATR |
| HG1! | 1 | 0 | -$27.50 | Single trade, irrelevantne sample |
| NQ1! | 0 | — | — | Zero trades — czy filtry blokują? |
### Per setup_type
| Setup | N | Win | Loss | PnL |
|---|---|---|---|---|
| EARLY_BUY | 43 | 4 | 30 | **-$22,000** (przybliżenie) |
| BUY_NOW | 3 | 1 | 0 (2 TS) | +$2,010 |
| EARLY_SELL | 5 | 0 | 5 | -$14,607 |
| SELL_NOW | 2 | 0 | 2 | -$2,990 |
**EARLY_BUY = 86% sygnałów, 9% WR. To jest centralna patologia tygodnia.**
### Klaster analysis (kluczowe)
**KLASTER #1 — GC1! 2026-05-06 15:38-15:41 (8 trades w 3 minuty):**
- Wszystkie LOSS, łączna strata **~-$10,030**
- Identyczny stop poziom (4703.2), bliski entry (4716-4720)
- Identyczne conf-stack: ALIGN_3PLUS_LONG + CVD_ALIGNED + KILLZONE_NY_KZ + PO3_MANIP_HIGH_BOOST
- **System wystrzelił 8 sygnałów na ten sam setup w 3 minuty, każdy LOSS. To nie trading — to brak deduplikacji.**
**KLASTER #2 — SI1! 2026-05-07 13:35 (6 SHORT trades w 1 minutę):**
- 6 LOSS, ~-$17,569
- Wszystkie EARLY_SELL/SELL_NOW na 81.11-81.16, SL 81.7
- Większość ma **pustą `conf=[]`** — żadnego confluence!
- htf=SHORT ale system shortuje rynek który zaraz odwraca
**KLASTER #3 — SI1!/GC1! 2026-05-08 14:30-15:14 (12+ trades):**
- Wszystkie LONG przy NEWS_BULL + DXY_WEAK + PO3_MANIP_HIGH_BOOST
- Większość LOSS — kupowanie szczytu po news pop
### 3 najgorsze trades — root cause
1. **SI1! 2026-05-08 15:14 LONG @ 81.47 → -$3,002.50** | Entry na lokalnym szczycie po news spike. `MIT_LONG_BULL_MIT_BLOCK` + `INDUCEMENT_BULL` powinny być filtrami — system traktuje je jako triggery. **Root: confluence-stacking bez quality gate.**
2. **SI1! 2026-05-07 13:35 SHORT @ 81.118 → -$2,962.50** | `conf=['VOL_INSTITUTIONAL']` — JEDEN confluence i to słaby. System nie powinien w ogóle wystrzelić sygnału. **Root: minimum-confluence threshold = 0 lub jest bypassowany.**
3. **GC1! 2026-05-06 15:41 LONG @ 4720.0 → -$1,702.50** | 6-ty z 8 duplikatów w klastrze. **Root: brak cooldown / brak deduplikacji entries w tym samym setup.**
---
## 2. Concept Application Analysis
Bez Pine source nie mogę zweryfikować implementacji 1:1 — oceniam na podstawie conf-stacków w logach trades i live_state.
| Concept (HIGH) | Used? | Where (inferred) | Effective? |
|---|---|---|---|
| **VWAP institutional benchmark** | Częściowo | `vwap_pos`, `above_vah`/`below_val` | **NIE** — system widzi cenę BELOW VWAP + bias=SHORT i mimo to wystrzela LONG (np. GC 2026-05-06 13:09). VWAP nie jest hard filter. |
| **Kelly Criterion** | NIE | Brak position sizing logic w sygnałach | **MISSING** — przy WR=12% Kelly = ujemne. System powinien się sam wyłączać. |
| **Mean reversion / Z-score** | NIE | Brak `z_score_vwap` w live_state | MISSING — wszystkie SI trades 2026-05-08 to chase, nie reversion. |
| **Risk/Reward 1:3** | Łamane | TP/SL w trades — wiele <1:2 | **NIE** — SI 2026-05-08 21:01: SL=80.4, entry=80.695, TP=82.125 → R:R≈4.8 OK, ale GC 2026-05-06 09:42: entry=4713.7 SL=4713.0 TP=4716.6 → R:R=4.1 z absurdalnym 0.7-pkt stopem (noise stop). |
| **Stop placement (ATR-based)** | NIE | Stops jak 0.7pkt w GC są poniżej noise floor | **NIE** — ATR14 GC=4.6, ale SL=0.7 to <0.2 ATR = gwarantowany stop-out na noise. |
| **Confirmation bias awareness** | NIE | Stacking confluence aż "pasuje" | **NIE** — PO3_MANIP_HIGH_BOOST w 30+ trades, większość LOSS — system traktuje jako buff, dane pokazują że to anti-signal. |
| **Sharpe / Sortino tracking** | NIE | Brak w state | MISSING |
| **Mackay / Herd warnings** | NIE | NEWS_BULL(>30) → entry LONG | **ODWROTNIE** — system kupuje na hype, klasyczny crowd-follow. Library mówi "fade", system chasuje. |
| **Bid-ask spread cost** | NIE | Brak `min_atr_threshold` per ticker | MISSING — HG1!, PA1! mają szerokie spready, system ich nie różnicuje. |
| **OHLCV structural limits (arxiv)** | NIE | Brak N≥30, T≥2.0 validation | MISSING — strategie deployowane bez OOS validation. |
| **ADX > 25 trend filter** | NIE | Brak ADX w state | MISSING — wiele EARLY_BUY w `bias=RANGING` na H1. |
| **Volume z-score sanity check** | NIE | Vol z-score=145σ accepted as signal | **NIE** — outlier traktowany jak edge, nie jako error data. |
**Minimum 5 concepts HIGH applicability NIE są wdrożone:**
1. Kelly-based circuit breaker (po N losses w rzędzie → halt)
2. ATR-relative stop floor (SL ≥ 1.0 × ATR14)
3. Z-score VWAP for mean reversion entries
4. Confluence quality scoring (nie liczba — jakość)
5. News-fade logic (NEWS_BULL przy already-extended price = anti-signal)
---
## 3. Patterns & Biases (przeglądarka)
### A. **DUPLICATE SIGNAL SPAM (system error, nie behavioral)**
- GC 2026-05-06 15:38-15:41: **8 trades** w 3 minuty na ten sam SL=4703.2
- SI 2026-05-07 13:35: **6 trades** w 1 minutę
- GC 2026-05-08 14:49: **4 trades** w 1 minutę, wszystkie LOSS
- GC 2026-05-08 15:13: **5 trades** w 1 minutę
**To nie jest 50 trades — to ~15 unique setupów rozmnożonych przez brak deduplikacji.** Per-setup PnL jest zafałszowany — system po prostu lewaruje stratny setup wielokrotnie.
### B. **EARLY_BUY overuse (systematic error w classifier)**
86% sygnałów. EARLY_BUY z definicji = "wchodzimy przed potwierdzeniem". Statystyki pokazują że to brak edge:
- EARLY_BUY WR ≈ 9%
- BUY_NOW (z potwierdzeniem) WR = 33% (1/3) ale n za małe
**Hipoteza:** classifier oznacza setup jako EARLY zamiast czekać na confirmation candle. To gap między tym co biblioteka mówi (Hammer/Morning Star **wymagają** confirmation candle) a co system robi (entry na świecy formującej wzorzec).
### C. **NEWS_BULL chase pattern**
Wszystkie trades 2026-05-08 14:30-15:14 mają NEWS_BULL(30+). Większość LOSS. Pattern: news pop → price spike → system widzi confluence stack → entry na top → reversal.
**Library (Mackay):** "fade the crowd when narrative is at peak". **System robi odwrotnie.**
### D. **PO3_MANIP_HIGH_BOOST as anti-signal**
Boost flag pojawia się w 60%+ trades, większość LOSS. To nie boost — to flaga że jesteśmy w fazie manipulacji, **przed** prawdziwym ruchem. System traktuje "manipulation in progress" jako entry signal. Powinno być WAIT.
### E. **htf=LONG persistence bias**
47/50 trades to LONG, 3 SHORT. Rynek metali w tym tygodniu spadał (per live_state GC: bias=SHORT, price 4704 vs entries 4710-4730). System ma **strukturalne LONG bias** który nie aktualizuje się gdy htf flipuje. Te wszystkie GC EARLY_BUY 4710-4720 to były counter-trend entries oznaczone jako with-trend.
### F. **Brak Bartosza w danych**
Wszystkie 50 to **paper/auto trades**, nie manual. To nie behavioral analysis tradera — to audit systemu. Briefingi confirmują: "Brak ręcznych paper trades".
**Bartosz: jeśli to system robi, to dobrze że nie kopiujesz — bo skopiowałbyś -$33k w 3 dni. Ale fakt że Cię nie ma w danych = nie ma feedback loop. Nie wiesz które signały byś wziął, których nie. Twoja discipline nie jest testowana.**
---
## 4. Missing Concepts (gap analysis)
### 1. **Signal deduplication / cooldown** (CRITICAL)
- **Co:** Po wystrzeleniu sygnału na ticker, blokada nowych sygnałów tego samego direction/setup przez N barów (np. 5 bars na 5m TF).
- **Dlaczego:** 8 LONGów GC w 3 minuty to nie 8 niezależnych edge — to 1 setup × 8. Wynik per-trade jest zafałszowany, ryzyko per-event jest 8× większe niż widać.
- **Jak dodać:** Pine — zmienna `var int last_signal_bar = na`, warunek `bar_index - last_signal_bar >= 5`.
### 2. **Kelly-based circuit breaker**
- **Co:** Track rolling 20-trade WR i avg R. Jeśli Kelly < 0 → suspend signals 24h.
- **Dlaczego:** WR=12% × R≈1 → Kelly = -0.76. System powinien sam siebie wyłączyć w tym tygodniu.
- **Jak:** Python decision support layer — przed publikacją signal sprawdza recent metrics.
### 3. **ATR-floor on stop loss**
- **Co:** `min_sl_distance = max(input_sl, 1.0 * atr14)`
- **Dlaczego:** GC entries z SL=0.7pkt przy ATR14=4.6 to gwarantowany stopout. To nie strategia — to donacja.
- **Jak:** Pine — `sl = math.max(sl_raw, close - 1.0 * atr14)` dla longów.
### 4. **News-fade vs news-chase logic**
- **Co:** Jeśli NEWS_BULL > 25 AND price już > VWAP + 1 ATR → block LONG (już skoczył, jesteś late).
- **Dlaczego:** Wszystkie LOSS 2026-05-08 to chase post-news pop. Library (Mackay, Herd Instinct) explicit przewiduje to.
- **Jak:** Pine warunek `news_chase_block = news_bull > 25 and close > vwap + atr14`.
### 5. **Confluence quality scoring (nie counter)**
- **Co:** Zamiast `count(confluences) >= 3`, ważone scoring gdzie PO3_MANIP_HIGH_BOOST = -10 (anti-signal per data), MIT_BLOCK_TESTED+RETURN = +20 etc.
- **Dlaczego:** Obecnie system traktuje 10 confluences jako 10× mocniejszy niż 3 confluences. Dane pokazują, że im więcej confluences typu PO3_MANIP, tym gorszy wynik. Quality ≠ quantity.
### 6. **HTF flip protection**
- **Co:** Jeśli `bias_h4` zmieni się w ciągu ostatnich 12 bars (1h), wymagaj +1 confluence więcej / quality_score min 70.
- **Dlaczego:** Trades GC 2026-05-06 robione gdy bias przechodził SHORT→LONG niestabilnie.
---
## 5. Pine Code Recommendations
### Rec 1 — Deduplication guard (HIGHEST PRIORITY)
- **What:** Hard block na multiple signals w window
- **Where:** `pine/metals_mtf.pine` — sekcja gdzie `early_buy_trigger` / `buy_now_raw` są wystawiane do alertu (prawdopodobnie ostatnie 200 linii, sekcja `alertcondition` / JSON build)
- **Why:** 50 trades w bazie to ~15 unique setupów; PnL na poziomie strategii nie odpowiada PnL per-setup
- **Pine snippet:**
```pine
var int last_long_signal_bar = na
var int last_short_signal_bar = na
cooldown_bars = 5 // 5 × 5min = 25min lockout
can_emit_long = na(last_long_signal_bar) or (bar_index - last_long_signal_bar) >= cooldown_bars
can_emit_short = na(last_short_signal_bar) or (bar_index - last_short_signal_bar) >= cooldown_bars
early_buy_final = early_buy_raw and can_emit_long
early_sell_final = early_sell_raw and can_emit_short
if early_buy_final
last_long_signal_bar := bar_index
if early_sell_final
last_short_signal_bar := bar_index
```
- **Risk:** Może zablokować legit dwa różne setupy w krótkim oknie (np. po news flush + reentry). Mitigation: cooldown tylko dla tego samego `setup_type`, nie globalnie.
### Rec 2 — ATR-floor stop loss
- **What:** Wymuszenie minimalnego SL distance
- **Where:** Sekcja gdzie kalkulowane są `prop_sl_l` / `prop_sl_s`
- **Why:** 0.7pkt SL na GC przy ATR14=4.6 = stop = 0.15 ATR = guaranteed stopout w noise
- **Pine snippet:**
```pine
min_sl_atr_mult = input.float(1.0, "Min SL as ATR multiple", minval=0.5)
sl_floor_long = close - min_sl_atr_mult * atr14
sl_floor_short = close + min_sl_atr_mult * atr14
prop_sl_l := math.min(prop_sl_l_raw, sl_floor_long) // dalej od ceny
prop_sl_s := math.max(prop_sl_s_raw, sl_floor_short)
// jeśli RR po floor < 1.5 -> block setup
rr_after_floor = (prop_tp1_l - close) / (close - prop_sl_l)
setup_valid_long := setup_valid_long and rr_after_floor >= 1.5
```
- **Risk:** Większe SL = większe nominal loss per trade. Mitigation: jednocześnie zmniejszyć size — ale to layer wyżej, nie Pine.
### Rec 3 — News-chase block
- **What:** Block LONG entries gdy news już pchnął cenę
- **Where:** Sekcja confluence aggregation, przed final setup_valid
- **Why:** 2026-05-08 14:30-15:14 — wszystkie LONG po NEWS_BULL = LOSS
- **Pine snippet:**
```pine
news_score = ... // existing field
news_chase_block_long = news_score > 25.0 and close > (vwap + atr14)
news_chase_block_short = news_score < -25.0 and close < (vwap - atr14)
early_buy_final := early_buy_final and not news_chase_block_long
early_sell_final := early_sell_final and not news_chase_block_short
// debug label
if news_chase_block_long
label.new(bar_index, high, "NEWS_CHASE_BLOCK", color=color.orange, size=size.tiny)
```
- **Risk:** Możesz przegapić legit news-driven trend continuation. Mitigation: tylko blokuj pierwsze 30min po news spike.
### Rec 4 — PO3_MANIP_HIGH downgrade z BOOST na WARN
- **What:** Zmienić znak PO3_MANIPULATION_HIGH z + na -
- **Where:** Sekcja `quality_score_long` / `quality_score_short` building
- **Why:** Empirycznie z 50 trades: setupy z PO3_MANIP_HIGH_BOOST mają WR ~10%. To nie boost, to warning że jesteśmy w fazie manipulacji a nie w fazie distribution direction
- **Pine snippet:**
```pine
// PRZED:
// if po3_phase == "MANIPULATION_HIGH"
// quality_score_long += 20 // BOOST
// PO:
po3_manip_active = po3_phase == "MANIPULATION_HIGH" or po3_phase == "MANIPULATION_LOW"
if po3_manip_active
quality_score_long -= 15
quality_score_short -= 15
quality_warn_long := quality_warn_long + "PO3_MANIP_ACTIVE_WAIT "
```
- **Risk:** Jeśli te dane były z bear market a w bull PO3_MANIP rzeczywiście działa — odwrócenie zaszkodzi. Mitigation: gate przez bias_d1 — boost jeśli aligned, penalty jeśli counter-trend.
### Rec 5 — Minimum confluence threshold (hard)
- **What:** `conf=[]` lub `conf=['VOL_INSTITUTIONAL']` jako jedyny — block
- **Where:** Sekcja gdzie buduje się tablica confluences przed alertem
- **Why:** SI 2026-05-07 13:35 — 6 trades z 0-1 confluence, wszystkie LOSS
- **Pine snippet:**
```pine
n_confluences_long = (align_3plus_long ? 1 : 0) + (cvd_aligned ? 1 : 0) +
(candle_bull_bias ? 1 : 0) + (in_killzone ? 1 : 0) +
(ote_long ? 1 : 0) + (sweep_bull_setup ? 1 : 0)
// ... pełna lista
min_confluences = input.int(3, "Min confluences to emit signal", minval=1)
confluence_gate_long = n_confluences_long >= min_confluences
early_buy_final := early_buy_final and confluence_gate_long
```
- **Risk:** Mniej sygnałów. To FEATURE, nie bug.
**Priorytet wdrożenia (impact × ease):**
1. Rec 1 (dedup) — natychmiast, blokuje 50% strat
2. Rec 5 (min confluence) — natychmiast
3. Rec 2 (ATR floor) — w tym tygodniu
4. Rec 3 (news chase) — w tym tygodniu
5. Rec 4 (PO3 reweight) — wymaga A/B test
---
## 6. Strategic Direction (next week)
### Priority 1: **STOP testować system z otwartą paper-equity. Zacznij od dedup + ATR floor.**
Sygnał PF=0.30 to nie "system w ewolucji" — to system który **systematycznie traci** w warunkach BALANCE/manipulation phase. Bez Rec 1+2+5 wdrożonych nie ma sensu generować kolejnych 50 trades.
### Priority 2: **Wejdź w dane jako trader, nie obserwator.**
50/50 trades to auto. Zero manual. Nie wiesz czy Twoja discipline jest dobra czy zła — bo jej nie używasz. Wybierz max **3 trades dziennie** które byś wziął gdyby to były pieniądze. Loguj je osobno. Porównaj z auto. Bez tego nie ma loop'a uczenia.
### Priority 3: **Audit setup_classifier dla EARLY_BUY logic.**
86% sygnałów to EARLY_BUY. To nie statystyka rynku — to bias classifiera. Znajdź funkcję która decyduje EARLY vs NOW. Prawdopodobnie próg dla NOW jest za wysoki, więc system "kompromituje" do EARLY zamiast WAIT.
### Czego NIE robić w nadchodzącym tygodniu:
- ❌ Nie dodawaj nowych confluences. Masz 30+, jakość spada.
- ❌ Nie chase news pops.
- ❌ Nie skaluj position size — Kelly = ujemne.
- ❌ Nie ufaj backtest PF=10 z briefing 2026-05-09. n=5 to placebo.
### Anti-FOMO discipline reminder:
**Kiedy widzisz 8 confluences i NEWS_BULL i PO3_BOOST naraz — to nie sygnał edge, to sygnał że tłum już wszedł. Czekanie jest pozycją; brak trade'u dziś = +$0, a +$0 > -$1500.**