
    ~jD5                        d Z ddlZddlZddlZddlZddlZddlZ ej	        d           ddl
mZ ddlmZ g dej        d<   dej        d<   ej                            dd           ddlZddlZej        Zd	d
dddZdddddddddddddddddddddddd ddd!dd"dddd#dd ddddddd$ddd%ddd&d$d"d'ddZd( Zd-d)Zdadad*adad+ Z e!d,k    r e              dS dS ).uM   四池理想策略收益最高10笔交易详情(共40笔), 定稿模板画法    NAgg)STHeitizNoto Sans CJK SCzWenQuanYi Zen HeiSimHeizDejaVu Sanszfont.sans-serifFzaxes.unicode_minusz/tmpu	   沪深300u	   中证500u
   中证1000u
   中证2000)hs300zz500zz1000zz2000maN   ffffff?              )vol_basema_n
vol_shrink
shrink_winbreak_upbreak_strengthzt_vol_filter      ?Gz?gffffff?)bpprofitddstophold   g?
   {Gz?g      @g?g      ?g?ztg333333?g      @g333333?g?g?2   c                 f
   |                      d                              d          } | d                             t                    j        }| d                             t                    j        }| d                             t                    j        }| d         j        }|                    d          rd}n|                    d	          rd
}nd}|d         |d         |d         }}
}	t          |d                   t          |d                   t          |d                   }}}|                    d|                    dd                    }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }t          |           }t          j
        ||dz
  k              d         D ]}|d z   |k    r||         }|dk    r|d!k    r-|t          d|d!z
            |                                         n|d"|                                         }|dk    r|dk    s	|||z  k     r|dk    r|dk    r
|||z  k    r||         }|dk    r|d#|z
  z  nd"}d"}d"} t          |d#z   t          ||z   d#z   |                    D ]}!d$}"|	d%v r||!         ||
z  k     rd}"|	d&v rf|!|k    r-|t          d|!|z
            |!                                         n|d"|!                                         }#|#dk    r||!         |#|
z  k     rd}"|"re||!         |k     rY|||!         |k     r|dk    r,t          |         dk    r||!         t          |         |z  k     r| ||!         | k     r
||!         } |!}|t          |d#z   t          ||z   d#z   |                    D ]}$||$         |d#|z   z  k    rd}%|dk    r|dk    r||$         ||z  k     rd$}%|%r|dk    r|dk    r||$         ||z  k    rd$}%|%ru|dk    s|dk    ri|$|d#z   k    r||d#z   |$                                         n||$         }&|&dk    r1|dk    r||$         |&|z  k     rd$}%|%r|dk    r||$         |&|z  k    rd$}%nd$}%|%s|$d#z   |k     r||$d#z            |k    r	|||$fc c S  nd'S )(u[   返回匹配buy_date的信号链 — 与引擎signal_detect一致(ta选最低+量能参数)
trade_dateTdroppct_chg	hfq_closevol)6000g#@)3068gfffff3@gfffff=@r   r   r   r   r   r   
t0_vol_maxr   r   
t0_vol_minr   	ta_dd_maxt0_open_maxt0_prev_limitta_low_floor	tb_t0_min	tb_t0_max
tb_vol_min
tb_vol_max皙?   r   N   F)r!   or)r
   r;   )NNN)sort_valuesreset_indexastypefloatvalues
startswithintgetlennpwheremaxmeanrangeminopen_)'dcoder   buy_datepctcloser)   datesbtvbvsbsswbumnztvt0mintaddmax	t0openmaxt0prev
talowfloortbt0_mintbt0_maxtbmintbmaxnt0v0ma10zp0p0_floortata_min_closej	shrink_okmkokcbs'                                          plot_ideal_top10.pychain_for_buyrr      s   	l##//T/::A
I,

