
    Aj                     (   d Z ddlZddlZddlZej                            dd           ddlZddlZ ej	        d           ddl
mZ ddlZej        j                            d           dej        d<   dgej        d	<   d
ej        d<   ddlZddlmZ ddlmZmZ d\  ZZZdZe dZ ej         ee d                    Zd  ej         ee d                    D             Z  ej!        dd          Z"d Z# e$dd           ddl%Z&e&j'        Z' e(ed         d         d         ed                   Z) e$de) d           d Z*g g cZ+Z,ed          -                                D ]\  Z.Z/e'e/d!                  e/d"                  0                    d#          1                    d$          Z2 e3e2e2d#         e)k             j4        d         d%                   Z5e/d&         e5z  d'ez
  z  d'ez
  z  Z6e+7                    e. e*e.          e 8                    e.i           8                    d(d)          ee/d!                  e/d*         e6e/d+         z  d'z
  d,z  e6e/d+         z
   e#e/d-         e)          e/d-         d.	           ed/         D ]Z9e,7                    e9d"          e*e9d"                   e 8                    e9d"         i           8                    d(d)          ee9d!                  e98                    d*d          e9d0         d,z  e9d1         e9d2          e#e9d-         e9d3                   e9d3         d4
           e+:                    d5 6            e;d7 ed/         D                       Z< e;d8 e+D                       Z=ed9          e;d: ed          >                                D                       z   Z? e@e+           e@e,          cZAZB e$d;eA d<eB d=ed9         d>d?e<d@dAe=d@dBe?d>            ejC        dCd'dD e(dEdFeAz  dGeBz  z   dHz             fI          \  ZDZE e( e(dJ e+e,z   D                       dK          ZFeFdLz  ZGeEd         ZH ejI         e@e+                    ZJdM e+D             ZKeHL                    eJdN e+D             eKdOdPQ            eMeJe+          D ]\  ZNZOeOdR          dSeOd!          dTeOd*         dUZPeOdV         rePdWeOdV          z  ZPePdXeOdY          dZz  ZP eQeOd[                   d\k    rqeHR                    eOd[         dCz  eNeOd[         d]d^d_d_d`dadbc           eHR                    eOd[         eOd[         dk    rddndez   eNePd_eOd[         dk    rdfndgdhi           eOd[         d]djePz   ZPeHR                    eOd[         eOd[         dk    rdkndlz   eNePd_eOd[         dk    rdfndgdhi           eHS                    g            eHT                    ddmdkn           eHU                    eG eG            e;do e+D                       ZVeHW                    dpeA dqeV dreAeVz
   dse=d@dte) dudvw           eEd'         ZH ejI         e@e,                    ZXdx e,D             ZYeHL                    eXdy e,D             eYdzd{Q            eMeXe,          D ]\  ZNZOeOdR          dSeOd!          dTeOd*         dUZPeOdV         rePdWeOdV          z  ZPePdXeOdY          d|eOd[         d]d^z  ZPeHR                    eOd[         eOd[         dk    rddndez   eNePd_eOd[         dk    rdfndgd}eYeN         db~           eHS                    g            eHT                    ddmdkn           eHU                    eG eG           eHW                    deB de<d@ddvw           eDZ                    de?d>ded9         d>de<d@de=d@d	dw            ej[                      ej\        edd            e$de d           dS )u   模拟盘持仓状态图(方案A定稿): 上=持仓浮盈浮亏(中文名+行业+强度+持有天数), 下=已平仓结算(原因+金额)
输出: {QUANT}/backtest_zt_full/sim_state_pnl.png (供17:00推送)    Nz/Users/xpresso/zt_app/codeAggz(/System/Library/Fonts/STHeiti Medium.ttcz
sans-serifzfont.familyzNoto Sans CJK SCzfont.sans-serifFzaxes.unicode_minus)PN)datetime	timedelta)gMbP?gMb0?g{GzT?z/Users/xpresso/zt_appz#/backtest_zt_full/sim_state_pnl.pngz/sim_trading_state.jsonc                      i | ]}|d          |S )ts_code .0rs     plot_sim_state.py
<dictcomp>r      s    bbbA)abbb    z%/backtest_zt_full/stock_industry.json20260901%Y%m%dc                     t          j        | d          t          j        |d          }}d}|}||k     r6|t          d          z  }|                                dk     r|dz  }||k     6t	          |d          S )Nr   r      )days   )r   strptimer   weekdaymax)abdadbncurs         r   tdaysr      s    q(++X->q(-K-KB	A
C
((ya    ;;==1FA (( q!99r   u   加载行情(约5分钟)...T)flushnav_historydate	last_dateu   最新日: c                 d    t                               | i           }|                    d|           S )Nname)infoget)coder   s     r   nmr*   ,   s)    rA55r   	positionspoolr)   
trade_datedrop	raw_closesharesr   industry stdspentd   buy_date)	r)   r&   indr,   r4   retpnlr   buyclosedret_netr:   reason	sell_date)
r)   r&   r8   r,   r4   r9   r:   r>   r   sellc                     | d         S )Nr9   r	   )r   s    r   <lambda>rB   @   s
    QuX r   )keyc              #   &   K   | ]}|d          V  dS r:   Nr	   )r   cs     r   	<genexpr>rG   A   s&      ..Aqx......r   c              #   &   K   | ]}|d          V  dS rE   r	   r
   s     r   rG   rG   B   s&      ++Aqx++++++r   cashc              #   (  K   | ]}|d          t           |d                  |d                                      d                              d                              d          j        d         d         z  d	t
          z
  z  d	t          z
  z  V  d
