Files
resonance-engine/__pycache__/market_tension_injector.cpython-312.pyc
T

202 lines
30 KiB
Plaintext
Raw Normal View History

2026-06-07 12:34:31 +07:00
Ë
º%jbãóÊdZddlmZddlZddlZddlZddlZddlZddlZddl Z
ddl m Z ddl
ZddlZddlZdZdZdZdd d
d d d
ddœZdZdZd
ZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#gd¢Z$dZ%ejLd«Z'e de'«Z(e(d z Z)d0d!„Z*Gd"„d#«Z+d1d$„Z, d2d%„Z-d3d&„Z.ef d4d'„Z/d5d(„Z0d6d)„Z1d7d*„Z2d8d+„Z3 d9d,„Z4 d:d-„Z5d.„Z6e7d/k(re6«yy);uÎmarket_tension_injector.py — feed REAL market tensions into the lattice.
Replaces the synthetic z-score/STR_CAP scheme of inject_continuous_stream.py.
The previous injectors took market variables, z-scored them away to a
dimensionless ±0.30 blob at (512,512), and asked the lattice to find
structure. That destroyed all native magnitude and unit information. A
5σ flow and a 3σ flow produced identical injections. Predictably, six
"different variables" collapsed to one transfer function.
This injector encodes four NATIVE market tensions, in physical units,
as DISTINCT spatial forcing patterns the lattice can mechanically
respond to differently:
┌──────────────────────┬────────────────────────┬─────────────────────────â”
│ tension │ physical interpretation│ lattice forcing pattern │
├──────────────────────┼────────────────────────┼─────────────────────────┤
│ funding_bps │ directional cost-to- │ x-axis DIPOLE │
│ (signed bps annual)│ carry, longs pulled vs │ (asymmetry forcing) │
│ │ shorts │ │
│ │ │ │
│ bs_ratio_signed │ flow directional │ x-axis OFFSET blob │
│ (-0.5..+0.5) │ imbalance THIS minute │ (velocity bias) │
│ │ │ │
│ activity_excess │ excitation relative to │ ISOTROPIC center blob │
│ (>= -1, unbounded) │ own 500-min baseline │ (density / energy) │
│ │ │ │
│ cvd_divergence │ coiled spring — flow │ VORTICITY RING │
│ ($ / bps signed) │ without price response │ (rotational forcing) │
└──────────────────────┴────────────────────────┴─────────────────────────┘
SCALING DISCIPLINE
No z-scoring. No rolling normalisation. Each tension is scaled to lattice
units by a FIXED PHYSICAL CONSTANT documented in MAP_SCALE below. Cross-
regime amplitude information is preserved: a 100bps funding day produces
exactly 2× the dipole strength of a 50bps day. A panic flow imbalance
produces 5× the velocity bias of a calm one. The lattice sees true
market amplitude.
ARMS
A — control. No injection. Fresh baseline of the lattice's natural
variability over the experiment window. (Re-captured even though
we have an old arm A — field state may have drifted.)
T — tension. All four patterns injected per minute, each from its native
market value via fixed physical scale.
PROTOCOL
- Run arm A first (n minutes), save parquet
- Cooldown 20 min (let field settle to a new baseline)
- Run arm T (same n minutes), save parquet
- Analyzer compares: does field state under arm T predict realized
vol / direction at h=5,15,60 BETTER than (a) arm A field, and (b) the
raw tensions themselves?
REQUIREMENTS
- Lattice daemon alive on 5556 (telemetry PUB) / 5557 (cmd SUB).
- Must be launched via WSL setsid nohup (proven pattern from contstream).
- Tag: --agent-owner=PAPERTRADER per AGENTS.md ledger (this is research,
PaperTrader scope; lattice daemon itself is RESONANCE, untouched).
Output: /mnt/d/Resonance_Engine/traj/tension_<RUN_ID>/
meta.json
funding_history.parquet (raw HL fundingHistory cached)
arm_A_no_inject.parquet
arm_T_tension.parquet
progress.log
é)Ú annotationsN)ÚPathz+/mnt/d/PaperTrader/research/hl_data/minutesÚBTCz 20260415*gY@gà?çð?ç@g@g€„.A)Úfunding_bps_per_strengthÚfunding_strength_capÚbs_ratio_per_strengthÚbs_ratio_strength_capÚactivity_per_strengthÚactivity_strength_capÚcvd_div_tanh_scaleiôé<)ç€@rgP@gX@g@@éédéPztcp://127.0.0.1:5556ztcp://127.0.0.1:5557) Ú asymmetryÚ coherenceÚ stress_xxÚ stress_yyÚ stress_xyÚvorticity_meanÚvel_meanÚvel_maxÚvel_varz https://api.hyperliquid.xyz/infoz
%Y%m%dT%H%M%Sz%/mnt/d/Resonance_Engine/traj/tension_z progress.logcóþdtjd«d|}t|d¬«tj dd¬«t
j
d«5}|j|dz«ddd«y#1swYyxYw) Nú[z%Y-%m-%dT%H:%M:%Sz] T)Úflush©ÚparentsÚexist_okÚ
)ÚtimeÚstrftimeÚprintÚOUT_DIRÚmkdirÚPROGRESSÚopenÚwrite)ÚmsgÚlineÚfs ú2/mnt/d/Resonance_Engine/market_tension_injector.pyÚlogr2slØ
Œt}‰}Ð2°"°S°EÐ :€DÜ ˆ$Ü ‡MM˜$¨€MÔð˜qØ t‘ Ô÷÷ñús ÁA3Á3A<có,eZdZdZddZdZddZdZy) Ú LatestTelz?Background thread holding the most-recent telemetry frame only.có`tjj«|_|jj tj
«|_|j j|«|j jtjd«|j jtjd«d|_ d|_ d|_
tj«|_tj"|j$d¬«|_|j&j)«y)grT)ÚtargetÚdaemon)ÚzmqÚContextÚinstanceÚctxÚsocketÚSUBÚsockÚconnectÚ
setsockoptÚ SUBSCRIBEÚRCVHWMÚlatestÚ latest_wallÚn_seenÚ threadingÚEventÚ_stopÚThreadÚ_runÚ_tÚstart)ÚselfÚaddrs r1Ú__init__zLatestTel.__init__ Ü—;;×)ˆŒØ—H‘H—O‘O¤C§G¡GÓŒ Ø ‰ ×ј$ÔØ ‰ ×ÑœSŸ]™]¨CÔ ‰ ×ÑœSŸZ™Z¨Ô.Ø#'ˆŒ Ø"%ˆÔ؈Œ Ü—_‘_ÓŒ
Ü×"¨$¯)©)¸AˆŒØ 
r6có¨|jj«s©|jjd«rr |jj t
j «}tj|«|_ tj«|_ |xjdz
c_ |jj«sŒ¨yy#t$rYŒ(wxYw)Nré)rIÚis_setr?ÚpollÚ recv_stringr9ÚNOBLOCKÚjsonÚloadsrDr&rErFÚ Exception)rNÚraws r1rKzLatestTel._run­sØ—**×y‰y~‰~˜ØŸ)™)×/´· ± Ó<CÜ"&§*¡*¨S£/D”KÜ'+§y¡y£{—KK $•Kð
—*‘*×%øôÙðús·A1Cà CÃCcó2|j|jfS)N)rDrE©rNs r1ÚsnapshotzLatestTel.snapshot¸sØ{‰{˜D×,r6cóÆ|jj«|jjd¬« |jj d«y#t $rYywxYw)©Útimeoutr)rIÚsetrLÚjoinr?ÚcloserYr\s r1ÚstopzLatestTel.stop»sIØ
ÔØ  ˜Qˆ Ôð Ø I‰IO‰O˜AÕ øÜò Ù ð ús¸AÁ A ÁA N)rOÚstr)Úreturnztuple[dict | None, float])Ú__name__Ú
__module__Ú __qualname__Ú__doc__rPrKr]re©r6r1r4r4sÙ ò ór6r4c
óªttjtd|««}|std|dt«t dt |«d|dj
d«dd|dj
d«dd «g}|D]L}ttj|d
««D]&}|jtj|««Œ(ŒNtj|d ¬ «}||jtk(jd
«jd
«jd ¬«}t dt |«dt«|S)/zno day dirs matching z in zloading z day dirs (réÿÿÿÿz .. ú)z
/*.parquetT)Ú ignore_indexÚminute©Údropzloaded z unique minutes of )ÚsortedÚglobÚ DATA_ROOTÚ RuntimeErrorr2ÚlenÚsplitÚappendÚpdÚ read_parquetÚconcatÚcoinÚCOINÚ sort_valuesÚdrop_duplicatesÚ reset_index)Ú days_globÚday_dirsÚdfsÚdr0Údfs r1Úload_btcr‰Ås@Ü”d—i‘i¤9 +¨Q¨y¨kÐ :Ó<€HÙ ÜÐ2°9°+¸TÄ)ÀЈ(”3x“=/ ¨X°a©[×->Ñ->¸sÓ-CÀBÑ-GÐ,HÈÈXÐVXÉ\×M_ÑM_Ð`cÓMdÐegÑMhÐLiÐijÐ
€CØ
ò+ˆÜœŸ ™  Q C zÐ"2Ó +ˆ J‰J”r— qÓ 
3 TÔ *€BØ ˆBG‰G”t‰OÑ × (Ñ (¨Ó 2× BÑ BÀ8Ó L× XÑ XÐ^bÐ XÓ c€B܈'”#b“'Ð-¬d¨VÐ
€Ir6c
ó¼|j«r#td|«tj|«St |«dzdz}t |«dzdz}td|d|d|«g}|}||krt j d|||dœ«j«}tjjt|d d
i¬ «} tjj| d ¬
«5}
t j|
j«j««} ddd« snV|j!| «t | dj#dd««} | |krn!| dz}t%j&d«||krŒ|s#td«tj(ddg¬«Stj(|«}
|
dj+d«dz|
d<|
dj+t,«|
d<|
ddzdz|
d<|
ddgj/d«j1d«}
|j2j5dd¬«|
j7|«td t9|
«d!|
j:j=«d"d#|
j:j?«d"d$|
j:jA«d"d%|
j:jC«d"
«|
S#1swYŒ¼xYw)&z¾Pull HL fundingHistory for coin between [start_min, end_min] (minutes-since-epoch).
Returns DataFrame[minute_floor_hour, funding_bps_annual] joined-ready.
Caches raw JSON in `cache`.zusing cached funding: réèzfetching HL fundingHistory for ú z -> ÚfundingHistory)ÚtyperÚ startTimeÚendTimez Content-Typezapplication/json)ÚdataÚheadersér`Nror&rrRg333333Ã?z&WARNING: empty fundingHistory responseÚ minute_hourÚfunding_bps_annual©ÚcolumnsÚint64i`êÚ fundingRateÚfunding_rate_per_houri8"çˆÃ@Tr!zfunding rows: z mean=z+.2fz bps std=z bps range=z..)"Úexistsr2r|r}ÚintrWÚdumpsÚencodeÚurllibÚrequestÚRequestÚ HL_INFO_URLÚurlopenrXÚreadÚdecodeÚextendÚgetr&ÚsleepÚ DataFrameÚastypeÚfloatrrÚparentr*Ú
to_parquetryr•ÚmeanÚstdÚminÚmax)rÚ start_minÚend_minÚcacheÚstart_msÚend_msÚrows_allÚcursorÚbodyÚreqÚchunkÚlast_tsrˆs r1Úfetch_funding_historyr¿Ôð

‡||„~Ü Ð$ U GÐ ˜uÓ9~ Ñ" )€HÜ7| Ñ" )€FÜÐ
)¨$¨¨q°°
¸$¸v¸€HØ
€FØ
6z‰zÐ#3¸TØ(.¸CóDßDJÁFÃHð
än‰n×$¤[°tØ.<Ð>PÐ-QðSˆä
^‰^×
# Ð
Ü—J‘J˜qŸv™v›xŸÓ1ˆE÷Ø Ø˜ÔÜe˜B‘i—m‘m F¨AÓØ  Ø Ø˜1‘ˆÜ
ð 6Œ/ñ Ü Ð |‰| ]Ð4HÐ$IÔ €BؘF™×*¨7Ó3¸ ÑB€B€}ÑØ"$ ]Ñ"3×":Ñ":¼5Ó"A€BÐÑà!Ð"9Ñ:¸AÀGÑK€BÐÑØ ˆ 1Ñ 2× BÑ BÀ=Ó Q× ]Ñ ]Ð^kÓ l€BØ ‡LL×јt¨dÐÔ‡MM܈.œ˜R›˜ ð"Ø×%×,¨TÐ3Ø×*¨4Ð1Ø×&×,¨TÐ2°"°R×5JÑ5J×5NÑ5NÓ5PÐQUÐ4Vð XôYð €I÷3 2ús Ã%2KËKcóh|j«}|ddzdz|d<|j|jddi¬«dd¬«}|dj«|d <|d
|d zj d t
j «}|d
|z d
z
|d<|djt«jd«jtd¬«j«}|djt«|z dz
|d<|djt«}|jd«jtd¬«j«}|djt«}|jd«}|jdtz«} || z
| z dzj«}
||
t zz |d<|S)z?Per minute, compute the four native tensions in physical units.rrrÚminute_hour_floorr”rÚleft)ÚonÚhowr•Ú funding_bpsÚ
taker_buy_usdÚtaker_sell_usdrrÚbs_ratio_signedÚ trade_countrRé2)ÚwindowÚ min_periodsrÚactivity_excessÚsigned_flow_usdé
Ú mid_pricerÚcvd_divergence)ÚcopyÚmergeÚrenameÚffillÚreplaceÚnpÚnanr«ÚshiftÚrollingÚROLL_ACTIVITY_WINr¯Ú ROLL_CVD_WINÚsumÚabsÚEPS_BPS) rˆÚfundingÚoutÚdenomÚ rolling_meanÚsflowÚcvd_60ÚpxÚpx_nowÚpx_thenÚ pct_chg_bpss r1Úcompute_tensionsrêà
'‰')€Cð!$ 
°Ñ 3°rÑ9€CÐÑØ
)‰)G—NN¨MÐ;NÐ+Oð ó 8€CàÐ:€Cˆ
ÑðÑ
! CÐ(8Ñ$9Ñ
BÀ1ÄbÇfÁfÓ M€EØ! 2°UÑ:¸cÑA€CÐÑð,¬UÓ3×9¸<× ¨bðEóç
dƒfðð" 0×ÓÑMÐQTÑT€CÐÑð
Ð "× )¬%Ó 0€EØ
[‰[˜^×
#¬<ÀRÐ
H×
N€FØ ˆ× Ñ ¤Ó '€Bàh‰hqk€FØh‰hqœ<Ñ(€GؘÑ/°'Ñ9×@€KØ" k´GÑ&;Ñ<€CÐÑà €Jr6có¤dt|«t|«t|«t|«dœ}|jtj|««y)inject_density)ÚcmdÚsigmaÚstrength)Ú send_stringrW)ÚpubrîÚpayloads r1Ú _send_injectrõ(s>à˜!“H¤5¨£8ܘe› Ü  ›?ñ,€Gð‡OO”D—JJ˜(r6có0tj|«sy|tdz }ttj|td td­««}t |«dkryt \}}t||tz
|| «t||tz||­«y)uuFunding → x-axis dipole. Positive funding (longs paying) pushes +x,
negative funding (shorts paying) pushes -x.Nr r
çíµ ÷ư>) r×ÚisfiniteÚ MAP_SCALEr¬ÚcliprÞÚCENTERrõÚ
DIPOLE_OFF)ÚcxÚcys r1Úencode_funding_dipolerÿ1s“ô ;‰; ØœYÐ'AÑB€HÜ”R—WW˜X¬ Ð2HÑ(IÐ'IÜ(1Ð2HÑ(IÐ'IóKóL€Hä
ˆ8ƒ}ØÜ
F€BˆÜbœ:o r¨H¨9Ôbœ:o r¨H¨9Õ5r6có,tj|«sy|tdz }ttj|td td­««}t |«dkryt \}}|dkDrdnd}t|||t|zzt |««y)ubs_ratio_signed → y-axis offset blob. Positive = more buying = +y push.
Y-axis chosen to keep funding (x-dipole) and bs_ratio orthogonal.Nr r rrgð¿) r×Ú
OFFSET_OFF)Úsigns r1Úencode_bsratio_velocityr@s”ô ;‰;Ô Ø¤Ð+BÑ!CÑC€HÜ”R—WW˜X¬ Ð2IÑ(JÐ'JÜ(1Ð2IÑ(JÐ'JóLóM€Hä
ˆ8ƒ}ØÜ
F€BˆØ˜a<‰4 T€DÜb˜"œz¨DÑ0´#°h³-Õ@r6cóútj|«sy|tdz }ttj|td dz td­««}t |«dkryt \}}t||||«y)activity_excess → isotropic center blob. Excess is always relative to
own baseline so -1 (zero activity) is a meaningful 'cold' state. We allow
NEGATIVE strength too — quiet minutes pull energy out of the field.Nr
rr)r×)s r1Úencode_activity_isotropicrOs~ô ;‰;Ô Ø¤Ð+BÑ!CÑC€HÜ”R—WW˜X¬ Ð2IÑ(JÐ'JÈSÑ'PÜ(1Ð2IÑ(JÐ'JóLóM€Hä
ˆ8ƒ}ØÜ
F€BˆÜb˜"˜'r6cóÆtj|«sytj|tdz «}t |«dkryt \}}tdz}tt«D]y}dtjz|ztz }|ttj|«zz}|ttj|«zz} |dzdk(r|n| }
t||| |
|«Œ{y)u˜cvd_divergence → vorticity ring around center. N legs alternating signs.
Direction of rotation = sign of divergence. Tanh keeps magnitude bounded.Nrgè?r_r)r×ÚmathÚtanhrùÚSIGMAÚrangeÚVORTICITY_N_LEGSÚpiÚRING_RÚcosÚsinrõ) ÚthetarîÚss r1Úencode_cvd_vorticityr^ô ;‰; Üy‰y˜¬)Ð4HÑ*IÑJ€HÜ
ˆ8ƒ}ØÜ
F€BˆÜ D‰L€EÜ
Ô
Ø”D—GG‘ ˜a‘Ô"2Ñ2ˆØ œ$Ÿ(™( 5›/Ñ Ø œ$Ÿ(™( 5›/Ñ Ø˜Q™ !š‰H¨8¨)ˆÜS˜!˜Q   *r6c
ój|j«\}}t|«|||rtj«|z
dznd|jd«|jd«|jd«|jd«dœ}|tD]}d||<Œ |StD]}|j|«||<Œ|S)Nr)rrÚarmÚ snap_wallÚ snap_age_msrÅ)r]rr&ÚCHANNELS)ÚtelrrrÚtensionsÚsnaprÚrecÚchs r1Ú snapshot_rowrqà—l‘l“nO€Dˆ)ä˜6“{ØØ Ù;DœŸ ™ ›  /°4Ò7È$Ø#Ÿ<™<¨
Ó#Ÿ<™<Ð(9Ó#Ÿ<™<Ð(9Ó#Ÿ<™<Ð(8Ó €Cð €|Üò ˆB؈CŠGð ð
€Jôò #ˆBØ—h‘h˜r“lˆCŠGð €Jr6cótd|dt|«d«|dk(r td«n|dk(r td«g}tj«}|}t|«}tdz }tdz } t |«D];}
tj«} |j |
} | jd «| jd
«| jd «| jd «d
œ}
|dk(rT|Rt||
d «t||
d
«t||