|
18 | 18 | from PyFin.Analysis.TechnicalAnalysis import SecurityMaximumValueHolder
|
19 | 19 | from PyFin.Analysis.TechnicalAnalysis import SecurityMinimumValueHolder
|
20 | 20 | from PyFin.Analysis.TechnicalAnalysis import SecurityMovingQuantile
|
| 21 | +from PyFin.Analysis.TechnicalAnalysis import SecurityMovingCount |
| 22 | +from PyFin.Analysis.TechnicalAnalysis import SecurityMovingCountUnique |
| 23 | +from PyFin.Analysis.TechnicalAnalysis import SecurityTimeMovingCount |
| 24 | +from PyFin.Analysis.TechnicalAnalysis import SecurityTimeMovingCountUnique |
21 | 25 | from PyFin.Analysis.TechnicalAnalysis import SecurityMovingAllTrue
|
22 | 26 | from PyFin.Analysis.TechnicalAnalysis import SecurityMovingAnyTrue
|
23 | 27 | from PyFin.Analysis.TechnicalAnalysis import SecurityMovingSum
|
@@ -174,6 +178,24 @@ def MQUANTILE(window, x='x'):
|
174 | 178 | return SecurityMovingQuantile(window, x)
|
175 | 179 |
|
176 | 180 |
|
| 181 | +def MCOUNT(window, x="x", closed="right"): |
| 182 | + if isinstance(window, int): |
| 183 | + return SecurityMovingCount(window, x) |
| 184 | + elif isinstance(window, str): |
| 185 | + return SecurityTimeMovingCount(window, x, closed) |
| 186 | + else: |
| 187 | + raise ValueError("wrong window format <{0}>".format(window)) |
| 188 | + |
| 189 | + |
| 190 | +def MUCOUNT(window, x="x", closed="right"): |
| 191 | + if isinstance(window, int): |
| 192 | + return SecurityMovingCountUnique(window, x) |
| 193 | + elif isinstance(window, str): |
| 194 | + return SecurityTimeMovingCountUnique(window, x, closed) |
| 195 | + else: |
| 196 | + raise ValueError("wrong window format <{0}>".format(window)) |
| 197 | + |
| 198 | + |
177 | 199 | def MALLTRUE(window, x='x'):
|
178 | 200 | return SecurityMovingAllTrue(window, x)
|
179 | 201 |
|
|
0 commit comments