bullishpy 0.47.0__tar.gz → 0.49.0__tar.gz

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.

Potentially problematic release.


This version of bullishpy might be problematic. Click here for more details.

Files changed (60) hide show
  1. {bullishpy-0.47.0 → bullishpy-0.49.0}/PKG-INFO +1 -1
  2. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/analysis.py +10 -0
  3. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/predefined_filters.py +7 -0
  4. bullishpy-0.49.0/bullish/database/alembic/versions/4ee82b171449_.py +35 -0
  5. {bullishpy-0.47.0 → bullishpy-0.49.0}/pyproject.toml +1 -1
  6. {bullishpy-0.47.0 → bullishpy-0.49.0}/README.md +0 -0
  7. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/__init__.py +0 -0
  8. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/__init__.py +0 -0
  9. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/backtest.py +0 -0
  10. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/constants.py +0 -0
  11. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/filter.py +0 -0
  12. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/functions.py +0 -0
  13. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/indicators.py +0 -0
  14. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/analysis/industry_views.py +0 -0
  15. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/app/__init__.py +0 -0
  16. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/app/app.py +0 -0
  17. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/cli.py +0 -0
  18. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/__init__.py +0 -0
  19. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/README +0 -0
  20. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/alembic.ini +0 -0
  21. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/env.py +0 -0
  22. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/script.py.mako +0 -0
  23. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/037dbd721317_.py +0 -0
  24. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/040b15fba458_.py +0 -0
  25. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/08ac1116e055_.py +0 -0
  26. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/11d35a452b40_.py +0 -0
  27. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/12889a2cbd7d_.py +0 -0
  28. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/17e51420e7ad_.py +0 -0
  29. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/49c83f9eb5ac_.py +0 -0
  30. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/4b0a2f40b7d3_.py +0 -0
  31. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/5b10ee7604c1_.py +0 -0
  32. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/6d252e23f543_.py +0 -0
  33. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/73564b60fe24_.py +0 -0
  34. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/79bc71ec6f9e_.py +0 -0
  35. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/ae444f338124_.py +0 -0
  36. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/b76079e9845f_.py +0 -0
  37. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/bf6b86dd5463_.py +0 -0
  38. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/d0e58e050845_.py +0 -0
  39. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/d663166c531d_.py +0 -0
  40. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/ec25c8fa449f_.py +0 -0
  41. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/ee5baabb35f8_.py +0 -0
  42. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/fc191121f522_.py +0 -0
  43. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/alembic/versions/ff0cc4ba40ec_.py +0 -0
  44. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/crud.py +0 -0
  45. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/schemas.py +0 -0
  46. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/scripts/create_revision.py +0 -0
  47. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/scripts/stamp.py +0 -0
  48. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/scripts/upgrade.py +0 -0
  49. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/database/settings.py +0 -0
  50. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/exceptions.py +0 -0
  51. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/figures/__init__.py +0 -0
  52. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/figures/figures.py +0 -0
  53. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/interface/__init__.py +0 -0
  54. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/interface/interface.py +0 -0
  55. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/jobs/__init__.py +0 -0
  56. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/jobs/app.py +0 -0
  57. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/jobs/models.py +0 -0
  58. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/jobs/tasks.py +0 -0
  59. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/utils/__init__.py +0 -0
  60. {bullishpy-0.47.0 → bullishpy-0.49.0}/bullish/utils/checks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bullishpy
3
- Version: 0.47.0
3
+ Version: 0.49.0
4
4
  Summary:
5
5
  Author: aan
6
6
  Author-email: andoludovic.andriamamonjy@gmail.com
@@ -496,6 +496,7 @@ class AnalysisView(BaseModel):
496
496
  yearly_growth: Optional[float] = None
497
497
  weekly_growth: Optional[float] = None
498
498
  monthly_growth: Optional[float] = None
499
+ upside: Optional[float] = None
499
500
 
500
501
 
501
502
  def json_loads(value: Any) -> Any:
@@ -525,6 +526,13 @@ class SubjectAnalysis(BaseModel):
525
526
  Optional[List[Dict[str, Any]]], BeforeValidator(json_loads)
526
527
  ] = None
527
528
  summary: Annotated[Optional[Dict[str, Any]], BeforeValidator(json_loads)] = None
529
+ upside: Optional[float] = None
530
+
531
+ def compute_upside(self, last_price: float) -> None:
532
+ if self.high_price_target is not None:
533
+ self.upside = (float(self.high_price_target) - float(last_price)) / float(
534
+ last_price
535
+ )
528
536
 
529
537
  def to_news(self) -> Optional[str]:
530
538
  if not self.news_summary:
@@ -556,6 +564,8 @@ class Analysis(SubjectAnalysis, AnalysisEarningsDate, AnalysisView, BaseEquity,
556
564
  technical_analysis = TechnicalAnalysis.from_data(prices.to_dataframe(), ticker)
557
565
  next_earnings_date = bearish_db.read_next_earnings_date(ticker.symbol)
558
566
  subject = bearish_db.read_subject(ticker.symbol)
567
+ if subject:
568
+ subject.compute_upside(technical_analysis.last_price)
559
569
 
560
570
  return cls.model_validate(
561
571
  equity.model_dump()
@@ -164,6 +164,13 @@ SMALL_CAP = NamedFilterQuery(
164
164
  market_capitalization=[5e7, 5e8],
165
165
  properties=["positive_debt_to_equity"],
166
166
  average_volume_30=[50000, 5e9],
167
+ volume_above_average=DATE_THRESHOLD,
168
+ sma_50_above_sma_200=[
169
+ datetime.date.today() - datetime.timedelta(days=5000),
170
+ datetime.date.today(),
171
+ ],
172
+ weekly_growth=[1, 100],
173
+ monthly_growth=[8, 100],
167
174
  order_by_desc="market_capitalization",
168
175
  ).variants()
169
176
 
@@ -0,0 +1,35 @@
1
+ """
2
+
3
+ Revision ID: 4ee82b171449
4
+ Revises: ae444f338124
5
+ Create Date: 2025-08-10 12:16:03.791151
6
+
7
+ """
8
+
9
+ from typing import Sequence, Union
10
+
11
+ from alembic import op
12
+ import sqlalchemy as sa
13
+ from sqlalchemy.dialects import sqlite
14
+
15
+ # revision identifiers, used by Alembic.
16
+ revision: str = "4ee82b171449"
17
+ down_revision: Union[str, None] = "ae444f338124"
18
+ branch_labels: Union[str, Sequence[str], None] = None
19
+ depends_on: Union[str, Sequence[str], None] = None
20
+
21
+
22
+ def upgrade() -> None:
23
+ # ### commands auto generated by Alembic - please adjust! ###
24
+ with op.batch_alter_table("analysis", schema=None) as batch_op:
25
+ batch_op.add_column(sa.Column("upside", sa.Float(), nullable=True))
26
+ batch_op.create_index("ix_analysis_upside", ["upside"], unique=False)
27
+
28
+ # ### end Alembic commands ###
29
+
30
+
31
+ def downgrade() -> None:
32
+ # ### commands auto generated by Alembic - please adjust! ###
33
+ with op.batch_alter_table("analysis", schema=None) as batch_op:
34
+ batch_op.drop_index("ix_analysis_upside")
35
+ batch_op.drop_column("upside")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "bullishpy"
3
- version = "0.47.0"
3
+ version = "0.49.0"
4
4
  description = ""
5
5
  authors = ["aan <andoludovic.andriamamonjy@gmail.com>"]
6
6
  readme = "README.md"
File without changes
File without changes