e
$
$
+CkN!!%((/E
E(//%
 
 
'ClO"E|$$ 		&	& JL!126F3GBBR%&&BzN(;(;SF__BB
&&rvvoq99
:
:CFF<%%Eff[#&&G}c**IVVOQ''F,,Jvvk3''Hvvk3''HFF<%%EFF<%%EAAhsb4i'((+ 8 86Q;;W7724((C27OOB&',,...CRC199zzR%%-//77qyyR53;..2Y)012W%%$rAvs27Q;2233 	 	AI\!!c!frBw&6&6 	]""45GGCAq2vq()..000RaRq55SVa"f__ $I U1X]]'E!Hx,?,?>>eBi!mma59zCY8Y8Y'58l+B+B#(8LB:rAvs27Q;2233 	 	AQx"B-''a<<BFFs1vX/E/EB (Q,,266c!frH}6L6LB #5199		12R!VR!VAX++---QBAvv 199Q"u*)<)<!&B '%!))Ae0C0C!&B" q5199q1u!9!9r19$$$$$' ((     c	                    0 t          ||t          |d                   \  }	}
}|	d S |pddk    rdn|pddk    rdnd}dd	d
d|         }| ||f                             ddddgd          }t                              |d                   }t                              |d         |          }t          j        |d                   }t          j        |d                   }t          j        |d         j        |	                   }|t          j        d          z
  }t          j	        |d                   |k    t          j	        |d                   |t          j        d          z   k    z  }||         
                    d          }t          j        t          |                    }t          |          r|d         nd}|                                D ]\  }}|d         |d         |d         |d         f\  }}}}||k    }|rdnd} |                    ||         ||         g||g| d !           |                    ||         t#          ||z
            t%          ||          d"| d#| $           |d%         }!|                    ||         |!d"| d &           |                                d         }"|                                d         }#g }$|dd'ft          j        |d         j        |
                   d(d)ft          j        |d         j        |                   d	d*ffD ] \  }%}&}'t)          t          j        |%                                                                        d+d,          }(t          j        |d         j        |(k              d         })t          |)          rz|                    |)d         |&d-d.d#/           |                    |)d         |#|"|#z
  d0z  z   |'d1|&d2d3t7          d4d5d6d"7          8           |$                    |)d         |(f           t          j        |d         j        |d         k              d         d         }*t          j        |d         j        |d         k              d         d         }+t)          |d                   },t)          |d                   }-|$                    |*|,f           |$                    |+|-f           |                    |*|d9         d:ddd;d4d <           |                    d=|d9         d>|*|d9         fd?d@d1d2dd3A           |                    |+|dB         dCdDdd;d4d <           dEdFdGdHdIdJ|dK                  }.|                    dL|dB         d>dM|. dM|dN         dOz  dPdQ|+|dB         fd?dRd1d2dDd3A           |                    | dS| dT|dU         d dV          dMt@          tB                    dW|dX          dY|dN         dOz  dPdQdZd3[           |=|                    d\d]d^|d_dS| |j"        d`d3dadb|t7          d4dc|d dde          f
  
         |j#        $                    tK          j&        dg                     tO          tQ          dh |$D                                 }/t7          |$          0|)                    |/           |)                    |/           |*                    0fdi|/D             d;djk           |+                    dlm           |+                    dm           |+                    dno           |+                    do           |,                    d,           t[          j.        |/                                dlp           |0                    ddqr           |0                    ddqr           tb          s5|                    dsdtt@          tB                   |j"        dud2dadvd3w	  	         d S d S )xNrN   r   F      强      中   弱#E91E63#FF8F00z#7f8c8drv   rx   ry   r9   r:   g@gQ?)height_ratioshspace)sharex	sell_dater$   r   )daysr   Tr%   raw_openraw_highraw_low	raw_close#e74c3cz#2ecc71皙?)color	linewidthg333333??)bottomwidthr   alpha	edgecolorr)   )r   r   r   u   T0涨停#1565C0u   ta缩量u   tb突破- g333333?--)r   r   	linestyler   g
