Il bot riferisce al telefono: stato ogni ora, riepilogo giornaliero ed eventi (avvio e arresto, basket aperti e chiusi, gambe in attesa, ordini risolti, orfane, kill-switch, equity stop, perdita giornaliera, margin guard, recupero, reset, preset, API in errore, scarto orologio) e accetta comandi dalla sola chat autorizzata (/stato, /posizioni, /storico, /pausa, /riprendi, /chiudi, /kill CONFERMO, /reset). Il canale è solo HttpClient: coda non bloccante, un messaggio al secondo, retry con backoff e retry_after, long polling da un solo task; il token vive nell'ambiente. Ogni comando eseguito, da qualunque origine, è una riga «comando» nel ledger. Test (s)-(u). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
65 lines
4.3 KiB
JSON
65 lines
4.3 KiB
JSON
{
|
|
"_commento": "Configurazione di Encelado — Correlation Baskets su eToro (CFD forex). Le chiavi con il prefisso _ sono documentazione e vengono ignorate. I parametri della strategia (basket, preset, soglie, rischio) stanno in strategy.json accanto a questo file. Le chiavi API non stanno qui: si inseriscono dalla finestra e vivono cifrate in %LOCALAPPDATA%\\Encelado\\etoro.dat, oppure nelle variabili d'ambiente ETORO_API_KEY e ETORO_USER_KEY.",
|
|
|
|
"etoro": {
|
|
"_note": "eToro Public API. environment = demo oppure real: chiavi e rotte sono diverse, e l'ambiente attivo è sempre visibile nella finestra.",
|
|
"environment": "demo",
|
|
"baseUrl": "https://public-api.etoro.com",
|
|
"requestTimeoutSeconds": 20,
|
|
"_fillTimeoutSeconds": "Quanto attendere l'esito di un ordine (eToro lo lavora in modo asincrono) prima di trattarlo come non confermato e riconciliare. È anche il timeout della seconda gamba (leg-risk).",
|
|
"fillTimeoutSeconds": 5
|
|
},
|
|
|
|
"run": {
|
|
"_executionMode": "Paper = simulatore locale sopra le quotazioni reali (nessun ordine sul conto). Demo = conto demo di eToro: ordini veri, denaro virtuale, il bot apre e chiude da solo. Live = conto reale: richiede allowLive = true e la frase CONFERMO LIVE a ogni avvio. Nessuna modalità chiede l'approvazione dei singoli ordini (decisione D-20).",
|
|
"executionMode": "Demo",
|
|
"allowLive": false,
|
|
"_pollSeconds": "Secondi fra due letture delle quotazioni (una richiesta per tutti gli strumenti). 3 s = 20 richieste al minuto su una quota di 120: resta spazio per candele e costi.",
|
|
"pollSeconds": 3,
|
|
"_statusSeconds": "Ogni quanti secondi il bot scrive una riga di stato nel log (e sulla console in headless).",
|
|
"statusSeconds": 60,
|
|
"_closeOnShutdown": "true = fermare il bot chiude i basket aperti a mercato. false = restano sul conto con gli stop nativi sul server, senza nessuno che applichi il take-profit o lo stop di basket finché il bot non riparte.",
|
|
"closeOnShutdown": false,
|
|
"strategyFile": "strategy.json",
|
|
"_cartelle": "Relative alla cartella di questo file: data (mercato, calendario, notizie, ledger, modelli), knowledge (calibrazione, proposte, registri), reports.",
|
|
"dataDirectory": "data",
|
|
"knowledgeDirectory": "knowledge",
|
|
"reportsDirectory": "reports",
|
|
"_paper": "Solo per executionMode = Paper: saldo iniziale del simulatore e slippage per gamba oltre lo spread reale del momento.",
|
|
"paperStartingBalance": 10000,
|
|
"paperSlippagePips": 0.3
|
|
},
|
|
|
|
"ui": {
|
|
"_timeZone": "Fuso orario con cui la finestra mostra gli orari. 'computer' = quello di Windows; 'UTC'; oppure un id di Windows (es. 'W. Europe Standard Time') o IANA (es. 'Europe/Rome'). Il file di log porta l'offset, il ledger è in UTC: cambiare questo valore non tocca nessun file.",
|
|
"timeZone": "computer"
|
|
},
|
|
|
|
"logging": {
|
|
"_level": "trace, debug, info, warn, error, none. 'info' basta: ogni rifiuto che impedisce un ordine viene scritto a questo livello o sopra, con il basket e il motivo esatto.",
|
|
"level": "info",
|
|
"console": false,
|
|
"_directory": "Cartella dei log, relativa a questo file se non è assoluta.",
|
|
"directory": "logs",
|
|
"file": "encelado.log",
|
|
"_rotazione": "Superata maxFileSizeMb il file viene ruotato (encelado.1.log, encelado.2.log…) e ne restano maxFiles.",
|
|
"maxFileSizeMb": 32,
|
|
"maxFiles": 10,
|
|
"_righe": "statusLines = righe della striscia di attività nella dashboard; bufferedLines = righe tenute in memoria dalla pagina Log (il file su disco resta completo).",
|
|
"statusLines": 200,
|
|
"bufferedLines": 5000
|
|
},
|
|
|
|
"notifications": {
|
|
"_telegram": "Notifiche e comandi su Telegram (5.0). Il token del bot NON si scrive qui: variabile d'ambiente TELEGRAM_BOT_TOKEN (e TELEGRAM_CHAT_ID, che ha la precedenza su chatId). hourlyStatus = stato allo scoccare di ogni ora UTC; eventAlerts = aperture, chiusure, ordini risolti, kill-switch, recupero, errori; dailySummaryUtcHour = ora UTC del riepilogo giornaliero (negativo = spento); commands = risposte ai comandi /stato, /posizioni, /storico, /pausa, /riprendi, /chiudi, /kill CONFERMO, /reset dalla sola chat autorizzata.",
|
|
"telegram": {
|
|
"enabled": false,
|
|
"chatId": "",
|
|
"hourlyStatus": true,
|
|
"eventAlerts": true,
|
|
"dailySummaryUtcHour": 21,
|
|
"commands": true
|
|
}
|
|
}
|
|
}
|