1
2026-06-04 ed6e3f4b7241ce6ee7e31c1952daa59e652f7eea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Ë
)Dj*$ãó8—ddlmZddlZddlZddlZddlmZmZddlm    Z    e    e
«j«jdZ dZdZdZe d    z d
z ez Ze d    z d z ez Ze d    z d z ez ez Zdd „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zedk(re«yy)é)Ú annotationsN)ÚdateÚ    timedelta)ÚPathéz!EXP-20260601-TIMESERIES-SMOKE-001z!RUN-20260601-TIMESERIES-SMOKE-001Ú    OBJECT001zexp-dataÚrawÚresultÚimgcó€—|j«jtj««j«S©N)ÚresolveÚ relative_toÚ PROJECT_ROOTÚas_posix)Úpaths úJD:\manage_system\project B\exp-data\tmp\run_timeseries_smoke_experiment.pyÚrelrs+€Ø <‰<‹>× %Ñ %¤l×&:Ñ&:Ó&<Ó =× FÑ FÓ HÐHócó‡—tj«}|jd«5Štˆfd„d«D]}|j    |«Œ    ddd«|j «S#1swY|j «SxYw)NÚrbcó&•—‰jd«S)Ni)Úread)Úfs€rÚ<lambda>zsha256_file.<locals>.<lambda>sø€ !§&¡&¨Ô"5rr)ÚhashlibÚsha256ÚopenÚiterÚupdateÚ    hexdigest)rÚhÚchunkrs   @rÚ sha256_filer$s`ø€Ü‰Ó€AØ     ‰4Œ˜AÜÓ5°sÖ;ˆEØ H‰HUOñ<÷
ð ;‰;‹=Ð÷
ð ;‰;‹=Ðús §&A&Á&A>có®—g}|}t|«|krB|j«dkr|j|«|td¬«z }t|«|krŒB|S)Néé)Údays)ÚlenÚweekdayÚappendr)ÚstartÚnr(Úcurrents    rÚ business_daysr/ sU€Ø€DØ€GÜ
ˆd‹)aŠ-Ø ?‰?Ó ˜qÒ  Ø K‰K˜Ô  Ø”9 !Ô$Ñ$ˆô ˆd‹)a‹-ð €Krcó—ttddd«d«}gd¢}g}|d}tt||«d¬«D]Ä\}\}}|d|dzdk(rd    nd
zz}t    ||«d z}t ||«d z}    d |dzz|dvrdndz}
|j ttt|j«t|d«t|d«t|    d«t|d«t|
«d|j«›ddœ «|}ŒÆ|S)Niêr&r'é)g$@g¤p=
×£#@g€#@g\Âõ(\#@gffffff#@g
×£p=Š#@gÃõ(\Â#@gš™™™™$@gÂõ(\$@g=
×£p=%@gš™™™™%@g{®Gáz%@gÍÌÌÌÌÌ%@g¸…ëQ¸%@gš™™™™&@gq=
×£p&@g\Âõ(\&@g¸…ëQ¸&@g'@g×£p=
×&@r)r,rgü©ñÒMb`?gü©ñÒMbP¿g}?5^ºIð?g…ëQ¸…ï?i †id>é    é
é iȯÚSYNTHETIC_TIMESERIES_SMOKEz     15:00:00) Ú experiment_idÚrun_idÚ    object_idÚ
event_daterÚhighÚlowÚcloseÚvolumeÚ data_sourceÚsource_visible_at) r/rÚ    enumerateÚzipÚmaxÚminr+Ú EXPERIMENT_IDÚRUN_IDÚ    OBJECT_IDÚ    isoformatÚroundÚint) r(ÚclosesÚrowsÚ
prev_closeÚidxr9r<Ú
open_pricer:r;r=s            rÚbuild_synthetic_ohlcrO*s!€Ü œ˜d A qÓ)¨2Ó .€Dò€Fð,%'€Dؘ‘€JÜ$-¬c°$¸Ó.?Àq×$IÑ ˆÑ  ˆj˜%Ø 1°°q±¸A²©À6Ñ#JÑKˆ
ܐ:˜uÓ%¨Ñ-ˆÜ*˜eÓ$ uÑ,ˆØ˜# ™*Ñ$°¸ Ñ1C©ÈÑKˆØ  ‰ ä!.Ü Ü&Ø(×2Ñ2Ó4ܘj¨!Ó,ܘd A›Ü˜S !“}ܘu a›Ü˜f›+Ø;Ø(2×(<Ñ(<Ó(>Ð'?¸yÐ%Iñ ô    
ð‰
ð)%Jð* €Krc    óˆ—|Dcgc]}t|d«‘Œ}}g}d}d}t|«D]\}}|dk\r"tt||dz
|dz«dz d«}nd}t|d«}t    |duxr|duxr||kDxr |duxr||k«}    |j i|¥|€dn|t |    «ddœ¥«|}|}Œ|Scc}w)Nr<ér'r&ÚÚ$close_cross_above_ma5_after_pullback)Úma5Úma5_breakout_flagÚ signal_rule)Úfloatr@rHÚsumÚboolr+rI)
rKÚrowrJÚoutputrLÚprev_ma5rMrTr<Úbreakouts
          rÚadd_ma_and_signalr^\s€Ù-1Ó 2©T cŒeC˜‘LÕ!¨T€FÐ 2Ø&(€FØ€JØ€Hܘd–O‰ˆˆSØ !Š8Üœ˜F 3¨¡7¨S°1©WÐ5Ó6¸Ñ:¸AÓ>‰CàˆCܐc˜'‘lÓ#ˆÜ˜ 4˜òG¨H¸DÐ,@òGÀUÈSÁ[òGÐU_ÐgkÐUkòGÐpzðGñqGóHˆØ ‰ ð Øð à ˜[‘r¨cÜ%(¨£]ØEò     ô    
ðˆ
؉ð!$ð" €Mùò+3s…B?có4—|jjdd¬«|jddd¬«5}tj|t |dj ««¬«}|j«|j|«ddd«y#1swYyxYw)    NT©ÚparentsÚexist_okÚwz    utf-8-sigrR)ÚencodingÚnewliner)Ú
fieldnames)    ÚparentÚmkdirrÚcsvÚ
DictWriterÚlistÚkeysÚ writeheaderÚ    writerows)rrKrÚwriters    rÚ    write_csvrpusr€Ø‡KK×јd¨TÐÔ2Ø     ‰3 °bˆÔ    9¸QÜ—‘ ¬d°4¸±7·<±<³>Ó.BÔCˆØ×ÑÔØ×јÔ÷
:×    9Ñ    9ús ²ABÂBc󯇇‡‡—|jjdd¬«d}d}dŠ|‰dzz
Š|Dcgc]}dD]}t||«‘ŒŒ}}}t|«Št    |«Šd9ˆˆˆˆfd„ }|‰dzz
t |«z }d    |›d
|›d |›d |›d     ddd‰›d|‰z
›d|‰z
›d|‰z
›d    d‰›d‰›d‰›d|‰z
›d    g}    t |«D]L\}
}‰|
|zz|dz z} t|d«} t|d«} t|d«}t|d«}| | k\rdnd}t|| «|| ««}t    t|| «|| «z
«d«}|    jd| d›d||«d›d| d›d||«d›d|›d «|    jd| |dzz
d›d |d›d!|d"zd›d
|d›d#|›d$ «t|d%«d&k(sŒ|    jd'| d›d(|| «d)z
d›d*«|    jd+| d,zd›d || «d-z
d›d.«ŒOg}t |«D]F\}
}|d/d0k7sŒ‰|
|zz|dz z} |j| d›d1|t|d/««d›«ŒH|r5|    jd2d j|«›d3«|    jd4«|    jd5«|jd6j|    «d7¬8«ycc}}w):NTr`i˜i¤é2r)r:r;có&•—‰‰|z
‰‰z
z ‰zzSr ©)ÚpriceÚmarginÚmax_pÚmin_pÚplot_hs €€€€rÚyzwrite_svg.<locals>.y‡s ø€Ø˜ ™¨5°5©=Ñ9¸FÑBÑBÐBrz/<svg xmlns="http://www.w3.org/2000/svg" width="z
" height="z" viewBox="0 0 Ú z">z1<rect width="100%" height="100%" fill="#fbfaf6"/>z<text x="50" y="28" font-size="18" font-family="Consolas, monospace">Timeseries smoke experiment: OBJECT001 / MA5 breakout</text>z
<line x1="z" y1="z" x2="z" y2="z" stroke="#777"/>rr<r:r;z#c0392bz#1f6f50z.2fz
" stroke="z" stroke-width="2"/>z    <rect x="gÐ?z" y="z    " width="gà?z" fill="z" opacity="0.85"/>rUr'z <circle cx="z" cy="r4z" r="6" fill="#2563eb"/>z    <text x="ééz/" font-size="12" fill="#2563eb">breakout</text>rTrRÚ,z<polyline points="z1" fill="none" stroke="#f59e0b" stroke-width="2"/>z=<text x="760" y="58" font-size="13" fill="#f59e0b">MA5</text>z</svg>Ú
úutf-8©rd)rurWÚreturnrW) rgrhrWrCrBr)r@Úabsr+rIÚjoinÚ
write_text)rrKÚwidthÚheightrZÚkÚpricesrzÚstepÚpartsrMÚxÚopen_pÚclose_pÚhigh_pÚlow_pÚcolorÚbody_topÚbody_hÚ    ma_pointsrvrwrxrys                    @@@@rÚ    write_svgr•}sšû€Ø‡KK×јd¨TÐÔ2Ø €EØ €FØ €FØ f˜q‘jÑ  €FÙ'+Ô E¡t ³_°ŒeC˜‘Fm°_ˆm t€FÑ EÜ ‹K€EÜ ‹K€E÷CðCð F˜Q‘JÑ ¤# d£)Ñ +€Dà
9¸%¸À
È6È(ÐRaÐbgÐahÐhiÐjpÐiqÐqsÐtØ;ð    LØ
VH˜F 6¨&¡= /°¸¸f¹ °~ÀVÈFÐSYÉMÈ?ÐZkÐlØ
VH˜F 6 (¨&°°¸¸vÀf¹}¸oÐM^Ð_ð  €Eô˜d—O‰ˆˆSØ S˜4‘ZÑ  $¨¡(Ñ *ˆÜs˜6‘{Ó#ˆÜ˜˜G™ Ó%ˆÜs˜6‘{Ó#ˆÜc˜%‘jÓ!ˆØ$¨Ò.‘    °IˆÜ‘q˜“y¡! G£*Ó-ˆÜ”S™˜6›¡Q w£ZÑ/Ó0°!Ó4ˆØ  ‰ z ! C ¨©q°«y¸¨o¸VÀAÀcÀ7È&ÑQRÐSXÓQYÐZ]ÐP^Ð^hÐinÐhoðpDðEô    FØ  ‰ y  T¨D¡[¡°Р5°U¸8ÀC¸.È    ÐRVÐY\ÑR\Ð]`ÐQaÐakÐlrÐsvÐkwÐwðAFð@GðGYðZô    [Ü ˆsÐ&Ñ'Ó (¨AÔ -Ø L‰L˜<¨¨# w¨f±Q°w³ZÀ"±_ÀSÐ4IÐIaÐbÔ cØ L‰L˜9 Q¨¡U¨3 K¨u±Q°w³ZÀ"±_ÀSÐ4IÐIxÐyÖ zð$ð€Iܘd–O‰ˆˆSØ ˆu‰:˜Ó ؘ˜t™Ñ# d¨Q¡hÑ.ˆAØ × Ñ   #˜w a©¬%°°E±
Ó*;Ó(<¸SÐ'AÐBÕ Cð$ñØ  ‰ Ð)¨#¯(©(°9Ó*=Ð)>Ð>oÐpÔqØ  ‰ ÐTÔUØ    ‡LLÔ؇OOD—I‘I˜eÓ$¨w€OÕ7ùóMFsµKc óX—tjdd¬«tjdd¬«tjdd¬«t    «}t |«}t d„|D««}tdz }tdz }tdz }tdz }tdz }td    z }td
z }    t||«t||«t||«ttd d t|«d |t|«t|«t|«ddœ }
|jtj|
dd¬«d¬«|jdj!dddt›dt›ddddg«d¬«dt|«dt|«t#|«dœg} t|| «g} |dt|«f|dt|«f|dd f|d d f|d!d f|d"t| «ft%t&«d#d ffD]9\} }}| j)| j*t| «||t#| «d$œ«Œ;t|    | «y)%NTr`c3ó8K—|]}t|d«–—Œy­w)rUN)rI)Ú.0rZs  rÚ    <genexpr>zmain.<locals>.<genexpr>³sèø€ÐLÁ ¸”s˜3Ð2Ñ3×4Á ùs‚zsynthetic_timeseries_input.csvztimeseries_signal_result.csvz-OBJECT001_2026-05_timeseries_ma5_breakout.svgz summary.jsonz
readout.mdzinput_manifest.csvzoutput_manifest.csvÚPASS__ENVIRONMENT_SMOKE_READYzAsynthetic data; environment smoke only; not a business conclusionr'zFnot applicable for synthetic environment smoke; no business conclusion) r6r7ÚstatusÚ data_policyÚ    row_countÚ object_countÚ signal_countÚ    raw_inputÚ result_tableÚchartÚfuture_function_requirementFr)Ú ensure_asciiÚindentr€rrz%# Timeseries smoke experiment readoutrRzexperiment_id: zrun_id: us结论:实验环境闭环通过。合成时序数据、结果表、SVG å›¾ã€summary å’Œ manifest å‡å·²ç”Ÿæˆã€‚uè¾¹ç•Œï¼šæœ¬å®žéªŒåªéªŒè¯å®žéªŒä½“系能记录、执行、归档和审计一个轻量时序图实验,不证明任何业务规则有效。r )ÚartifactrÚ artifact_rolerrr¡r¢ÚsummaryÚreadoutÚinput_manifestÚ runner_script)r¦rr§Úrow_count_or_countr)ÚRAW_DIRrhÚ
RESULT_DIRÚIMG_DIRrOr^rXrpr•rDrEr)rr…ÚjsonÚdumpsr„r$rÚ__file__r+Úname)Úraw_rowsÚ result_rowsrŸÚraw_csvÚ
result_csvÚ    chart_svgÚ summary_jsonÚ
readout_mdrªÚoutput_manifestr¨Ú
input_rowsÚ manifest_rowsrÚrolerKs                rÚmainr¿¬sU€Ü ‡MM˜$¨€MÔ.Ü×јT¨DÐÔ1Ü ‡MM˜$¨€MÔ.ä#Ó%€HÜ# HÓ-€KÜÑLÁ ÓLÓL€LäÐ8Ñ8€GÜÐ<Ñ<€JÜÐIÑI€IÜ Ñ.€LܘlÑ*€JÜÐ"6Ñ6€NÜ Ð#8Ñ8€Oä ˆgxÔ Ü ˆj˜+Ô&Ü ˆi˜Ô%ô'ÜØ1ØZܘ“]ØØ$ܘ“\ܘJ›ÜY“Ø'oñ €Gð×ÑœDŸJ™J w¸UÈ1ÔMÐX_ÐÔ`Ø×ÑØ     ‰    à7ØØ!¤- Ð1Øœ6˜(Ð#ØðFØð`ð     ó     
ððôð$9ܘ“LØ(ܘX›Ü! 'Ó*ñ     
ð€Jôˆn˜jÔ)à€Mà    +œs 8›}Ð-Ø    ^¤S¨Ó%5Ð6Ø    G˜QÐØ    y !Ð$Ø    Y Ð"Ø    Ð)¬3¨z«?Ð;Ü     Œh‹˜¨!Ð,óшˆdDð    ×Ñà ŸI™IܘD›    Ø!%Ø&*Ü% dÓ+ñ  õ    
ðô$ˆo˜}Õ-rÚ__main__)rrr‚Ústr)r,rr-rIr‚z
list[date])r‚úlist[dict[str, object]])rKrÂr‚rÂ)rrrKrÂr‚ÚNone)r‚rÃ)Ú
__future__rrirr°ÚdatetimerrÚpathlibrr²rrarrDrErFr­r®r¯rr$r/rOr^rpr•r¿Ú__name__rtrrÚ<module>rÈsÇðÝ"ã
ÛÛ ß$ÝñH‹~×%Ñ%Ó'×/Ñ/°Ñ2€ Ø3€ Ø    ,€Ø €    à
˜Ñ
# eÑ
+¨fÑ
4€Ø ˜JÑ &¨Ñ 1°FÑ :€
Ø
˜Ñ
# eÑ
+¨mÑ
;¸fÑ
D€óIóóó/ódó2ó,8ó^Q.ðh ˆzÒÙ…Fðr