ףp=
?   centerboldwhiter   none)	facecolorr   r   pad)fontsizer   ha
fontweightbbox	buy_price^   )markerr   szorder
edgecolors
linewidthsu   买z.1fzoffset points)r   r   )
textcoordsxytextr   r   r   r   
sell_pricev#7B1FA2u   止盈u   回撤u   止损u   超时u   跟踪)r   r   r   timeouttrailreasonu   卖 ret_netd   z+.0f%)r   i   ·
rM   	   u    持	hold_daysu   天 g      !@)r   r   g\(\?r    u   强度.0fg      @rightr   g333333?g      ?)r   r   r   r   r   )	transformr   r   r   var   r   z%y-%m-%dc              3       K   | ]	\  }}|V  
d S N ).0p_s      rq   	<genexpr>zdraw_trade.<locals>.<genexpr>   s&      //TQq//////rs   c           	      x    g | ]6}|         d d          d|         dd          d|         dd          7S )r9   r   r   r   Nr   )r   r   labss     rq   
<listcomp>zdraw_trade.<locals>.<listcomp>   sS    WWWADGAaCLGG471Q3<GG$q'!""+GGWWWrs   -   )r   rotationF)labelbottom   )	labelsize)visiblegQ?)r   g
ףp=
ǿr   Z      )r   r   r   r   r   r   )2rr   bp_savesubgridspecfigadd_subplotpd	Timestampiloc	Timedeltato_datetimer=   rE   arangerD   iterrowsplotbarabsrJ   get_ylimstrdatereplacerF   r@   axvlinetextdictappendscatterannotate	set_titlePN	code_pool	transAxesxaxisset_major_formattermdatesDateFormattersortedset
set_xticksset_xticklabelstick_params
set_xlabelpltsetpget_xticklabelsgridpool_label_done)1gsrowcoltrL   nameindrM   stdt0itaitbitiertier_cgssaxaxvbdsdt0d	win_startmasksubxxmaxxirow2ohlc_upr   vvymaxymin	key_ticksdtlctxtdt_sposbd_numsd_numbd_ssd_srrticksr   s1                                                   @rq   
draw_trader&  n   s   !!T7AjMBBMCc
{XA"$$55SXA"4D4D55%DyCCDIF
S#X,
"
"1aQx
"
M
MC	Q	 	 B
//#a&/
,
,C	a
m	$	$B2<++G+Gb
,q+C0
1
1Cbl****IN1\?++y8R^AlO=\=\`begeqwxeyeyey`y=yzD
D'

4

(
(C
	#c((AFF!1R55DLLNN > >D:&Z(8$y/4P[K\\1a1W.		Y
2"AesCCC
quc"q&kk#a**CuTWchiii%["rE====;;==D;;==DIi4r|AlODXY\D]7^7^`iku6vy{  zF  GH  IU  GV  G[  \_  G`  za  za  cl  nx  yy  z - -B2<##((**++33C<<hs<(/4788;s88 	-JJs1vR3$cJRRRGGCFDD4K4#77qPRW_lrsfRUVVV  X X Xc!fd^,,,Xc,'.!J-?@@CAFFXc,'.!K.@AA!DQGFq}Dc!K.&9&9tfd^$$$fd^$$$JJvq~cbQR_fsvJwwwKK*an***VQ{^,DQ`ioz{  AI  QZ  gmK  n  n  nJJvqs)rRS`gtwJxxxHh8^f	g	ghijrhs	tBKKIaoIIIBII9c1AIIIIFTUVbTcKd  rA  JQ  \]  bj  r{  HNK  O  O  OLLDrrCrr1V9RaR=rr2i=rranrrZ[\eZfgjZjrrrr  ~A  NTL  U  U  U

d6S66666",Y\ioxvD7Z^jp|  FI  =J  =J  =J 	 	K 	K 	KH  !5j!A!ABBB3//Y/////00E	??DMM%NN5WWWWQVWWWbcnpqqqNNuN%%%OOO%%%NNQNOOaO   NN2HR!!51111GGDGHHTH I
sByMR\BS[`grt  BH  	I  	I  	I  	I  	II Irs   r   c                  b   t          j        d           t          j        t           d          } t          t          | d         | d                             }t          t          | d         | d                             }t          j        t           d          }|                    d          d         	                    d	
          dz  |d<   t          t          t          |d         |d         
                    t                              |d                             }t          j        |d         dk    dt          j        |d         dk    dd                    |d<   g }dD ]}||d         |k             }|d         }|                    | d|d                                         dd|d                                         ddt#          |           d|                                dz  dd|                                dz  dd|                                dz  dd|d k                                    dz  dd!           i }	i }
t&                                          D ]\  }}||	vrt+          j        |          |	|<   |	|         \  }}|d"         }t+          j        ||          }|d#         d$n|d%         d&k    rd'nd(}t1          j        |||||d)         |d%         ||d#         |d*         +	  	        }g }|}t5          |d, d	-          D ]}||d                                      d.                              d	/          }t;          ||d         ||d                   \  }}}||                    |           t#          |          d0k    r n||
|<   t=          t>          |          d1t#          |           d2|d          d3         dz  dd4|d5         d3         dz  dd!d	6           tA          j!        d78          a"tD          #                    d0d9d:d;<          }tI          t&                                                    D ]\  }\  }}|a%tI          |
|                   D ]\  }}|d k    a&|d"         a'|	|         d=         |d                                      d.                              d	/          }|(                    |d         d>          }|(                    |d         d>          }|(                    |d         t          |d                   fd           }|d?k     r|d@z  |d9z  z   |d9z  }}n
d?|d?z
  z   |}}tS          ||||||||d         |	  	         d dAl*m+}   | d gd gdBdCdDdEdFG           | d gd gdHdCdIdEdJG           | d gd gdKdLdMN           | d gd gdOdLdPN           | d gd gdQdLdRN          g}!tD          ,                    |!dSdTdUdVdWX           tD          -                    dYdZd[\           tD          .                    d]d^d_d`/                    |           dadbt          dcdddedfg          h           tD          0                    didjdjdkd:d;l           t           dm}"tA          j1        |"dno           t=          dp|"            d S )qN   z/stock_basic.pklts_coder   industryz/strength_baseline.csvpool	raw_scoreT)rO   r   r   rM   rN   ru   rv   rw   rx   ry   r  r|   ret(r   r   z): n=u    均z+.1fu   % 最大u   % 最小u   % 胜r   r   r   r   merger   r   ACr   r   )moder   r   c                     | d         S )Nr   r   )r  s    rq   <lambda>zmain.<locals>.<lambda>   s
    a	l rs   )keyreverser$   r%   r   z: u    笔中取收益最高10笔 top1=r   z% top10=r   )flush)      )figsizer   g(\?g)\(?)r~   wspacer:   ?r   r9   )Line2Dr   wrz   r   u   买入(次日开盘))r   r   markerfacecolor