S )r1   r,   r)   r-   Tr.   ztrade_date==@todayr   r0   r   N)cachesort_valuesreset_indexqueryilocSLIPC_SELL)r   poss     r   rG   rG   C   s       > > ! Xs6{);CK)H%+l33KKTK4J4J% 455d1*>>I*K KNORVhX[\_e[eg > > > > > >r   u   持仓u    平仓u    现金z,.0fu
    已实现z+,.0fu    浮动u    总         gp=
ף?g?g	@)figsizec              #   @   K   | ]}t          |d                    V  dS )r9   N)absr
   s     r   rG   rG   K   s,      <<1QuX<<<<<<r   
   g?c                 .    g | ]}|d          dk    rdndS )r9   r   #c62828#2e7d32r	   r
   s     r   
<listcomp>r]   Q   s(    EEEaQuX]]			EEEr   c                     g | ]
}|d          S r9   r	   r
   s     r   r]   r]   R   s    (((AeH(((r   g)\(?gQ?)coloralphaheightr&    u    强z.0fr8      ·u    持r   u   天r9   g      @z+.1f%center   whitebold)vahafontsizer`   
fontweightgffffff?gffffffleftrightg!@)rj   rk   rl   z%  g?gz#555)r`   lwc              #   2   K   | ]}|d          dk    dV  dS )r9   r   r   Nr	   r
   s     r   rG   rG   e   s*      44Qqx!||q||||44r   u   当前持仓u   只 · 浮盈u
   只/浮亏u   只 · 浮动合计u   元 (截至u   收盘)   )rl   c                 .    g | ]}|d          dk    rdndS )r:   r   r[   r\   r	   r
   s     r   r]   r]   k   s(    DDDqah!mmDDDr   c                     g | ]
}|d          S r_   r	   r
   s     r   r]   r]   l   s    '''!QuX'''r   g333333?g333333?u   天 g      #@)rj   rk   rl   r`   weightu   已平仓结算u   笔 · 已实现收益u   元u    模拟盘持仓状态: 总资产u   元 (初始10万, 现金u   , 已实现u	    + 浮动)      tight)dpibbox_inchesu   已保存: )]__doc__jsonsysospathinsertnumpynp
matplotlibusematplotlib.pyplotpyplotpltmatplotlib.font_managerfont_managerfontManageraddfontrcParamsgrid_orgscan_daily_tbr   r   r   rP   C_BUYrQ   QUANTOUTloadopenstr'   r   d0r   printsim_live_dailysrK   r   todayr*   	rows_holdrows_clitemsr)   rR   rL   rM   dfloatrO   r   val_nowappendr(   rF   sortsumrealizedfloatingvaluestotallenn_holdn_clsubplotsfigaxesmaxabslimaxarangeycolsbarhzipyir   labrX   text
set_yticksaxvlineset_xlimn_profit	set_titley2cols2suptitletight_layoutsavefigr	   r   r   <module>r      sg  G G             / 0 0 0         
u              
  # + +,V W W W*] #5"6 %*! "           ( ( ( ( ( ( ( (5 eV	333TYttu5556677bb4450_0_0_+`+`!a!abbbXz8,,	 	 	 #4 0 0 0 0    	B}b!&)2k?;; E4 ( ( ( (    	7K&&(( V VID#c&k3v;'33LAAMMSWMXXA
%!L/U*+03K@
A
AC(mc!QX.!f*=GdBBtHHTXXdB=O=O=S=ST^`b=c=c Voc%j%G4q8C?RUV]R^H^#eC
OU;;C
OU U V V V V
 
H [ [ANNAfIrr!F)}}TXXaPViY[E\E\E`E`akmoEpEpqyM!%%q//Y<#-ah!H+!E!J-;@@!K.Z Z [ [ [ [ 
%% & & &3..H.....3+++++++
6
SS > > %'{O$:$:$<$<> > > > > 	> s9~~ss7|| }v}}d}}2f:}}}h}}}]e}}}qv}}} ~ ~ ~CLACC4&=4$;3NQT3T,U,U'VWWW	T	SS<<	G(;<<<<<b	A	Atm 
!WBIcc)nnEE9EEE ((i(((D N N NSI T TEBvY
6
66
6
6%
6
6
6Cx AeH !F)    C
s1U8}}s
%1bQuX"5"5"5"51GPV 	 	X 	X 	X
%1U8q==CCd;R!E(a--Ws 	 	T 	T 	T 	T 5####c)
%1U8q==CCd;R!E(a--Ws 	 	T 	T 	T 	T b    

1Fs
 # # # SD#   344)44444   SF  S  S  S  SVH_  S  Siq  S  S  S  EJ  S  S  S  ^`  a  a  a 
!WRYss7||DDGDDD ''w'''uD M M MSW , ,EBvY
6
66
6
6%
6
6
6Cx AeH1!F)11511111CGGAeHqx1}}$7Sah!mmFF3)F  , , , , b    

1Fs
 # # # SD#    NtNN8NNNNY[ \ \ \   [  [  [  [TVW]T^  [  [  [px  [  [  [  JR  [  [  [  [          CSg . . . . C & & & & & &r   