feat: train forecasts on trade outcomes

This commit is contained in:
Курнат Андрей
2026-07-14 07:49:32 +03:00
parent 668e606ee2
commit 7186acb9a1
18 changed files with 867 additions and 94 deletions
+35 -1
View File
@@ -6,7 +6,7 @@ import json
import pytest
from crypto_spot_bot.training_coordination import TrainingCoordinator
from crypto_spot_bot.training_coordination import TrainingCoordinator, _validate_symbol_models
def test_training_coordinator_claims_and_completes_job(tmp_path) -> None:
@@ -57,10 +57,15 @@ def test_training_coordinator_sanitizes_independent_training_parameters(tmp_path
"parameters": {
"pooled": False,
"limit": 6000,
"validation_window": 720,
"ensemble_seeds": "7,19",
"selection_folds": 3,
"learning_rate": 0.0007,
"weight_decay": 0.0005,
"horizon": 12,
"horizons": "3,6,12,24",
"patience": 8,
"seed": 7,
},
}
)
@@ -68,10 +73,15 @@ def test_training_coordinator_sanitizes_independent_training_parameters(tmp_path
assert requested["job"]["parameters"] == {
"pooled": False,
"limit": 6000,
"validation_window": 720,
"ensemble_seeds": "7,19",
"selection_folds": 3,
"learning_rate": 0.0007,
"weight_decay": 0.0005,
"horizon": 12,
"horizons": "3,6,12,24",
"patience": 8,
"seed": 7,
}
@@ -148,6 +158,30 @@ def test_training_coordinator_accepts_chunked_artifact_upload(tmp_path) -> None:
assert coordinator.status()["latest_job"]["artifacts"][0]["sha256"] == sha256
def test_model_validation_accepts_multitask_ensemble_members() -> None:
head = {
"state_dict": {"weight_ih_l0": [[0.0]]},
"head_hidden_weight": [[0.0]],
"head_hidden_bias": [0.0],
"return_head_weight": [[0.0]],
"return_head_bias": [0.0],
"event_head_weight": [[0.0]],
"event_head_bias": [0.0],
}
symbols = {
"BTCUSDT": {
"model": "torch_gru",
"lookback": 8,
"input_size": 2,
"hidden_size": 4,
"multitask_head": True,
"ensemble_members": [head, head],
}
}
_validate_symbol_models(symbols)
def test_running_claimed_job_keeps_agent_online_when_heartbeat_is_stale(tmp_path) -> None:
coordinator = TrainingCoordinator(tmp_path)
coordinator.request_retrain({"source": "android"})