siat 3.2.25__py3-none-any.whl → 3.2.30__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/allin.py +3 -0
- siat/luchy_draw.py +252 -0
- siat/stock_technical.py +37 -30
- {siat-3.2.25.dist-info → siat-3.2.30.dist-info}/METADATA +1 -1
- {siat-3.2.25.dist-info → siat-3.2.30.dist-info}/RECORD +7 -6
- {siat-3.2.25.dist-info → siat-3.2.30.dist-info}/WHEEL +0 -0
- {siat-3.2.25.dist-info → siat-3.2.30.dist-info}/top_level.txt +0 -0
siat/allin.py
CHANGED
siat/luchy_draw.py
ADDED
@@ -0,0 +1,252 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
"""
|
4
|
+
本模块功能:幸运抽奖,仅限课堂案例演示用
|
5
|
+
创建日期:2024年6月29日
|
6
|
+
最新修订日期:
|
7
|
+
作者:王德宏 (WANG Dehong, Peter)
|
8
|
+
作者单位:北京外国语大学国际商学院
|
9
|
+
用途限制:仅限研究与教学使用,不可商用!商用需要额外授权。
|
10
|
+
特别声明:作者不对使用本工具进行证券投资导致的任何损益负责!
|
11
|
+
"""
|
12
|
+
|
13
|
+
#==============================================================================
|
14
|
+
#关闭所有警告
|
15
|
+
import warnings; warnings.filterwarnings('ignore')
|
16
|
+
import warnings; warnings.filterwarnings('ignore')
|
17
|
+
|
18
|
+
import pandas as pd
|
19
|
+
import pickle
|
20
|
+
import random
|
21
|
+
import datetime
|
22
|
+
import time
|
23
|
+
|
24
|
+
#==============================================================================
|
25
|
+
if __name__=='__main__':
|
26
|
+
text="A B C"
|
27
|
+
text_color='red'
|
28
|
+
text_size=12
|
29
|
+
delay=1
|
30
|
+
|
31
|
+
typewriter(text,text_color='red',text_size=12,delay=1)
|
32
|
+
|
33
|
+
def typewriter(text,text_color='blue',text_size=12,delay=1):
|
34
|
+
from IPython.display import display_html
|
35
|
+
|
36
|
+
text_html="<center><font size="+str(text_size)+" color="+text_color+">"+text
|
37
|
+
display_html(text_html, raw=True)
|
38
|
+
|
39
|
+
return
|
40
|
+
|
41
|
+
#==============================================================================
|
42
|
+
|
43
|
+
def pickle_write(df,pickle_path):
|
44
|
+
with open(pickle_path, 'wb') as pickle_file:
|
45
|
+
# 使用pickle模块的dump函数写入对象
|
46
|
+
pickle.dump(df,pickle_file)
|
47
|
+
|
48
|
+
if __name__=='__main__':
|
49
|
+
file_path="S:\北外工作-24春\小学期-人大\学生名单\student_list.xlsx"
|
50
|
+
pickle_path="student_list.pkl"
|
51
|
+
skiprows=1
|
52
|
+
column='Name'
|
53
|
+
|
54
|
+
namelist_get(file_path,skiprows=1,column='Name',pickle_path="student_list.pkl")
|
55
|
+
|
56
|
+
def lucky_draw_initialize(file_path,skiprows=1,column='Name',pickle_path="student_list.pkl"):
|
57
|
+
"""
|
58
|
+
功能:读入带有指定路径的Excel文件file_path,跳过前skiprows行
|
59
|
+
Excel文件结构:抽奖名单字段为'Name',字段位于第2行
|
60
|
+
输出:存入pickle文件student_list.pkl
|
61
|
+
"""
|
62
|
+
|
63
|
+
df = pd.read_excel(file_path,skiprows=skiprows)
|
64
|
+
|
65
|
+
df1=df[[column]].copy()
|
66
|
+
|
67
|
+
todaydt = str(datetime.date.today())
|
68
|
+
df1['Date']=todaydt
|
69
|
+
df1['Lucky']=0
|
70
|
+
df1['Absent']=0
|
71
|
+
df1['Answer']=0
|
72
|
+
|
73
|
+
#排序
|
74
|
+
df1.sort_values(by=[column,'Date','Lucky','Absent','Answer'],inplace=True)
|
75
|
+
df1.reset_index(drop=True,inplace=True)
|
76
|
+
|
77
|
+
pickle_write(df1,pickle_path)
|
78
|
+
|
79
|
+
return
|
80
|
+
|
81
|
+
#==============================================================================
|
82
|
+
if __name__=='__main__':
|
83
|
+
pickle_path="student_list.pkl"
|
84
|
+
|
85
|
+
df=pickle_read(pickle_path)
|
86
|
+
|
87
|
+
def pickle_read(pickle_path="student_list.pkl"):
|
88
|
+
with open(pickle_path,'rb') as pickle_file:
|
89
|
+
df = pickle.load(pickle_file)
|
90
|
+
return df
|
91
|
+
|
92
|
+
#==============================================================================
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
def pickle_append(df,column='Name',pickle_path="student_list.pkl"):
|
97
|
+
df_tmp=pickle_read(pickle_path)
|
98
|
+
df_new=pd.concat([df_tmp,df])
|
99
|
+
|
100
|
+
df_new.sort_values(by=[column,'Date'],inplace=True)
|
101
|
+
|
102
|
+
pickle_write(df_new,pickle_path)
|
103
|
+
|
104
|
+
return
|
105
|
+
|
106
|
+
#==============================================================================
|
107
|
+
if __name__=='__main__':
|
108
|
+
alist=["A","B","C","D"]
|
109
|
+
|
110
|
+
for i in range(4):
|
111
|
+
print(random_select(alist))
|
112
|
+
|
113
|
+
|
114
|
+
def random_select(alist):
|
115
|
+
return random.choice(alist)
|
116
|
+
|
117
|
+
#==============================================================================
|
118
|
+
|
119
|
+
if __name__=='__main__':
|
120
|
+
prompt="Is the lucky person here in class?"
|
121
|
+
|
122
|
+
read_yes_no(prompt)
|
123
|
+
|
124
|
+
|
125
|
+
def read_yes_no(prompt, default=None):
|
126
|
+
if default is None:
|
127
|
+
prompt += " [yes/no] "
|
128
|
+
else:
|
129
|
+
prompt += " [yes/no] (default: %s) " % ('yes' if default else 'no')
|
130
|
+
while True:
|
131
|
+
user_input = input(prompt).lower()
|
132
|
+
if user_input in ['', 'yes', 'y', 'true']:
|
133
|
+
return True
|
134
|
+
elif user_input in ['no', 'n', 'false']:
|
135
|
+
return False
|
136
|
+
elif user_input == '' and default is not None:
|
137
|
+
return default
|
138
|
+
else:
|
139
|
+
print("Please enter 'yes' or 'no' (or 'y'/'n').")
|
140
|
+
|
141
|
+
return
|
142
|
+
|
143
|
+
#==============================================================================
|
144
|
+
if __name__=='__main__':
|
145
|
+
draw_limit=2
|
146
|
+
absent_limit=2
|
147
|
+
column='Name'
|
148
|
+
pickle_path="student_list.pkl"
|
149
|
+
|
150
|
+
lucky_draw()
|
151
|
+
df=pickle_read(pickle_path)
|
152
|
+
|
153
|
+
|
154
|
+
def lucky_draw(draw_limit=2,absent_limit=2,column='Name',pickle_path="student_list.pkl"):
|
155
|
+
"""
|
156
|
+
draw_limit=2:整个课程每人最多2次抽签机会
|
157
|
+
absent_limit=2:整个课程每人最多缺席2次,超过就丧失抽签资格
|
158
|
+
"""
|
159
|
+
df=pickle_read(pickle_path)
|
160
|
+
|
161
|
+
alist=list(set(list(df[column])))
|
162
|
+
|
163
|
+
found=False
|
164
|
+
todaydt = str(datetime.date.today())
|
165
|
+
prompt="*** Is the lucky person here on site?"
|
166
|
+
prompt2="*** Do you expect to pass?"
|
167
|
+
|
168
|
+
while True:
|
169
|
+
while True:
|
170
|
+
aname=random_select(alist)
|
171
|
+
|
172
|
+
adf=df[df[column]==aname]
|
173
|
+
atimes=adf['Lucky'].sum()
|
174
|
+
aonsite=adf['Absent'].sum()
|
175
|
+
|
176
|
+
if atimes < draw_limit and aonsite <= absent_limit:
|
177
|
+
#检查今日是否被抽中过
|
178
|
+
drew_today=False
|
179
|
+
try:
|
180
|
+
adf_today=adf[adf['Date']==todaydt]
|
181
|
+
if len(adf_today) > 0:
|
182
|
+
if adf_today['Lucky'].sum() > 0 or adf_today['Absent'].sum() > 0:
|
183
|
+
drew_today=True
|
184
|
+
except: pass
|
185
|
+
|
186
|
+
if not drew_today:
|
187
|
+
found=True
|
188
|
+
break
|
189
|
+
else: continue
|
190
|
+
else:
|
191
|
+
continue
|
192
|
+
|
193
|
+
if not found:
|
194
|
+
print("Congratulations! all person has been lucky for",limit,"times")
|
195
|
+
else:
|
196
|
+
"""
|
197
|
+
print("\nThe lucky person is ",end='')
|
198
|
+
typewriter(aname,delay=1)
|
199
|
+
"""
|
200
|
+
typewriter(text=aname,text_color='blue',text_size=12,delay=1)
|
201
|
+
|
202
|
+
#print('')
|
203
|
+
onsite=read_yes_no(prompt)
|
204
|
+
#是否到场
|
205
|
+
if onsite: absent=0
|
206
|
+
else: absent=1
|
207
|
+
|
208
|
+
onpass=False; answer=0
|
209
|
+
if onsite:
|
210
|
+
onpass=read_yes_no(prompt2)
|
211
|
+
#是否pass
|
212
|
+
if onpass: answer=0
|
213
|
+
else: answer=1
|
214
|
+
|
215
|
+
#只要抽中,不论是否到场都记录
|
216
|
+
row=pd.Series({column:aname,'Date':todaydt,'Lucky':1,'Absent':absent,'Answer':answer})
|
217
|
+
try:
|
218
|
+
df=df.append(row,ignore_index=True)
|
219
|
+
except:
|
220
|
+
df=df._append(row,ignore_index=True)
|
221
|
+
|
222
|
+
if onsite and not onpass:
|
223
|
+
#到场且不pass,结束本轮抽签
|
224
|
+
break
|
225
|
+
else:
|
226
|
+
#未到场或pass,继续抽签
|
227
|
+
continue
|
228
|
+
|
229
|
+
df.sort_values(by=[column,'Date'],inplace=True)
|
230
|
+
pickle_write(df,pickle_path)
|
231
|
+
|
232
|
+
return
|
233
|
+
|
234
|
+
#==============================================================================
|
235
|
+
#==============================================================================
|
236
|
+
#==============================================================================
|
237
|
+
#==============================================================================
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
|
248
|
+
#==============================================================================#==============================================================================
|
249
|
+
#==============================================================================#==============================================================================
|
250
|
+
#==============================================================================#==============================================================================
|
251
|
+
|
252
|
+
#==============================================================================
|
siat/stock_technical.py
CHANGED
@@ -188,8 +188,10 @@ def calc_technical(df,start,end,technical='MACD', \
|
|
188
188
|
ROC_day=12,ROC_madays=[6], \
|
189
189
|
DMI_DIdays=[14],DMI_ADXdays=[6], \
|
190
190
|
|
191
|
-
MFI_day=14,MFI_madays=[
|
192
|
-
|
191
|
+
MFI_day=14,MFI_madays=[6], \
|
192
|
+
|
193
|
+
#提出选择12日或25日,移动均线为10日
|
194
|
+
MOM_day=12,MOM_madays=6, \
|
193
195
|
|
194
196
|
#需要显示SAR
|
195
197
|
SAR_day=4,SAR_madays=[5,20], \
|
@@ -201,7 +203,7 @@ def calc_technical(df,start,end,technical='MACD', \
|
|
201
203
|
TSF_day=14,TSF_madays=[5,20], \
|
202
204
|
|
203
205
|
#需要显示AD
|
204
|
-
|
206
|
+
AD_madays=[5], \
|
205
207
|
|
206
208
|
#不建议使用复权价,因为最高最低价和开盘价没有复权价!
|
207
209
|
indicator='Close', \
|
@@ -586,11 +588,11 @@ def calc_technical(df,start,end,technical='MACD', \
|
|
586
588
|
TRIX_madays=[TRIX_madays]
|
587
589
|
for d in TRIX_madays:
|
588
590
|
df['trix_ma'+str(d)] = talib.MA(df['trix'],timeperiod=d)
|
589
|
-
|
591
|
+
"""
|
590
592
|
if not more_details:
|
591
593
|
#不保留TRIX
|
592
594
|
df.drop(columns = ['trix'],inplace=True)
|
593
|
-
|
595
|
+
"""
|
594
596
|
#=========== DMA: 平均线差
|
595
597
|
"""
|
596
598
|
计算公式:
|
@@ -744,11 +746,11 @@ def calc_technical(df,start,end,technical='MACD', \
|
|
744
746
|
MFI_madays=[MFI_madays]
|
745
747
|
for d in MFI_madays:
|
746
748
|
df['mfi_ma'+str(d)] = df['mfi'].rolling(window=d).mean()
|
747
|
-
|
749
|
+
"""
|
748
750
|
if not more_details:
|
749
751
|
#不保留指标本身
|
750
752
|
df.drop(columns = ['mfi'],inplace=True)
|
751
|
-
|
753
|
+
"""
|
752
754
|
#=========== MOM:动量指标
|
753
755
|
"""
|
754
756
|
|
@@ -760,11 +762,11 @@ def calc_technical(df,start,end,technical='MACD', \
|
|
760
762
|
MOM_madays=[MOM_madays]
|
761
763
|
for d in MOM_madays:
|
762
764
|
df['mom_ma'+str(d)] = df['mom'].rolling(window=d).mean()
|
763
|
-
|
765
|
+
"""
|
764
766
|
if not more_details:
|
765
767
|
#不保留指标本身
|
766
768
|
df.drop(columns = ['mom'],inplace=True)
|
767
|
-
|
769
|
+
"""
|
768
770
|
#=========== BETA:贝塔系数
|
769
771
|
"""
|
770
772
|
动态贝塔系数?
|
@@ -805,18 +807,17 @@ def calc_technical(df,start,end,technical='MACD', \
|
|
805
807
|
"""
|
806
808
|
if technical=='AD':
|
807
809
|
|
808
|
-
#df['ad'] = talib.AD(df['High'],df['Low'],df[indicator],df['Volume'],timeperiod=AD_day)
|
809
810
|
df['ad'] = talib.AD(df['High'],df['Low'],df[indicator],df['Volume'])
|
810
811
|
|
811
812
|
if not isinstance(AD_madays,list):
|
812
813
|
AD_madays=[AD_madays]
|
813
814
|
for d in AD_madays:
|
814
815
|
df['ad_ma'+str(d)] = df['ad'].rolling(window=d).mean()
|
815
|
-
|
816
|
+
"""
|
816
817
|
if not more_details:
|
817
818
|
#不保留指标本身
|
818
819
|
df.drop(columns = ['ad'],inplace=True)
|
819
|
-
|
820
|
+
"""
|
820
821
|
|
821
822
|
|
822
823
|
#过滤日期===================================================================
|
@@ -2620,12 +2621,12 @@ if __name__ =="__main__":
|
|
2620
2621
|
WR_days=[10,6]
|
2621
2622
|
ROC_day=12; ROC_madays=6
|
2622
2623
|
DMI_DIdays=14; DMI_ADXdays=6
|
2623
|
-
MFI_day=14; MFI_madays=[
|
2624
|
-
MOM_day=
|
2624
|
+
MFI_day=14; MFI_madays=[6]
|
2625
|
+
MOM_day=12; MOM_madays=6
|
2625
2626
|
SAR_day=4; SAR_madays=[5,20]
|
2626
2627
|
BETA_day=5; BETA_madays=[5,20]
|
2627
2628
|
TSF_day=14; TSF_madays=[5,10]
|
2628
|
-
|
2629
|
+
AD_madays=[5]
|
2629
2630
|
|
2630
2631
|
|
2631
2632
|
ticker='002594.SZ';ticker_type='auto'
|
@@ -2691,7 +2692,7 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
2691
2692
|
|
2692
2693
|
DMA_fastperiod=10,DMA_slowperiod=50,DMA_madays=[10], \
|
2693
2694
|
|
2694
|
-
TRIX_day=12,TRIX_madays=[
|
2695
|
+
TRIX_day=12,TRIX_madays=[20], \
|
2695
2696
|
|
2696
2697
|
BIAS_days=[6,12,24], \
|
2697
2698
|
|
@@ -2703,9 +2704,10 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
2703
2704
|
|
2704
2705
|
DMI_DIdays=7,DMI_ADXdays=6, \
|
2705
2706
|
|
2706
|
-
#资金流:
|
2707
|
-
MFI_day=14,MFI_madays=[
|
2708
|
-
|
2707
|
+
#资金流:
|
2708
|
+
MFI_day=14,MFI_madays=[6], \
|
2709
|
+
|
2710
|
+
MOM_day=12,MOM_madays=6, \
|
2709
2711
|
|
2710
2712
|
#需要显示SAR
|
2711
2713
|
SAR_day=4,SAR_madays=[5,20], \
|
@@ -2717,7 +2719,7 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
2717
2719
|
TSF_day=14,TSF_madays=[5,10], \
|
2718
2720
|
|
2719
2721
|
#需要显示AD
|
2720
|
-
|
2722
|
+
AD_madays=[], \
|
2721
2723
|
|
2722
2724
|
#数据提前量,用于前置计算指标的移动平均值
|
2723
2725
|
ahead_days=30*8, \
|
@@ -2739,11 +2741,11 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
2739
2741
|
|
2740
2742
|
#价格线的绘图参数
|
2741
2743
|
#price_line_style=(0,(1,1)), \
|
2742
|
-
price_line_style=
|
2744
|
+
price_line_style=(0,(3,1,1,1,1,1)), \
|
2743
2745
|
price_line_color=['red','green'], \
|
2744
2746
|
price_line_width=1,price_line_marker='o', \
|
2745
2747
|
marker_sizes=[30,120,250], \
|
2746
|
-
|
2748
|
+
):
|
2747
2749
|
"""
|
2748
2750
|
功能:计算和绘制证券技术分析指标的简易图,仅供进一步探索使用,仅用于单个证券(股债基)
|
2749
2751
|
|
@@ -2867,7 +2869,7 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
2867
2869
|
TSF_day=TSF_day,TSF_madays=TSF_madays, \
|
2868
2870
|
|
2869
2871
|
#需要显示AD
|
2870
|
-
|
2872
|
+
AD_madays=AD_madays, \
|
2871
2873
|
|
2872
2874
|
indicator=indicator, \
|
2873
2875
|
more_details=more_details)
|
@@ -3007,6 +3009,9 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
3007
3009
|
ax3.set_facecolor('papayawhip')
|
3008
3010
|
|
3009
3011
|
color_list=['k','g','b','c','m','yellowgreen','tomato','lime','orange','deepskyblue']
|
3012
|
+
|
3013
|
+
if isinstance(attention_values,int):
|
3014
|
+
attention_values=[attention_values]
|
3010
3015
|
attention_draws=[False] * len(attention_values)
|
3011
3016
|
|
3012
3017
|
for l in tech_line_collist:
|
@@ -3037,7 +3042,7 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
3037
3042
|
xy=(x_end, y_end),
|
3038
3043
|
xytext=(x_end, y_end),color=last_line_color)
|
3039
3044
|
"""
|
3040
|
-
ax.annotate(text='
|
3045
|
+
ax.annotate(text=''+l.upper(),
|
3041
3046
|
xy=(x_end, y_end),
|
3042
3047
|
xytext=(x_end, y_end),color=last_line_color,fontsize=legend_txt_size)
|
3043
3048
|
|
@@ -3053,7 +3058,7 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
3053
3058
|
|
3054
3059
|
#如果需要绘制关注线,且尚未绘制过,则绘制
|
3055
3060
|
if line_al and not attention_draws[pos]:
|
3056
|
-
ax.axhline(y=attention_values[pos],ls=
|
3061
|
+
ax.axhline(y=attention_values[pos],ls='dotted',c=color_list[pos],linewidth=1)
|
3057
3062
|
|
3058
3063
|
attention_draws[pos]=True
|
3059
3064
|
|
@@ -3109,8 +3114,8 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
3109
3114
|
ax2.set_ylabel(ylabeltxt2,fontsize=ylabel_txt_size)
|
3110
3115
|
|
3111
3116
|
#细灰线先画出轮廓
|
3112
|
-
ax2.plot(df1.index,df1[indicator],label=
|
3113
|
-
linestyle=price_line_style,color='
|
3117
|
+
ax2.plot(df1.index,df1[indicator],label=ylabeltxt2, \
|
3118
|
+
linestyle=price_line_style,color='k',lw=2)
|
3114
3119
|
|
3115
3120
|
#不同颜色绘制涨跌价格线
|
3116
3121
|
first_time=True; second_time=False
|
@@ -3119,11 +3124,13 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
3119
3124
|
if df1seg['up_down'].values[0] >=0:
|
3120
3125
|
seg_color=price_line_color1
|
3121
3126
|
#labeltxt=ylabeltxt2+'(当日↑)'
|
3122
|
-
labeltxt=ylabeltxt2+'(当日阳线)'
|
3127
|
+
#labeltxt=ylabeltxt2+'(当日阳线)'
|
3128
|
+
labeltxt='当日↑'
|
3123
3129
|
else:
|
3124
3130
|
seg_color=price_line_color2
|
3125
3131
|
#labeltxt=ylabeltxt2+'(当日↓)'
|
3126
|
-
labeltxt=ylabeltxt2+'(当日阴线)'
|
3132
|
+
#labeltxt=ylabeltxt2+'(当日阴线)'
|
3133
|
+
labeltxt='当日↓'
|
3127
3134
|
|
3128
3135
|
if first_time:
|
3129
3136
|
first_time=False; second_time=True
|
@@ -3135,7 +3142,7 @@ def security_technical2(ticker,start='default',end='default',technical='MACD', \
|
|
3135
3142
|
ax2.scatter(df1seg.index,df1seg[indicator], \
|
3136
3143
|
s=df1seg['marker_size'], \
|
3137
3144
|
label=labeltxt, \
|
3138
|
-
linestyle=':',color=seg_color,lw=price_line_width,marker=price_line_marker)
|
3145
|
+
linestyle=':',color=seg_color,lw=price_line_width,marker=price_line_marker,alpha=0.5)
|
3139
3146
|
|
3140
3147
|
ax2.legend(loc=loc2,fontsize=legend_txt_size)
|
3141
3148
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
siat/__init__.py,sha256=gP5uajXnJesnH5SL0ZPwq_Qhv59AG1bs4qwZv26Fo2Y,2894
|
2
|
-
siat/allin.py,sha256=
|
2
|
+
siat/allin.py,sha256=f8mlMSQJUgx4mRVOJNlHH2SZP0jUyWaeDPT2V6AGfY8,2757
|
3
3
|
siat/alpha_vantage_test.py,sha256=tKr-vmuFH3CZAqwmISz6jzjPHzV1JJl3sPfZdz8aTfM,747
|
4
4
|
siat/assets_liquidity.py,sha256=o_UZdLs693uNWPEQB2OzxDH0mdWimOmq4qe_vx1pue0,28987
|
5
5
|
siat/assets_liquidity_test.py,sha256=UWk6HIUlizU7LQZ890fGx8LwU1jMMrIZswg8cFUJWZ8,1285
|
@@ -64,6 +64,7 @@ siat/grafix_test.py,sha256=kXvcpLgQNO7wd30g_bWljLj5UH7bIVI0_dUtXbfiKR0,3150
|
|
64
64
|
siat/holding_risk.py,sha256=G3wpaewAKF9CwEqRpr4khyuDu9SU2EGyQUHdk7cmHOA,30693
|
65
65
|
siat/holding_risk_test.py,sha256=FRlw_9wFG98BYcg_cSj95HX5WZ1TvkGaOUdXD7-V86s,474
|
66
66
|
siat/local_debug_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
|
67
|
+
siat/luchy_draw.py,sha256=cL-QBRbnjvY2h8B6YGp6Orycw43ypvBPhkFARD1bbPo,8248
|
67
68
|
siat/market_china.py,sha256=hKoTLUyHuzsuG2L3_IuLx_utTKqS-__mZ63wrElh65U,45943
|
68
69
|
siat/markowitz.py,sha256=glHikhabFAF6Hb6df1pYfhkxid2IZXBYAVQng5wd9Wk,97526
|
69
70
|
siat/markowitz2-20240620.py,sha256=irZAPnjaatFsKQmFRMENP-cO6bEUl2narYtkU5NKTWI,108019
|
@@ -115,7 +116,7 @@ siat/stock_prices_kneighbors.py,sha256=WfZvo5EyeBsm-T37zDj7Sl9dPSRq5Bx4JxIJ9IUum
|
|
115
116
|
siat/stock_prices_linear.py,sha256=-OUKRr27L2aStQgJSlJOrJ4gay_G7P-m-7t7cU2Yoqk,13991
|
116
117
|
siat/stock_profile.py,sha256=B3eIwzEmiCqiCaxIlhfdEPsQBoW1PFOe1hkiY3mVF6Y,26038
|
117
118
|
siat/stock_technical-20240620.py,sha256=A4x18mZgYSA8SSiDz4u_O3gd5oVRgbI6JIiBfFY0tVw,116013
|
118
|
-
siat/stock_technical.py,sha256=
|
119
|
+
siat/stock_technical.py,sha256=GPedxbOSPTi8zthDMu69edFVLES2RSNor2a1y8Zo42w,131612
|
119
120
|
siat/stock_test.py,sha256=E9YJAvOw1VEGJSDI4IZuEjl0tGoisOIlN-g9UqA_IZE,19475
|
120
121
|
siat/stooq.py,sha256=dOc_S5HLrYg48YAKTCs1eX8UTJOOkPM8qLL2KupqlLY,2470
|
121
122
|
siat/temp.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
|
@@ -136,7 +137,7 @@ siat/valuation.py,sha256=NKfeZMdDJOW42oLVHob6eSVBXUqlN1OCnnzwyGAst8c,48855
|
|
136
137
|
siat/valuation_china.py,sha256=EkZQaVkoBjM0c4MCNbaX-bMnlG0e3FXeaWczZDnkptU,67784
|
137
138
|
siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
|
138
139
|
siat/var_model_validation.py,sha256=R0caWnuZarrRg9939hxh3vJIIpIyPfvelYmzFNZtPbo,14910
|
139
|
-
siat-3.2.
|
140
|
-
siat-3.2.
|
141
|
-
siat-3.2.
|
142
|
-
siat-3.2.
|
140
|
+
siat-3.2.30.dist-info/METADATA,sha256=zYx92U4_7j4-A4T0OGuZKkgwk8HFROhi0Wblv7L-w2E,7234
|
141
|
+
siat-3.2.30.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
142
|
+
siat-3.2.30.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
|
143
|
+
siat-3.2.30.dist-info/RECORD,,
|
File without changes
|
File without changes
|