pkscreener 0.46.20250214.715__cp312-cp312-manylinux2014_x86_64.whl → 0.46.20250214.717__cp312-cp312-manylinux2014_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.
Files changed (60) hide show
  1. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/README.txt +5 -5
  2. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/MarketMonitor.py +13 -6
  3. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKUserRegistration.py +4 -1
  4. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Pktalib.py +76 -0
  5. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ScreeningStatistics.py +2 -0
  6. pkscreener-0.46.20250214.717.data/purelib/pkscreener/classes/__init__.py +1 -0
  7. {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/METADATA +7 -7
  8. pkscreener-0.46.20250214.717.dist-info/RECORD +58 -0
  9. pkscreener-0.46.20250214.715.data/purelib/pkscreener/classes/__init__.py +0 -1
  10. pkscreener-0.46.20250214.715.dist-info/RECORD +0 -58
  11. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/Disclaimer.txt +0 -0
  12. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/LICENSE-Others.txt +0 -0
  13. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/LICENSE.txt +0 -0
  14. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/LogoWM.txt +0 -0
  15. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/__init__.py +0 -0
  16. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ArtTexts.py +0 -0
  17. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/AssetsManager.py +0 -0
  18. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Backtest.py +0 -0
  19. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Barometer.py +0 -0
  20. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/BaseScreeningStatistics.py +0 -0
  21. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/CandlePatterns.py +0 -0
  22. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Changelog.py +0 -0
  23. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ConfigManager.py +0 -0
  24. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ConsoleMenuUtility.py +0 -0
  25. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ConsoleUtility.py +0 -0
  26. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Fetcher.py +0 -0
  27. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/GlobalStore.py +0 -0
  28. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/ImageUtility.py +0 -0
  29. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/MarketStatus.py +0 -0
  30. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/MenuOptions.py +0 -0
  31. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Messenger.py +0 -0
  32. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/OtaUpdater.py +0 -0
  33. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKAnalytics.py +0 -0
  34. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKDataService.py +0 -0
  35. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKDemoHandler.py +0 -0
  36. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKMarketOpenCloseAnalyser.py +0 -0
  37. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKPremiumHandler.py +0 -0
  38. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKScanRunner.py +0 -0
  39. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKScheduledTaskProgress.py +0 -0
  40. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKScheduler.py +0 -0
  41. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKSpreadsheets.py +0 -0
  42. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PKTask.py +0 -0
  43. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Portfolio.py +0 -0
  44. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/PortfolioXRay.py +0 -0
  45. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/StockScreener.py +0 -0
  46. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/StockSentiment.py +0 -0
  47. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/UserMenuChoicesHandler.py +0 -0
  48. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/Utility.py +0 -0
  49. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/WorkflowManager.py +0 -0
  50. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/classes/keys.py +0 -0
  51. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/courbd.ttf +0 -0
  52. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/globals.py +0 -0
  53. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/pkscreener.ini +0 -0
  54. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/pkscreenerbot.py +0 -0
  55. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/pkscreenercli.py +0 -0
  56. {pkscreener-0.46.20250214.715.data → pkscreener-0.46.20250214.717.data}/purelib/pkscreener/requirements.txt +0 -0
  57. {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/LICENSE +0 -0
  58. {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/WHEEL +0 -0
  59. {pkscreener-0.46.20250214.715.dist-info → pkscreener-0.46.20250214.717.dist-info}/entry_points.txt +0 -0
  60. {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.714/pkscreenercli.exe
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.714/pkscreenercli_x64.bin
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.714/pkscreenercli_arm64.bin
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.714/pkscreenercli_x64.run
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.714/pkscreenercli_arm64.run
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.firstAlertTriggered = False
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(addedStocks))
122
+ diffAlerts = list(set(self.alertStocks) - set(self.alertedStocks[str(self.monitorIndex)]))
118
123
  if len(diffAlerts) > 0:
119
- self.alertStocks = addedStocks
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 or not self.firstAlertTriggered): # Alert conditions met? Sound alert!
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)] if self.firstAlertTriggered else telegram_df
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 = input(colorText.FAIL + " [+] Select option: ") or "1"
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.2
2
2
  Name: pkscreener
3
- Version: 0.46.20250214.715
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.715.zip
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)
@@ -392,15 +392,15 @@ After you have finished the run, go to that copied path, zip the contents of the
392
392
  [MADE-IN-INDIA-badge]: https://img.shields.io/badge/MADE%20WITH%20%E2%9D%A4%20IN-INDIA-orange
393
393
  [MADE-IN-INDIA]: https://en.wikipedia.org/wiki/India
394
394
  [Windows-badge]: https://img.shields.io/badge/Windows-0078D6?logo=windows&logoColor=white
395
- [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.714/pkscreenercli.exe
395
+ [Windows]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli.exe
396
396
  [Linux-badge_x64]: https://img.shields.io/badge/Linux(x64)-FCC624?logo=linux&logoColor=black
397
- [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.714/pkscreenercli_x64.bin
397
+ [Linux_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_x64.bin
398
398
  [Linux-badge_arm64]: https://img.shields.io/badge/Linux(arm64)-FCC624?logo=linux&logoColor=black
399
- [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.714/pkscreenercli_arm64.bin
399
+ [Linux_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_arm64.bin
400
400
  [Mac OS-badge_x64]: https://img.shields.io/badge/mac%20os(x64)-D3D3D3?logo=apple&logoColor=000000
401
- [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.714/pkscreenercli_x64.run
401
+ [Mac OS_x64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_x64.run
402
402
  [Mac OS-badge_arm64]: https://img.shields.io/badge/mac%20os(arm64)-D3D3D3?logo=apple&logoColor=000000
403
- [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.714/pkscreenercli_arm64.run
403
+ [Mac OS_arm64]: https://github.com/pkjmesra/PKScreener/releases/download/0.46.20250214.716/pkscreenercli_arm64.run
404
404
  [GitHub release (latest by date)-badge]: https://img.shields.io/github/v/release/pkjmesra/PKScreener
405
405
  [GitHub release (latest by date)]: https://github.com/pkjmesra/PKScreener/releases/latest
406
406
  [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=SsnOIjsTy2E8weFp49m83VRAFkQSGlSZ5DTfe668g1k,34639
55
+ pkscreener-0.46.20250214.717.dist-info/WHEEL,sha256=aDUArjEbIuDQzblE24IvdIsBzRhJEjiXmuNUYQ-gpaA,104
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=DUrh7AU_0sMrqzY7pf1Tat_9-JBpaq0OozyPoafU-Cw,34639
55
- pkscreener-0.46.20250214.715.dist-info/WHEEL,sha256=aDUArjEbIuDQzblE24IvdIsBzRhJEjiXmuNUYQ-gpaA,104
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,,