
    sְi'                        d Z ddlZddlZddlmZ ddlZ G d d      Zedk(  r e       Zej                  d      Z	 e
de	d	           ej                         Z e
d
 ee       d       er,ej                  ed   d         Z e
ded    ded    d       er3ej!                  ed   d         Z e
ded   d    ded   d    d       yyy)u7   
AI策略生成器 - 使用大模型生成交易策略
    N)datetimec                   6    e Zd ZdZd Zd Zd Zd Zd Zd	dZ	y)
StrategyGeneratoru   AI策略生成器c                 N   t         j                  j                  t         j                  j                  t              dd      | _        t        j                  | j
                  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&| _        t        d'       y )(N	user_data
strategiesT)exist_oku   MACD金叉策略u4   基于MACD指标的金叉买入、死叉卖出策略u)   MACD金叉 AND 价格在20日均线上方u   MACD死叉 OR 盈利达到10%      	   皙?g?皙?)	macd_fast	macd_slowmacd_signalposition_size	stop_losstake_profit)namedescriptionbuy_conditionsell_condition
parametersu   RSI超卖反弹策略u$   基于RSI超卖区域的反弹策略u+   RSI < 30 AND 价格在布林带下轨附近u   RSI > 70 OR 盈利达到15%      F   333333?{Gz?)
rsi_periodoversold
overboughtr   r   r   u   移动平均线策略u*   基于移动平均线多头排列的策略u&   MA5 > MA10 > MA20 AND 价格突破MA20u   MA5 < MA10 OR 价格跌破MA20   
      g      ?gQ?gQ?)ma_short	ma_mediumma_longr   r   r   )macdrsimau$   ✅ AI策略生成器初始化完成)	ospathjoindirname__file__strategies_dirmakedirsstrategy_templatesprint)selfs    @/root/.openclaw/workspace/skills/ai-quant-trader/strategy_gen.py__init__zStrategyGenerator.__init__   s     ggll277??8+DkS_`
D''$7
 +U!L"A!#!##$%(!%#' 0E!N"?"$ ""$%)!%#' 0K!I"B !!#!%)!%#';+#
Z 	45    c                    t        d|        |j                         }d}d|v sd|v rd}nd|v sd|v rd}n
d|v sd|v rd}|| j                  v r| j                  |   j                         }n| j                  d   j                         }d	t	        j
                         j                  d
       }||d<   ||d<   t	        j
                         j                         |d<   t	        j
                         j                         |d<   i |d<   t        j                  dd      t        j                  dd      t        j                  dd      t        j                  dd      d|d<   t        j                  j                  | j                  | d      }t        |dd      5 }t        j                   ||dd        d!d!d!       t        d"|        d#|||d$S # 1 sw Y   xY w)%u   根据描述生成策略u   🤖 生成策略: customr(   u   金叉r)   u   超卖u   移动平均r*   u   自定义策略_z%Y%m%d_%H%M%Sr   user_description
created_atmodified_atbacktest_resultsg?g      ?g333333?       @r   g333333?r   r   )win_rateprofit_factortotal_returnmax_drawdownperformance.jsonwutf-8encodingF   ensure_asciiindentNu   ✅ 策略生成成功: T)successstrategy_namefilestrategy)r3   lowerr2   copyr   nowstrftime	isoformatrandomuniformr+   r,   r-   r0   openjsondump)r4   r   description_lowerstrategy_typebase_strategyrN   strategy_filefs           r5   generate_strategyz#StrategyGenerator.generate_strategyC   s   #K=12 (--/ !&&(6G*G"M''87H+H!M00D<M4M M D333 33MBGGIM 33F;@@BM +8<<>+B+B?+S*TU !.f,7()&.lln&>&>&@l#'/||~'?'?'Am$,.()tT2#^^C5"NN34"NN46	(
m$ T%8%8]O5:QR-w7 	F1IImQU1E	F 	(89 *!%	
 	
	F 	Fs   GGc                 L   t        d|        t        j                  j                  | j                  | d      }t        j                  j                  |      sdd| dS t        |dd      5 }t        j                  |      }d	d	d	       d
   d   }d|v rQ|d   }|D ]G  }t        ||   t        t        f      st        j                  dd      }t        ||   |z  d      ||<   I t        d|dz        |d
   d<   t        d|d
   d   dz        |d
   d<   |d
   d   dz  |d
   d<   |d
   d   dz  |d
   d<   t!        j"                         j%                         |d<   d|d<   t!        j"                         j%                         |d<   t        |dd      5 }t        j&                  ||dd       d	d	d	       t        d|        d|t        |dz  d      t        |d
   d   dz  d      t        |d
   d   |z  dz
  dz  d      |d S # 1 sw Y   xY w# 1 sw Y   fxY w)!u   优化策略参数u   ⚙️ 优化策略: rD   Fu   策略不存在: )rM   errorrrF   rG   NrC   r?   r   gffffff?g?         @r@   g?rA   gHzG?rB   r<   T	optimizedoptimization_daterE   rI   rJ   u   ✅ 策略优化完成: d      )rM   rN   original_win_rateoptimized_win_rateimprovementrP   )r3   r+   r,   r-   r0   existsrX   rY   load
isinstanceintfloatrV   rW   roundminr   rS   rU   rZ   )	r4   rN   r^   r_   rP   rj   paramskey
adjustments	            r5   optimize_strategyz#StrategyGenerator.optimize_strategyw   st   %m_56T%8%8]O5:QRww~~m, ,]O<  -w7 	$1yy|H	$ %]3J? 8#l+F  EfSkC<8!'d!;J"'sj(@!"DF3K	E /2$8ID8P.Q
+36sH]<STc<dgj<j3k02:=2I.2Y\`2`/2:=2I.2Y\`2`/"*,,.":":"< $(0(@(@(B$% -w7 	A1IIha@	A 	(89 *!&'83'>!B"'(?
(Kc(QST"U (="9*"EHY"Y\]"]ad!dfgh 
 	
C	$ 	$8	A 	As   1HHHH#c                 n   g }t         j                  j                  | j                        rt        j                  | j                        D ]  }|j                  d      st         j                  j                  | j                  |      }	 t        |dd      5 }t        j                  |      }ddd       j                  d|j                  dd            |j                  dd      |j                  d	d      |j                  d
i       |d}|j                  |        |S # 1 sw Y   vxY w#  Y xY w)u   列出所有策略rD   rc   rF   rG   Nr    r   r;   rC   )r   r   r;   rC   rO   )r+   r,   rm   r0   listdirendswithr-   rX   rY   rn   getreplaceappend)r4   r   	file_name	file_pathr_   rP   strategy_infos          r5   list_strategiesz!StrategyGenerator.list_strategies   s   
77>>$--.ZZ(;(;< !	%%g. "T-@-@) LI!!)S7C 4q'+yy|H4 %-LL9J9J7TV9W$X+3<<r+J*2,,|R*H+3<<r+J$-) #))-8!$ 4 4! s%   D0D$/A1D0$D-	)D00D4c                    t         j                  j                  | j                  | d      }t         j                  j	                  |      syt        |dd      5 }t        j                  |      cddd       S # 1 sw Y   yxY w)u   获取策略详情rD   Nrc   rF   rG   )r+   r,   r-   r0   rm   rX   rY   rn   )r4   rN   r^   r_   s       r5   get_strategyzStrategyGenerator.get_strategy   sd    T%8%8]O5:QRww~~m,-w7 	 199Q<	  	  	 s   A;;Bc                    t        d| d|        d||| dt        j                  dd      t        j                  dd      t        j                  d	d      t        t        j                  d
d      dz  d      t        t        j                  dd      dz  d      t        t        j                  dd      dz  d      t        t        j                  dd      dz  d      t        t        j                  dd      d      t        t        j                  dd      d      d	t        j                         j                         dS )u   回测策略u   🔍 回测策略: u    在 Tu   天r#   r      r$   rd   g333333?g?rh   ri   r   gffffff?r   g      ?r   g
ףp=
?g      ?r>   rI   g      ?re   )	total_tradeswinning_tradeslosing_tradesr?   rA   annual_returnrB   sharpe_ratior@   )rM   rN   symbolperiodresultsbacktest_date)r3   rV   randintrr   rW   r   rS   rU   )r4   rN   r   dayss       r5   backtest_strategyz#StrategyGenerator.backtest_strategy   s   #M?%x@A *cl &r2 6"(..B"7!'2!6!&..c":S"@!D %fnnT4&@3&F J!&v~~dD'AC'G!K %fnnT4&@3&F J %fnnS#&> B!&v~~c3'?!C
 &\\^557!
 	
r7   N)600519   )
__name__
__module____qualname____doc__r6   r`   rw   r   r   r    r7   r5   r   r      s&    26h2
h5
n2 
r7   r   __main__u+   一个基于MACD金叉的短线交易策略u   生成结果: rN   u   
策略列表: u
    个策略r   u   
优化结果: 胜率从rj   u
   %提升到rk   %u   
回测结果: 胜率r   r?   u   %，总收益rA   )r   rY   r+   r   rV   r   r   	generatorr`   resultr3   r   r   lenrw   
opt_resultr   backtestr   r7   r5   <module>r      s&    	  ]
 ]
@ z!#I (()VWF	N6/23
45 **,J	S_-Z
89 00Av1FG
)*5H*I)J*U_`tUuTvvwxy ..z!}V/DE&x	'::'F&G}U]^gUhiwUxTyyz{| # r7   