harb/tools/push3-evolution/seeds/llm_contrarian.push3
openhands 7a9b4206ae fix: llm_contrarian.push3 AW=150/250 clamped to 100 — three rounds unaddressed (#756)
Replace AW=250 (VERY AGGRESSIVE) with 100 and AW=150 (AGGRESSIVE) with 80
so neither value is silently clamped by LiquidityManager.MAX_ANCHOR_WIDTH=100.
Update header comment block to match the corrected values.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 21:40:31 +00:00

98 lines
2.7 KiB
Text

;; Contrarian Optimizer — Push3 seed
;;
;; Philosophy: "when everyone is bullish, prepare for the crash."
;;
;; Inputs on DYADIC stack (slot 0 on top, slot 7 at bottom):
;; [0] percentageStaked (0 to 1e18, where 1e18 = 100%)
;; [1] averageTaxRate (0 to 1e18, normalized)
;; [2-7] reserved/future (0 if unavailable)
;;
;; Outputs (top to bottom on termination):
;; ci = 0 always (contrarian on positions, not floor)
;; anchorShare (0..1e18)
;; anchorWidth (tick units)
;; discoveryDepth (0..1e18)
;;
;; Logic:
;; stakedPct = percentageStaked * 100 / 1e18 (0-100)
;; taxHigh = averageTaxRate >= 1e17 (>= 10% = expect mean reversion)
;;
;; stakedPct >= 50 (bullish crowd) → defensive:
;; taxHigh → VERY DEFENSIVE: CI=0, AS=0.15e18, AW=15, DD=0.10e18
;; else → DEFENSIVE: CI=0, AS=0.25e18, AW=25, DD=0.20e18
;;
;; stakedPct < 50 (bearish crowd) → aggressive:
;; taxHigh → VERY AGGRESSIVE: CI=0, AS=0.85e18, AW=100, DD=0.85e18
;; else → AGGRESSIVE: CI=0, AS=0.70e18, AW=80, DD=0.70e18
(
;; Step 1: Bind slot 0 (top) to PERCENTAGESTAKED, slot 1 to TAXRATE.
PERCENTAGESTAKED DYADIC.DEFINE
;; Stack: [slot7(bot), slot6, slot5, slot4, slot3, slot2, slot1(top)]
TAXRATE DYADIC.DEFINE
;; Stack: [slot7(bot), slot6, slot5, slot4, slot3, slot2(top)]
;; Step 2: Discard unused inputs (slots 2-7) — 6 pops.
DYADIC.POP
DYADIC.POP
DYADIC.POP
DYADIC.POP
DYADIC.POP
DYADIC.POP
;; Stack: []
;; Step 3: Compute stakedPct = percentageStaked * 100 / 1e18 (integer 0..100)
PERCENTAGESTAKED
100 DYADIC.*
1000000000000000000 DYADIC./
STAKED DYADIC.DEFINE
;; Stack: []
;; Step 4: stakedPct >= 50? (majority bullish = contrarian sell signal)
STAKED 50 DYADIC.>=
;; bool_stack: [stakedPct >= 50]
EXEC.IF
;; TRUE branch: bullish crowd → go defensive
(
;; Tax high (>= 10%) means volatile / mean-reversion expected → extra defensive
TAXRATE 100000000000000000 DYADIC.>=
EXEC.IF
;; VERY DEFENSIVE: floor-heavy, narrow anchor, minimal discovery
(
100000000000000000
15
150000000000000000
0
)
;; DEFENSIVE: modest floor bias, narrow-ish anchor
(
200000000000000000
25
250000000000000000
0
)
)
;; FALSE branch: bearish crowd → go aggressive
(
;; Tax high (>= 10%) means volatile → amplify the contrarian signal further
TAXRATE 100000000000000000 DYADIC.>=
EXEC.IF
;; VERY AGGRESSIVE: wide discovery, high anchor share
(
850000000000000000
100
850000000000000000
0
)
;; AGGRESSIVE: wide discovery, high anchor share
(
700000000000000000
80
700000000000000000
0
)
)
)