[Add]新增OptionMaster交易日统计工具

This commit is contained in:
vn.py 2017-11-09 21:08:24 +08:00
parent 42a28e419f
commit ab79ff3d4f
4 changed files with 984 additions and 10 deletions

View File

@ -0,0 +1,731 @@
date,description
2017-11-09,
2017-11-10,
2017-11-11,weekend
2017-11-12,weekend
2017-11-13,
2017-11-14,
2017-11-15,
2017-11-16,
2017-11-17,
2017-11-18,weekend
2017-11-19,weekend
2017-11-20,
2017-11-21,
2017-11-22,
2017-11-23,
2017-11-24,
2017-11-25,weekend
2017-11-26,weekend
2017-11-27,
2017-11-28,
2017-11-29,
2017-11-30,
2017-12-01,
2017-12-02,weekend
2017-12-03,weekend
2017-12-04,
2017-12-05,
2017-12-06,
2017-12-07,
2017-12-08,
2017-12-09,weekend
2017-12-10,weekend
2017-12-11,
2017-12-12,
2017-12-13,
2017-12-14,
2017-12-15,
2017-12-16,weekend
2017-12-17,weekend
2017-12-18,
2017-12-19,
2017-12-20,
2017-12-21,
2017-12-22,
2017-12-23,weekend
2017-12-24,weekend
2017-12-25,
2017-12-26,
2017-12-27,
2017-12-28,
2017-12-29,
2017-12-30,weekend
2017-12-31,weekend
2018-01-01,holiday
2018-01-02,
2018-01-03,
2018-01-04,
2018-01-05,
2018-01-06,weekend
2018-01-07,weekend
2018-01-08,
2018-01-09,
2018-01-10,
2018-01-11,
2018-01-12,
2018-01-13,weekend
2018-01-14,weekend
2018-01-15,
2018-01-16,
2018-01-17,
2018-01-18,
2018-01-19,
2018-01-20,weekend
2018-01-21,weekend
2018-01-22,
2018-01-23,
2018-01-24,
2018-01-25,
2018-01-26,
2018-01-27,weekend
2018-01-28,weekend
2018-01-29,
2018-01-30,
2018-01-31,
2018-02-01,
2018-02-02,
2018-02-03,weekend
2018-02-04,weekend
2018-02-05,
2018-02-06,
2018-02-07,
2018-02-08,
2018-02-09,
2018-02-10,weekend
2018-02-11,weekend
2018-02-12,
2018-02-13,
2018-02-14,
2018-02-15,
2018-02-16,
2018-02-17,weekend
2018-02-18,weekend
2018-02-19,
2018-02-20,
2018-02-21,
2018-02-22,
2018-02-23,
2018-02-24,weekend
2018-02-25,weekend
2018-02-26,
2018-02-27,
2018-02-28,
2018-03-01,
2018-03-02,
2018-03-03,weekend
2018-03-04,weekend
2018-03-05,
2018-03-06,
2018-03-07,
2018-03-08,
2018-03-09,
2018-03-10,weekend
2018-03-11,weekend
2018-03-12,
2018-03-13,
2018-03-14,
2018-03-15,
2018-03-16,
2018-03-17,weekend
2018-03-18,weekend
2018-03-19,
2018-03-20,
2018-03-21,
2018-03-22,
2018-03-23,
2018-03-24,weekend
2018-03-25,weekend
2018-03-26,
2018-03-27,
2018-03-28,
2018-03-29,
2018-03-30,
2018-03-31,weekend
2018-04-01,weekend
2018-04-02,
2018-04-03,
2018-04-04,
2018-04-05,
2018-04-06,
2018-04-07,weekend
2018-04-08,weekend
2018-04-09,
2018-04-10,
2018-04-11,
2018-04-12,
2018-04-13,
2018-04-14,weekend
2018-04-15,weekend
2018-04-16,
2018-04-17,
2018-04-18,
2018-04-19,
2018-04-20,
2018-04-21,weekend
2018-04-22,weekend
2018-04-23,
2018-04-24,
2018-04-25,
2018-04-26,
2018-04-27,
2018-04-28,weekend
2018-04-29,weekend
2018-04-30,
2018-05-01,
2018-05-02,
2018-05-03,
2018-05-04,
2018-05-05,weekend
2018-05-06,weekend
2018-05-07,
2018-05-08,
2018-05-09,
2018-05-10,
2018-05-11,
2018-05-12,weekend
2018-05-13,weekend
2018-05-14,
2018-05-15,
2018-05-16,
2018-05-17,
2018-05-18,
2018-05-19,weekend
2018-05-20,weekend
2018-05-21,
2018-05-22,
2018-05-23,
2018-05-24,
2018-05-25,
2018-05-26,weekend
2018-05-27,weekend
2018-05-28,
2018-05-29,
2018-05-30,
2018-05-31,
2018-06-01,
2018-06-02,weekend
2018-06-03,weekend
2018-06-04,
2018-06-05,
2018-06-06,
2018-06-07,
2018-06-08,
2018-06-09,weekend
2018-06-10,weekend
2018-06-11,
2018-06-12,
2018-06-13,
2018-06-14,
2018-06-15,
2018-06-16,weekend
2018-06-17,weekend
2018-06-18,
2018-06-19,
2018-06-20,
2018-06-21,
2018-06-22,
2018-06-23,weekend
2018-06-24,weekend
2018-06-25,
2018-06-26,
2018-06-27,
2018-06-28,
2018-06-29,
2018-06-30,weekend
2018-07-01,weekend
2018-07-02,
2018-07-03,
2018-07-04,
2018-07-05,
2018-07-06,
2018-07-07,weekend
2018-07-08,weekend
2018-07-09,
2018-07-10,
2018-07-11,
2018-07-12,
2018-07-13,
2018-07-14,weekend
2018-07-15,weekend
2018-07-16,
2018-07-17,
2018-07-18,
2018-07-19,
2018-07-20,
2018-07-21,weekend
2018-07-22,weekend
2018-07-23,
2018-07-24,
2018-07-25,
2018-07-26,
2018-07-27,
2018-07-28,weekend
2018-07-29,weekend
2018-07-30,
2018-07-31,
2018-08-01,
2018-08-02,
2018-08-03,
2018-08-04,weekend
2018-08-05,weekend
2018-08-06,
2018-08-07,
2018-08-08,
2018-08-09,
2018-08-10,
2018-08-11,weekend
2018-08-12,weekend
2018-08-13,
2018-08-14,
2018-08-15,
2018-08-16,
2018-08-17,
2018-08-18,weekend
2018-08-19,weekend
2018-08-20,
2018-08-21,
2018-08-22,
2018-08-23,
2018-08-24,
2018-08-25,weekend
2018-08-26,weekend
2018-08-27,
2018-08-28,
2018-08-29,
2018-08-30,
2018-08-31,
2018-09-01,weekend
2018-09-02,weekend
2018-09-03,
2018-09-04,
2018-09-05,
2018-09-06,
2018-09-07,
2018-09-08,weekend
2018-09-09,weekend
2018-09-10,
2018-09-11,
2018-09-12,
2018-09-13,
2018-09-14,
2018-09-15,weekend
2018-09-16,weekend
2018-09-17,
2018-09-18,
2018-09-19,
2018-09-20,
2018-09-21,
2018-09-22,weekend
2018-09-23,weekend
2018-09-24,
2018-09-25,
2018-09-26,
2018-09-27,
2018-09-28,
2018-09-29,weekend
2018-09-30,weekend
2018-10-01,
2018-10-02,
2018-10-03,
2018-10-04,
2018-10-05,
2018-10-06,weekend
2018-10-07,weekend
2018-10-08,
2018-10-09,
2018-10-10,
2018-10-11,
2018-10-12,
2018-10-13,weekend
2018-10-14,weekend
2018-10-15,
2018-10-16,
2018-10-17,
2018-10-18,
2018-10-19,
2018-10-20,weekend
2018-10-21,weekend
2018-10-22,
2018-10-23,
2018-10-24,
2018-10-25,
2018-10-26,
2018-10-27,weekend
2018-10-28,weekend
2018-10-29,
2018-10-30,
2018-10-31,
2018-11-01,
2018-11-02,
2018-11-03,weekend
2018-11-04,weekend
2018-11-05,
2018-11-06,
2018-11-07,
2018-11-08,
2018-11-09,
2018-11-10,weekend
2018-11-11,weekend
2018-11-12,
2018-11-13,
2018-11-14,
2018-11-15,
2018-11-16,
2018-11-17,weekend
2018-11-18,weekend
2018-11-19,
2018-11-20,
2018-11-21,
2018-11-22,
2018-11-23,
2018-11-24,weekend
2018-11-25,weekend
2018-11-26,
2018-11-27,
2018-11-28,
2018-11-29,
2018-11-30,
2018-12-01,weekend
2018-12-02,weekend
2018-12-03,
2018-12-04,
2018-12-05,
2018-12-06,
2018-12-07,
2018-12-08,weekend
2018-12-09,weekend
2018-12-10,
2018-12-11,
2018-12-12,
2018-12-13,
2018-12-14,
2018-12-15,weekend
2018-12-16,weekend
2018-12-17,
2018-12-18,
2018-12-19,
2018-12-20,
2018-12-21,
2018-12-22,weekend
2018-12-23,weekend
2018-12-24,
2018-12-25,
2018-12-26,
2018-12-27,
2018-12-28,
2018-12-29,weekend
2018-12-30,weekend
2018-12-31,
2019-01-01,
2019-01-02,
2019-01-03,
2019-01-04,
2019-01-05,weekend
2019-01-06,weekend
2019-01-07,
2019-01-08,
2019-01-09,
2019-01-10,
2019-01-11,
2019-01-12,weekend
2019-01-13,weekend
2019-01-14,
2019-01-15,
2019-01-16,
2019-01-17,
2019-01-18,
2019-01-19,weekend
2019-01-20,weekend
2019-01-21,
2019-01-22,
2019-01-23,
2019-01-24,
2019-01-25,
2019-01-26,weekend
2019-01-27,weekend
2019-01-28,
2019-01-29,
2019-01-30,
2019-01-31,
2019-02-01,
2019-02-02,weekend
2019-02-03,weekend
2019-02-04,
2019-02-05,
2019-02-06,
2019-02-07,
2019-02-08,
2019-02-09,weekend
2019-02-10,weekend
2019-02-11,
2019-02-12,
2019-02-13,
2019-02-14,
2019-02-15,
2019-02-16,weekend
2019-02-17,weekend
2019-02-18,
2019-02-19,
2019-02-20,
2019-02-21,
2019-02-22,
2019-02-23,weekend
2019-02-24,weekend
2019-02-25,
2019-02-26,
2019-02-27,
2019-02-28,
2019-03-01,
2019-03-02,weekend
2019-03-03,weekend
2019-03-04,
2019-03-05,
2019-03-06,
2019-03-07,
2019-03-08,
2019-03-09,weekend
2019-03-10,weekend
2019-03-11,
2019-03-12,
2019-03-13,
2019-03-14,
2019-03-15,
2019-03-16,weekend
2019-03-17,weekend
2019-03-18,
2019-03-19,
2019-03-20,
2019-03-21,
2019-03-22,
2019-03-23,weekend
2019-03-24,weekend
2019-03-25,
2019-03-26,
2019-03-27,
2019-03-28,
2019-03-29,
2019-03-30,weekend
2019-03-31,weekend
2019-04-01,
2019-04-02,
2019-04-03,
2019-04-04,
2019-04-05,
2019-04-06,weekend
2019-04-07,weekend
2019-04-08,
2019-04-09,
2019-04-10,
2019-04-11,
2019-04-12,
2019-04-13,weekend
2019-04-14,weekend
2019-04-15,
2019-04-16,
2019-04-17,
2019-04-18,
2019-04-19,
2019-04-20,weekend
2019-04-21,weekend
2019-04-22,
2019-04-23,
2019-04-24,
2019-04-25,
2019-04-26,
2019-04-27,weekend
2019-04-28,weekend
2019-04-29,
2019-04-30,
2019-05-01,
2019-05-02,
2019-05-03,
2019-05-04,weekend
2019-05-05,weekend
2019-05-06,
2019-05-07,
2019-05-08,
2019-05-09,
2019-05-10,
2019-05-11,weekend
2019-05-12,weekend
2019-05-13,
2019-05-14,
2019-05-15,
2019-05-16,
2019-05-17,
2019-05-18,weekend
2019-05-19,weekend
2019-05-20,
2019-05-21,
2019-05-22,
2019-05-23,
2019-05-24,
2019-05-25,weekend
2019-05-26,weekend
2019-05-27,
2019-05-28,
2019-05-29,
2019-05-30,
2019-05-31,
2019-06-01,weekend
2019-06-02,weekend
2019-06-03,
2019-06-04,
2019-06-05,
2019-06-06,
2019-06-07,
2019-06-08,weekend
2019-06-09,weekend
2019-06-10,
2019-06-11,
2019-06-12,
2019-06-13,
2019-06-14,
2019-06-15,weekend
2019-06-16,weekend
2019-06-17,
2019-06-18,
2019-06-19,
2019-06-20,
2019-06-21,
2019-06-22,weekend
2019-06-23,weekend
2019-06-24,
2019-06-25,
2019-06-26,
2019-06-27,
2019-06-28,
2019-06-29,weekend
2019-06-30,weekend
2019-07-01,
2019-07-02,
2019-07-03,
2019-07-04,
2019-07-05,
2019-07-06,weekend
2019-07-07,weekend
2019-07-08,
2019-07-09,
2019-07-10,
2019-07-11,
2019-07-12,
2019-07-13,weekend
2019-07-14,weekend
2019-07-15,
2019-07-16,
2019-07-17,
2019-07-18,
2019-07-19,
2019-07-20,weekend
2019-07-21,weekend
2019-07-22,
2019-07-23,
2019-07-24,
2019-07-25,
2019-07-26,
2019-07-27,weekend
2019-07-28,weekend
2019-07-29,
2019-07-30,
2019-07-31,
2019-08-01,
2019-08-02,
2019-08-03,weekend
2019-08-04,weekend
2019-08-05,
2019-08-06,
2019-08-07,
2019-08-08,
2019-08-09,
2019-08-10,weekend
2019-08-11,weekend
2019-08-12,
2019-08-13,
2019-08-14,
2019-08-15,
2019-08-16,
2019-08-17,weekend
2019-08-18,weekend
2019-08-19,
2019-08-20,
2019-08-21,
2019-08-22,
2019-08-23,
2019-08-24,weekend
2019-08-25,weekend
2019-08-26,
2019-08-27,
2019-08-28,
2019-08-29,
2019-08-30,
2019-08-31,weekend
2019-09-01,weekend
2019-09-02,
2019-09-03,
2019-09-04,
2019-09-05,
2019-09-06,
2019-09-07,weekend
2019-09-08,weekend
2019-09-09,
2019-09-10,
2019-09-11,
2019-09-12,
2019-09-13,
2019-09-14,weekend
2019-09-15,weekend
2019-09-16,
2019-09-17,
2019-09-18,
2019-09-19,
2019-09-20,
2019-09-21,weekend
2019-09-22,weekend
2019-09-23,
2019-09-24,
2019-09-25,
2019-09-26,
2019-09-27,
2019-09-28,weekend
2019-09-29,weekend
2019-09-30,
2019-10-01,
2019-10-02,
2019-10-03,
2019-10-04,
2019-10-05,weekend
2019-10-06,weekend
2019-10-07,
2019-10-08,
2019-10-09,
2019-10-10,
2019-10-11,
2019-10-12,weekend
2019-10-13,weekend
2019-10-14,
2019-10-15,
2019-10-16,
2019-10-17,
2019-10-18,
2019-10-19,weekend
2019-10-20,weekend
2019-10-21,
2019-10-22,
2019-10-23,
2019-10-24,
2019-10-25,
2019-10-26,weekend
2019-10-27,weekend
2019-10-28,
2019-10-29,
2019-10-30,
2019-10-31,
2019-11-01,
2019-11-02,weekend
2019-11-03,weekend
2019-11-04,
2019-11-05,
2019-11-06,
2019-11-07,
2019-11-08,
1 date description
2 2017-11-09
3 2017-11-10
4 2017-11-11 weekend
5 2017-11-12 weekend
6 2017-11-13
7 2017-11-14
8 2017-11-15
9 2017-11-16
10 2017-11-17
11 2017-11-18 weekend
12 2017-11-19 weekend
13 2017-11-20
14 2017-11-21
15 2017-11-22
16 2017-11-23
17 2017-11-24
18 2017-11-25 weekend
19 2017-11-26 weekend
20 2017-11-27
21 2017-11-28
22 2017-11-29
23 2017-11-30
24 2017-12-01
25 2017-12-02 weekend
26 2017-12-03 weekend
27 2017-12-04
28 2017-12-05
29 2017-12-06
30 2017-12-07
31 2017-12-08
32 2017-12-09 weekend
33 2017-12-10 weekend
34 2017-12-11
35 2017-12-12
36 2017-12-13
37 2017-12-14
38 2017-12-15
39 2017-12-16 weekend
40 2017-12-17 weekend
41 2017-12-18
42 2017-12-19
43 2017-12-20
44 2017-12-21
45 2017-12-22
46 2017-12-23 weekend
47 2017-12-24 weekend
48 2017-12-25
49 2017-12-26
50 2017-12-27
51 2017-12-28
52 2017-12-29
53 2017-12-30 weekend
54 2017-12-31 weekend
55 2018-01-01 holiday
56 2018-01-02
57 2018-01-03
58 2018-01-04
59 2018-01-05
60 2018-01-06 weekend
61 2018-01-07 weekend
62 2018-01-08
63 2018-01-09
64 2018-01-10
65 2018-01-11
66 2018-01-12
67 2018-01-13 weekend
68 2018-01-14 weekend
69 2018-01-15
70 2018-01-16
71 2018-01-17
72 2018-01-18
73 2018-01-19
74 2018-01-20 weekend
75 2018-01-21 weekend
76 2018-01-22
77 2018-01-23
78 2018-01-24
79 2018-01-25
80 2018-01-26
81 2018-01-27 weekend
82 2018-01-28 weekend
83 2018-01-29
84 2018-01-30
85 2018-01-31
86 2018-02-01
87 2018-02-02
88 2018-02-03 weekend
89 2018-02-04 weekend
90 2018-02-05
91 2018-02-06
92 2018-02-07
93 2018-02-08
94 2018-02-09
95 2018-02-10 weekend
96 2018-02-11 weekend
97 2018-02-12
98 2018-02-13
99 2018-02-14
100 2018-02-15
101 2018-02-16
102 2018-02-17 weekend
103 2018-02-18 weekend
104 2018-02-19
105 2018-02-20
106 2018-02-21
107 2018-02-22
108 2018-02-23
109 2018-02-24 weekend
110 2018-02-25 weekend
111 2018-02-26
112 2018-02-27
113 2018-02-28
114 2018-03-01
115 2018-03-02
116 2018-03-03 weekend
117 2018-03-04 weekend
118 2018-03-05
119 2018-03-06
120 2018-03-07
121 2018-03-08
122 2018-03-09
123 2018-03-10 weekend
124 2018-03-11 weekend
125 2018-03-12
126 2018-03-13
127 2018-03-14
128 2018-03-15
129 2018-03-16
130 2018-03-17 weekend
131 2018-03-18 weekend
132 2018-03-19
133 2018-03-20
134 2018-03-21
135 2018-03-22
136 2018-03-23
137 2018-03-24 weekend
138 2018-03-25 weekend
139 2018-03-26
140 2018-03-27
141 2018-03-28
142 2018-03-29
143 2018-03-30
144 2018-03-31 weekend
145 2018-04-01 weekend
146 2018-04-02
147 2018-04-03
148 2018-04-04
149 2018-04-05
150 2018-04-06
151 2018-04-07 weekend
152 2018-04-08 weekend
153 2018-04-09
154 2018-04-10
155 2018-04-11
156 2018-04-12
157 2018-04-13
158 2018-04-14 weekend
159 2018-04-15 weekend
160 2018-04-16
161 2018-04-17
162 2018-04-18
163 2018-04-19
164 2018-04-20
165 2018-04-21 weekend
166 2018-04-22 weekend
167 2018-04-23
168 2018-04-24
169 2018-04-25
170 2018-04-26
171 2018-04-27
172 2018-04-28 weekend
173 2018-04-29 weekend
174 2018-04-30
175 2018-05-01
176 2018-05-02
177 2018-05-03
178 2018-05-04
179 2018-05-05 weekend
180 2018-05-06 weekend
181 2018-05-07
182 2018-05-08
183 2018-05-09
184 2018-05-10
185 2018-05-11
186 2018-05-12 weekend
187 2018-05-13 weekend
188 2018-05-14
189 2018-05-15
190 2018-05-16
191 2018-05-17
192 2018-05-18
193 2018-05-19 weekend
194 2018-05-20 weekend
195 2018-05-21
196 2018-05-22
197 2018-05-23
198 2018-05-24
199 2018-05-25
200 2018-05-26 weekend
201 2018-05-27 weekend
202 2018-05-28
203 2018-05-29
204 2018-05-30
205 2018-05-31
206 2018-06-01
207 2018-06-02 weekend
208 2018-06-03 weekend
209 2018-06-04
210 2018-06-05
211 2018-06-06
212 2018-06-07
213 2018-06-08
214 2018-06-09 weekend
215 2018-06-10 weekend
216 2018-06-11
217 2018-06-12
218 2018-06-13
219 2018-06-14
220 2018-06-15
221 2018-06-16 weekend
222 2018-06-17 weekend
223 2018-06-18
224 2018-06-19
225 2018-06-20
226 2018-06-21
227 2018-06-22
228 2018-06-23 weekend
229 2018-06-24 weekend
230 2018-06-25
231 2018-06-26
232 2018-06-27
233 2018-06-28
234 2018-06-29
235 2018-06-30 weekend
236 2018-07-01 weekend
237 2018-07-02
238 2018-07-03
239 2018-07-04
240 2018-07-05
241 2018-07-06
242 2018-07-07 weekend
243 2018-07-08 weekend
244 2018-07-09
245 2018-07-10
246 2018-07-11
247 2018-07-12
248 2018-07-13
249 2018-07-14 weekend
250 2018-07-15 weekend
251 2018-07-16
252 2018-07-17
253 2018-07-18
254 2018-07-19
255 2018-07-20
256 2018-07-21 weekend
257 2018-07-22 weekend
258 2018-07-23
259 2018-07-24
260 2018-07-25
261 2018-07-26
262 2018-07-27
263 2018-07-28 weekend
264 2018-07-29 weekend
265 2018-07-30
266 2018-07-31
267 2018-08-01
268 2018-08-02
269 2018-08-03
270 2018-08-04 weekend
271 2018-08-05 weekend
272 2018-08-06
273 2018-08-07
274 2018-08-08
275 2018-08-09
276 2018-08-10
277 2018-08-11 weekend
278 2018-08-12 weekend
279 2018-08-13
280 2018-08-14
281 2018-08-15
282 2018-08-16
283 2018-08-17
284 2018-08-18 weekend
285 2018-08-19 weekend
286 2018-08-20
287 2018-08-21
288 2018-08-22
289 2018-08-23
290 2018-08-24
291 2018-08-25 weekend
292 2018-08-26 weekend
293 2018-08-27
294 2018-08-28
295 2018-08-29
296 2018-08-30
297 2018-08-31
298 2018-09-01 weekend
299 2018-09-02 weekend
300 2018-09-03
301 2018-09-04
302 2018-09-05
303 2018-09-06
304 2018-09-07
305 2018-09-08 weekend
306 2018-09-09 weekend
307 2018-09-10
308 2018-09-11
309 2018-09-12
310 2018-09-13
311 2018-09-14
312 2018-09-15 weekend
313 2018-09-16 weekend
314 2018-09-17
315 2018-09-18
316 2018-09-19
317 2018-09-20
318 2018-09-21
319 2018-09-22 weekend
320 2018-09-23 weekend
321 2018-09-24
322 2018-09-25
323 2018-09-26
324 2018-09-27
325 2018-09-28
326 2018-09-29 weekend
327 2018-09-30 weekend
328 2018-10-01
329 2018-10-02
330 2018-10-03
331 2018-10-04
332 2018-10-05
333 2018-10-06 weekend
334 2018-10-07 weekend
335 2018-10-08
336 2018-10-09
337 2018-10-10
338 2018-10-11
339 2018-10-12
340 2018-10-13 weekend
341 2018-10-14 weekend
342 2018-10-15
343 2018-10-16
344 2018-10-17
345 2018-10-18
346 2018-10-19
347 2018-10-20 weekend
348 2018-10-21 weekend
349 2018-10-22
350 2018-10-23
351 2018-10-24
352 2018-10-25
353 2018-10-26
354 2018-10-27 weekend
355 2018-10-28 weekend
356 2018-10-29
357 2018-10-30
358 2018-10-31
359 2018-11-01
360 2018-11-02
361 2018-11-03 weekend
362 2018-11-04 weekend
363 2018-11-05
364 2018-11-06
365 2018-11-07
366 2018-11-08
367 2018-11-09
368 2018-11-10 weekend
369 2018-11-11 weekend
370 2018-11-12
371 2018-11-13
372 2018-11-14
373 2018-11-15
374 2018-11-16
375 2018-11-17 weekend
376 2018-11-18 weekend
377 2018-11-19
378 2018-11-20
379 2018-11-21
380 2018-11-22
381 2018-11-23
382 2018-11-24 weekend
383 2018-11-25 weekend
384 2018-11-26
385 2018-11-27
386 2018-11-28
387 2018-11-29
388 2018-11-30
389 2018-12-01 weekend
390 2018-12-02 weekend
391 2018-12-03
392 2018-12-04
393 2018-12-05
394 2018-12-06
395 2018-12-07
396 2018-12-08 weekend
397 2018-12-09 weekend
398 2018-12-10
399 2018-12-11
400 2018-12-12
401 2018-12-13
402 2018-12-14
403 2018-12-15 weekend
404 2018-12-16 weekend
405 2018-12-17
406 2018-12-18
407 2018-12-19
408 2018-12-20
409 2018-12-21
410 2018-12-22 weekend
411 2018-12-23 weekend
412 2018-12-24
413 2018-12-25
414 2018-12-26
415 2018-12-27
416 2018-12-28
417 2018-12-29 weekend
418 2018-12-30 weekend
419 2018-12-31
420 2019-01-01
421 2019-01-02
422 2019-01-03
423 2019-01-04
424 2019-01-05 weekend
425 2019-01-06 weekend
426 2019-01-07
427 2019-01-08
428 2019-01-09
429 2019-01-10
430 2019-01-11
431 2019-01-12 weekend
432 2019-01-13 weekend
433 2019-01-14
434 2019-01-15
435 2019-01-16
436 2019-01-17
437 2019-01-18
438 2019-01-19 weekend
439 2019-01-20 weekend
440 2019-01-21
441 2019-01-22
442 2019-01-23
443 2019-01-24
444 2019-01-25
445 2019-01-26 weekend
446 2019-01-27 weekend
447 2019-01-28
448 2019-01-29
449 2019-01-30
450 2019-01-31
451 2019-02-01
452 2019-02-02 weekend
453 2019-02-03 weekend
454 2019-02-04
455 2019-02-05
456 2019-02-06
457 2019-02-07
458 2019-02-08
459 2019-02-09 weekend
460 2019-02-10 weekend
461 2019-02-11
462 2019-02-12
463 2019-02-13
464 2019-02-14
465 2019-02-15
466 2019-02-16 weekend
467 2019-02-17 weekend
468 2019-02-18
469 2019-02-19
470 2019-02-20
471 2019-02-21
472 2019-02-22
473 2019-02-23 weekend
474 2019-02-24 weekend
475 2019-02-25
476 2019-02-26
477 2019-02-27
478 2019-02-28
479 2019-03-01
480 2019-03-02 weekend
481 2019-03-03 weekend
482 2019-03-04
483 2019-03-05
484 2019-03-06
485 2019-03-07
486 2019-03-08
487 2019-03-09 weekend
488 2019-03-10 weekend
489 2019-03-11
490 2019-03-12
491 2019-03-13
492 2019-03-14
493 2019-03-15
494 2019-03-16 weekend
495 2019-03-17 weekend
496 2019-03-18
497 2019-03-19
498 2019-03-20
499 2019-03-21
500 2019-03-22
501 2019-03-23 weekend
502 2019-03-24 weekend
503 2019-03-25
504 2019-03-26
505 2019-03-27
506 2019-03-28
507 2019-03-29
508 2019-03-30 weekend
509 2019-03-31 weekend
510 2019-04-01
511 2019-04-02
512 2019-04-03
513 2019-04-04
514 2019-04-05
515 2019-04-06 weekend
516 2019-04-07 weekend
517 2019-04-08
518 2019-04-09
519 2019-04-10
520 2019-04-11
521 2019-04-12
522 2019-04-13 weekend
523 2019-04-14 weekend
524 2019-04-15
525 2019-04-16
526 2019-04-17
527 2019-04-18
528 2019-04-19
529 2019-04-20 weekend
530 2019-04-21 weekend
531 2019-04-22
532 2019-04-23
533 2019-04-24
534 2019-04-25
535 2019-04-26
536 2019-04-27 weekend
537 2019-04-28 weekend
538 2019-04-29
539 2019-04-30
540 2019-05-01
541 2019-05-02
542 2019-05-03
543 2019-05-04 weekend
544 2019-05-05 weekend
545 2019-05-06
546 2019-05-07
547 2019-05-08
548 2019-05-09
549 2019-05-10
550 2019-05-11 weekend
551 2019-05-12 weekend
552 2019-05-13
553 2019-05-14
554 2019-05-15
555 2019-05-16
556 2019-05-17
557 2019-05-18 weekend
558 2019-05-19 weekend
559 2019-05-20
560 2019-05-21
561 2019-05-22
562 2019-05-23
563 2019-05-24
564 2019-05-25 weekend
565 2019-05-26 weekend
566 2019-05-27
567 2019-05-28
568 2019-05-29
569 2019-05-30
570 2019-05-31
571 2019-06-01 weekend
572 2019-06-02 weekend
573 2019-06-03
574 2019-06-04
575 2019-06-05
576 2019-06-06
577 2019-06-07
578 2019-06-08 weekend
579 2019-06-09 weekend
580 2019-06-10
581 2019-06-11
582 2019-06-12
583 2019-06-13
584 2019-06-14
585 2019-06-15 weekend
586 2019-06-16 weekend
587 2019-06-17
588 2019-06-18
589 2019-06-19
590 2019-06-20
591 2019-06-21
592 2019-06-22 weekend
593 2019-06-23 weekend
594 2019-06-24
595 2019-06-25
596 2019-06-26
597 2019-06-27
598 2019-06-28
599 2019-06-29 weekend
600 2019-06-30 weekend
601 2019-07-01
602 2019-07-02
603 2019-07-03
604 2019-07-04
605 2019-07-05
606 2019-07-06 weekend
607 2019-07-07 weekend
608 2019-07-08
609 2019-07-09
610 2019-07-10
611 2019-07-11
612 2019-07-12
613 2019-07-13 weekend
614 2019-07-14 weekend
615 2019-07-15
616 2019-07-16
617 2019-07-17
618 2019-07-18
619 2019-07-19
620 2019-07-20 weekend
621 2019-07-21 weekend
622 2019-07-22
623 2019-07-23
624 2019-07-24
625 2019-07-25
626 2019-07-26
627 2019-07-27 weekend
628 2019-07-28 weekend
629 2019-07-29
630 2019-07-30
631 2019-07-31
632 2019-08-01
633 2019-08-02
634 2019-08-03 weekend
635 2019-08-04 weekend
636 2019-08-05
637 2019-08-06
638 2019-08-07
639 2019-08-08
640 2019-08-09
641 2019-08-10 weekend
642 2019-08-11 weekend
643 2019-08-12
644 2019-08-13
645 2019-08-14
646 2019-08-15
647 2019-08-16
648 2019-08-17 weekend
649 2019-08-18 weekend
650 2019-08-19
651 2019-08-20
652 2019-08-21
653 2019-08-22
654 2019-08-23
655 2019-08-24 weekend
656 2019-08-25 weekend
657 2019-08-26
658 2019-08-27
659 2019-08-28
660 2019-08-29
661 2019-08-30
662 2019-08-31 weekend
663 2019-09-01 weekend
664 2019-09-02
665 2019-09-03
666 2019-09-04
667 2019-09-05
668 2019-09-06
669 2019-09-07 weekend
670 2019-09-08 weekend
671 2019-09-09
672 2019-09-10
673 2019-09-11
674 2019-09-12
675 2019-09-13
676 2019-09-14 weekend
677 2019-09-15 weekend
678 2019-09-16
679 2019-09-17
680 2019-09-18
681 2019-09-19
682 2019-09-20
683 2019-09-21 weekend
684 2019-09-22 weekend
685 2019-09-23
686 2019-09-24
687 2019-09-25
688 2019-09-26
689 2019-09-27
690 2019-09-28 weekend
691 2019-09-29 weekend
692 2019-09-30
693 2019-10-01
694 2019-10-02
695 2019-10-03
696 2019-10-04
697 2019-10-05 weekend
698 2019-10-06 weekend
699 2019-10-07
700 2019-10-08
701 2019-10-09
702 2019-10-10
703 2019-10-11
704 2019-10-12 weekend
705 2019-10-13 weekend
706 2019-10-14
707 2019-10-15
708 2019-10-16
709 2019-10-17
710 2019-10-18
711 2019-10-19 weekend
712 2019-10-20 weekend
713 2019-10-21
714 2019-10-22
715 2019-10-23
716 2019-10-24
717 2019-10-25
718 2019-10-26 weekend
719 2019-10-27 weekend
720 2019-10-28
721 2019-10-29
722 2019-10-30
723 2019-10-31
724 2019-11-01
725 2019-11-02 weekend
726 2019-11-03 weekend
727 2019-11-04
728 2019-11-05
729 2019-11-06
730 2019-11-07
731 2019-11-08