markersizelabelr   r   u#   卖出(止盈/回撤/止损/超时)r   r   u   T0涨停日)r   r   rA  r   u   ta缩量回调日r{   u   tb突破日zlower centerr   r   r   )r   g~jt?)handleslocncolr   
framealphabbox_to_anchorud   四池理想策略收益最高10笔交易详情(共40笔): 强度分档标注(右上角=强度0-100)r   g+?)r   yr   gA`"?u   强度分档统计(804笔): z  |  g      '@r   z#f8f8f8z#999r   zround,pad=0.4)r   r   r   boxstyle)r   r   r   g(\?r8   gQ?)topr   leftr   r~   r;  z/backtest_zt_ideal_top10.png   )dpiu   交易详情图: )2randomseedr   read_pickleBASEr   zipread_csvgroupbyrankr>   r   rE   rF   r   rJ   rG   rD   rH   COMBOitemsg	load_pool	build_sigieideal_backtestr   r<   r=   rr   printr   r   figurer   add_gridspec	enumerater   r   r   rC   r&  matplotlib.linesr=  legendsuptitler   joinsubplots_adjustsavefig)#sbname_mapind_mapblstd_map	stats_txtr   r  rcachesamplesr+  cmembersdailiesr   sigr2  tradeschosenpool_dailiesrL   r   r   r   pirk   r   r   r   r   r   r=  legouts#                                      rq   mainry     sS   
KNNN	4111	2	2BC9r&z2233H3r)}bn5566G	444	5	5B

6"";/444>>DBuI3s2f:r*~'<'<S'A'ABBBuINNOOG"U)r/5"(2e9?ESX2Y2YZZBvJI" E EFq!JA  D  DE
 0 0  D  D  Ds5z~~7G7G  D  D  DRUVYRZRZ  D  D`a`f`f`h`hil`l  D  D  D{|  |A  |A  |C  |C  DG  |G  D  D  D  VW  V[  V[  V]  V]  ^a  Va  D  D  D  no  pq  nq  mw  mw  my  my  z}  m}  D  D  D  D  	E  	E  	E  	EEG;;== ` `au+d++E$K ;tWk'2&&F)+ww4D##c"4'3(QtW[_fghnfovwx~v  A  A  A$:$:DIII 	 	AQvY'33LAAMMSWMXXA%a6B*FFICAa   6{{b   !D  S  SS[[  S  S&QR)T]J^_bJb  S  S  Sqwxzq{  }F  rG  HK  rK  S  S  S  S  [_  	`  	`  	`  	`  	`
*X
&
&
&C			"aT		:	:B"5;;==11 F FIT1	gdm,, 	F 	FDAq 1uOgGdAqy)55lCCOOUYOZZA<<&	3//D++ai--C++qy#a
m*<*<=tDDC1uu6AF?AESA;Sr3Q4aiEEEE	F ('''''61#s3c9YZbxyyy61#s3c9YZ  cH  I  I  I61#s)t=QQQ61#s)tCVWWW61#s)t=QQQ	SC
 JJsQPSdpJqqqLLw  CE  INL  O  O  OHHS%QY8O8OQQ\`emfVefff  h h hE$Tt\`aaa
/
/
/CK	
#c
#
#$$$$$rs   __main__r   )"__doc__pandasr   numpyrE   jsonsysrM  
matplotlibusematplotlib.pyplotpyplotr   matplotlib.datesrQ   r   rcParamspathinsertgrid_orrW  ideal_enginerZ  rP  r   rU  rr   r&  r   r   r   r   ry  __name__r   rs   rq   <module>r     s   S S                         
u          ! ! ! ! ! !"o"o"o %*! " 6           v[LT`aa!&TVdfz}  QT  U  U  ae  mq  {  IK  L  L!&UWeg{  SV  W  W  cg  os  }A  KM  N  N"&TVdfz}  QT  U  U  ae  mq  {  IK  L  L"'$VXfh  }B  UX  Y  Y  ei  qu  C  MO  P  P		 	S S SjBI BI BI BIH 
	E% E% E%N zDFFFFF rs   