lecrapaud 0.4.0__py3-none-any.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.
Potentially problematic release.
This version of lecrapaud might be problematic. Click here for more details.
- lecrapaud/__init__.py +0 -0
- lecrapaud/config.py +16 -0
- lecrapaud/db/__init__.py +0 -0
- lecrapaud/db/alembic/README +1 -0
- lecrapaud/db/alembic/env.py +78 -0
- lecrapaud/db/alembic/script.py.mako +26 -0
- lecrapaud/db/alembic/versions/2025_04_06_1738-7390745388e4_initial_setup.py +295 -0
- lecrapaud/db/alembic/versions/2025_04_06_1755-40cd8d3e798e_unique_constraint_for_data.py +30 -0
- lecrapaud/db/alembic/versions/2025_05_23_1724-2360941fa0bd_longer_string.py +52 -0
- lecrapaud/db/alembic/versions/2025_05_27_1159-b96396dcfaff_add_env_to_trading_tables.py +34 -0
- lecrapaud/db/alembic/versions/2025_05_27_1337-40cbfc215f7c_fix_nb_character_on_portfolio.py +39 -0
- lecrapaud/db/alembic/versions/2025_05_27_1526-3de994115317_to_datetime.py +36 -0
- lecrapaud/db/alembic/versions/2025_05_27_2003-25c227c684f8_add_fees_to_transactions.py +30 -0
- lecrapaud/db/alembic/versions/2025_05_27_2047-6b6f2d38e9bc_double_instead_of_float.py +132 -0
- lecrapaud/db/alembic/versions/2025_05_31_1111-c175e4a36d68_generalise_stock_to_group.py +36 -0
- lecrapaud/db/alembic/versions/2025_05_31_1256-5681095bfc27_create_investment_run_and_portfolio_.py +62 -0
- lecrapaud/db/alembic/versions/2025_05_31_1806-339927587383_add_investment_run_id.py +107 -0
- lecrapaud/db/alembic/versions/2025_05_31_1834-52b809a34371_make_nullablee.py +38 -0
- lecrapaud/db/alembic/versions/2025_05_31_1849-3b8550297e8e_change_date_to_datetime.py +44 -0
- lecrapaud/db/alembic/versions/2025_05_31_1852-e6b8c95d8243_add_date_to_portfolio_history.py +30 -0
- lecrapaud/db/alembic/versions/2025_06_10_1136-db8cdd83563a_addnewsandoptiontodata.py +32 -0
- lecrapaud/db/crud.py +179 -0
- lecrapaud/db/models/__init__.py +11 -0
- lecrapaud/db/models/base.py +6 -0
- lecrapaud/db/models/dataset.py +124 -0
- lecrapaud/db/models/feature.py +46 -0
- lecrapaud/db/models/feature_selection.py +126 -0
- lecrapaud/db/models/feature_selection_rank.py +80 -0
- lecrapaud/db/models/model.py +41 -0
- lecrapaud/db/models/model_selection.py +56 -0
- lecrapaud/db/models/model_training.py +54 -0
- lecrapaud/db/models/score.py +62 -0
- lecrapaud/db/models/target.py +59 -0
- lecrapaud/db/services.py +0 -0
- lecrapaud/db/setup.py +58 -0
- lecrapaud/directory_management.py +28 -0
- lecrapaud/feature_engineering.py +1119 -0
- lecrapaud/feature_selection.py +1229 -0
- lecrapaud/jobs/__init__.py +13 -0
- lecrapaud/jobs/config.py +17 -0
- lecrapaud/jobs/scheduler.py +36 -0
- lecrapaud/jobs/tasks.py +57 -0
- lecrapaud/model_selection.py +1571 -0
- lecrapaud/predictions.py +292 -0
- lecrapaud/search_space.py +844 -0
- lecrapaud/services/__init__.py +0 -0
- lecrapaud/services/embedding_categorical.py +71 -0
- lecrapaud/services/indicators.py +309 -0
- lecrapaud/speed_tests/experiments.py +139 -0
- lecrapaud/speed_tests/test-gpu-bilstm.ipynb +261 -0
- lecrapaud/speed_tests/test-gpu-resnet.ipynb +166 -0
- lecrapaud/speed_tests/test-gpu-transformers.ipynb +254 -0
- lecrapaud/speed_tests/tests.ipynb +145 -0
- lecrapaud/speed_tests/trash.py +37 -0
- lecrapaud/training.py +151 -0
- lecrapaud/utils.py +246 -0
- lecrapaud-0.4.0.dist-info/LICENSE +201 -0
- lecrapaud-0.4.0.dist-info/METADATA +103 -0
- lecrapaud-0.4.0.dist-info/RECORD +60 -0
- lecrapaud-0.4.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from celery import Celery, signals
|
|
2
|
+
from src.jobs import config
|
|
3
|
+
from src.utils import setup_logger
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@signals.setup_logging.connect
|
|
7
|
+
def configure_celery_logging(**kwargs):
|
|
8
|
+
setup_logger()
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
app = Celery("src")
|
|
12
|
+
app.config_from_object(config)
|
|
13
|
+
app.autodiscover_tasks(["src.jobs"])
|
lecrapaud/jobs/config.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from src.config import REDIS_URL
|
|
2
|
+
|
|
3
|
+
REDIS_URL = REDIS_URL + "/1"
|
|
4
|
+
broker_url = REDIS_URL
|
|
5
|
+
result_backend = REDIS_URL
|
|
6
|
+
|
|
7
|
+
# For RedBeat
|
|
8
|
+
redbeat_redis_url = REDIS_URL
|
|
9
|
+
beat_scheduler = "redbeat.RedBeatScheduler"
|
|
10
|
+
|
|
11
|
+
timezone = "UTC"
|
|
12
|
+
|
|
13
|
+
task_acks_late = True
|
|
14
|
+
task_reject_on_worker_lost = True
|
|
15
|
+
worker_prefetch_multiplier = 1
|
|
16
|
+
task_acks_on_failure_or_timeout = False
|
|
17
|
+
worker_concurrency = 1
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from redbeat.schedulers import RedBeatSchedulerEntry
|
|
2
|
+
from celery.schedules import crontab
|
|
3
|
+
from src.jobs.tasks import app
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def schedule_tasks():
|
|
7
|
+
schedule_tasks_list = [
|
|
8
|
+
{
|
|
9
|
+
"name": "task_send_daily_emails",
|
|
10
|
+
"task": "src.jobs.tasks.task_send_daily_emails",
|
|
11
|
+
"schedule": crontab(minute=00, hour=12),
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "task_training_experiment",
|
|
15
|
+
"task": "src.jobs.tasks.task_training_experiment",
|
|
16
|
+
"schedule": crontab(minute=45, hour=00),
|
|
17
|
+
},
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
for task in schedule_tasks_list:
|
|
21
|
+
entry = RedBeatSchedulerEntry(**task, app=app)
|
|
22
|
+
entry.save()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def unschedule_tasks():
|
|
26
|
+
unschedule_task_keys = [
|
|
27
|
+
"redbeat:task_send_daily_emails",
|
|
28
|
+
"redbeat:task_train_models",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
for key in unschedule_task_keys:
|
|
32
|
+
try:
|
|
33
|
+
entry = RedBeatSchedulerEntry.from_key(key, app=app)
|
|
34
|
+
entry.delete()
|
|
35
|
+
except KeyError:
|
|
36
|
+
pass
|
lecrapaud/jobs/tasks.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from src.jobs import app
|
|
2
|
+
|
|
3
|
+
# from honeybadger import honeybadger
|
|
4
|
+
from src.send_daily_emails import send_daily_emails
|
|
5
|
+
from src.config import DATASET_ID, RECEIVER_EMAIL
|
|
6
|
+
from src.training import run_training
|
|
7
|
+
from src.constants import stock_list_3
|
|
8
|
+
from src.search_space import get_models_idx
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@app.task(
|
|
12
|
+
bind=True,
|
|
13
|
+
autoretry_for=(Exception,),
|
|
14
|
+
retry_backoff=True,
|
|
15
|
+
retry_kwargs={"max_retries": 5},
|
|
16
|
+
acks_late=True,
|
|
17
|
+
)
|
|
18
|
+
def task_send_daily_emails(self):
|
|
19
|
+
try:
|
|
20
|
+
print(f"[Attempt #{self.request.retries}] task_send_daily_emails")
|
|
21
|
+
dataset_id = int(DATASET_ID)
|
|
22
|
+
email = RECEIVER_EMAIL
|
|
23
|
+
return send_daily_emails(email, dataset_id)
|
|
24
|
+
except Exception as e:
|
|
25
|
+
print(e)
|
|
26
|
+
# honeybadger.notify(e)
|
|
27
|
+
raise
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@app.task(
|
|
31
|
+
bind=True,
|
|
32
|
+
autoretry_for=(Exception,),
|
|
33
|
+
retry_backoff=True,
|
|
34
|
+
retry_kwargs={"max_retries": 5},
|
|
35
|
+
acks_late=True,
|
|
36
|
+
)
|
|
37
|
+
def task_training_experiment(self):
|
|
38
|
+
try:
|
|
39
|
+
print(f"[Attempt #{self.request.retries}] task_training_experiment")
|
|
40
|
+
run_training(
|
|
41
|
+
years_of_data=20,
|
|
42
|
+
list_of_groups=stock_list_3,
|
|
43
|
+
targets_numbers=range(1, 15),
|
|
44
|
+
percentile=20,
|
|
45
|
+
corr_threshold=80,
|
|
46
|
+
max_features=25,
|
|
47
|
+
models_idx=get_models_idx("linear", "xgb"),
|
|
48
|
+
number_of_trials=20,
|
|
49
|
+
perform_hyperoptimization=True,
|
|
50
|
+
perform_crossval=False,
|
|
51
|
+
preserve_model=False,
|
|
52
|
+
session_name="20y_stock_list_3_linear_xgb",
|
|
53
|
+
)
|
|
54
|
+
except Exception as e:
|
|
55
|
+
print(e)
|
|
56
|
+
# honeybadger.notify(e)
|
|
57
|
+
raise
|