feat: train forecasts on trade outcomes
This commit is contained in:
@@ -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"})
|
||||
|
||||
Reference in New Issue
Block a user