Step 3 y 4 medio preparados. Ha habido una decision es separar en dos step distintos la eleccion de estrategias y luego su optimizacion. A partir de aqui vamos a hacer una refactorizacion quirurgica de los Steps 3 y 4.
Prompt para Char GPT: Estamos trabajando en un Trading Bot con arquitectura backend/frontend separada. Stack: - Backend: FastAPI (Python 3.12) - Frontend: HTML + Vanilla JS + Tabler UI - DB: PostgreSQL - Cache opcional: Redis - Proyecto estructurado bajo /src - Carpeta /reports fuera de src Wizard actual: Step 1 · Data Step 2 · Risk & Stops Step 3 · Strategies (actualmente mezcla validación y optimización) Step 4 · Optimization (renombrado pero no 100% ajustado aún) Decisión arquitectónica ya tomada: - Step 3 será Strategy Validation (parámetros fijos, sin grid) - Step 4 será Parameter Optimization (grid min/max/step) Importante: - Ya he duplicado los archivos para separar Step 3 y Step 4. - No queremos rehacer desde cero. - Queremos hacer una refactorización quirúrgica. - Queremos eliminar lógica de grid del Step 3. - Queremos mantener infraestructura WF, async jobs, ranking y reporting. Objetivo de esta sesión: Refactorizar Step 3 (Validation) de forma limpia y profesional partiendo del código actual. Reglas: - No romper Step 4. - No reescribir todo desde cero. - Simplificar quirúrgicamente. - Mantener coherencia de arquitectura. - Mantener compatibilidad con Step 2 (risk snapshot heredado). - Mantener generación de PDF. - Mantener botón Promote to Optimization. Te adjunto el zip completo de la carpeta src. Analiza la estructura primero. No escribas código todavía. Primero dame: 1. Un diagnóstico estructural. 2. Qué archivos tocar. 3. Qué eliminar. 4. Qué simplificar. 5. Qué mantener. 6. Orden de refactorización seguro. Después empezaremos la refactorización paso a paso. Despues empezaremos la refactorizacion paso a paso.
This commit is contained in:
@@ -89,6 +89,10 @@ async function inspectCalibrationRisk() {
|
||||
const data = await res.json();
|
||||
console.log("[calibration_risk] inspect response:", data);
|
||||
|
||||
if (data.status === "ok" || data.status === "warning") {
|
||||
persistRiskParametersForStep3();
|
||||
}
|
||||
|
||||
renderRiskResult(payload, data);
|
||||
|
||||
// --------------------------------------------------
|
||||
@@ -189,6 +193,10 @@ async function validateCalibrationRisk() {
|
||||
const data = await res.json();
|
||||
console.log("[calibration_risk] inspect response:", data);
|
||||
|
||||
if (data.status === "ok" || data.status === "warning") {
|
||||
persistRiskParametersForStep3();
|
||||
}
|
||||
|
||||
renderRiskResult(payload, data);
|
||||
|
||||
// --------------------------------------------------
|
||||
@@ -698,6 +706,13 @@ function num(id) {
|
||||
return Number.isFinite(n) ? n : null;
|
||||
}
|
||||
|
||||
function str(id) {
|
||||
const el = document.getElementById(id);
|
||||
if (!el) return null;
|
||||
const v = el.value;
|
||||
return v === null || v === undefined ? null : String(v);
|
||||
}
|
||||
|
||||
function buildRiskPayload() {
|
||||
const symbol = localStorage.getItem("calibration.symbol");
|
||||
const timeframe = localStorage.getItem("calibration.timeframe");
|
||||
@@ -742,6 +757,34 @@ function buildRiskPayload() {
|
||||
return payload;
|
||||
}
|
||||
|
||||
function persistRiskParametersForStep3() {
|
||||
|
||||
try {
|
||||
|
||||
const dataToPersist = {
|
||||
risk_fraction: num("risk_fraction"),
|
||||
max_position_fraction: num("max_position_fraction"),
|
||||
stop_type: str("stop_type"),
|
||||
stop_fraction: num("stop_fraction"),
|
||||
atr_period: num("atr_period"),
|
||||
atr_multiplier: num("atr_multiplier"),
|
||||
max_drawdown_pct: num("max_drawdown_pct"),
|
||||
daily_loss_limit_pct: num("daily_loss_limit_pct"),
|
||||
max_consecutive_losses: num("max_consecutive_losses"),
|
||||
cooldown_bars: num("cooldown_bars"),
|
||||
};
|
||||
|
||||
Object.entries(dataToPersist).forEach(([key, value]) => {
|
||||
localStorage.setItem(`calibration.${key}`, value ?? "");
|
||||
});
|
||||
|
||||
console.log("[calibration_risk] Parameters saved for Step 3 ✅");
|
||||
|
||||
} catch (err) {
|
||||
console.error("[calibration_risk] Persist failed ❌", err);
|
||||
}
|
||||
}
|
||||
|
||||
// =================================================
|
||||
// INIT
|
||||
// =================================================
|
||||
|
||||
Reference in New Issue
Block a user