harb/tools/push3-evolution/seeds/optimizer_v3.push3

240 lines
12 KiB
Text
Raw Normal View History

;; OptimizerV3 in Push3 — 8-input / 4-output redesign
;;
;; 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 from Stake contract)
;; [2] vwapX96 (future; 0 if unavailable)
;; [3] currentTick (future; 0 if unavailable)
;; [4] recentVolume (future; 0 if unavailable)
;; [5] timeSinceLastRecenter (future; 0 if unavailable)
;; [6] movingAveragePrice (future; 0 if unavailable)
;; [7] reserved 0
;;
;; Outputs on DYADIC stack at termination (top to bottom):
;; top: capitalInefficiency (0..1e18)
;; anchorShare (0..1e18)
;; anchorWidth (tick units)
;; bot: discoveryDepth (0..1e18)
;;
;; Logic: binary bear/bull from slots 0 and 1
;; stakedPct = percentageStaked * 100 / 1e18 (0-100)
;; if stakedPct <= 91 → BEAR
;; deltaS = 100 - stakedPct
;; effIdx = _taxRateToEffectiveIndex(averageTaxRate) (0-29, with +1 shift at >=14)
;; penalty = deltaS^3 * effIdx / 20
;; if penalty < 50 → BULL, else → BEAR
;;
;; BULL params: CI=0, AS=1e18, AW=20, DD=1e18
;; BEAR params: CI=0, AS=0.3e18, AW=100, DD=0.3e18
(
;; 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./
;; Stack: [stakedPct]
STAKED DYADIC.DEFINE
;; Stack: []
;; Step 4: Main conditional — stakedPct > 91?
STAKED 91 DYADIC.>
;; bool_stack: [stakedPct > 91]
EXEC.IF
;; TRUE branch: stakedPct > 91 — compute penalty
(
;; deltaS = 100 - stakedPct
100 STAKED DYADIC.-
;; Stack: [deltaS]
DELTAS DYADIC.DEFINE
;; Stack: []
;; Compute raw tax index via 30-way threshold lookup.
;; Each level: if TAXRATE <= threshold then push index, else go deeper.
TAXRATE 206185567010309 DYADIC.<=
EXEC.IF
0
( TAXRATE 412371134020618 DYADIC.<=
EXEC.IF
1
( TAXRATE 618556701030927 DYADIC.<=
EXEC.IF
2
( TAXRATE 1030927835051546 DYADIC.<=
EXEC.IF
3
( TAXRATE 1546391752577319 DYADIC.<=
EXEC.IF
4
( TAXRATE 2164948453608247 DYADIC.<=
EXEC.IF
5
( TAXRATE 2783505154639175 DYADIC.<=
EXEC.IF
6
( TAXRATE 3608247422680412 DYADIC.<=
EXEC.IF
7
( TAXRATE 4639175257731958 DYADIC.<=
EXEC.IF
8
( TAXRATE 5670103092783505 DYADIC.<=
EXEC.IF
9
( TAXRATE 7216494845360824 DYADIC.<=
EXEC.IF
10
( TAXRATE 9278350515463917 DYADIC.<=
EXEC.IF
11
( TAXRATE 11855670103092783 DYADIC.<=
EXEC.IF
12
( TAXRATE 15979381443298969 DYADIC.<=
EXEC.IF
13
( TAXRATE 22164948453608247 DYADIC.<=
EXEC.IF
14
( TAXRATE 29381443298969072 DYADIC.<=
EXEC.IF
15
( TAXRATE 38144329896907216 DYADIC.<=
EXEC.IF
16
( TAXRATE 49484536082474226 DYADIC.<=
EXEC.IF
17
( TAXRATE 63917525773195876 DYADIC.<=
EXEC.IF
18
( TAXRATE 83505154639175257 DYADIC.<=
EXEC.IF
19
( TAXRATE 109278350515463917 DYADIC.<=
EXEC.IF
20
( TAXRATE 144329896907216494 DYADIC.<=
EXEC.IF
21
( TAXRATE 185567010309278350 DYADIC.<=
EXEC.IF
22
( TAXRATE 237113402061855670 DYADIC.<=
EXEC.IF
23
( TAXRATE 309278350515463917 DYADIC.<=
EXEC.IF
24
( TAXRATE 402061855670103092 DYADIC.<=
EXEC.IF
25
( TAXRATE 520618556701030927 DYADIC.<=
EXEC.IF
26
( TAXRATE 680412371134020618 DYADIC.<=
EXEC.IF
27
( TAXRATE 886597938144329896 DYADIC.<=
EXEC.IF
28
29
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
;; Stack: [raw_idx (0-29)]
;; Apply effIdx shift: if raw_idx >= 14, effIdx = min(raw_idx + 1, 29)
DYADIC.DUP 14 DYADIC.>=
EXEC.IF
(
1 DYADIC.+
DYADIC.DUP 29 DYADIC.>
EXEC.IF
( DYADIC.POP 29 )
( )
)
( )
;; Stack: [effIdx (0-29)]
EFFIDX DYADIC.DEFINE
;; Stack: []
;; Compute penalty = deltaS^3 * effIdx / 20
DELTAS DELTAS DYADIC.*
DELTAS DYADIC.*
EFFIDX DYADIC.*
20 DYADIC./
;; Stack: [penalty]
;; penalty < 50 → BULL; else → BEAR
50 DYADIC.<
;; bool_stack: [penalty < 50]
EXEC.IF
;; BULL: push 4 outputs bottom-first (discoveryDepth at bottom, ci at top)
(
1000000000000000000
20
1000000000000000000
0
)
;; BEAR
(
300000000000000000
100
300000000000000000
0
)
)
;; FALSE branch: stakedPct <= 91 — always bear
(
300000000000000000
100
300000000000000000
0
)
)