siat 3.1.28__py3-none-any.whl → 3.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
siat/stock_technical.py CHANGED
@@ -2435,10 +2435,22 @@ if __name__ =="__main__":
2435
2435
 
2436
2436
  start='2024-3-1'; end='2024-4-12'; ahead_days=30*3
2437
2437
 
2438
- technical='EMV'; indicator='Close'; line='default'
2438
+ technical='EMV'; indicator='Close'
2439
2439
 
2440
- df=security_technical_research(ticker,start,end,technical=technical, \
2441
- loc1='lower left',loc2='lower right')
2440
+ attention_values=[0,25,50,75]
2441
+ more_details=False
2442
+ ticker_type='auto'; source='auto'
2443
+ ahead_days=30*4
2444
+ resample_freq='6H'; smooth=True;linewidth=1.5
2445
+ date_range=False; date_freq=False; annotate=False
2446
+ graph=['ALL']; printout=False
2447
+ loc1='best'; loc2='best'
2448
+
2449
+ facecolor=['whitesmoke','papayawhip']
2450
+ price_line_style='dotted'; price_line_color='red'; price_line_width=5; price_line_marker='.'
2451
+
2452
+
2453
+ df=security_technical2(ticker,start,end,technical=technical,marker_sizes=[20,150,300])
2442
2454
 
2443
2455
  tlist=['RSI','OBV','MACD','KDJ','VOL','PSY','ARBR','CR','EMV','Bollinger', \
2444
2456
  'TRIX','DMA','BIAS','CCI','W%R','ROC','DMI']
@@ -2446,45 +2458,56 @@ if __name__ =="__main__":
2446
2458
  df=security_technical2(ticker,start,end,technical=t,loc1='lower left',loc2='lower right')
2447
2459
 
