pkscreener 0.46.20250214.715__cp310-cp310-macosx_10_9_x86_64.whl → 0.46.20250214.717__cp310-cp310-macosx_10_9_x86_64.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.
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/README.txt +5 -5
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/MarketMonitor.py +13 -6
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKUserRegistration.py +4 -1
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Pktalib.py +76 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ScreeningStatistics.py +2 -0
- pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/__init__.py +1 -0
- {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/METADATA +7 -7
- pkscreener-0.46.20250214.717.dist-info/RECORD +58 -0
- pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/__init__.py +0 -1
- pkscreener-0.46.20250214.715.dist-info/RECORD +0 -58
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/Disclaimer.txt +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/LICENSE.txt +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/LogoWM.txt +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/__init__.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/AssetsManager.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Backtest.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Barometer.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Changelog.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Fetcher.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Messenger.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKTask.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Utility.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/keys.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/courbd.ttf +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/globals.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/pkscreener.ini +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/pkscreenerbot.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/pkscreenercli.py +0 -0
- {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/requirements.txt +0 -0
- {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/LICENSE +0 -0
- {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/WHEEL +0 -0
- {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/entry_points.txt +0 -0
- {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/top_level.txt +0 -0
@@ -328,15 +328,15 @@ After you have finished the run, go to that copied path, zip the contents of the
|
|
328
328
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
329
329
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
330
330
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
331
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
331
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli.exe
|
332
332
|
[Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
|
333
|
-
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
333
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_x64.bin
|
334
334
|
[Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
|
335
|
-
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
335
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_arm64.bin
|
336
336
|
[Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
|
337
|
-
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
337
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_x64.run
|
338
338
|
[Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
|
339
|
-
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
339
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_arm64.run
|
340
340
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
341
341
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
342
342
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -54,7 +54,7 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
|
|
54
54
|
self.alertOptions = alertOptions
|
55
55
|
self.hiddenColumns = ""
|
56
56
|
self.alertStocks = []
|
57
|
-
self.
|
57
|
+
self.alertedStocks = {}
|
58
58
|
self.pinnedIntervalWaitSeconds = pinnedIntervalWaitSeconds
|
59
59
|
# self.monitorNames = {}
|
60
60
|
# We are going to present the dataframes in a 3x3 matrix with limited set of columns
|
@@ -66,7 +66,10 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
|
|
66
66
|
self.maxNumResultsPerRow = maxNumResultsPerRow
|
67
67
|
maxColIndex = self.maxNumColsInEachResult * self.maxNumResultsPerRow - 1
|
68
68
|
self.lines = 0
|
69
|
+
monIndex = 0
|
69
70
|
for monitorKey in self.monitors:
|
71
|
+
self.alertedStocks[str(monIndex)] = []
|
72
|
+
monIndex += 1
|
70
73
|
self.monitorPositions[monitorKey] = [rowIndex,colIndex]
|
71
74
|
# self.monitorNames[monitorKey] = ""
|
72
75
|
colIndex += self.maxNumColsInEachResult
|
@@ -96,6 +99,8 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
|
|
96
99
|
|
97
100
|
def saveMonitorResultStocks(self, results_df):
|
98
101
|
try:
|
102
|
+
if len(self.alertedStocks.keys()) < self.monitorIndex+1: # for pytests
|
103
|
+
self.alertedStocks[str(self.monitorIndex)] = []
|
99
104
|
self.alertStocks = []
|
100
105
|
lastSavedResults = self.monitorResultStocks[str(self.monitorIndex)]
|
101
106
|
lastSavedResults = lastSavedResults.split(",")
|
@@ -114,9 +119,12 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
|
|
114
119
|
addedStocks = list(set(prevOutput_results.split(',')) - set(lastSavedResults)) # Elements in new df but not in the saved df
|
115
120
|
if len(self.alertStocks) != len(addedStocks) and len(addedStocks) > 0:
|
116
121
|
self.alertStocks = addedStocks
|
117
|
-
diffAlerts = list(set(self.alertStocks) - set(
|
122
|
+
diffAlerts = list(set(self.alertStocks) - set(self.alertedStocks[str(self.monitorIndex)]))
|
118
123
|
if len(diffAlerts) > 0:
|
119
|
-
self.alertStocks =
|
124
|
+
self.alertStocks = diffAlerts
|
125
|
+
self.alertedStocks[str(self.monitorIndex)].extend(diffAlerts)
|
126
|
+
else:
|
127
|
+
self.alertStocks = []
|
120
128
|
if len(addedStocks) > 0:
|
121
129
|
self.monitorResultStocks[str(self.monitorIndex)] = prevOutput_results
|
122
130
|
|
@@ -268,11 +276,11 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
|
|
268
276
|
if telegram:
|
269
277
|
self.updateIfRunningInTelegramBotMode(screenOptions, chosenMenu, dbTimestamp, telegram, telegram_df)
|
270
278
|
else:
|
271
|
-
if ((screenOptions in self.alertOptions and numRecords > 3) or len(self.alertStocks) > 0
|
279
|
+
if ((screenOptions in self.alertOptions and numRecords > 3) or len(self.alertStocks) > 0): # Alert conditions met? Sound alert!
|
272
280
|
# numRecords is actually new lines. Top 3 lines are only headers
|
273
281
|
if telegram_df is not None:
|
274
282
|
telegram_df.reset_index(inplace=True)
|
275
|
-
notify_df = telegram_df[telegram_df["Stock"].isin(self.alertStocks)]
|
283
|
+
notify_df = telegram_df[telegram_df["Stock"].isin(self.alertStocks)]
|
276
284
|
notify_df = notify_df[["Stock","LTP","Ch%","Vol"]].head(50)
|
277
285
|
if len(notify_df) > 0:
|
278
286
|
notify_output = self.updateIfRunningInTelegramBotMode(screenOptions, chosenMenu, dbTimestamp, False, notify_df,maxcolwidths=None)
|
@@ -280,7 +288,6 @@ class MarketMonitor(SingletonMixin, metaclass=SingletonType):
|
|
280
288
|
from PKDevTools.classes.pubsub.publisher import PKUserService
|
281
289
|
from PKDevTools.classes.pubsub.subscriber import notification_service
|
282
290
|
PKUserService().notify_user(scannerID=self.getScanOptionName(screenOptions),notification=notify_output)
|
283
|
-
self.firstAlertTriggered = True
|
284
291
|
# notify_df = self.monitor_df.reindex(self.alertStocks) # Includes missing stocks, if any. Returns NaN for such cases
|
285
292
|
Utility.tools.alertSound(beeps=5)
|
286
293
|
sleep(self.pinnedIntervalWaitSeconds)
|
@@ -180,8 +180,11 @@ class PKUserRegistration(SingletonMixin, metaclass=SingletonType):
|
|
180
180
|
@classmethod
|
181
181
|
def presentTrialOptions(self):
|
182
182
|
m = menus()
|
183
|
+
multilineOutputEnabled = OutputControls().enableMultipleLineOutput
|
184
|
+
OutputControls().enableMultipleLineOutput = True
|
183
185
|
m.renderUserType()
|
184
|
-
userTypeOption =
|
186
|
+
userTypeOption = OutputControls().takeUserInput(colorText.FAIL + " [+] Select option: ",enableUserInput=True,defaultInput="1")
|
187
|
+
OutputControls().enableMultipleLineOutput = multilineOutputEnabled
|
185
188
|
if str(userTypeOption).upper() in ["1"]:
|
186
189
|
return PKUserRegistration.login(trialCount=0)
|
187
190
|
elif str(userTypeOption).upper() in ["2"]:
|
@@ -78,6 +78,18 @@ else:
|
|
78
78
|
|
79
79
|
|
80
80
|
class pktalib:
|
81
|
+
|
82
|
+
@classmethod
|
83
|
+
def align_series(*series_list, fill_value=0):
|
84
|
+
"""
|
85
|
+
Aligns multiple Pandas Series to have the same index and returns them.
|
86
|
+
Missing values are filled with the given fill_value.
|
87
|
+
"""
|
88
|
+
if all(isinstance(s, pd.Series) for s in series_list):
|
89
|
+
aligned_series = pd.concat(series_list, axis=1).fillna(fill_value)
|
90
|
+
return [aligned_series[col] for col in aligned_series.columns]
|
91
|
+
return series_list
|
92
|
+
|
81
93
|
@classmethod
|
82
94
|
def AVWAP(self,df,anchored_date:pd.Timestamp):
|
83
95
|
# anchored_date = pd.to_datetime('2022-01-30')
|
@@ -121,6 +133,8 @@ class pktalib:
|
|
121
133
|
def VWAP(self, high, low, close, volume,anchor=None):
|
122
134
|
try:
|
123
135
|
import pandas_ta as talib
|
136
|
+
# Aligning the series
|
137
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
124
138
|
return talib.vwap(high, low, close, volume,anchor=anchor)
|
125
139
|
except Exception: # pragma: no cover
|
126
140
|
# default_logger().debug(e, exc_info=True)
|
@@ -131,6 +145,8 @@ class pktalib:
|
|
131
145
|
try:
|
132
146
|
low_kel = None
|
133
147
|
upp_kel = None
|
148
|
+
# Aligning the series
|
149
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
134
150
|
tr = pktalib.TRUERANGE(high, low, close)
|
135
151
|
atr = pktalib.ATR(high, low, close, timeperiod=timeperiod)
|
136
152
|
sma = pktalib.SMA(close=close, timeperiod=timeperiod)
|
@@ -160,6 +176,8 @@ class pktalib:
|
|
160
176
|
@classmethod
|
161
177
|
def ATR(self, high, low, close, timeperiod=14):
|
162
178
|
try:
|
179
|
+
# Aligning the series
|
180
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
163
181
|
return talib.atr(high, low, close, length= timeperiod)
|
164
182
|
except Exception: # pragma: no cover
|
165
183
|
# default_logger().debug(e, exc_info=True)
|
@@ -168,6 +186,8 @@ class pktalib:
|
|
168
186
|
@classmethod
|
169
187
|
def TRUERANGE(self, high, low, close):
|
170
188
|
try:
|
189
|
+
# Aligning the series
|
190
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
171
191
|
return talib.true_range(high, low, close)
|
172
192
|
except Exception: # pragma: no cover
|
173
193
|
# default_logger().debug(e, exc_info=True)
|
@@ -202,6 +222,8 @@ class pktalib:
|
|
202
222
|
@classmethod
|
203
223
|
def MFI(self, high, low, close,volume, timeperiod=14):
|
204
224
|
try:
|
225
|
+
# Aligning the series
|
226
|
+
# high,low,close,volume = pktalib.align_series(high, low, close,volume, fill_value=0)
|
205
227
|
return talib.mfi(high, low, close,volume, length= timeperiod)
|
206
228
|
except Exception: # pragma: no cover
|
207
229
|
# default_logger().debug(e, exc_info=True)
|
@@ -218,6 +240,8 @@ class pktalib:
|
|
218
240
|
@classmethod
|
219
241
|
def CCI(self, high, low, close, timeperiod):
|
220
242
|
try:
|
243
|
+
# Aligning the series
|
244
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
221
245
|
return talib.cci(high, low, close, timeperiod)
|
222
246
|
except Exception: # pragma: no cover
|
223
247
|
# default_logger().debug(e, exc_info=True)
|
@@ -226,6 +250,8 @@ class pktalib:
|
|
226
250
|
@classmethod
|
227
251
|
def Aroon(self, high, low, timeperiod):
|
228
252
|
try:
|
253
|
+
# Aligning the series
|
254
|
+
# high,low = pktalib.align_series(high, low, fill_value=0)
|
229
255
|
return talib.aroon(high, low, timeperiod)
|
230
256
|
except Exception: # pragma: no cover
|
231
257
|
# default_logger().debug(e, exc_info=True)
|
@@ -240,6 +266,8 @@ class pktalib:
|
|
240
266
|
|
241
267
|
@classmethod
|
242
268
|
def STOCHF(self, high, low, close, fastk_period, fastd_period, fastd_matype):
|
269
|
+
# Aligning the series
|
270
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
243
271
|
fastk, fastd = talib.STOCHF(high,
|
244
272
|
low,
|
245
273
|
close,
|
@@ -280,6 +308,8 @@ class pktalib:
|
|
280
308
|
|
281
309
|
@classmethod
|
282
310
|
def RVM(self, high, low, close, timeperiod):
|
311
|
+
# Aligning the series
|
312
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
283
313
|
# Relative Volatality Measure
|
284
314
|
#Short-term ATRs
|
285
315
|
short1 = pktalib.ATR(high, low, close,3)
|
@@ -336,6 +366,8 @@ class pktalib:
|
|
336
366
|
|
337
367
|
@classmethod
|
338
368
|
def psar(self, high, low, acceleration=0.02, maximum=0.2):
|
369
|
+
# Aligning the series
|
370
|
+
# high,low = pktalib.align_series(high, low, fill_value=0)
|
339
371
|
psar = talib.SAR(high, low, acceleration=acceleration, maximum=maximum)
|
340
372
|
return psar
|
341
373
|
|
@@ -449,6 +481,8 @@ class pktalib:
|
|
449
481
|
@classmethod
|
450
482
|
def get_ppsr_df(self, high, low, close,pivotPoint=None):
|
451
483
|
try:
|
484
|
+
# Aligning the series
|
485
|
+
# high,low,close = pktalib.align_series(high, low, close, fill_value=0)
|
452
486
|
PSR = None
|
453
487
|
if pivotPoint is None:
|
454
488
|
return PSR
|
@@ -480,6 +514,8 @@ class pktalib:
|
|
480
514
|
@classmethod
|
481
515
|
def CDLMORNINGSTAR(self, open, high, low, close):
|
482
516
|
try:
|
517
|
+
# Aligning the series
|
518
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
483
519
|
return talib.cdl_pattern(open, high, low, close, "morningstar")
|
484
520
|
except Exception: # pragma: no cover
|
485
521
|
# default_logger().debug(e, exc_info=True)
|
@@ -499,6 +535,8 @@ class pktalib:
|
|
499
535
|
@classmethod
|
500
536
|
def CDLMORNINGDOJISTAR(self, open, high, low, close):
|
501
537
|
try:
|
538
|
+
# Aligning the series
|
539
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
502
540
|
return talib.cdl_pattern(open, high, low, close, "morningdojistar")
|
503
541
|
except Exception: # pragma: no cover
|
504
542
|
# default_logger().debug(e, exc_info=True)
|
@@ -507,6 +545,8 @@ class pktalib:
|
|
507
545
|
@classmethod
|
508
546
|
def CDLEVENINGSTAR(self, open, high, low, close):
|
509
547
|
try:
|
548
|
+
# Aligning the series
|
549
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
510
550
|
return talib.cdl_pattern(open, high, low, close, "eveningstar")
|
511
551
|
except Exception: # pragma: no cover
|
512
552
|
# default_logger().debug(e, exc_info=True)
|
@@ -515,6 +555,8 @@ class pktalib:
|
|
515
555
|
@classmethod
|
516
556
|
def CDLEVENINGDOJISTAR(self, open, high, low, close):
|
517
557
|
try:
|
558
|
+
# Aligning the series
|
559
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
518
560
|
return talib.cdl_pattern(open, high, low, close, "eveningdojistar")
|
519
561
|
except Exception: # pragma: no cover
|
520
562
|
# default_logger().debug(e, exc_info=True)
|
@@ -523,6 +565,8 @@ class pktalib:
|
|
523
565
|
@classmethod
|
524
566
|
def CDLLADDERBOTTOM(self, open, high, low, close):
|
525
567
|
try:
|
568
|
+
# Aligning the series
|
569
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
526
570
|
return talib.cdl_pattern(open, high, low, close, "ladderbottom")
|
527
571
|
except Exception: # pragma: no cover
|
528
572
|
# default_logger().debug(e, exc_info=True)
|
@@ -531,6 +575,8 @@ class pktalib:
|
|
531
575
|
@classmethod
|
532
576
|
def CDL3LINESTRIKE(self, open, high, low, close):
|
533
577
|
try:
|
578
|
+
# Aligning the series
|
579
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
534
580
|
return talib.cdl_pattern(open, high, low, close, "3linestrike")
|
535
581
|
except Exception: # pragma: no cover
|
536
582
|
# default_logger().debug(e, exc_info=True)
|
@@ -539,6 +585,8 @@ class pktalib:
|
|
539
585
|
@classmethod
|
540
586
|
def CDL3BLACKCROWS(self, open, high, low, close):
|
541
587
|
try:
|
588
|
+
# Aligning the series
|
589
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
542
590
|
return talib.cdl_pattern(open, high, low, close, "3blackcrows")
|
543
591
|
except Exception: # pragma: no cover
|
544
592
|
# default_logger().debug(e, exc_info=True)
|
@@ -547,6 +595,8 @@ class pktalib:
|
|
547
595
|
@classmethod
|
548
596
|
def CDL3INSIDE(self, open, high, low, close):
|
549
597
|
try:
|
598
|
+
# Aligning the series
|
599
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
550
600
|
return talib.cdl_pattern(open, high, low, close, "3inside")
|
551
601
|
except Exception: # pragma: no cover
|
552
602
|
# default_logger().debug(e, exc_info=True)
|
@@ -555,6 +605,8 @@ class pktalib:
|
|
555
605
|
@classmethod
|
556
606
|
def CDL3OUTSIDE(self, open, high, low, close):
|
557
607
|
try:
|
608
|
+
# Aligning the series
|
609
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
558
610
|
return talib.cdl_pattern(open, high, low, close, "3outside")
|
559
611
|
except Exception: # pragma: no cover
|
560
612
|
# default_logger().debug(e, exc_info=True)
|
@@ -563,6 +615,8 @@ class pktalib:
|
|
563
615
|
@classmethod
|
564
616
|
def CDL3WHITESOLDIERS(self, open, high, low, close):
|
565
617
|
try:
|
618
|
+
# Aligning the series
|
619
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
566
620
|
return talib.cdl_pattern(open, high, low, close, "3whitesoldiers")
|
567
621
|
except Exception: # pragma: no cover
|
568
622
|
# default_logger().debug(e, exc_info=True)
|
@@ -571,6 +625,8 @@ class pktalib:
|
|
571
625
|
@classmethod
|
572
626
|
def CDLHARAMI(self, open, high, low, close):
|
573
627
|
try:
|
628
|
+
# Aligning the series
|
629
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
574
630
|
return talib.cdl_pattern(open, high, low, close, "harami")
|
575
631
|
except Exception: # pragma: no cover
|
576
632
|
# default_logger().debug(e, exc_info=True)
|
@@ -579,6 +635,8 @@ class pktalib:
|
|
579
635
|
@classmethod
|
580
636
|
def CDLHARAMICROSS(self, open, high, low, close):
|
581
637
|
try:
|
638
|
+
# Aligning the series
|
639
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
582
640
|
return talib.cdl_pattern(open, high, low, close, "haramicross")
|
583
641
|
except Exception: # pragma: no cover
|
584
642
|
# default_logger().debug(e, exc_info=True)
|
@@ -587,6 +645,8 @@ class pktalib:
|
|
587
645
|
@classmethod
|
588
646
|
def CDLMARUBOZU(self, open, high, low, close):
|
589
647
|
try:
|
648
|
+
# Aligning the series
|
649
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
590
650
|
return talib.cdl_pattern(open, high, low, close, "marubozu")
|
591
651
|
except Exception: # pragma: no cover
|
592
652
|
# default_logger().debug(e, exc_info=True)
|
@@ -595,6 +655,8 @@ class pktalib:
|
|
595
655
|
@classmethod
|
596
656
|
def CDLHANGINGMAN(self, open, high, low, close):
|
597
657
|
try:
|
658
|
+
# Aligning the series
|
659
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
598
660
|
return talib.cdl_pattern(open, high, low, close, "hangingman")
|
599
661
|
except Exception: # pragma: no cover
|
600
662
|
# default_logger().debug(e, exc_info=True)
|
@@ -603,6 +665,8 @@ class pktalib:
|
|
603
665
|
@classmethod
|
604
666
|
def CDLHAMMER(self, open, high, low, close):
|
605
667
|
try:
|
668
|
+
# Aligning the series
|
669
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
606
670
|
return talib.cdl_pattern(open, high, low, close, "hammer")
|
607
671
|
except Exception: # pragma: no cover
|
608
672
|
# default_logger().debug(e, exc_info=True)
|
@@ -611,6 +675,8 @@ class pktalib:
|
|
611
675
|
@classmethod
|
612
676
|
def CDLINVERTEDHAMMER(self, open, high, low, close):
|
613
677
|
try:
|
678
|
+
# Aligning the series
|
679
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
614
680
|
return talib.cdl_pattern(open, high, low, close, "invertedhammer")
|
615
681
|
except Exception: # pragma: no cover
|
616
682
|
# default_logger().debug(e, exc_info=True)
|
@@ -619,6 +685,8 @@ class pktalib:
|
|
619
685
|
@classmethod
|
620
686
|
def CDLSHOOTINGSTAR(self, open, high, low, close):
|
621
687
|
try:
|
688
|
+
# Aligning the series
|
689
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
622
690
|
return talib.cdl_pattern(open, high, low, close, "shootingstar")
|
623
691
|
except Exception: # pragma: no cover
|
624
692
|
# default_logger().debug(e, exc_info=True)
|
@@ -627,6 +695,8 @@ class pktalib:
|
|
627
695
|
@classmethod
|
628
696
|
def CDLDRAGONFLYDOJI(self, open, high, low, close):
|
629
697
|
try:
|
698
|
+
# Aligning the series
|
699
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
630
700
|
return talib.cdl_pattern(open, high, low, close, "dragonflydoji")
|
631
701
|
except Exception: # pragma: no cover
|
632
702
|
# default_logger().debug(e, exc_info=True)
|
@@ -635,6 +705,8 @@ class pktalib:
|
|
635
705
|
@classmethod
|
636
706
|
def CDLGRAVESTONEDOJI(self, open, high, low, close):
|
637
707
|
try:
|
708
|
+
# Aligning the series
|
709
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
638
710
|
return talib.cdl_pattern(open, high, low, close, "gravestonedoji")
|
639
711
|
except Exception: # pragma: no cover
|
640
712
|
# default_logger().debug(e, exc_info=True)
|
@@ -643,6 +715,8 @@ class pktalib:
|
|
643
715
|
@classmethod
|
644
716
|
def CDLDOJI(self, open, high, low, close):
|
645
717
|
try:
|
718
|
+
# Aligning the series
|
719
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
646
720
|
return talib.cdl_pattern(open, high, low, close, "doji")
|
647
721
|
except Exception: # pragma: no cover
|
648
722
|
# default_logger().debug(e, exc_info=True)
|
@@ -651,6 +725,8 @@ class pktalib:
|
|
651
725
|
@classmethod
|
652
726
|
def CDLENGULFING(self, open, high, low, close):
|
653
727
|
try:
|
728
|
+
# Aligning the series
|
729
|
+
# open,high,low,close = pktalib.align_series(open,high, low, close, fill_value=0)
|
654
730
|
return talib.cdl_pattern(open, high, low, close, "engulfing")
|
655
731
|
except Exception: # pragma: no cover
|
656
732
|
# default_logger().debug(e, exc_info=True)
|
@@ -2734,6 +2734,8 @@ class ScreeningStatistics:
|
|
2734
2734
|
data = df.copy()
|
2735
2735
|
try:
|
2736
2736
|
data = data.replace(np.inf, np.nan).replace(-np.inf, np.nan).dropna(how="all")
|
2737
|
+
if data.empty:
|
2738
|
+
return (data,data)
|
2737
2739
|
# self.default_logger.info(f"Preprocessing data:\n{data.head(1)}\n")
|
2738
2740
|
if daysToLookback is None:
|
2739
2741
|
daysToLookback = self.configManager.daysToLookback
|
@@ -0,0 +1 @@
|
|
1
|
+
VERSION='0.46.20250214.717'
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pkscreener
|
3
|
-
Version: 0.46.20250214.
|
3
|
+
Version: 0.46.20250214.717
|
4
4
|
Summary: A Python-based stock screener for NSE, India with alerts to Telegram Channel (pkscreener)
|
5
5
|
Home-page: https://github.com/pkjmesra/pkscreener
|
6
|
-
Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250214.
|
6
|
+
Download-URL: https://github.com/pkjmesra/pkscreener/archive/v0.46.20250214.717.zip
|
7
7
|
Author: pkjmesra
|
8
8
|
Author-email: pkjmesra@gmail.com
|
9
9
|
License: OSI Approved (MIT)
|
@@ -380,15 +380,15 @@ After you have finished the run, go to that copied path, zip the contents of the
|
|
380
380
|
[MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
|
381
381
|
[MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
|
382
382
|
[Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
|
383
|
-
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
383
|
+
[Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli.exe
|
384
384
|
[Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
|
385
|
-
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
385
|
+
[Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_x64.bin
|
386
386
|
[Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
|
387
|
-
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
387
|
+
[Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_arm64.bin
|
388
388
|
[Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
|
389
|
-
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
389
|
+
[Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_x64.run
|
390
390
|
[Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
|
391
|
-
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.
|
391
|
+
[Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_arm64.run
|
392
392
|
[GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
|
393
393
|
[GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
|
394
394
|
[pypi-badge]: https://img.shields.io/pypi/v/pkscreener.svg?style=flat-square
|
@@ -0,0 +1,58 @@
|
|
1
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
|
3
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/README.txt,sha256=9Ur4uRS0U0R9d_L5RNeoJWopu5v72NbPWSWAzeLGOJQ,32701
|
6
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
|
7
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/globals.py,sha256=bIj3LBnbiGvVYidOF0sohg19jHTEkAavrGYaYFyBPhM,240829
|
9
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/pkscreenerbot.py,sha256=u6WovcJo97PAmoMfZYMmooj9SClH1OLeRPprvxcf0_0,107840
|
11
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/pkscreenercli.py,sha256=WEVXfcZdeogWZBY3CWtRYyFrmQa5BEEZedKLlMwCM5U,56999
|
12
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/requirements.txt,sha256=kgq4lh06feiOI8JlIM3PjZlnO6DW1RsM9q-tXeXjtNE,1457
|
13
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/AssetsManager.py,sha256=SutbAZ4JiGhzN0tzfa9vNpHdW6alSL67Jz-knPPcqBw,33706
|
15
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
|
16
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
|
19
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/ConfigManager.py,sha256=THcfBgua5hr1Pv7AwEDBu2yurCNteGM04jY3Fr_MeBg,53565
|
21
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=TrEnTT4pmsBpEYdwD2oAtNqNG_drPe1LVkhthP2540I,12096
|
23
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Fetcher.py,sha256=WWX9_NO3JTw6_1Z9SqPm4Nj-4Uy_4PPYEMVyD5FLnVo,12336
|
24
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
|
26
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=GQOPLuUhgcrnVa0mI8ZvXqQ4vPFW00FHW_vMfICnko8,22079
|
27
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
|
28
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
|
29
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=_X-2OFw2yQVmXlEIRsnBVNy9fhYyxqt0BOqADD4v08U,5246
|
32
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=T7S0DRv4Tqg77S5CyTWQUgpIAtx0NEtSVAplkynS2YM,33833
|
35
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=EPLo2euBMfA9omnqrr5pXv2h9KzTcPZM-PXRFI26LSo,26791
|
37
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=ZbnPzgvT5Je9X0Dm6bewSp8u7Fj_szNucaYnit_AtCg,11465
|
42
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Pktalib.py,sha256=xketnpMVDGHOFg47LFavaU-agWy370VanYWyzzuLY8c,33386
|
43
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
|
45
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=LteoSl8r4mI2GMvVKAmdmzMe-Axy3jeyNAaIsgp48s4,221101
|
46
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/StockScreener.py,sha256=F0SWa1DSTgYdSWnkPTR9kmOKgHLtaqNMCtJP8yZkDnE,67252
|
47
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/Utility.py,sha256=Cn_QrVH40rQWkHW2e2NolE0b18qszvGXfVLdwAqD7sM,13562
|
50
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=d0_QiVfai65axe4Oi_h2XUkPyx_wWfiofZd_gMtNAwY,5632
|
51
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/__init__.py,sha256=j-ZTQTwkIiHG2HMtTelpshbpgpH93IJzViV75Q5DwM0,28
|
52
|
+
pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
+
pkscreener-0.46.20250214.717.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
+
pkscreener-0.46.20250214.717.dist-info/METADATA,sha256=9SdjQX8zLJ3HlBlt-clSsRniKkukeUVgSBV6AW50FUg,34391
|
55
|
+
pkscreener-0.46.20250214.717.dist-info/WHEEL,sha256=qW9xlwewyQBufEUzmM-8CIjZ7fR659LOSrcgouui4Z4,111
|
56
|
+
pkscreener-0.46.20250214.717.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
+
pkscreener-0.46.20250214.717.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
+
pkscreener-0.46.20250214.717.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
VERSION='0.46.20250214.715'
|
@@ -1,58 +0,0 @@
|
|
1
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/Disclaimer.txt,sha256=kBZQSQCFfL2kc1bijXWndZzkjMTtnpH_B7XtDPPMcuw,1396
|
2
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/LICENSE-Others.txt,sha256=WBslRYLBoqYg-vr25sS1c_UI7cuUnsGk0nIQLBzTWEE,271830
|
3
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/LICENSE.txt,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
4
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/LogoWM.txt,sha256=7Njnavpy_FKY4Iwbzv1JqsYMcOdkDSKAKXP3SAItKV0,14868
|
5
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/README.txt,sha256=gX0cJnffyIolVG-w7vxK2yNwCJ37G7ogA_H8DPCcpIk,32701
|
6
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/__init__.py,sha256=aZ62qYACxsU8m8_5JkzNzos1lVFNcMGPRMgeddnUUiQ,1633
|
7
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/courbd.ttf,sha256=SKpnp-BRs7AZcdI83nencS3Q7xe0anbbP1YMOxLlEhU,791436
|
8
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/globals.py,sha256=bIj3LBnbiGvVYidOF0sohg19jHTEkAavrGYaYFyBPhM,240829
|
9
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/pkscreener.ini,sha256=QKs6j4qhyH37L_MdG3ztAIwgqs4c3qihuqDIoex-V2g,2391
|
10
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/pkscreenerbot.py,sha256=u6WovcJo97PAmoMfZYMmooj9SClH1OLeRPprvxcf0_0,107840
|
11
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/pkscreenercli.py,sha256=WEVXfcZdeogWZBY3CWtRYyFrmQa5BEEZedKLlMwCM5U,56999
|
12
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/requirements.txt,sha256=kgq4lh06feiOI8JlIM3PjZlnO6DW1RsM9q-tXeXjtNE,1457
|
13
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/ArtTexts.py,sha256=LZ8ynyS8woliv8bM9Nq4aU0VCoJDJU0FgZk8V5zYPmg,19504
|
14
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/AssetsManager.py,sha256=SutbAZ4JiGhzN0tzfa9vNpHdW6alSL67Jz-knPPcqBw,33706
|
15
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Backtest.py,sha256=wobBQgqVQhFNZlyJ2hgMXQqofrICc_3F0I5D66DUvGI,10530
|
16
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Barometer.py,sha256=WPrgtIXb1nIbb-FnuRs-yvOQ5baNQRBgUR_zWg1moxk,9464
|
17
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/BaseScreeningStatistics.py,sha256=u5t1wf-HsZ8xEtprON55ehIR3F2LNNq8LvwgIrhYRmU,3000
|
18
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/CandlePatterns.py,sha256=gaswU2OeDa3JXjEafR2clUpKW5v8_1_tJuNPuTWsAss,17066
|
19
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Changelog.py,sha256=vUOpca28OACNhavAmjBm4xco3u6fcHqWlnlmCJqO5Lk,1469
|
20
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/ConfigManager.py,sha256=THcfBgua5hr1Pv7AwEDBu2yurCNteGM04jY3Fr_MeBg,53565
|
21
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/ConsoleMenuUtility.py,sha256=fyR7dEsAaEWEe5SyaVgwLPdU4h4pI8SozUhsPZXShpg,10037
|
22
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/ConsoleUtility.py,sha256=TrEnTT4pmsBpEYdwD2oAtNqNG_drPe1LVkhthP2540I,12096
|
23
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Fetcher.py,sha256=WWX9_NO3JTw6_1Z9SqPm4Nj-4Uy_4PPYEMVyD5FLnVo,12336
|
24
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/GlobalStore.py,sha256=IzoYMybXpVVf6YwZi7j34rP-hNd7sMened8TAMu_-A8,3709
|
25
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/ImageUtility.py,sha256=mgJUzjrOKQ1mYV5P_ylhBnaF7ZgOO6ogjy22Rt49TNI,37032
|
26
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/MarketMonitor.py,sha256=LFCJhmS90nymwdnBk9mdrz23krR3hosH2XQ6NutRtZQ,21816
|
27
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/MarketStatus.py,sha256=dNg8znbRpt7ID3U_1nmclD4zSLtveJeYeRbS0l6HLtE,3737
|
28
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/MenuOptions.py,sha256=iZb0zBs7lcP60cmuP7Z5xmXfNtTFcFH6ZWOuoileErE,64552
|
29
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Messenger.py,sha256=peyY-YiqdC1bp-3DlJXILRa9HGYbqGVzf1wil0fYv98,8396
|
30
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/OtaUpdater.py,sha256=_7-nFAC-vAcmZ1Nwi5g5tfp7hKQQPuLUnBCOzrwC39g,13491
|
31
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKAnalytics.py,sha256=_X-2OFw2yQVmXlEIRsnBVNy9fhYyxqt0BOqADD4v08U,5246
|
32
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKDataService.py,sha256=BipM8Z4rS6h12cF6VWv_u4Z8ee7psMFd1yUojejW1Ag,3393
|
33
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKDemoHandler.py,sha256=r4KrZF8TaOu1J0nu8sUsgWEvnbndboWQQvz69GOy1Fk,2207
|
34
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py,sha256=T7S0DRv4Tqg77S5CyTWQUgpIAtx0NEtSVAplkynS2YM,33833
|
35
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKPremiumHandler.py,sha256=r16-u9fyc0ftgnSnZnz-JusTfEzyQIyKkvgbPuSd7W4,5611
|
36
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKScanRunner.py,sha256=EPLo2euBMfA9omnqrr5pXv2h9KzTcPZM-PXRFI26LSo,26791
|
37
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKScheduledTaskProgress.py,sha256=h19ZuxoalB50pnZjntFh12b9mBozvMqhKYq6TL18vo4,1657
|
38
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKScheduler.py,sha256=qThoz0yXLmHEWAiD_TdkIrzJb37b_m830JJFrkN1Tio,8814
|
39
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKSpreadsheets.py,sha256=1I7YGGPPY879K5JeTZ_d1FNCpjloh6TZrx91JlwT20o,8298
|
40
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKTask.py,sha256=4q87uD2cXvp0AbP6I73xPP39F0mfnpHQutsxxqpnxJM,1867
|
41
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PKUserRegistration.py,sha256=GPUau3sIhRGuQcV7mdLAACMb8KuJTUiMf5JcBbTfDbU,11202
|
42
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Pktalib.py,sha256=7DNx9UL-l1ehXItzqyaUwtsVSuLB9ruhdsQZGZWqqv4,28959
|
43
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Portfolio.py,sha256=JZ93n3Zk9nkSFaX-lHyQiFnavHVmHPFoy-L_4gugj54,13895
|
44
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/PortfolioXRay.py,sha256=4MjXqBAVUlfN4w5tTmgEnQGMoy0hFu_uaVgrmai1fN4,48339
|
45
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/ScreeningStatistics.py,sha256=p2rjc1MvZ-CmI_Uw_7jxy3NOMwo3cDB6WenxarsQTBM,221039
|
46
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/StockScreener.py,sha256=F0SWa1DSTgYdSWnkPTR9kmOKgHLtaqNMCtJP8yZkDnE,67252
|
47
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/StockSentiment.py,sha256=WL7TBAHDSIN5cgZ9uTbbEFnUPo4G-YIzEv16RpPGaro,3546
|
48
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/UserMenuChoicesHandler.py,sha256=_fTCscTLEjoU-n12V9237uDN6Jf8nGCvGdBVkpD3Ap4,4947
|
49
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/Utility.py,sha256=Cn_QrVH40rQWkHW2e2NolE0b18qszvGXfVLdwAqD7sM,13562
|
50
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/WorkflowManager.py,sha256=d0_QiVfai65axe4Oi_h2XUkPyx_wWfiofZd_gMtNAwY,5632
|
51
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/__init__.py,sha256=ujZ7GhIrp1jORfBup0DgUEPHparo5wss0-_ETvgLtMs,28
|
52
|
-
pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/keys.py,sha256=LQq_t1lSh0x4TbRCIDhoCil3xctgLLeVk5f2vgrl1tk,6789
|
53
|
-
pkscreener-0.46.20250214.715.dist-info/LICENSE,sha256=CdnyGrl-xRYX67ZkdERZWHr6BlTxOyg8Z8sK1XQ5Xsg,1078
|
54
|
-
pkscreener-0.46.20250214.715.dist-info/METADATA,sha256=-KEAMTaq1vpJN3_unwNeJjyVbUWJklFr_kRQPb0NnY4,34391
|
55
|
-
pkscreener-0.46.20250214.715.dist-info/WHEEL,sha256=qW9xlwewyQBufEUzmM-8CIjZ7fR659LOSrcgouui4Z4,111
|
56
|
-
pkscreener-0.46.20250214.715.dist-info/entry_points.txt,sha256=Pm30xm4sU7YFtFJUC-Te8VlqOvYAvWKFFA5AfQE0xGY,120
|
57
|
-
pkscreener-0.46.20250214.715.dist-info/top_level.txt,sha256=oIfcPPw58Q4KU-GDqp25dXbrtvxYXJBCo_em6i5aVvY,11
|
58
|
-
pkscreener-0.46.20250214.715.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/entry_points.txt
RENAMED
File without changes
|
{pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/top_level.txt
RENAMED
File without changes
|