View File

@ -6,7 +6,7 @@ from collections import OrderedDict
from vnpy.trader.vtConstant import *
from vnpy.trader.vtObject import VtTickData
from .omFunction import getTimeToMaturity
from .omDate import getTimeToMaturity
# 常量定义

View File

@ -0,0 +1,252 @@
# encoding: UTF-8
"""用于处理周末和节假日,以计算交易日的组件"""
from __future__ import division
import csv
import datetime
import sys
import os
from collections import OrderedDict
from vnpy.trader.uiQt import QtCore, QtWidgets, QtGui
# 常量定义
ANNUAL_TRADINGDAYS = 240
CALENDAR_FILENAME = 'TradingCalendar.csv'
PATH = os.path.abspath(os.path.dirname(__file__))
CALENDAR_FILEPATH = os.path.join(PATH, CALENDAR_FILENAME)
# 加载日历数据
try:
with open(CALENDAR_FILEPATH, 'r') as f:
reader = csv.DictReader(f)
CALENDAR = [d for d in reader]
except IOError:
CALENDAR = []
# TimeToMaturity缓存字典
TTM_DICT = {} # key:date, value:float time(year)
########################################################################
class CalendarEditor(QtWidgets.QTableWidget):
"""日历编辑器"""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
super(CalendarEditor, self).__init__()
self.initUi()
#----------------------------------------------------------------------
def initUi(self):
"""初始化界面"""
self.setColumnCount(2)
self.horizontalHeader().setVisible(True) # 关闭左边的垂直表头
self.verticalHeader().setVisible(False) # 关闭左边的垂直表头
self.setHorizontalHeaderLabels([u'日期', u'描述'])
#----------------------------------------------------------------------
def clearTable(self):
"""清空表格"""
self.clear()
self.initUi()
#----------------------------------------------------------------------
def loadCalendar(self):
"""读取日历"""
self.clearContents()
row = 0
totalRow = self.rowCount()
# 如果有则打开
try:
with open(CALENDAR_FILEPATH, 'r') as f:
reader = csv.DictReader(f)
for d in reader:
cellDate = QtWidgets.QTableWidgetItem(d['date'])
cellDescription = QtWidgets.QTableWidgetItem(d['description'])
if row >= totalRow:
self.insertRow(row)
self.setItem(row, 0, cellDate)
self.setItem(row, 1, cellDescription)
row = row + 1
# 如果没有该文件则创建
except IOError:
f = open(CALENDAR_FILEPATH, 'w')
f.close()
#----------------------------------------------------------------------
def saveCalendar(self):
"""保存日历"""
totalRow = self.rowCount()
with open(CALENDAR_FILEPATH, 'w') as f:
writer = csv.DictWriter(f, lineterminator='\n', fieldnames=['date', 'description'])
writer.writeheader()
for row in range(totalRow):
cellDate = self.item(row, 0)
cellDescription = self.item(row, 1)
if cellDescription:
description = cellDescription.text()
else:
description = ''
d = {
'date': cellDate.text(),
'description': description
}
writer.writerow(d)
#----------------------------------------------------------------------
def initCalendar(self):
"""初始化日历"""
initCalendarCsv()
########################################################################
class CalendarManager(QtWidgets.QWidget):
"""日历管理组件"""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
super(CalendarManager, self).__init__()
self.initUI()
#----------------------------------------------------------------------
def initUI(self):
""""""
self.setWindowTitle(u'日历管理')
self.editor = CalendarEditor()
buttonLoad = QtWidgets.QPushButton(u'读取日历')
buttonSave = QtWidgets.QPushButton(u'保存日历')
buttonInit = QtWidgets.QPushButton(u'初始化日历')
buttonClear = QtWidgets.QPushButton(u'清空')
buttonLoad.clicked.connect(self.editor.loadCalendar)
buttonSave.clicked.connect(self.editor.saveCalendar)
buttonInit.clicked.connect(self.editor.initCalendar)
buttonClear.clicked.connect(self.editor.clearTable)
hbox = QtWidgets.QHBoxLayout()
hbox.addWidget(buttonLoad)
hbox.addWidget(buttonSave)
hbox.addWidget(buttonInit)
hbox.addWidget(buttonClear)
hbox.addStretch()
vbox = QtWidgets.QVBoxLayout()
vbox.addLayout(hbox)
vbox.addWidget(self.editor)
self.setLayout(vbox)
#----------------------------------------------------------------------
def runCalendarEditor():
"""运行日历编辑器"""
reload(sys)
sys.setdefaultencoding('utf8')
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont(u'微软雅黑', 12))
try:
import qdarkstyle
app.setStyleSheet(qdarkstyle.load_stylesheet(pyside=False))
except:
pass
manager = CalendarManager()
manager.showMaximized()
sys.exit(app.exec_())
#----------------------------------------------------------------------
def initCalendarCsv():
"""初始化日期文件"""
# 读取csv中的数据并生成列表和字典
calendarDict = OrderedDict()
try:
with open(CALENDAR_FILEPATH, 'r') as f:
reader = csv.DictReader(f)
for d in reader:
calendarDict[d['date']] = d
except IOError:
pass
# 生成未来的数据
today = datetime.date.today()
oneday = datetime.timedelta(days=1)
t = today
for i in range(365*2):
# 如果日历里没有该日期的状态,则初始化(仅判断是否周末)
tstr = t.strftime('%Y-%m-%d')
if tstr not in calendarDict:
if t.weekday() == 5 or t.weekday() == 6:
description = 'weekend'
else:
description = ''
d = {
'date': tstr,
'description': description
}
calendarDict[d['date']] = d
# 往下一天
t = t + oneday
# 保存到csv中
with open(CALENDAR_FILEPATH, 'w') as f:
writer = csv.DictWriter(f, lineterminator='\n', fieldnames=d.keys())
writer.writeheader()
for d in calendarDict.values():
writer.writerow(d)
#----------------------------------------------------------------------
def getTimeToMaturity(expiryDate):
"""计算剩余的年化到期时间(交易日)"""
# 如果有缓存则直接返回
if expiryDate in TTM_DICT:
return TTM_DICT[expiryDate]
# 获取日期对象
expiryDt = datetime.datetime.strptime(expiryDate, '%Y%m%d').date()
todayDt = datetime.date.today()
tradingDays = 0
for d in CALENDAR:
dt = datetime.datetime.strptime(d['date'], '%Y-%m-%d').date()
# 判断是否为交易日的条件:
# 1. 日期大于等于今日
# 2. 日期小于等于到期日
# 3. 日期没有描述(假期)
if dt>=todayDt and dt<=expiryDt and not d['description']:
tradingDays += 1
# 缓存并返回年化剩余时间
ttm = tradingDays/ANNUAL_TRADINGDAYS
TTM_DICT[expiryDate] = ttm
return ttm
if __name__ == '__main__':
runCalendarEditor()

View File

@ -1,9 +0,0 @@
# encoding: UTF-8
#----------------------------------------------------------------------
def getTimeToMaturity(expiryDate):
"""计算期权剩余到期时间"""
t = 0
return t