2448
2460
  def security_technical2(ticker,start='default',end='default', \
2449
- RSI_days=[6,24], \
2450
- OBV_days=5, \
2451
-
2452
- MA_days=[5,20], \
2453
- MACD_fastperiod=12,MACD_slowperiod=26,MACD_signalperiod=9, \
2454
-
2455
- KDJ_fastk_period=9,KDJ_slowk_period=5,KDJ_slowk_matype=1, \
2456
- KDJ_slowd_period=5,KDJ_slowd_matype=1, \
2457
-
2458
- VOL_fastperiod=5,VOL_slowperiod=10, \
2459
- PSY_days=12, \
2460
- ARBR_days=26, \
2461
- CR_day=16,CR_madays=[5,20], \
2462
- EMV_day=14,EMV_madays=9, \
2463
-
2464
- BULL_days=20,BULL_nbdevup=2,BULL_nbdevdn=2,BULL_matype=0, \
2465
-
2466
- DMA_fastperiod=10,DMA_slowperiod=50,DMA_madays=10, \
2467
-
2468
- TRIX_day=12,TRIX_madays=20, \
2469
- BIAS_days=[6,24], \
2470
- CCI_days=14, \
2471
- WR_days=[10,6], \
2472
- ROC_day=12,ROC_madays=6, \
2473
- DMI_DIdays=14,DMI_ADXdays=6, \
2474
-
2475
- ahead_days=30*4, \
2476
- resample_freq='6H',smooth=True,linewidth=1.5, \
2477
- date_range=False,date_freq=False,annotate=False, \
2478
-
2479
- technical=['MACD'],indicator='Close', \
2480
- graph=['ALL'],printout=False, \
2481
- loc1='best',loc2='best', \
2482
- ticker_type='auto',source='auto', \
2483
-
2484
- attention_values=[0,30,50,80], \
2485
- facecolor='papayawhip',price_line_color='red', \
2486
-
2487
- more_details=False):
2461
+ technical=['MACD'],indicator='Close', \
2462
+ more_details=False, \
2463
+ attention_values=[0,25,50,75,100], \
2464
+
2465
+ ticker_type='auto',source='auto', \
2466
+
2467
+ #指标的默认参数
2468
+ RSI_days=[6,24], \
2469
+ OBV_days=5, \
2470
+
2471
+ MA_days=[5,20], \
2472
+ MACD_fastperiod=12,MACD_slowperiod=26,MACD_signalperiod=9, \
2473
+
2474
+ KDJ_fastk_period=9,KDJ_slowk_period=5,KDJ_slowk_matype=1, \
2475
+ KDJ_slowd_period=5,KDJ_slowd_matype=1, \
2476
+
2477
+ VOL_fastperiod=5,VOL_slowperiod=10, \
2478
+ PSY_days=12, \
2479
+ ARBR_days=26, \
2480
+ CR_day=16,CR_madays=[5,20], \
2481
+ EMV_day=14,EMV_madays=9, \
2482
+
2483
+ BULL_days=20,BULL_nbdevup=2,BULL_nbdevdn=2,BULL_matype=0, \
2484
+
2485
+ DMA_fastperiod=10,DMA_slowperiod=50,DMA_madays=10, \
2486
+
2487
+ TRIX_day=12,TRIX_madays=20, \
2488
+ BIAS_days=[6,24], \
2489
+ CCI_days=14, \
2490
+ WR_days=[10,6], \
2491
+ ROC_day=12,ROC_madays=6, \
2492
+ DMI_DIdays=14,DMI_ADXdays=6, \
2493
+
2494
+ #数据提前量
2495
+ ahead_days=30*4, \
2496
+
2497
+ #绘图参数
2498
+ resample_freq='6H',smooth=True,linewidth=1.5, \
2499
+ date_range=False,date_freq=False,annotate=False, \
2500
+
2501
+ graph=['ALL'],printout=False, \
2502
+ loc1='best',loc2='best', \
2503
+
2504
+ facecolor=['whitesmoke','papayawhip'], \
2505
+ #price_line_style=(0,(1,1)), \
2506
+ price_line_style='dotted', \
2507
+ price_line_color=['red','green'], \
2508
+ price_line_width=5,price_line_marker='o', \
2509
+ marker_sizes=[30,120,250], \
2510
+ ):
2488
2511
  """
2489
2512
  功能:计算和绘制证券技术分析指标的简易图,仅供进一步探索使用,仅用于单个证券(股债基)
2490
2513
 
@@ -2502,7 +2525,7 @@ def security_technical2(ticker,start='default',end='default', \
2502
2525
  return None
2503
2526
 
2504
2527
  #检查indicator
2505
- if indicator not in ['Open','Close','High','Low']:
2528
+ if indicator not in ['Open','Close','High','Low','Adj Close']:
2506
2529
  print(" #Warning(security_technical2): not a valid price type for",indicator)
2507
2530
  return None
2508
2531
 
@@ -2537,6 +2560,21 @@ def security_technical2(ticker,start='default',end='default', \
2537
2560
  print(" #Warning(security_technical2): no prices found for",ticker,'as type',ticker_type)
2538
2561
  return None
2539
2562
 
2563
+ #当日涨跌
2564
+ price['up_down']=price['Close']-price['Open']
2565
+ price['up_down_abs']=abs(price['up_down'])
2566
+
2567
+ #分位数
2568
+ import numpy as np
2569
+ """
2570
+ max(price['up_down_abs'])
2571
+ min(price['up_down_abs'])
2572
+ """
2573
+ q70=np.percentile(price['up_down_abs'],70)
2574
+ q30=np.percentile(price['up_down_abs'],30)
2575
+
2576
+ small_size=marker_sizes[0]; mid_size=marker_sizes[1]; big_size=marker_sizes[2]
2577
+ price['marker_size']=price['up_down_abs'].apply(lambda x: big_size if x>=q70 else mid_size if x>=q30 else small_size)
2540
2578
 
2541
2579
  #计算技术指标
2542
2580
  df=calc_technical(price,fromdate,todate, \
@@ -2617,7 +2655,8 @@ def security_technical2(ticker,start='default',end='default', \
2617
2655
  'W%R':[1,''],
2618
2656
  'ROC':[1,''],
2619
2657
  'DMI':[1,''],
2620
- 'DMA':[1,''],}
2658
+ 'DMA':[1,''],
2659
+ 'Volume':[1/1000000,'百万']}
2621
2660
 
2622
2661
  mag_times=magnitude_list[technical1][0]
2623
2662
  mag_label=magnitude_list[technical1][1]
@@ -2649,18 +2688,55 @@ def security_technical2(ticker,start='default',end='default', \
2649
2688
  for c in tech_line_collist:
2650
2689
  df[c]=df[c] * mag_times
2651
2690
 
2691
+ df['Volume']=df['Volume'] * magnitude_list['Volume'][0]
2692
+
2652
2693
  #字段排序
2653
2694
  tech_line_collist.sort()
2654
- df1=df[tech_line_collist+[indicator]]
2695
+ df1=df[tech_line_collist+[indicator,'Volume','up_down','marker_size']]
2655
2696
 
2656
2697
  #绘图----------------------------------------------------------------------
2657
2698
  import matplotlib.pyplot as plt
2658
-
2699
+ import matplotlib.dates as mdates
2700
+ #import matplotlib.gridspec as gridspec
2701
+ """
2659
2702
  fig = plt.figure()
