Files
big-qmt/py-client/strategy/trend/__pycache__/state.cpython-311.pyc

50 lines
8.5 KiB
Plaintext
Raw Normal View History

2026-08-28 18:52:27 +08:00
<EFBFBD>
f<>j/<00><01><><00>dZddlmZddlZddlmZmZddlmZddl m
Z
ddl m Z ddl mZd Zd
Zd Zed <0C> <0A><00>Gd<0E>d<0F><00><00><00>ZGd<10>d<11><00>ZdS)u<趋势策略持仓状态的内存管理与 JSON 持久化。<E58C96>)<01> annotationsN)<02>asdict<63> dataclass<73><01>Path)<01>Lock)<01>Iterable)<01>Position<6F><00>ING<4E>OKT)<01>slotsc<01><><00>eZdZUdZded<dZded<dZded<d Zd
ed <eZ ded <dZ
ded <dZ ded<dZ ded<d Z d
ed<eZded<dS)<13> StateItemu'单只证券的底仓和补仓状态。<E68081>str<74>coder <00> base_order_idr<00>int<6E>base_qtyg<00>float<61> base_cost<73> base_status<75>added_order_id<69>add_num<75>add_qty<74>add_cost<73> added_statusN)<0F>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>__annotations__rrr<00> STATUS_NONErrrrrr<00><00><00>strategy\trend\state.pyrrs<><00><00><00><00><00><00><00>1<>1<><0E>I<EFBFBD>I<EFBFBD>I<EFBFBD><1C>M<EFBFBD><1B><1B><1B><1B><15>H<EFBFBD><15><15><15><15><1A>I<EFBFBD><1A><1A><1A><1A>"<22>K<EFBFBD>"<22>"<22>"<22>"<22><1D>N<EFBFBD><1C><1C><1C><1C><14>G<EFBFBD><14><14><14><14><14>G<EFBFBD><14><14><14><14><19>H<EFBFBD><19><19><19><19>#<23>L<EFBFBD>#<23>#<23>#<23>#<23>#<23>#r%rc<01>z<00>eZdZdZdd<06>Zedd <0C><04><00>Zedd<0E><04><00>Zdd<11>Z d d<13>Z
d!d<14>Z d"d<17>Z d#d<18>Z d$d<1A>ZdS)%<25>Stateu<65>线程安全的策略状态存储。
状态以内存字典提供快速访问,并通过临时文件替换的方式写入 JSON
防止程序在写入过程中退出而破坏原状态文件。
<20>path<74>
str | Path<74>return<72>Nonec<01><><00>t|<01><00>|_t<00><00>|_|<00><00><00>|_dS)N)rr)r<00>lock<63>_load<61>items)<02>selfr)s r&<00>__init__zState.__init__0s-<00><00><18><14>J<EFBFBD>J<EFBFBD><04> <09><18>F<EFBFBD>F<EFBFBD><04> <09><19>Z<EFBFBD>Z<EFBFBD>\<5C>\<5C><04>
<EFBFBD>
<EFBFBD>
r%<00>data_dir<69>strategyr<00>
account_id<EFBFBD>'State'c<01>H<00>t|<01><00>|<02>d|<03>d<02>z }||<04><00>S)uE根据数据目录、策略名称和账户生成独立状态文件。<E4BBB6>_z _state.jsonr)<05>clsr3r4r5<00>
state_paths r&<00> for_strategyzState.for_strategy5s3<00><00><1A>(<28>^<5E>^<5E><18>&K<>&K<>J<EFBFBD>&K<>&K<>&K<>K<>
<EFBFBD><12>s<EFBFBD>:<3A><EFBFBD><EFBFBD>r%<00> list[str]c<01>l<00>|j5t|j<00><00>cddd<01><00>S#1swxYwYdS)u6返回当前已经接管的全部证券代码快照。N)r.<00>listr0)r1s r&<00>codesz State.codes@s}<00><00><12>Y<EFBFBD> $<24> $<24><17><04>
<EFBFBD>#<23>#<23> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD> $<24> $<24> $<24> $<24> $<24> $s <00>)<03>-<07>-rrc<01>^<00>|j5|j|cddd<01><00>S#1swxYwYdS)u<获取指定证券的状态;不存在时抛出 KeyError。N)r.r0<00>r1rs r&<00>getz State.getFsx<00><00> <11>Y<EFBFBD> $<24> $<24><17>:<3A>d<EFBFBD>#<23> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD> $<24> $<24> $<24> $<24> $<24> $s <00> "<03>&<07>&<07>itemc<01>d<00>|j5||j|j<ddd<01><00>dS#1swxYwYdS)u'新增或覆盖一只证券的状态。N)r.r0r)r1rCs r&<00>setz State.setKs|<00><00> <11>Y<EFBFBD> )<29> )<29>$(<28>D<EFBFBD>J<EFBFBD>t<EFBFBD>y<EFBFBD> !<21> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29><><EFBFBD><EFBFBD> )<29> )<29> )<29> )<29> )<29> )s <00>%<03>)<07>)c<01>|<00>|j5|j<00>|d<01><00>ddd<01><00>dS#1swxYwYdS)u3删除证券状态证券不存在时不报错。N)r.r0<00>poprAs r&<00>deletez State.deletePs<><00><00> <11>Y<EFBFBD> '<27> '<27> <10>J<EFBFBD>N<EFBFBD>N<EFBFBD>4<EFBFBD><14> &<26> &<26> &<26> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27> '<27><><EFBFBD><EFBFBD> '<27> '<27> '<27> '<27> '<27> 's <00>1<03>5<07>5<07> positions<6E>Iterable[Position]c <01>V<00>t|j<00><00>}|D]}}|jr|jdks|jdks |j|vr<01>)|<00>t |j|j|jt <00><02><00><00><00>|<02>|j<00><00><00>~|<00><00><00>dS)u<>把尚未接管的真实持仓初始化为已完成底仓。
无证券代码、无持仓数量或成本无效的记录会被忽略。同步结束后
立即保存,确保首次接管的持仓在程序重启后仍可恢复。
r)rrrrN) rEr?<00>
stock_code<EFBFBD>volume<6D>
open_pricer<00> STATUS_OK<4F>add<64>save)r1rI<00> known_codes<65>positions r&<00>sync_positionszState.sync_positionsUs<><00><00> <1A>$<24>*<2A>o<EFBFBD>o<EFBFBD> <0B>!<21> 1<> 1<>H<EFBFBD><1C>'<27> <19><1B>?<3F>a<EFBFBD>'<27>'<27><1B>&<26>!<21>+<2B>+<2B><1B>&<26>+<2B>5<>5<><18> <10>H<EFBFBD>H<EFBFBD><19>!<21>,<2C>%<25>_<EFBFBD>&<26>1<> )<29> <12><12><12> <0E> <0E> <0E> <18>O<EFBFBD>O<EFBFBD>H<EFBFBD>/<2F> 0<> 0<> 0<> 0<> <0C> <09> <09> <0B> <0B> <0B> <0B> r%c<01><><00>|j5|jj<00>dd<01><02><00>|j<00>|jjdz<00><00>}d<04>|j<00><00><00>D<00><00>}|<01>tj |dd<06><07><00>dzd <09>
<EFBFBD><00>|<01>
|j<00><00>d d d <0B><00>d S#1swxYwYd S) uD将内存状态格式化写入 JSON并原子替换正式文件。T)<02>parents<74>exist_okz.tmpc<01>4<00>i|]\}}|t|<02><00><00><02>Sr$)r<00><03>.0rrCs r&<00>
<dictcomp>zState.save.<locals>.<dictcomp>vs4<00><00><0E><0E><0E><1E>D<EFBFBD>$<24><15>f<EFBFBD>T<EFBFBD>l<EFBFBD>l<EFBFBD><0E><0E>r%F<>)<02> ensure_ascii<69>indent<6E>
<EFBFBD>utf-8<><01>encodingN) r.r)<00>parent<6E>mkdir<69> with_suffix<69>suffixr0<00>
write_text<EFBFBD>json<6F>dumps<70>replace)r1<00>temporary_path<74>payloads r&rQz
State.saveqs*<00><00> <11>Y<EFBFBD> .<2E> .<2E> <10>I<EFBFBD> <1C> "<22> "<22>4<EFBFBD>$<24> "<22> ?<3F> ?<3F> ?<3F>!<21>Y<EFBFBD>2<>2<>4<EFBFBD>9<EFBFBD>3C<33>f<EFBFBD>3L<33>M<>M<>N<EFBFBD><0E><0E>"&<26>*<2A>"2<>"2<>"4<>"4<><0E><0E><0E>G<EFBFBD> <1B> %<25> %<25><14>
<EFBFBD>7<EFBFBD><15>q<EFBFBD>A<>A<>A<>D<EFBFBD>H<> <20> &<26> <0E> <0E> <0E> <1B> "<22> "<22>4<EFBFBD>9<EFBFBD> -<2D> -<2D> -<2D> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E><><EFBFBD><EFBFBD> .<2E> .<2E> .<2E> .<2E> .<2E> .s<00>B5C
<03>
C<07>C<07>dict[str, StateItem]c<01><><00> tj|j<00>d<01><02><00><00><00>}n>#t$ricYSt
tjf$r}td|<02><00><02><00>|<02>d}~wwxYwt|t<00><00>std<05><00><00> d<06>|<01>
<00><00>D<00><00>S#ttf$r}td|<02><00><02><00>|<02>d}~wwxYw)uB读取已有状态文件文件不存在时从空状态开始。r`rau [状态] 读取或解析失败: Nu3[状态] 状态文件根节点必须是 JSON 对象c<01>.<00>i|]\}}|tdi|<02><01><01><02>S)r$)rrYs r&r[zState._load.<locals>.<dictcomp><3E>s<<00><00><0E><0E><0E><1E>D<EFBFBD>$<24><15>i<EFBFBD>'<27>'<27>$<24>'<27>'<27><0E><0E>r%u[状态] 状态字段无效: ) rh<00>loadsr)<00> read_text<78>FileNotFoundError<6F>OSError<6F>JSONDecodeError<6F>
ValueError<EFBFBD>
isinstance<EFBFBD>dictr0<00> TypeError)r1<00>raw<61>excs r&r/z State._load<61>s!<00><00> P<01><16>*<2A>T<EFBFBD>Y<EFBFBD>0<>0<>'<27>0<>B<>B<>C<>C<>C<EFBFBD>C<EFBFBD><43> <20> <16> <16> <16><15>I<EFBFBD>I<EFBFBD>I<EFBFBD><17><14>-<2D>.<2E> P<01> P<01> P<01><1C>E<><03>E<>E<>F<>F<>C<EFBFBD> O<><4F><EFBFBD><EFBFBD><EFBFBD> P<01><><EFBFBD><EFBFBD><1A>#<23>t<EFBFBD>$<24>$<24> T<01><1C>R<>S<>S<> S<> M<01><0E><0E>"%<25>)<29>)<29>+<2B>+<2B><0E><0E><0E> <0E><><1A>:<3A>&<26> M<01> M<01> M<01><1C>B<>S<EFBFBD>B<>B<>C<>C<><13> L<><4C><EFBFBD><EFBFBD><EFBFBD> M<01><><EFBFBD>s2<00>-0<00> A+<03>A+<03>A&<03>&A+<03>B1<00>1C<03>C<03>CN)r)r*r+r,)r3r*r4rr5rr+r6)r+r<)rrr+r)rCrr+r,)rrr+r,)rIrJr+r,)r+r,)r+rm)rrr r!r2<00> classmethodr;<00>propertyr?rBrErHrTrQr/r$r%r&r(r()s<><00><00><00><00><00><00><08><08> "<22>"<22>"<22>"<22>
<11><1F><1F><1F><11>[<5B><1F><0E>$<24>$<24>$<24><0E>X<EFBFBD>$<24>
$<24>$<24>$<24>$<24>
)<29>)<29>)<29>)<29>
'<27>'<27>'<27>'<27>
<14><14><14><14>8 .<2E> .<2E> .<2E> .<2E>M<01>M<01>M<01>M<01>M<01>Mr%r()r!<00>
__future__rrh<00> dataclassesrr<00>pathlibr<00> threadingr<00>typingr <00>sdkr
r#<00>
STATUS_INGrOrr(r$r%r&<00><module>r<>s<00><01>B<>B<>"<22>"<22>"<22>"<22>"<22>"<22> <0B> <0B> <0B> <0B>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29><18><18><18><18><18><18><1A><1A><1A><1A><1A><1A><1B><1B><1B><1B><1B><1B><18><18><18><18><18><18><11> <0B> <12>
<EFBFBD> <10> <09> <0B><19><14><16><16><16>$<24>$<24>$<24>$<24>$<24>$<24>$<24><17><16>$<24>(iM<01>iM<01>iM<01>iM<01>iM<01>iM<01>iM<01>iM<01>iM<01>iMr%