2660
2703
  ax = fig.add_subplot(111)
2704
+ """
2705
+ """
2706
+ #图ax在上方,ax3在下方
2707
+ fig, (ax, ax3) = plt.subplots(2, sharex=True,figsize=(12,9))
2708
+
2661
2709
  #plt.gca().set_facecolor('whitesmoke')
2662
2710
  fig.gca().set_facecolor(facecolor) #放在这里生效,放尾部不生效
2711
+ """
2712
+ # 创建两行的布局,上半部分高度为4,下半部分高度为1
2713
+ fig = plt.figure(figsize=(14,9))
2714
+ #fig.gca().set_facecolor(facecolor)
2715
+
2716
+ if isinstance(facecolor,str):
2717
+ facecolor1=facecolor2=facecolor
2718
+ elif isinstance(facecolor,list):
2719
+ if len(facecolor) >= 2:
2720
+ facecolor1=facecolor[0]
2721
+ facecolor2=facecolor[1]
2722
+ elif len(facecolor) == 1:
2723
+ facecolor1=facecolor2=facecolor[0]
2724
+ else:
2725
+ facecolor1='whitesmoke'; facecolor2='papayawhip'
2663
2726
 
2727
+ gs = fig.add_gridspec(2, 1, height_ratios=[4, 1], hspace=0.05)
2728
+ ax = fig.add_subplot(gs[0])
2729
+ try:
2730
+ ax.set_facecolor(facecolor1)
2731
+ except:
2732
+ ax.set_facecolor('whitesmoke')
2733
+
2734
+ ax3 = fig.add_subplot(gs[1], sharex=ax)
2735
+ try:
2736
+ ax3.set_facecolor(facecolor2)
2737
+ except:
2738
+ ax3.set_facecolor('papayawhip')
2739
+
2664
2740
  """
2665
2741
  line0=False; line30=False; line50=False; line80=False
2666
2742
  for l in tech_line_collist:
@@ -2689,7 +2765,13 @@ def security_technical2(ticker,start='default',end='default', \
2689
2765
  attention_draws=[False] * len(attention_values)
2690
2766
 
2691
2767
  for l in tech_line_collist:
2692
- ax.plot(df1.index,df1[l],label=l.upper())
2768
+ labeltxt=l.upper()
2769
+ if labeltxt =='DEA':
2770
+ labeltxt='慢线(DEA)'
2771
+ if labeltxt =='DIF':
2772
+ labeltxt='快线(DIF)'
2773
+
2774
+ ax.plot(df1.index,df1[l],label=labeltxt)
2693
2775
 
2694
2776
  #判断是否绘制关注线
2695
2777
  lmax=df1[l].max(); lmin=df1[l].min()
@@ -2703,7 +2785,7 @@ def security_technical2(ticker,start='default',end='default', \
2703
2785
 
2704
2786
  #如果需要绘制关注线,且尚未绘制过,则绘制
2705
2787
  if line_al and not attention_draws[pos]:
2706
- plt.axhline(y=attention_values[pos],ls=":",c=color_list[pos],linewidth=2)
2788
+ ax.axhline(y=attention_values[pos],ls=":",c=color_list[pos],linewidth=2)
2707
2789
 
2708
2790
  attention_draws[pos]=True
2709
2791
 
@@ -2712,17 +2794,104 @@ def security_technical2(ticker,start='default',end='default', \
2712
2794
  ylabeltxt1=ylabeltxt1+'('+mag_label+')'
2713
2795
  ax.set_ylabel(ylabeltxt1,fontsize=ylabel_txt_size)
2714
2796
  ax.legend(loc=loc1,fontsize=legend_txt_size)
2797
+
2798
+ interval=int(len(df1)/10)+1
2799
+ ax.xaxis.set_major_locator(mdates.DayLocator(interval=interval)) # 隔interval天一个标记
2800
+ ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
2801
+ #ax.autoscale_view()
2802
+
2803
+ #区分涨跌颜色:红涨绿跌
2804
+ df1up=df1[df1['up_down'] >= 0]
2805
+ df1down=df1[df1['up_down'] < 0]
2806
+
2807
+ #绘制收盘价
2808
+ if isinstance(price_line_color,str):
2809
+ price_line_color1=price_line_color2=price_line_color
2810
+ elif isinstance(price_line_color,list):
2811
+ if len(price_line_color) >= 2:
2812
+ price_line_color1=price_line_color[0]
2813
+ price_line_color2=price_line_color[1]
2814
+ elif len(price_line_color) == 1:
2815
+ price_line_color1=price_line_color2=price_line_color[0]
2816
+ else:
2817
+ price_line_color1='red'; price_line_color2='green'
2715
2818
 
2819
+ import numpy as np
2820
+ df1['segment'] = (np.sign(df1['up_down'].shift(1)) != np.sign(df1['up_down'])).cumsum()
2821
+ seg_list=list(set(list(df1['segment'])))
2822
+
2716
2823
  ax2 = ax.twinx()
2717
- ylabeltxt2='收盘价'
2824
+ ylabeltxt2=ectranslate(indicator)
2718
2825
  ax2.set_ylabel(ylabeltxt2,fontsize=ylabel_txt_size)
2719
- ax2.plot(df1.index,df1[indicator],label=ylabeltxt2,linestyle='dotted',color=price_line_color)
2826
+
2827
+ #细灰线先画出轮廓
2828
+ ax2.plot(df1.index,df1[indicator],label='', \
2829
+ linestyle=price_line_style,color='grey',lw=2)
2830
+
2831
+ #不同颜色绘制涨跌价格线
2832
+ first_time=True; second_time=False
2833
+ for seg in seg_list:
2834
+ df1seg=df1[df1['segment']==seg]
2835
+ if df1seg['up_down'].values[0] >=0:
2836
+ seg_color=price_line_color1
2837
+ #labeltxt=ylabeltxt2+'(当日↑)'
2838
+ #labeltxt=ylabeltxt2+'(当日≥开盘价)'
2839
+ labeltxt=ylabeltxt2+'(当日阳线)'
2840
+ else:
2841
+ seg_color=price_line_color2
2842
+ #labeltxt=ylabeltxt2+'(当日↓)'
2843
+ #labeltxt=ylabeltxt2+'(当日<开盘价)'
2844
+ labeltxt=ylabeltxt2+'(当日阴线)'
2845
+
2846
+ if first_time:
2847
+ first_time=False; second_time=True
2848
+ elif second_time:
2849
+ second_time=False
2850
+ else:
2851
+ labeltxt=''
2852
+ """
2853
+ ax2.plot(df1seg.index,df1seg[indicator],label=labeltxt, \
2854
+ linestyle=':',color=seg_color,lw=price_line_width,marker=price_line_marker)
2855
+ """
2856
+ ax2.scatter(df1seg.index,df1seg[indicator], \
2857
+ s=df1seg['marker_size'], \
2858
+ label=labeltxt, \
2859
+ linestyle=':',color=seg_color,lw=price_line_width,marker=price_line_marker)
2860
+
2861
+
2862
+ """
2863
+ ax2.plot(df1.index,df1[indicator],label=ylabeltxt2, \
2864
+ linestyle=price_line_style,color=price_line_color1,lw=price_line_width,marker=price_line_marker)
2865
+ ax2.scatter(df1down.index,df1down[indicator],label=ylabeltxt2, \
2866
+ linestyle=price_line_style,color=price_line_color2,lw=price_line_width,marker=price_line_marker)
2867
+ """
2868
+
2720
2869
  ax2.legend(loc=loc2,fontsize=legend_txt_size)
2721
2870
 
2871
+ #绘制交易量柱状图
2872
+ ax3.bar(df1up.index,df1up['Volume'],color=price_line_color1)
2873
+ ax3.bar(df1down.index,df1down['Volume'],color=price_line_color2)
2874
+
2875
+ ax3.set_ylabel("交易量(百万)",fontsize=ylabel_txt_size -4)
2876
+
2877
+ footnote1="\n注:快线自下而上穿过慢线为金叉,自上而下穿过慢线为死叉。"
2878
+ footnote2="价格曲线上端点的大中小对应当日涨跌幅度三分位数的高中低部分。\n"
2879
+ footnote3="横轴日期上的空白处为非交易日(周末或公共节假日)。"
2880
+
2881
+ import datetime; todaydt = str(datetime.date.today())
2882
+ footnote4="数据来源:新浪/雅虎/stooq/东方财富等,"+todaydt+"统计"
2883
+
2884
+ footnote=footnote1+footnote2+footnote3+footnote4
2885
+ ax3.set_xlabel(footnote,fontsize=ylabel_txt_size -2)
2886
+
2887
+ #fig.text(0.5, 0.04, 'x', ha='center')
2888
+ plt.subplots_adjust(hspace=0.2)
2889
+
2722
2890
  titletxt=ticker_name(ticker)+': '+tech_list[technical1]+technical1
2723
2891
  plt.title(titletxt,fontweight='bold',fontsize=title_txt_size)
2724
2892
 
2725
2893
  plt.gcf().autofmt_xdate()
2894
+ #fig.autofmt_xdate()
2726
2895
 
2727
2896
  plt.show(); plt.close()
2728
2897
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 3.1.28
3
+ Version: 3.2.2
4
4
  Summary: Securities Investment Analysis Tools (siat)
5
5
  Home-page: https://pypi.org/project/siat/
6
6
  Author: Prof. WANG Dehong, International Business School, Beijing Foreign Studies University
@@ -14,7 +14,7 @@ siat/bond_china.py,sha256=eYv-nMoWSS5fZ4VxnuJ29QFY9GUS6meGiIc0Xjm1fQI,3038
14
14
  siat/bond_test.py,sha256=yUOFw7ddGU-kb1rJdnsjkJWziDNgUR7OLDA7F7Ub91A,5246
15
15
  siat/bond_zh_sina.py,sha256=26BohGcS120utwqg9dJvdGm5OkuNpNu5bco80uOuQpU,4423
16
16
  siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
17
- siat/capm_beta2.py,sha256=UOI4sCz3ld7yezlARqPHvgHzfduDiGeRqNa82dDTCZ8,25849
17
+ siat/capm_beta2.py,sha256=1URX23ugY9uyeut3gdLn3rA3CHZ4Y455gt4IoqY89D8,26892
18
18
  siat/capm_beta_test.py,sha256=ImR0c5mc4hIl714XmHztdl7qg8v1E2lycKyiqnFj6qs,1745
19
19
  siat/cmat_commons.py,sha256=Nj9Kf0alywaztVoMVeVVL_EZk5jRERJy8R8kBw88_Tg,38116
20
20
  siat/common.py,sha256=OtdgMsJUTGPuxEvZ6dm0V5V9Vfa2W3fEn22m1vRNfS8,141419
@@ -52,7 +52,7 @@ siat/financials_test.py,sha256=HJ3CPo_Xckz2wXi3AEP6ZNWCF1Duc1pLi0Y10USiImc,23829
52
52
  siat/fred_test.py,sha256=KF50ssSbsfpa_kT6iuomD0vG4eXztAcOasZxg1OGX5w,1201
53
53
  siat/fund.py,sha256=wMDORsCBV8ZXfgwbtq-0bu3qqWY66dHnbqgllW0gWCo,24637
54
54
  siat/fund_china.pickle,sha256=wJIIvEjWuZylcaQ3c5kvIdKedpFF5T53cJlG-1LVoms,2410657
55
- siat/fund_china.py,sha256=igo49Cyy46wUM6D1vl3uKCQgdJ0KX07mQHkbNDg_Q4M,111833
55
+ siat/fund_china.py,sha256=rPGnYSPkbZUqtBoJnxLZLIQ8MjD8vD3TovCMfletBP4,111839
56
56
  siat/fund_china_test.py,sha256=-Bh6m0J0GPpIbYXx-H2vpzJoNFI6pE2C2jVPa8DazgE,6649
57
57
  siat/fund_test.py,sha256=V4ADb8Gsp8gyeFTwcgRsJBpnUih_O-Q2V1ILc5oKjK8,1116
58
58
  siat/future_china.py,sha256=F-HsIf2Op8Z22RzTjet1g8COzldgnMjFNSXsAkeGyWo,17595
@@ -86,7 +86,7 @@ siat/option_sina_api_test.py,sha256=dn-k_wrQnAaNKHoROvWJEc7lqlU0bwiV2Aa4usWAFGM,
86
86
  siat/proxy_test.py,sha256=erQJrmGs2X46z8Gb1h-7GYQ0rTUcaR8dxHExWoBz2eM,2610
87
87
  siat/quandl_test.py,sha256=EcPoXnLuqzPl5dKyVEZi3j3PJZFpsnU_iNPhLWC9p-A,1552
88
88
  siat/risk_adjusted_return.py,sha256=L5FoeOFzvItT03gNBTCaIo32hUvncOJkbchtHOveSBM,54929
89
- siat/risk_adjusted_return2.py,sha256=PmwOvB0gJ9-v0fhTfl5lZ8eYfRwX07VsADYnSJ5iJb4,64866
89
+ siat/risk_adjusted_return2.py,sha256=mI2ynVICzSIHV4_-jZyZ4vbwI1-zen7Byug31lzViS4,65957
90
90
  siat/risk_adjusted_return_test.py,sha256=m_VHL5AtT74cJv5i7taTeTfnkX48y0AFJk5phawyYWg,3416
91
91
  siat/risk_evaluation.py,sha256=I6B3gty-t--AkDCO0tKF-291YfpnF-IkXcFjqNKCt9I,76286
92
92
  siat/risk_evaluation_test.py,sha256=YEXM96gKzTfwN4U61AS4Rr1tV7KgUvn4rRC6f3iMw9s,3731
@@ -95,14 +95,15 @@ siat/risk_free_rate_test.py,sha256=CpmhUf8aEAEZeNu4gvWP2Mz2dLoIgBX5bI41vfUBEr8,4
95
95
  siat/sector_china.py,sha256=nP6kfYsnaQWZj8dK-zklwSDW8FDS-obZWp_zL0ec2Ig,118603
96
96
  siat/sector_china_test.py,sha256=1wq7ef8Bb_L8F0h0W6FvyBrIcBTEbrTV7hljtpj49U4,5843
97
97
  siat/security_price.py,sha256=2oHskgiw41KMGfqtnA0i2YjNNV6cYgtlUK0j3YeuXWs,29185
98
- siat/security_price2.py,sha256=581xPduTjxEEHSkDNGn4v7VxsZ2C6vHeGJ51XB1GLuQ,25825
99
- siat/security_prices.py,sha256=a5U5qM5iX3Fl2GM8X1ceM5TGE5z32Q3ovMewKgE-6pg,103410
98
+ siat/security_price2.py,sha256=hx0hDixIaTPBnn7Y3BxdYym1v3lkPaWmcTRnJ-JyHJA,25828
99
+ siat/security_prices.py,sha256=RbGCw6Q3-eCX2dy_CjgbjuXwUtJIOPLuNxNstG0VEzM,104397
100
100
  siat/security_prices_test.py,sha256=OEphoJ87NPKoNow1QA8EU_5MUYrJF-qKoWKNapVfZNI,10779
101
101
  siat/security_trend.py,sha256=o0vpWdrJkmODCP94X-Bvn-w7efHhj9HpUYBHtLl55D0,17240
102
- siat/security_trend2.py,sha256=QVnEcb7AyVbO77jVqfFsJffGXrX8pgJ9xCfoAKmWBPk,24854
102
+ siat/security_trend2-20240620.py,sha256=QVnEcb7AyVbO77jVqfFsJffGXrX8pgJ9xCfoAKmWBPk,24854
103
+ siat/security_trend2.py,sha256=kCFi8NW4uOkSnl4MkWZB5_rfvDqUiQlVH8tGsvUluEY,25219
103
104
  siat/setup.py,sha256=up65rQGLmTBkhtaMLowjoQXYmIsnycnm4g1SYmeQS6o,1335
104
105
  siat/shenwan index history test.py,sha256=JCVAzOSEldHalhSFa3pqD8JI_8_djPMQOxpkuYU-Esg,1418
105
- siat/stock.py,sha256=dE-AitC0nba2Vf0iU_J2CgN9nB5MA2J2I8EH1zrM97U,140357
106
+ siat/stock.py,sha256=vNHqpYbwPnQM_wnvZ2XwW8oyMOX10h_EAC1hLyOI4Vo,142341
106
107
  siat/stock_advice_linear.py,sha256=-twT7IGP-NEplkL1WPSACcNJjggRB2j4mlAQCkzOAuo,31655
107
108
  siat/stock_base.py,sha256=uISvbRyOGy8p9QREA96CVydgflBkn5L3OXOGKl8oanc,1312
108
109
  siat/stock_china.py,sha256=zyUyghIrkkkYWlHRRP7Hoblxzfp-jrck60pTJpwMahg,91553
@@ -113,7 +114,8 @@ siat/stock_list_china_test.py,sha256=gv14UwMMvkZqtb6G7DCTSuehIwVHuVwu7w60p6gyHoo
113
114
  siat/stock_prices_kneighbors.py,sha256=WfZvo5EyeBsm-T37zDj7Sl9dPSRq5Bx4JxIJ9IUum6s,36738
114
115
  siat/stock_prices_linear.py,sha256=-OUKRr27L2aStQgJSlJOrJ4gay_G7P-m-7t7cU2Yoqk,13991
115
116
  siat/stock_profile.py,sha256=B3eIwzEmiCqiCaxIlhfdEPsQBoW1PFOe1hkiY3mVF6Y,26038
116
- siat/stock_technical.py,sha256=A4x18mZgYSA8SSiDz4u_O3gd5oVRgbI6JIiBfFY0tVw,116013
117
+ siat/stock_technical-20240620.py,sha256=A4x18mZgYSA8SSiDz4u_O3gd5oVRgbI6JIiBfFY0tVw,116013
118
+ siat/stock_technical.py,sha256=I7AeesRFKAK_8MZcqtV1ppvnqsTZfQYgxU3iTAUzMiQ,122806
117
119
  siat/stock_test.py,sha256=E9YJAvOw1VEGJSDI4IZuEjl0tGoisOIlN-g9UqA_IZE,19475
118
120
  siat/stooq.py,sha256=dOc_S5HLrYg48YAKTCs1eX8UTJOOkPM8qLL2KupqlLY,2470
119
121
  siat/temp.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
@@ -134,7 +136,7 @@ siat/valuation.py,sha256=NKfeZMdDJOW42oLVHob6eSVBXUqlN1OCnnzwyGAst8c,48855
134
136
  siat/valuation_china.py,sha256=EkZQaVkoBjM0c4MCNbaX-bMnlG0e3FXeaWczZDnkptU,67784
135
137
  siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
136
138
  siat/var_model_validation.py,sha256=f-oDewg7bPzyNanz_Y_jLH68NowAA3gXFehW_weKGG0,14898
137
- siat-3.1.28.dist-info/METADATA,sha256=74IePv7Bc_JMuhwxyIrBUnhSp7ECuFEUoRRSQ8BnN-w,1448
138
- siat-3.1.28.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
139
- siat-3.1.28.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
140
- siat-3.1.28.dist-info/RECORD,,
139
+ siat-3.2.2.dist-info/METADATA,sha256=kYXGiGAqJnm-hrtVardCgjNQ1A7SvjHoNTEudqWWV1Q,1447
140
+ siat-3.2.2.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
141
+ siat-3.2.2.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
142
+ siat-3.2.2.dist-info/RECORD,,
File without changes