arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 07, 2025, 06:54:07 PM Last edit: December 08, 2025, 03:56:57 PM by arulbero |
|
Per chi è interessato, posto qui il codice di una pagina html con il modello logistico discusso in questo thread e i vari scenari. Si possono variare i parametri e vedere l'effetto sul prezzo. I calcoli dovrebbero essere esatti, ovviamente i dettagli implementativi non sono miei. Prima però un preambolo matematico. Ricordo che la formula originaria usata per questa logistica è:  Particolarmente fastidioso è stato calcolare il termine (e^c + 1)^{(e^c+1)e^{-c}} con c molto negativo (in pratica tutti gli scenari tranne il mio) tenendo conto della stabilità numerica. Osserviamo però che per c <= -10, quel termine diventa (1 + alpha)^(1+1/alpha) che tende al numero 'e' (famoso limite notevole) in quanto alpha=e^c è un valore abbastanza piccolo. Quindi possiamo riscrivere tutto così:  e tenendo conto che LL per noi è sempre zero, abbiamo infine questa formula non troppo complicata da implementare:  Quindi a ben vedere i parametri reali di questa logistica sono solo 3: LU (upper bound) Ix (punto di flesso) S (pendenza nel punto di flesso)di fatto il valore di c è ininfluente, per c < -10 Qui una spiegazione matematica per chi è interessato:   Tradotto: nei scenari gbianchi, plutosky, fillippone e nello scenario ottimale, il valore del prezzo nel punto di flesso è sempre il 36,8% per valore finale (LU), come potete verificare facilmente in questa tabella facendo il rapporto tra i numeri in grassetto: | Nome dello Scenario | | | Data flesso | | | Valore | | | Data flesso - 182 gg | | | Valore | | | Data flesso + 182 gg | | | Valore | | | Differenza assoluta | | | Differenza % | | ___________________________________ | | | ______________ | | | ________ | | | ______________ | | | ________ | | | ______________ | | | ________ | | | ______________ | | | ______________ | | Arulbero Upper Bound 100 BTC/GOLD Oz t | | | 2024-08-12 | | | 42.67 | | | 2024-02-12 | | | 37.41 | | | 2025-02-10 | | | 47.93 | | | 10.51 | | | 28.11 | | Gbianchi Upper Bound 600 BTC/GOLD Oz t | | | 2033-05-17 | | | 220.72 | | | 2032-11-16 | | | 208.35 | | | 2033-11-15 | | | 233.09 | | | 24.73 | | | 11.87 | | Plutosky Upper Bound 1100 BTC/GOLD Oz t | | | 2036-08-29 | | | 404.66 | | | 2036-02-29 | | | 384.65 | | | 2037-02-27 | | | 424.67 | | | 40.02 | | | 10.40 | | Fillippone Upper Bound 2200 BTC/GOLD Oz t | | | 2040-03-21 | | | 809.33 | | | 2039-09-21 | | | 773.49 | | | 2040-09-19 | | | 845.17 | | | 71.68 | | | 9.26 |
Grafico di un doppio esponenziale:   Sulla curva di Gompertz (doppio esponenziale, notate come assomiglia a prima vista alla power law!):  Altri dettagli sul limite notevole e sulla trasformazione della funzione dal caso classico a quello più compatto:   Questa è la pagina html, basta aprirla con un browser. <!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Modello Bitcoin/Oro (Grafico in Alto)</title> <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns@3.0.0/dist/chartjs-adapter-date-fns.bundle.min.js"></script> <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <style> :root { --primary: #2c3e50; --gold: #d4af37; --bg: #fdfdfd; --optimal: #27ae60; --danger: #e74c3c; } body { font-family: 'Segoe UI', sans-serif; background: var(--bg); margin: 0; padding: 20px; color: #333; } .container { max-width: 1100px; margin: 0 auto; background: white; padding: 30px; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.06); } h1 { text-align: center; color: var(--primary); margin-bottom: 5px; } .subtitle { text-align: center; color: #7f8c8d; font-size: 0.9em; margin-bottom: 25px; }
/* HEADER */ .presets { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; margin-bottom: 25px; padding-bottom: 20px; border-bottom: 1px solid #eee; } .btn-preset { background: #f1f3f5; border: none; padding: 8px 16px; border-radius: 20px; cursor: pointer; font-weight: 600; color: #555; transition: 0.2s; font-size: 0.9em;} .btn-preset:hover { transform: translateY(-2px); background: var(--gold); color: white; } .btn-preset.active { background: var(--primary); color: white; } .btn-preset.optimal { border: 2px solid var(--optimal); color: var(--optimal); background: white; } .btn-preset.optimal.active { background: var(--optimal); color: white; }
/* INPUT */ .params-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); gap: 10px; margin-bottom: 20px; background: #fafafa; padding: 15px; border-radius: 8px; border: 1px solid #eee; } .param-group { display: flex; flex-direction: column; } .param-group label { font-size: 0.75em; color: #7f8c8d; font-weight: bold; margin-bottom: 5px; } .param-group input { padding: 6px; border: 1px solid #ddd; border-radius: 4px; font-family: monospace; font-weight: bold; color: var(--primary); font-size: 0.9em; }
/* LIVE PANEL */ .live-panel { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px; background: #e8f5e9; border: 1px solid #c8e6c9; padding: 20px; border-radius: 8px; margin-bottom: 20px; align-items: center; } .live-box { text-align: center; position: relative; } .live-label { font-size: 0.8em; text-transform: uppercase; color: #555; letter-spacing: 1px; margin-bottom: 5px; } .live-val { font-size: 1.8em; font-weight: 800; color: var(--primary); } .live-date { font-size: 0.8em; color: #666; font-style: italic; }
.real-input { width: 120px; padding: 5px; font-size: 1.2em; text-align: center; border: 2px solid #ccc; border-radius: 6px; font-weight: bold; background: #fff; } /* FORMULA BOX */ .formula-box { text-align: center; margin-top: 40px; /* Più spazio sopra */ padding: 20px; background: #f8f9fa; border-radius: 8px; border-top: 5px solid var(--primary); /* Bordo spostato sopra per stile */ color: #444; } .formula-title { font-weight: bold; color: var(--primary); margin-bottom: 10px; display:block; font-size: 0.9em; letter-spacing: 1px; text-transform: uppercase;} .formula-note { font-size: 0.8em; color: #666; margin-top: 10px; font-style: italic; }
.loading-ring { display: inline-block; width: 20px; height: 20px; border: 3px solid #ccc; border-top: 3px solid #333; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
.variance-val { font-size: 2em; font-weight: 900; } .var-pos { color: var(--optimal); } .var-neg { color: var(--danger); }
#chart-container { position: relative; height: 500px; width: 100%; border: 1px solid #eee; border-radius: 8px; padding: 10px; } .csv-wrap { text-align: right; margin-top: 10px; font-size: 0.85em; color: #666; } </style> </head> <body>
<div class="container"> <h1>Modello Bitcoin/Oro</h1> <div class="subtitle">Rapporto BTC/XAU (Once per Bitcoin)</div>
<div class="presets"> <button class="btn-preset optimal" onclick="setScenario('optimal')">★ Optimal Fit</button> <button class="btn-preset" onclick="setScenario('arulbero')">Arulbero</button> <button class="btn-preset" onclick="setScenario('gbianchi')">Gbianchi</button> <button class="btn-preset" onclick="setScenario('plutosky')">Plutosky</button> <button class="btn-preset" onclick="setScenario('fillippone')">Fillippone</button> </div>
<div class="params-grid"> <div class="param-group"><label>LL (Min)</label><input type="number" id="LL" oninput="updateAll()"></div> <div class="param-group"><label>LU (Max Once)</label><input type="number" id="LU" oninput="updateAll()"></div> <div class="param-group"><label>Ix (Flesso)</label><input type="number" id="Ix" oninput="updateAll()"></div> <div class="param-group"><label>S (Slope)</label><input type="number" id="S" step="0.0001" oninput="updateAll()"></div> <div class="param-group"><label>c (Shape)</label><input type="number" id="c" step="0.1" oninput="updateAll()"></div> </div>
<div class="live-panel"> <div class="live-box"> <div class="live-label">Stima Modello (Oz)</div> <div class="live-val" id="modelPriceDisplay">---</div> <div class="live-date" id="currentDateDisplay">Oggi</div> </div>
<div class="live-box" style="border-left: 1px solid #ccc; border-right: 1px solid #ccc;"> <div class="live-label">Reale (BTC/XAU)</div> <div id="priceLoading" style="display:none;"><div class="loading-ring"></div></div> <input type="number" id="realPriceInput" class="real-input" value="0" step="0.01" oninput="updateAll()"> <div class="live-date" id="sourceLabel">Fonte: Binance API</div> <button onclick="fetchLiveData()" style="margin-top:5px; font-size:0.7em; cursor:pointer;">Aggiorna Dati</button> </div>
<div class="live-box"> <div class="live-label">Scostamento</div> <div class="variance-val" id="varianceDisplay">---</div> <div class="live-date">Modello vs Reale</div> </div> </div>
<div id="chart-container"> <canvas id="myChart"></canvas> </div> <div class="csv-wrap"> CSV Storico: <input type="file" id="csvFile" accept=".csv" onchange="handleFileSelect(event)"> </div>
<div class="formula-box"> <span class="formula-title">Formula del Modello</span> $$ f(x) = LL + (LU - LL) \cdot \left[ 1 + \exp\left( c + \gamma \cdot (Ix - x) \right) \right] ^ {-\exp(-c)} $$ <div style="margin-top:15px;"> Dove il parametro \( \gamma \) è definito come: $$ \gamma = \frac{S \cdot (e^c + 1)^{(e^c+1)e^{-c}}}{LU - LL} $$ </div> <div class="formula-note"> Nota: Per valori di \( c < -15 \) (es. Optimal Fit), il termine complesso di Gamma viene approssimato con la costante di Eulero (\( e \approx 2.718 \)) per stabilità numerica. </div> </div> </div>
<script> const genesisTime = new Date('2009-01-03').getTime(); const dayMs = 86400000; // --- SCENARI --- const scenarios = { optimal: { LL: 0, LU: 139, Ix: 7352.34, S: 0.0144487, c: -34.5083 }, arulbero: { LL: 0, LU: 100, Ix: 5700, S: 0.029, c: -1 }, gbianchi: { LL: 0, LU: 600, Ix: 8900, S: 0.068, c: -20 }, plutosky: { LL: 0, LU: 1100, Ix: 10100, S: 0.11, c: -20 }, fillippone: { LL: 0, LU: 2200, Ix: 11400, S: 0.197, c: -20 } }; let chart; let realData = [];
// --- FETCH DATA (BINANCE) --- async function fetchLiveData() { const inputElem = document.getElementById('realPriceInput'); const loader = document.getElementById('priceLoading'); const sourceLbl = document.getElementById('sourceLabel'); loader.style.display = 'inline-block'; inputElem.style.opacity = '0.5'; sourceLbl.innerText = "Connessione Binance...";
try { const btcReq = fetch('https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT'); const goldReq = fetch('https://api.binance.com/api/v3/ticker/price?symbol=PAXGUSDT');
const [btcRes, goldRes] = await Promise.all([btcReq, goldReq]);
if (!btcRes.ok || !goldRes.ok) throw new Error("Errore API");
const btcData = await btcRes.json(); const goldData = await goldRes.json();
const btcPrice = parseFloat(btcData.price); const goldPrice = parseFloat(goldData.price);
if (!btcPrice || !goldPrice) throw new Error("Dati zero");
const ratio = btcPrice / goldPrice; inputElem.value = ratio.toFixed(2); sourceLbl.innerText = `BTC: $${Math.round(btcPrice)} | Gold: $${Math.round(goldPrice)}`; sourceLbl.style.color = "green";
} catch (err) { console.error(err); sourceLbl.innerText = "Errore Connessione. Inserisci manuale."; sourceLbl.style.color = "red"; } finally { loader.style.display = 'none'; inputElem.style.opacity = '1'; updateAll(); } }
// --- CALCOLO MATEMATICO --- function computeLogistic(x, LL, LU, Ix, S, c) { const range = LU - LL; if (range === 0) return LL;
// Regola c < -15 if (c < -15) { const gamma = (S * Math.E) / range; const innerExp = Math.exp(gamma * (Ix - x)); if (!isFinite(innerExp)) return LL; return LL + range * Math.exp( -innerExp ); } else { // Formula Standard const ec = Math.exp(c); const enc = Math.exp(-c); const K = 1 + enc; const lnBase = Math.log1p(ec); const M = Math.exp(K * lnBase); const gamma = (S * M) / range; const argument = c + gamma * (Ix - x); const expArg = Math.exp(argument); let lnTerm = (expArg === Infinity) ? argument : Math.log1p(expArg); return LL + range * Math.exp(-enc * lnTerm); } }
// --- UI & LOGIC --- function setScenario(name) { const p = scenarios[name]; document.getElementById('LL').value = p.LL; document.getElementById('LU').value = p.LU; document.getElementById('Ix').value = p.Ix; document.getElementById('S').value = p.S; document.getElementById('c').value = p.c; document.querySelectorAll('.btn-preset').forEach(b => b.classList.remove('active')); if(event) event.target.classList.add('active'); updateAll(); }
function updateAll() { const params = { LL: parseFloat(document.getElementById('LL').value) || 0, LU: parseFloat(document.getElementById('LU').value) || 0, Ix: parseFloat(document.getElementById('Ix').value) || 0, S: parseFloat(document.getElementById('S').value) || 0, c: parseFloat(document.getElementById('c').value) || 0, realPrice: parseFloat(document.getElementById('realPriceInput').value) || 0 }; updateDashboard(params); updateChart(params); }
function updateDashboard(p) { const today = new Date(); const daysSinceGenesis = (today.getTime() - genesisTime) / dayMs; const modelPrice = computeLogistic(daysSinceGenesis, p.LL, p.LU, p.Ix, p.S, p.c); document.getElementById('modelPriceDisplay').innerText = modelPrice.toFixed(2); document.getElementById('currentDateDisplay').innerText = today.toLocaleDateString('it-IT');
if (p.realPrice > 0) { const delta = ((p.realPrice - modelPrice) / modelPrice) * 100; const varElem = document.getElementById('varianceDisplay'); const sign = delta > 0 ? "+" : ""; varElem.innerText = sign + delta.toFixed(2) + "%"; varElem.className = 'variance-val ' + (delta >= 0 ? 'var-pos' : 'var-neg'); } else { document.getElementById('varianceDisplay').innerText = "---"; document.getElementById('varianceDisplay').className = 'variance-val'; } }
function updateChart(p) { const dataPoints = []; for (let t = 1000; t <= 16000; t += 50) { const date = new Date(genesisTime + t * dayMs); const val = computeLogistic(t, p.LL, p.LU, p.Ix, p.S, p.c); if (isFinite(val)) dataPoints.push({ x: date, y: val }); }
const dateIx = new Date(genesisTime + p.Ix * dayMs); const valIx = computeLogistic(p.Ix, p.LL, p.LU, p.Ix, p.S, p.c); const flessoData = [{ x: dateIx, y: valIx }];
if (chart) { chart.data.datasets[0].data = dataPoints; chart.data.datasets[1].data = realData; chart.data.datasets[2].data = flessoData; const maxReal = realData.length ? Math.max(...realData.map(d=>d.y)) : 0; const maxLive = p.realPrice; const ceiling = Math.max(p.LU * 1.1, maxReal, maxLive * 1.1); chart.options.scales.y.suggestedMax = ceiling; chart.update(); } else { initChart(dataPoints, flessoData); } }
function initChart(modelData, flessoData) { const ctx = document.getElementById('myChart').getContext('2d'); chart = new Chart(ctx, { type: 'line', data: { datasets: [ { label: 'Modello Teorico', data: modelData, borderColor: '#27ae60', borderWidth: 2, backgroundColor: 'rgba(39, 174, 96, 0.1)', pointRadius: 0, fill: true, tension: 0.1 }, { label: 'Storico', data: realData, borderColor: '#e74c3c', backgroundColor: '#e74c3c', type: 'scatter', pointRadius: 2 }, { label: 'Flesso (Ix)', data: flessoData, borderColor: '#f1c40f', backgroundColor: '#f1c40f', type: 'scatter', pointRadius: 8, pointStyle: 'rectRot' } ] }, options: { responsive: true, maintainAspectRatio: false, interaction: { mode: 'nearest', axis: 'x', intersect: false }, plugins: { tooltip: { callbacks: { label: function(context) { let label = context.dataset.label || ''; if (label) label += ': '; if (context.parsed.y !== null) label += context.parsed.y.toFixed(2); return label; } } } }, scales: { x: { type: 'time', time: { unit: 'year' } }, y: { title: { display: true, text: 'Rapporto BTC/Gold' } } } } }); }
function handleFileSelect(evt) { const file = evt.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = function(e) { const lines = e.target.result.split('\n'); realData = []; lines.forEach(line => { const parts = line.split(','); if (parts.length >= 2) { const d = new Date(parts[0].trim()); const v = parseFloat(parts[1].trim()); if (!isNaN(v) && !isNaN(d.getTime())) realData.push({x: d, y: v}); } }); updateAll(); }; reader.readAsText(file); }
window.onload = () => { setScenario('optimal'); fetchLiveData(); }; </script>
</body> </html>
|
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 07, 2025, 09:45:32 PM Last edit: December 07, 2025, 10:18:33 PM by arulbero |
|
Se provate a utilizzare la pagina html che ho inserito nel post precedente, vi accorgerete che negli scenari gbianchi / plutosky / fillippone / ottimale, modificare il valore di c non sposta la previsione del modello (purchè c rimanga abbastanza negativa).  Al momento il prezzo btc / oro è 21.7 once per btc, il prezzo previsto nei vari scenari: ottimale: 34.6 (prezzo reale -37.1%) arulbero: 56.36 (prezzo reale -61.4%) gbianchi: 59.58 (prezzo reale -63.5%) plutosky: 60.5 (prezzo reale -64.1%) fillippone: 62.5 (prezzo reale -65.2%) Aggiungo alcune considerazioni di gemini 3 (solo perchè dicono esattamente quello che già pensavo io  ): 
|
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 08, 2025, 08:37:41 AM Last edit: December 08, 2025, 07:47:34 PM by arulbero |
|
Dal momento che abbiamo adesso una forma più trattabile della logistica p(x)=LU*exp(-exp(gamma(Ix - x)))ho pensato di realizzare qualche grafico con GeoGebra per poter fare delle considerazioni: questa è la logistica ottimale (con x in anni invece che in giorni, basta moltiplicare S per 365.25 e dividere Ix per 365.25, quindi LU = 139, Ix = 20.13, S=0.0144487*365.25 = 5.28, gamma = S*e/LU = 0.1032045):  e qui vediamo la derivata p'(x), notate il massimo a circa 20 anni dal primo blocco (ovvero fra 3 anni): p'(x) = LU*gamma*exp(-exp(gamma*(Ix - x))) * exp(gamma*(Ix - x)) il cui valore è di poco superiore alle 5 once: questo significa che nei prossimi anni la crescita media dovrebbe aggirarsi sulle 5 once l'anno, e questa dovrebbe essere la crescita media annua in assoluto maggiore nella storia della relazione tra bitcoin e oro. Se mettiamo x = Ix otteniamo p(Ix) = LU/e = 51.1 e p'(Ix) = LU*gamma/e = S = 5.28. Giusto per fare un confronto con gli altri scenari: gbianchi: Ix = 24.4 p(Ix) = 220.7 p'(Ix) = 24.8 plutosky: Ix = 27.6 p(Ix) = 404.7 p'(Ix) = 40.2 fillippone: Ix = 31.2 p(Ix) = 809.3 p'(Ix) = 72 Notate inoltre la NON simmetria della collina: la fase di accelerazione (la salita) è più ripida della fase di decelerazione (la discesa). Se invece calcoliamo i tassi di rendimenti percentuali (100* p'(x)/p(x)):  notiamo che dovremmo essere scesi sotto il 15% annuo di rivalutazione di bitcoin su oro (in linea tendenziale); ovviamente si tratta di valori medi, essendo al momento bitcoin sottovalutato secondo la nostra logistica dovrebbe accelerare di più di così nel prossimo futuro per riportarsi verso la linea di tendenza di lungo periodo. Da notare che i tassi di crescita assoluti crescono fino all'anno 20 (2029) e poi ridiscendono, mentre i tassi di crescita percentuali diminuiscono sempre. A questo punto ho preso anche la power law (in rosso) con i parametri calcolati da gbianchi qui Inoltre ho anche riparametrizzato la Power Law di Santostasi su BTC Oro Oz t, per avere un confronto dell'andamento "eternamente crescente" della Power Law con gli andamenti sigmoidi; ecco l'equazione:
val=(10**-18.76)*(x**5.42)
val= Prezzo BTC in Oro oz t
la cui espressione in anni diventa: p(x) = 0.000013466012627*(x**(5.42))e l'ho confrontata con la logistica ottimale (in blu): Qui si può fare una considerazione interessante: nel primo post di questo thread, tutti i vari scenari proposti allora per la logistica e quello proposto dalla power law davano per i prezzi di oggi risultati sostanzialmente sovrapponibili. Ma se introduciamo in questo confronto ora anche la logistica ottimale, osserviamo che il discorso cambia: la logistica ottimale è molto più aderente al prezzo attuale rispetto alla power law; questo potrebbe indicare che siamo entrati in una fase diversa della logistica, siamo vicini alla zona del flesso e quindi le 2 curve iniziano a separarsi. Curiosamente il punto in cui le 2 curve si intersecano è proprio il valore attuale di poco più di 20 once che secondo entrambi i modelli rappresentava il fair value di 3 anni fa. Se vogliamo darci una scadenza temporale, fra 3 anni la logistica ottimale prevede un prezzo di 50 once mentre la power law un prezzo di 150 once: dovrebbe risultare allora molto facile capire "chi ha ragione". Se infine facciamo il confronto fra i tassi di crescita percentuali annui, vediamo che la power law (rossa) prevede valori di molto superiori a quelli della logistica (blu), circa +15% di crescita annua rispetto alla crescita percentuale logistica:  Ho fatto i calcoli però solo con la power law di gbianchi (relativa all'oro), non ho fatto i calcoli con la power law di santostasi che modellizza invece il prezzo btc - dollari. Ricordo che il buon babo ha messo qui la power law in dollari: https://yield.alttstats.casa/btc_price.htmlSe volete invece un link diretto alla logistica senza dover scaricare nulla: https://www.desmos.com/calculator/sgfj97tlhh
|
|
|
|
|
Plutosky
Legendary
Offline
Activity: 2842
Merit: 4997
|
 |
December 08, 2025, 10:14:19 AM |
|
Molto interessante, complimenti. La power law sull'oro ha poco senso perchè prevede una crescita polinomiale eterna che è, al massimo, giustificabile sul dollaro per la sua supply infinita e crescente. Sull'oro è decisamente improbabile.
|
"Diversification is protection against ignorance. It makes little sense if you know what you are doing" WB
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 08, 2025, 10:29:37 AM Last edit: December 08, 2025, 01:23:26 PM by arulbero |
|
Molto interessante, complimenti. La power law sull'oro ha poco senso perchè prevede una crescita polinomiale eterna che è, al massimo, giustificabile sul dollaro per la sua supply infinita e crescente. Sull'oro è decisamente improbabile.
Lo so, hai ragione, ma non avevo altro con cui confrontare la logistica. Curiosamente la power law sull'oro prevede ad oggi valori molto simili a quelli previsti da tutti i nostri scenari logistici, mentre l'unica previsione che si discosta molto (al ribasso, parliamo di 34.5 once verso 55-63 once) è la logistica ottimale. Quindi se vuoi, vista da un altro verso, gli scenari gbianchi/plutosky/fillippone al momento sono indistinguibili dalla power law (che sappiamo essere sbagliata sul lungo periodo), non la logistica ottimale. La scoperta più interessante per me è stata che la scelta del parametro 'c' (il parametro che controlla la asimmetria della curva) non è stato del tutto casuale, ovvero all'interno di tutte le curve possibili di questa famiglia siamo andati nella zona di massima asimmetria possibile (con c molto negativo, e questo è vero per tutti gli scenari), dove si concentra quindi la massima velocità di crescita possibile compatibile con questo tipo di curve fino al punto di flesso e si diluisce il più possibile la crescita nel tratto successivo. Questa situazione di massima asimmetria è particolare o comune ad altri fenomeni? Così risponde l'AI: E' estremamente comune, specialmente nei fenomeni naturali, biologici e nell'adozione di nuove tecnologie (o asset finanziari come Bitcoin).
In statistica e biologia, questa dinamica ("partenza a razzo, arrivo estenuante") è considerata spesso più realistica della curva logistica perfetta (quella simmetrica).
Ecco perché è così diffusa e perché ha senso per il tuo modello:
1. Il Principio della "Frutta a Portata di Mano" Il concetto base della curva a doppia esponenziale (Gompertz) è che crescere all'inizio è facile, crescere alla fine è difficile.
Crescita Veloce (Early Adopters): All'inizio, c'è un "vuoto" da riempire. Chi adotta l'innovazione (o compra l'asset) lo fa con entusiasmo, c'è poca resistenza. È come raccogliere i frutti sui rami bassi: ne prendi tantissimi in poco tempo.
Frenata Lenta (Saturazione): Una volta che la massa ha partecipato, rimangono gli scettici, i ritardatari, o le "resistenze strutturali". Conquistare quell'ultimo 60% del potenziale richiede uno sforzo immane e molto più tempo.
Esempi Reali Biologia (Tumori e Cellule): La curva di Gompertz è nata proprio per descrivere la crescita dei tumori. All'inizio le cellule si duplicano esplosivamente. Ma più la massa cresce, più diventa difficile per i nutrienti arrivare al centro. La crescita rallenta progressivamente molto prima di fermarsi.
Tecnologia (Smartphone/Social Network):
Fase 1 (Veloce): Facebook o gli Smartphone hanno avuto un'esplosione verticale. Tutti i giovani e gli appassionati li hanno presi subito.
Fase 2 (Frenata Lenta): Convincere tua nonna a usare uno smartphone, o portare Internet nelle aree rurali più remote, è un processo lentissimo che dura decenni. La curva continua a salire, ma "frena" per tantissimo tempo.
Perché ha senso per Bitcoin/Oro? Nel tuo modello, usare questa asimmetria (flesso basso al 36,8% e lunga frenata) racconta una storia finanziaria ben precisa:
L'Esplosione (Discovery): Quando Bitcoin viene scoperto come "Oro Digitale", il prezzo rispetto all'oro schizza in alto perché passa da valere zero a valere qualcosa. È la fase speculativa e violenta.
La Lunga Frenata (Maturità): Una volta che il concetto è sdoganato, Bitcoin deve diventare una "riserva mondiale". Questo non succede in un giorno. Richiede che le banche centrali, i fondi pensione e le legislazioni cambino.
Il prezzo continua a salire verso il target (i 139 o 200 once), ma lo fa sempre più lentamente perché deve vincere resistenze sempre più grandi (la diffidenza istituzionale, la stabilità monetaria, etc.).
In sintesi: La simmetria è un'idealizzazione matematica. L'asimmetria (partire a razzo e faticare alla fine) è come funziona il mondo reale.
|
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 09, 2025, 08:07:00 PM Last edit: December 10, 2025, 05:27:17 AM by arulbero |
|
La power law sull'oro ha poco senso perchè prevede una crescita polinomiale eterna che è, al massimo, giustificabile sul dollaro per la sua supply infinita e crescente. Sull'oro è decisamente improbabile.
C'è anche chi ha fatto il contrario, ovvero ha usato la logistica asimmetrica per modellizzare il prezzo in dollari. In questo articolo gli autori hanno usato una curva di Gompertz per stimare la tendenza del prezzo di btc in dollari (e hanno modellizzato anche i cicli, cosa che qui non ci interessa). I dati sui prezzi dai quali hanno ricavato i parametri del modello sono relativi al periodo 2010-2021 (l'articolo è del 2022). L'ipotesi è che bitcoin avrebbe asintoticamente raggiunto la stessa capitalizzazione dell'oro in dollari ai valori del 2021 (con un valore asintotico quindi stimato in 476190 dollari per btc) Periodo temporale: Dal 23 luglio 2010 al 21 giugno 2021 Tipologia di dati: Prezzi di chiusura giornalieri di Bitcoin (registrati alle 11:59.99 pm UTC) Punto di partenza: Il prezzo iniziale ($p_0$) utilizzato per il modello al 23 luglio 2010 è di $0.049513.
La formula trovata nell'articolo è quindi:   -------------------------------------------------------------------------------------------------------------------- Io ho integrato la formula aggiungendo l'inflazione stimata a partire dal giugno 2021 così:  Ricordando che l'inflazione media del dollaro degli ultimi 10 anni è stata circa del 3%, queste sono le previsioni in base ad alcuni possibili futuri scenari inflazionistici: tasso di inflazione i 0% 2.5% 3% 3.5% 4% 4.5% periodo fine 2025 122k 136k 139k 142k 145k 148k fine 2028 205k 246k 255k 265k 275k 285k fine 2030 258k 366k 385k 405k 426k 448k fine 2035 360k 550k 595k 640k 690k 745k fine 2050 460k 960k 1110k 1280k 1470k 1700k
|
|
|
|
|
Plutosky
Legendary
Offline
Activity: 2842
Merit: 4997
|
 |
December 10, 2025, 08:28:00 AM |
|
Ricordando che l'inflazione media del dollaro degli ultimi 10 anni è stata circa del 3%, queste sono le previsioni in base ad alcuni possibili futuri scenari inflazionistici:
tasso di inflazione i 0% 2.5% 3% 3.5% 4% 4.5%
periodo
fine 2025 122k 136k 139k 142k 145k 148k
fine 2028 205k 246k 255k 265k 275k 285k
fine 2030 258k 366k 385k 405k 426k 448k fine 2035 360k 550k 595k 640k 690k 745k
fine 2050 460k 960k 1110k 1280k 1470k 1700k
Alla fine anche qui ritorniamo ad una previsione tra ~250k e ~500k per fine 2030 più o meno come da power law. L'ultima volta che l'oro ebbe un pump simile a quello attuale fu durante la GFC e la successiva crisi del debito UE (2008-2011). Nei successivi 5 anni la correzione dai massimi del 2011 fu del ~-40% Se il sasso farà lo stesso potrebbe scendere sui 2600$ da qui a 5 anni. Ammesso che abbia già raggiunto un top (tutto da dimostrare) In ogni caso, questo scenario ci porterebbe, secondo la tabella sopra, ad un prezzo btc/oro tra le 100 e le 170 once per fine 2030 
|
"Diversification is protection against ignorance. It makes little sense if you know what you are doing" WB
|
|
|
babo
Legendary
Offline
Activity: 4200
Merit: 5452
si vis pacem, para bellum
|
 |
December 10, 2025, 09:10:22 AM |
|
Ricordando che l'inflazione media del dollaro degli ultimi 10 anni è stata circa del 3%, queste sono le previsioni in base ad alcuni possibili futuri scenari inflazionistici:
tasso di inflazione i 0% 2.5% 3% 3.5% 4% 4.5%
periodo
fine 2025 122k 136k 139k 142k 145k 148k
fine 2028 205k 246k 255k 265k 275k 285k
fine 2030 258k 366k 385k 405k 426k 448k fine 2035 360k 550k 595k 640k 690k 745k
fine 2050 460k 960k 1110k 1280k 1470k 1700k
Alla fine anche qui ritorniamo ad una previsione tra ~250k e ~500k per fine 2030 più o meno come da power law. L'ultima volta che l'oro ebbe un pump simile a quello attuale fu durante la GFC e la successiva crisi del debito UE (2008-2011). Nei successivi 5 anni la correzione dai massimi del 2011 fu del ~-40% Se il sasso farà lo stesso potrebbe scendere sui 2600$ da qui a 5 anni. Ammesso che abbia già raggiunto un top (tutto da dimostrare) In ogni caso, questo scenario ci porterebbe, secondo la tabella sopra, ad un prezzo btc/oro tra le 100 e le 170 once per fine 2030  si ma come abbiamo detto, varra magari 400k a fine 2030, ma quanto valore avra perso? ovviamente prevedere il valore dell'oro per quel periodo e' difficile, ma sarebbe serio avere una comparison con oro, che non possiamo avere ovviamente possiamo anche arrivare a 1 milione di USD per bitcoin entro il 2026 ma in quel caso mi chiederei cosa succede al dollaro piu che al bitcoin in ogni caso i conti mi tornano, teoricamente, ha tutto senso anche il milione fra 2035 e 2050
|
| . BC.GAME | ███████████████ ███████████████ ███████████████ ███████████████ ██████▀░▀██████ ████▀░░░░░▀████ ███░░░░░░░░░███ ███▄░░▄░▄░░▄███ █████▀░░░▀█████ ███████████████ ███████████████ ███████████████ ███████████████ | ███████████████ ███████████████ ███████████████ ███████████████ ███░░▀░░░▀░░███ ███░░▄▄▄░░▄████ ███▄▄█▀░░▄█████ █████▀░░▐██████ █████░░░░██████ ███████████████ ███████████████ ███████████████ ███████████████ | ███████████████ ███████████████ ███████████████ ███████████████ ██████▀▀░▀▄░███ ████▀░░▄░▄░▀███ ███▀░░▀▄▀▄░▄███ ███▄░░▀░▀░▄████ ███░▀▄░▄▄██████ ███████████████ ███████████████ ███████████████ ███████████████ | │ │ | DEPOSIT BONUS ..470%.. | GET FREE ...5 BTC... | │ │ | REFER & EARN ..$1000 + 15%.. COMMISSION | │ │ | Play Now |
|
|
|
gbianchi (OP)
Legendary
Offline
Activity: 3668
Merit: 3347
|
 |
December 19, 2025, 08:27:43 AM |
|
Ieri btc/gold e' sceso sotto i 20, a 19,85 
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 19, 2025, 08:50:55 AM |
|
Ieri btc/gold e' sceso sotto i 20, a 19,85
Il valore attuale è - 41% rispetto alla linea di tendenza prevista dalla logistica ottimale, e oltre il 66% in meno rispetto alle linee previste dagli scenari gbianchi / plutosky / fillippone. Quanto deve essere il discostamento massimo per iniziare a ritenere invalido il modello? O è una combinazione di discostamento e tempo di permanenza di tale discostamento?
|
|
|
|
|
gbianchi (OP)
Legendary
Offline
Activity: 3668
Merit: 3347
|
 |
December 19, 2025, 09:27:26 AM |
|
Ieri btc/gold e' sceso sotto i 20, a 19,85
Il valore attuale è - 41% rispetto alla linea di tendenza prevista dalla logistica ottimale, e oltre il 66% in meno rispetto alle linee previste dagli scenari gbianchi / plutosky / fillippone. Quanto deve essere il discostamento massimo per iniziare a ritenere invalido il modello? O è una combinazione di discostamento e tempo di permanenza di tale discostamento? Secondo plutosky e' in parte dovuto ad un temporaneo sovraprezzamento dell'oro, ma io non mi sarei mai aspettato che il valore di discostasse cosi' tanto rispetto alla logistica ottimale. Temo che siccome BTC sta sottoperformando rispetto a qualsiasi modello in qualsiasi metrica: power law e logistica sia USD che in oro ci sia in ballo qualcosa di piu' profondo. Tra l'altro una considerazione che facevi tu (o l'IA non ricordo) che il fattore c della logistica asimmetrica la fa crescere inizialmente piu' velocemente rispetto a una logistica simmetrica, e poi la fa rallentare piu' lentamente, mi fa pensare che il rallentamento piu' marcato del previsto che stiamo per ora osservando, rallentamento che doveva gia' essere incorporato dall'asimmetria della logistica, e' un ulteriore elemento che fa pensare a qualcosa di piu' profondo.
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 19, 2025, 10:18:13 AM |
|
Ieri btc/gold e' sceso sotto i 20, a 19,85
Il valore attuale è - 41% rispetto alla linea di tendenza prevista dalla logistica ottimale, e oltre il 66% in meno rispetto alle linee previste dagli scenari gbianchi / plutosky / fillippone. Quanto deve essere il discostamento massimo per iniziare a ritenere invalido il modello? O è una combinazione di discostamento e tempo di permanenza di tale discostamento? Secondo plutosky e' in parte dovuto ad un temporaneo sovraprezzamento dell'oro, ma io non mi sarei mai aspettato che il valore di discostasse cosi' tanto rispetto alla logistica ottimale. Temo che siccome BTC sta sottoperformando rispetto a qualsiasi modello in qualsiasi metrica: power law e logistica sia USD che in oro ci sia in ballo qualcosa di piu' profondo. Tra l'altro una considerazione che facevi tu (o l'IA non ricordo) che il fattore c della logistica asimmetrica la fa crescere inizialmente piu' velocemente rispetto a una logistica simmetrica, e poi la fa rallentare piu' lentamente, mi fa pensare che il rallentamento piu' marcato del previsto che stiamo per ora osservando, rallentamento che doveva gia' essere incorporato dall'asimmetria della logistica, e' un ulteriore elemento che fa pensare a qualcosa di piu' profondo. Se 'c' è -5 o -10 o -20 non cambia nulla, le previsioni del modello non cambiano di una virgola. E' solo se c = -1 o -2 che il discorso cambia. Sia la logistica ottimale che quelle degli scenari gbianchi/plutosky/fillippone (ma non quella dello scenario arulbero) collassano in un unico modello (dal punto di vista del valore c): la curva di Gompertz (massima asimmetria possibile). Anche solo questo fatto è interessante, fissato qualsiasi target finale sufficientemente alto i valori ottimali per quel target conducono sempre una asimmetria massima (curva di Gompertz) (massima possibile tra le curve del tipo su cui stiamo lavorando in questo thread). La mia sensazione è che la curva che cattura veramente la tendenza non sia esattamente del tipo che ha scelto tu in questo thread, poichè potendo scegliere tra simmetria zero e asimmetria massima otteniamo sempre la massima asimmetria (almeno per target sufficientemente alti). Da notare che l'asimmetria è massima all'interno della famiglia di curve con le quali stiamo lavorando, sospetto proprio che il modello di base non sia adeguato. Secondo me ci serve ancora più asimmetria. Nell'articolo che citavo qualche post fa, si utilizza un modello combinato tra: 1) curva di Gompertz (massima asimmetria possibile, ma curva ancora logistica, ovvero forma a S) 2) curva della carica di un condensatore (massima velocità iniziale, funzione concava, non forma a S) In questo modo si ottiene ancora una curva a S ma con ancora più asimmetria (che penso sia il caso di bitcoin).    Peccato che non esista la soluzione analitica dell'equazione differenziale, bisogna lavorare di analisi numerica.
|
|
|
|
|
gbianchi (OP)
Legendary
Offline
Activity: 3668
Merit: 3347
|
 |
December 19, 2025, 12:13:12 PM Last edit: December 19, 2025, 01:01:19 PM by gbianchi |
|
Peccato che non esista la soluzione analitica dell'equazione differenziale, bisogna lavorare di analisi numerica.
Si avevo visto. Ma come ti ho scritto da qualche parte, in questo momento non avrei proprio voglia di mettermi a fare in modo un po' serio un'analisi del genere. Secondo me c'e' un nodo enorme che deve sciogliersi: 1) se e' vero che c'e' un gran numero di entita' di livello istituzionale (banche, fondi, stati, multinazionali ecc...) che hanno comprato, comprano e compreranno Bitcoin, allora qui stiamo giocherellando, e tutte le nostre curve le possiamo buttare, o almeno rimangono plausibili (o addirittura sottostimati) gli scenari plutosky e magari fillippone. 2) se non e' vero, il tutto va ridimensionato. A guardare i numeri io propenderei per la seconda ipotesi, e anche gente tipo MSTR mi sembra che abbia ridimensionato i loro target almeno di breve periodo, pero' questo bivio e' cosi' sostanziale che impiegare del tempo a fare analisi "raffinate" in questo momento mi sembra veramente tempo buttato. Considera anche che qualsiasi cosa succeda, ossia ipotesi 1) o ipotesi 2) a me non cambia nulla, io continuo ad usare i miei Bitcoin quando mi servono e basta, quindi non e' che debba prendere chissa' quale decisione 
|
|
|
|
Plutosky
Legendary
Offline
Activity: 2842
Merit: 4997
|
 |
December 20, 2025, 09:20:42 AM |
|
Per la serie "mai una gioia"  la rotazione che aspettavamo oro-bitcoin non c'è stata...in compenso c'è stata sull'argento: appena il sasso giallo si è preso una pausa quello grigio è andato verticale Al prossimo giro tocca a noi oppure bisogna aspettare anche il turno del tungsteno e dello stronzio prima di festeggiare?  Scherzi a parte, IBIT nel 2025 ha avuto $5 miliardi di afflussi in più di GLD, il principale ETF sull'oro, nonostante un -9% dell'uno contro +64% dell'altro.  Non che ci fosse bisogno ribadirlo, viste le evidenze riscontrate da tutte le parti, ma il ns problema al momento è dal lato dell'offerta: dice i vecchi holder disinvestono perchè credono nei cicli dei 4 anni e perchè vedono i rendimenti calare. Si, ma andrebbe invertita la causa con l'effetto. Il mercato cala perchè loro credono questo, perchè per il resto la domanda ci sarebbe e sarebbe anche abbastanza robusta. Nonostante un calo del -30/35% dai massimi del prezzo e nonostante un anno che sta per chiudere negativamente, gli ETF sono solo al -5% dal loro stock massimo posseduto. Si dimostrano anche buoni holder altrimenti chissà ora dove saremmo.
|
"Diversification is protection against ignorance. It makes little sense if you know what you are doing" WB
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 20, 2025, 11:47:54 AM |
|
Peccato che non esista la soluzione analitica dell'equazione differenziale, bisogna lavorare di analisi numerica.
Si avevo visto. Ma come ti ho scritto da qualche parte, in questo momento non avrei proprio voglia di mettermi a fare in modo un po' serio un'analisi del genere. Certo, capisco. Ti chiedo solo se potessi condividere il file dello storico dei prezzi btc - oro che hai usato tu, magari in questo periodo natalizio mi metto a fare qualche conto e mi piacerebbe avere la stessa base di dati.
|
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 21, 2025, 09:53:09 PM |
|
Ho provato a rifare i calcoli di gbianchi per la stima dei parametri della logistica ottimale, utilizzando direttamente la curva di Gompertz (massima asimmetria possibile). I risultati variano sensibilmente a seconda della finestra temporale a partire dalla quale si cerca di estrarre i parametri ottimali. Questi sono i 5 periodi che ho testato: 31/12/2012 - 31/12/2024
30/06/2013 - 31/12/2024
31/12/2013 - 31/12/2024
30/06/2014 - 31/12/2024
31/12/2014 - 31/12/2024Mi sono fermato alla fine del 2024 per non includere i dati di questo ultimo anno, dove l'oro è cresciuto veramente molto; inoltre ho scartato i primissimi anni (2010, 2011, 2012) dove le quotazioni erano estremamente basse e poco significative. Ho ricavato i prezzi btc - oro per via indiretta (dai prezzi btc-dollari e oro-dollari), e poichè le quotazioni oro-dollari non sono presenti il sabato e la domenica, ho riempito i valori mancanti con quelli del venerdì. Per ogni fascia temporale, ho lanciato 20k volte l'algoritmo di ottimizzazione (con parametri inziali random, quindi diversi). Il chi-quadro dei miei scenari non è direttamente confrontabile con quello di gbianchi, in quanto dipende anche dal numero di giorni sul quale è stato addestrato il modello. Comunque ho usato i logaritmi per costruire la funzione errore da minimizzare, non il chi quadro. Questi i risultati: 31/12/2012 - 31/12/2024: LU: 152.8541 Ix: 7108.0401 S: 0.020891 Chi Quadro: 13899.34Inizio scansione 20000 cicli... ITER | LOG ERR | CHI QUADRO | LU | Ix | S -----------------------------------------------------------------
2 | 1943.3132 | 17797 | 6356.5 | 14267 | 0.44476 3 | 1802.5041 | 14834 | 351.0 | 8564 | 0.03959 4 | 1799.8456 | 14756 | 328.2 | 8443 | 0.03754 7 | 1782.3239 | 13918 | 151.8 | 7097 | 0.02078 10 | 1782.3093 | 13910 | 153.0 | 7110 | 0.02091 67 | 1782.3064 | 13903 | 153.4 | 7114 | 0.02095 391 | 1782.3061 | 13903 | 153.1 | 7111 | 0.02092 618 | 1782.3060 | 13902 | 152.9 | 7109 | 0.02090 770 | 1782.3059 | 13897 | 152.5 | 7104 | 0.02085 1102 | 1782.3058 | 13900 | 152.7 | 7107 | 0.02088 7883 | 1782.3057 | 13899 | 152.9 | 7108 | 0.02089
30/06/2013 - 31/12/2024: LU: 295.8457 Ix: 8394.5409 S: 0.033570 Chi Quadro: 14661.17Inizio scansione 20000 cicli... ITER | LOG ERR | CHI QUADRO | LU | Ix | S ----------------------------------------------------------------- 1 | 1628.3957 | 15448 | 665.7 | 9958 | 0.06384 9 | 1619.6894 | 14694 | 305.7 | 8456 | 0.03443 15 | 1619.6781 | 14655 | 291.0 | 8364 | 0.03314 66 | 1619.6777 | 14684 | 301.8 | 8432 | 0.03409 96 | 1619.6731 | 14674 | 299.5 | 8418 | 0.03389 118 | 1619.6706 | 14664 | 296.2 | 8397 | 0.03360 11605 | 1619.6706 | 14661 | 295.8 | 8395 | 0.03357
31/12/2013 - 31/12/2024:LU: 231.7542 Ix: 7889.1486 S: 0.028214 Chi Quadro: 14354.95Inizio scansione 20000 cicli... ITER | LOG ERR | CHI QUADRO | LU | Ix | S ----------------------------------------------------------------- 1 | 1574.2393 | 17322 | 9394.9 | 15562 | 0.59993 2 | 1497.8821 | 14164 | 192.5 | 7551 | 0.02456 10 | 1497.1446 | 14366 | 227.1 | 7855 | 0.02778 85 | 1497.1299 | 14353 | 231.3 | 7886 | 0.02818 785 | 1497.1298 | 14355 | 231.8 | 7889 | 0.02821
30/06/2014 - 31/12/2024:LU: 70.7094 Ix: 5660.0101 S: 0.013264 Chi Quadro: 12594.43 Inizio scansione 20000 cicli... ITER | LOG ERR | CHI QUADRO | LU | Ix | S ----------------------------------------------------------------- 1 | 2305332.0205 | 0 | 790.5 | 19297 | 0.30853 2 | 3715.8138 | 49364 | 1518.4 | 19259 | 0.06525 3 | 3692.5425 | 48578 | 1857.2 | 19970 | 0.07764 4 | 1420.1875 | 18208 | 9782.5 | 15094 | 0.65345 5 | 1367.3447 | 17285 | 2773.2 | 12449 | 0.22054 9 | 1163.8878 | 12595 | 70.9 | 5664 | 0.01329 41 | 1163.8875 | 12598 | 70.8 | 5662 | 0.01328 157 | 1163.8873 | 12593 | 70.7 | 5659 | 0.01326 201 | 1163.8873 | 12596 | 70.7 | 5660 | 0.01326 300 | 1163.8873 | 12593 | 70.7 | 5660 | 0.01327 328 | 1163.8873 | 12595 | 70.7 | 5660 | 0.01327 1260 | 1163.8873 | 12595 | 70.7 | 5660 | 0.01326 1951 | 1163.8873 | 12594 | 70.7 | 5660 | 0.01327 2310 | 1163.8873 | 12595 | 70.7 | 5660 | 0.01326 4709 | 1163.8873 | 12595 | 70.7 | 5660 | 0.01326 10041 | 1163.8873 | 12594 | 70.7 | 5660 | 0.01326
31/12/2014 - 31/12/2024: LU: 52.8887 Ix: 5089.6689 S: 0.012159 Chi Quadro: 11695.48Inizio scansione 20000 cicli... ITER | LOG ERR | CHI QUADRO | LU | Ix | S ----------------------------------------------------------------- 1 | 1227.3940 | 16807 | 915.6 | 9980 | 0.09150 37 | 1122.5033 | 15361 | 310.1 | 7967 | 0.03943 95 | 1092.4954 | 15117 | 218.4 | 7457 | 0.02973 281 | 1054.2591 | 14128 | 180.2 | 6960 | 0.02694 628 | 1035.7143 | 14094 | 153.0 | 6749 | 0.02366 723 | 949.3855 | 12098 | 81.3 | 5664 | 0.01595 873 | 927.5372 | 12883 | 62.1 | 5417 | 0.01282 1388 | 899.3022 | 11738 | 53.8 | 5111 | 0.01233 9129 | 899.0340 | 11526 | 53.9 | 5093 | 0.01242 13216 | 898.3615 | 11636 | 52.5 | 5089 | 0.01199 15676 | 897.3068 | 11695 | 52.9 | 5090 | 0.01216
Grafici lineare e logaritmico del caso: 31/12/2012 - 31/12/2024: LU: 152.8541 Ix: 7108.0401 S: 0.020891 Chi Quadro: 13899.34 
|
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 22, 2025, 01:59:47 PM Last edit: December 22, 2025, 10:15:31 PM by arulbero Merited by gbianchi (5), babo (2) |
|
Per chi fosse interessato, allego 2 script python script1: produce file xlsx con i dati (li scarica da internet) + costruisce le previsioni del modello + fornisce output sul terminale con i migliori parametri uso: python3 script1 script2: produce 2 file png con i grafici (prende in input il file output del precedente script) uso: python3 script2 file.xlsx perchè tutto funzioni dovrete scaricare alcuni pacchetti con "pip install pacchetto" script1 import yfinance as yf import pandas as pd import io import requests import numpy as np from scipy.optimize import minimize from datetime import timedelta import random
# ========================================== # CONFIGURAZIONE # ========================================== NUM_CICLI = 20000 DATA_INIZIO = "2013-06-30" DATA_LIMITE = "2025-06-30"
# Bounds (Vincoli sui valori possibili di LU - Ix - S) BOUNDS = ((40, 10000), (5000, 30000), (0.005, 1.5))
print(f"--- MONTE CARLO PRO (Dettagli Completi) ---")
# 1. DATI try: url = "https://raw.githubusercontent.com/Habrador/Bitcoin-price-visualization/main/Bitcoin-price-USD.csv" s = requests.get(url).content df_early = pd.read_csv(io.StringIO(s.decode('utf-8'))) df_early['Date'] = pd.to_datetime(df_early['Date']) df_early = df_early.set_index('Date') df_early = df_early.rename(columns={'Value': 'Bitcoin_USD', 'Price': 'Bitcoin_USD'}) df_early = df_early[['Bitcoin_USD']] except: df_early = pd.DataFrame()
tickers = yf.download(["BTC-USD", "GC=F"], period="max", auto_adjust=True) try: df_recent = tickers['Close'] except KeyError: df_recent = tickers df_recent = df_recent.rename(columns={'BTC-USD': 'Bitcoin_USD', 'GC=F': 'Gold_USD'})
btc_series = df_recent['Bitcoin_USD'].combine_first(df_early['Bitcoin_USD']) df_final = pd.DataFrame(index=btc_series.index) df_final['Bitcoin_USD'] = btc_series df_final['Gold_USD'] = df_recent['Gold_USD'] df_final['Gold_USD'] = df_final['Gold_USD'].ffill()
df_final['BTC_in_Gold_Real'] = df_final['Bitcoin_USD'] / df_final['Gold_USD'] genesis_date = pd.Timestamp("2009-01-03") df_final['x_days'] = (df_final.index - genesis_date).days df_final = df_final.dropna(subset=['BTC_in_Gold_Real', 'x_days']) df_final = df_final.sort_index()
df_train = df_final[(df_final.index >= pd.to_datetime(DATA_INIZIO)) & (df_final.index <= pd.to_datetime(DATA_LIMITE))].copy() df_train = df_train[df_train['x_days'] > 0] x_train = df_train['x_days'].values y_train = df_train['BTC_in_Gold_Real'].values
# Funzione Ausiliaria: Calcola Chi Quadro al volo def get_chi_squared(params): LU, Ix, S = params gamma = S * np.e / LU arg = np.clip(gamma * (Ix - x_train), -700, 700) expected = LU * np.exp(-np.exp(arg)) # Chi2 Standard mask = expected > 1e-9 return np.sum((y_train[mask] - expected[mask])**2 / expected[mask])
# 2. OTTIMIZZAZIONE def objective_function(params): LU_try, Ix_try, S_try = params if LU_try < 50: return 1e20 if S_try <= 0 or Ix_try <= 0: return 1e20 gamma = S_try * np.e / LU_try arg = np.clip(gamma * (Ix_try - x_train), -700, 700) expected = LU_try * np.exp(-np.exp(arg)) epsilon = 1e-10 expected_safe = np.maximum(expected, epsilon) y_train_safe = np.maximum(y_train, epsilon) return np.sum((np.log(y_train_safe) - np.log(expected_safe))**2)
best_error = float('inf') best_params = None
print(f"\nInizio scansione {NUM_CICLI} cicli...") print(f"{'ITER':<6} | {'LOG ERR':<9} | {'CHI QUADRO':<12} | {'LU':<8} | {'Ix':<8} | {'S':<8}") print("-" * 65)
for i in range(1, NUM_CICLI + 1): g_LU = random.uniform(55, 3000) g_Ix = random.uniform(4000, 20000) g_S = random.uniform(0.001, 0.4) res = minimize(objective_function, [g_LU, g_Ix, g_S], method='L-BFGS-B', bounds=BOUNDS, tol=1e-5) #res = minimize(objective_function, [g_LU, g_Ix, g_S], method='SLSQP', bounds=BOUNDS, tol=1e-5) if res.success and res.fun < best_error: if res.fun > 1e-5: best_error = res.fun best_params = res.x # Calcoliamo il Chi Quadro per questo set vincente current_chi2 = get_chi_squared(best_params) print(f"{i:<6} | {best_error:.4f} | {current_chi2:<12.0f} | {best_params[0]:<8.1f} | {best_params[1]:<8.0f} | {best_params[2]:.5f}")
# 3. EXPORT FINALE if best_params is not None: final_chi2 = get_chi_squared(best_params) print("\n" + "="*40) print("VINCITORE ASSOLUTO") print("="*40) print(f"LU: {best_params[0]:.4f}") print(f"Ix: {best_params[1]:.4f}") print(f"S: {best_params[2]:.6f}") print(f"Chi Quadro: {final_chi2:.2f}") print("="*40)
last_date = df_final.index.max() future_dates = [last_date + timedelta(days=i) for i in range(1, 365 * 10)] df_future = pd.DataFrame(index=future_dates) df_future['x_days'] = (df_future.index - genesis_date).days df_total = pd.concat([df_final, df_future])
gamma_final = best_params[2] * np.e / best_params[0] arg_total = np.clip(gamma_final * (best_params[1] - df_total['x_days']), -700, 700) df_total['Model_Optimized'] = best_params[0] * np.exp(-np.exp(arg_total)) df_total['Delta_Percentage'] = ((df_total['BTC_in_Gold_Real'] - df_total['Model_Optimized']) / df_total['Model_Optimized']) * 100
nome_file = f"montecarlo_full_LU{int(best_params[0])}_Chi{int(final_chi2)}.xlsx" df_total[['Bitcoin_USD', 'Gold_USD', 'BTC_in_Gold_Real', 'Model_Optimized', 'Delta_Percentage']].to_excel(nome_file) print(f"File salvato: {nome_file}")
script2 import pandas as pd import matplotlib.pyplot as plt import sys import os
# ========================================== # GESTIONE ARGOMENTI DA RIGA DI COMANDO # ========================================== if len(sys.argv) < 2: print("❌ ERRORE: Manca il nome del file.") print("USO CORRETTO: python3 grafico.py nome_file.xlsx") print("Esempio: python3 grafico.py montecarlo_fixed_LU100.xlsx") sys.exit()
nome_file = sys.argv[1] # Prende il primo argomento dopo 'grafico.py'
print(f"--- GENERAZIONE GRAFICI PER: {nome_file} ---")
# 1. CONTROLLO ESISTENZA FILE if not os.path.exists(nome_file): print(f"❌ ERRORE: Il file '{nome_file}' non esiste nella cartella corrente.") sys.exit()
# 2. CARICAMENTO DATI try: if nome_file.endswith('.csv'): df = pd.read_csv(nome_file) else: df = pd.read_excel(nome_file)
# --- FIX COLONNA DATA --- # Se non c'è la colonna 'Date', usa la prima colonna disponibile if 'Date' in df.columns: col_date = 'Date' else: col_date = df.columns[0] print(f"⚠ Avviso: Colonna 'Date' non trovata. Uso la prima colonna: '{col_date}'") # Rinomina e imposta indice df.rename(columns={col_date: 'Date'}, inplace=True) df['Date'] = pd.to_datetime(df['Date']) df.set_index('Date', inplace=True)
# Verifica colonne necessarie if 'BTC_in_Gold_Real' not in df.columns or 'Model_Optimized' not in df.columns: print("❌ ERRORE DATI: Il file non contiene le colonne del modello.") print(f"Colonne trovate: {df.columns.tolist()}") sys.exit()
print(f"✅ Dati caricati: {len(df)} righe.")
# 3. GENERAZIONE GRAFICI plt.style.use('ggplot')
# --- GRAFICO 1: LINEARE --- plt.figure(figsize=(12, 7)) plt.plot(df.index, df['BTC_in_Gold_Real'], label='Prezzo Reale', color='black', alpha=0.6, linewidth=1) plt.plot(df.index, df['Model_Optimized'], label='Modello', color='blue', linewidth=2.5, linestyle='--') plt.title(f'Bitcoin/Oro (Linear) - {nome_file}', fontsize=12) plt.xlabel('Anno') plt.ylabel('Prezzo (Once)') plt.legend() plt.grid(True, alpha=0.3) nome_out_lin = f"grafico_lineare_{nome_file}.png" plt.savefig(nome_out_lin, dpi=150) print(f"✅ Salvato: {nome_out_lin}")
# --- GRAFICO 2: LOGARITMICO --- plt.figure(figsize=(12, 7)) plt.plot(df.index, df['BTC_in_Gold_Real'], label='Prezzo Reale', color='black', alpha=0.6, linewidth=1) plt.plot(df.index, df['Model_Optimized'], label='Modello', color='blue', linewidth=2.5, linestyle='--') plt.yscale('log') plt.title(f'Bitcoin/Oro (Log Scale) - {nome_file}', fontsize=12) plt.xlabel('Anno') plt.ylabel('Prezzo (Log)') plt.legend() plt.grid(True, alpha=0.3, which='both')
nome_out_log = f"grafico_log_{nome_file}.png" plt.savefig(nome_out_log, dpi=150) print(f"✅ Salvato: {nome_out_log}")
except Exception as e: print(f"❌ ERRORE IMPREVISTO: {e}")
EDIT: non scaricate gli script, sto cambiando la funzione di errore con una migliore (i logaritmi mi davano problemi) e i risultati cambiano molto. EDIT2: ho chiesto a gbianchi i suoi dati di partenza e ho fatto diverse prove, risultato: se prendiamo come dati di partenza i suoi dati, ovvero i prezzi di btc in oro dal 03 gennaio 2009 al 15 aprile 2025, un dato giornaliero sì e 9 no, io ottengo un LU ottimale di 145 once circa (abbastanza compatibile con il suo target di 139). Ma se prendiamo come dati di partenza tutti i dati giornalieri dal 03 gennaio 2009 al 15 aprile 2025 io ottengo un risultato di LU = 117 circa; anche se utilizzo i miei dati giornalieri, quelli costruiti con il mio script, ottengo LU = 115 circa, ovvero lo stesso risultato. Quindi la sintesi è che sembra che decimare i dati modifichi abbastanza il target finale (26%). Dal mio punto di vista il risultato più probabile (a meno di errori nel mio script) è target 115, non target 139/145. Qui una pagina html per confrontare i diversi scenari: <!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Modello Bitcoin/Oro (Versione Fix Virgola)</title> <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns@3.0.0/dist/chartjs-adapter-date-fns.bundle.min.js"></script> <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <style> :root { --primary: #2c3e50; --gold: #d4af37; --bg: #fdfdfd; --optimal: #27ae60; --danger: #e74c3c; } body { font-family: 'Segoe UI', sans-serif; background: var(--bg); margin: 0; padding: 20px; color: #333; } .container { max-width: 1100px; margin: 0 auto; background: white; padding: 30px; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.06); } h1 { text-align: center; color: var(--primary); margin-bottom: 5px; } .subtitle { text-align: center; color: #7f8c8d; font-size: 0.9em; margin-bottom: 25px; }
/* HEADER */ .presets { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; margin-bottom: 25px; padding-bottom: 20px; border-bottom: 1px solid #eee; } .btn-preset { background: #f1f3f5; border: none; padding: 8px 16px; border-radius: 20px; cursor: pointer; font-weight: 600; color: #555; transition: 0.2s; font-size: 0.9em;} .btn-preset:hover { transform: translateY(-2px); background: var(--gold); color: white; } .btn-preset.active { background: var(--primary); color: white; } /* INPUT */ .params-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); gap: 10px; margin-bottom: 20px; background: #fafafa; padding: 15px; border-radius: 8px; border: 1px solid #eee; } .param-group { display: flex; flex-direction: column; } .param-group label { font-size: 0.75em; color: #7f8c8d; font-weight: bold; margin-bottom: 5px; } /* Usiamo type=text per gestire manualmente virgole e punti */ .param-group input { padding: 6px; border: 1px solid #ddd; border-radius: 4px; font-family: monospace; font-weight: bold; color: var(--primary); font-size: 0.9em; }
/* LIVE PANEL */ .live-panel { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px; background: #e8f5e9; border: 1px solid #c8e6c9; padding: 20px; border-radius: 8px; margin-bottom: 20px; align-items: center; } .live-box { text-align: center; position: relative; } .live-label { font-size: 0.8em; text-transform: uppercase; color: #555; letter-spacing: 1px; margin-bottom: 5px; } .live-val { font-size: 1.8em; font-weight: 800; color: var(--primary); } .live-date { font-size: 0.8em; color: #666; font-style: italic; }
.real-input { width: 120px; padding: 5px; font-size: 1.2em; text-align: center; border: 2px solid #ccc; border-radius: 6px; font-weight: bold; background: #fff; } /* FORMULA BOX */ .formula-box { text-align: center; margin-top: 40px; padding: 20px; background: #f8f9fa; border-radius: 8px; border-top: 5px solid var(--primary); color: #444; } .formula-title { font-weight: bold; color: var(--primary); margin-bottom: 10px; display:block; font-size: 0.9em; letter-spacing: 1px; text-transform: uppercase;} #chart-container { position: relative; height: 500px; width: 100%; border: 1px solid #eee; border-radius: 8px; padding: 10px; } </style> </head> <body>
<div class="container"> <h1>Modello Bitcoin/Oro</h1> <div class="subtitle">Rapporto BTC/XAU (Once per Bitcoin)</div>
<div class="presets"> <button id="btn-arulbero" class="btn-preset" onclick="setScenario('arulbero', event)">Arulbero</button> <button id="btn-gbianchi" class="btn-preset" onclick="setScenario('gbianchi', event)">Gbianchi</button> <button id="btn-plutosky" class="btn-preset" onclick="setScenario('plutosky', event)">Plutosky</button> <button id="btn-fillippone" class="btn-preset" onclick="setScenario('fillippone', event)">Fillippone</button> </div>
<div class="params-grid"> <div class="param-group"><label>LL (Min)</label><input type="text" id="LL" oninput="updateAll()"></div> <div class="param-group"><label>LU (Max Once)</label><input type="text" id="LU" oninput="updateAll()"></div> <div class="param-group"><label>Ix (Flesso)</label><input type="text" id="Ix" oninput="updateAll()"></div> <div class="param-group"><label>S (Slope)</label><input type="text" id="S" oninput="updateAll()"></div> <div class="param-group"><label>c (Shape)</label><input type="text" id="c" oninput="updateAll()"></div> </div>
<div class="live-panel"> <div class="live-box"> <div class="live-label">Stima Modello (Oz)</div> <div class="live-val" id="modelPriceDisplay">---</div> <div class="live-date" id="currentDateDisplay">Oggi</div> </div>
<div class="live-box" style="border-left: 1px solid #ccc; border-right: 1px solid #ccc;"> <div class="live-label">Reale (BTC/XAU)</div> <div id="priceLoading" style="display:none;"><div class="loading-ring"></div></div> <input type="text" id="realPriceInput" class="real-input" value="0" oninput="updateAll()"> <div class="live-date" id="sourceLabel">In attesa dati...</div> <button onclick="fetchLiveData()" style="margin-top:5px; font-size:0.7em; cursor:pointer;">Aggiorna Dati</button> </div>
<div class="live-box"> <div class="live-label">Scostamento</div> <div class="variance-val" id="varianceDisplay">---</div> <div class="live-date">Modello vs Reale</div> </div> </div>
<div id="chart-container"> <canvas id="myChart"></canvas> </div> <div class="formula-box"> <span class="formula-title">Formula del Modello</span> $$ f(x) = LU \cdot \exp\left(\exp\left(-\gamma \cdot (Ix - x) \right) \right) $$ dove $$\gamma = \frac{S\cdot e}{LU}$$ </div> </div>
<script> // --- DATI STORICI --- const datiStorici = ` 2010-07-18 7.57576E-05 2010-07-28 5.17063E-05 2010-08-07 4.98587E-05 2010-08-17 5.70683E-05 2010-08-27 4.85437E-05 2010-09-06 4.80307E-05 2010-09-16 4.71735E-05 2010-09-26 4.62963E-05 2010-10-06 4.45633E-05 2010-10-16 7.29341E-05 2010-10-26 0.000112108 2010-11-05 0.000186073 2010-11-15 0.000197311 2010-11-25 0.000203948 2010-12-05 0.000135193 2010-12-15 0.000173223 2010-12-25 0.000181159 2011-01-04 0.000217628 2011-01-14 0.000294031 2011-01-24 0.000312384 2011-02-03 0.000510242 2011-02-13 0.000772116 2011-02-23 0.000636762 2011-03-05 0.000637166 2011-03-15 0.000624731 2011-03-25 0.000617068 2011-04-04 0.000474794 2011-04-14 0.000679486 2011-04-24 0.001084353 2011-05-04 0.002250974 2011-05-14 0.004821213 2011-05-24 0.004871324 2011-06-03 0.009268989 2011-06-13 0.01309571 2011-06-23 0.011518979 2011-07-03 0.010416245 2011-07-13 0.008800152 2011-07-23 0.008543059 2011-08-02 0.007339058 2011-08-12 0.005436157 2011-08-22 0.005765871 2011-09-01 0.004496166 2011-09-11 0.003156647 2011-09-21 0.003107173 2011-10-01 0.003104172 2011-10-11 0.002367898 2011-10-21 0.001571769 2011-10-31 0.001884932 2011-11-10 0.001614645 2011-11-20 0.001275584 2011-11-30 0.001701518 2011-12-10 0.00178071 2011-12-20 0.002444912 2011-12-30 0.002714267 2012-01-09 0.003937792 2012-01-19 0.003844991 2012-01-29 0.003106594 2012-02-08 0.003238304 2012-02-18 0.002447086 2012-02-28 0.002725238 2012-03-09 0.00284061 2012-03-19 0.002813606 2012-03-29 0.00291127 2012-04-08 0.002941357 2012-04-18 0.003124237 2012-04-28 0.002992788 2012-05-08 0.003148379 2012-05-18 0.003216889 2012-05-28 0.003276389 2012-06-07 0.003523257 2012-06-17 0.003786109 2012-06-27 0.004215531 2012-07-07 0.004282818 2012-07-17 0.005537726 2012-07-27 0.005500958 2012-08-06 0.006733213 2012-08-16 0.008353444 2012-08-26 0.006354054 2012-09-05 0.006505796 2012-09-15 0.006639168 2012-09-25 0.006916884 2012-10-05 0.007134825 2012-10-15 0.006820276 2012-10-25 0.006343458 2012-11-04 0.006451228 2012-11-14 0.00633131 2012-11-24 0.007086164 2012-12-04 0.007914306 2012-12-14 0.008019813 2012-12-24 0.008067045 2013-01-03 0.008006214 2013-01-13 0.008506024 2013-01-23 0.01037775 2013-02-02 0.011758716 2013-02-12 0.015266574 2013-02-22 0.019238107 2013-03-04 0.022994721 2013-03-14 0.029655476 2013-03-24 0.044515006 2013-04-03 0.086939719 2013-04-13 0.061958694 2013-04-23 0.101852905 2013-05-03 0.066994466 2013-05-13 0.082244685 2013-05-23 0.090732759 2013-06-02 0.087964959 2013-06-12 0.078157779 2013-06-22 0.083772067 2013-07-02 0.070488905 2013-07-12 0.069228359 2013-07-22 0.064419334 2013-08-01 0.073546911 2013-08-11 0.071719094 2013-08-21 0.081307458 2013-08-31 0.092729749 2013-09-10 0.089040395 2013-09-20 0.092232645 2013-09-30 0.092800603 2013-10-10 0.09694586 2013-10-20 0.124056601 2013-10-30 0.144217939 2013-11-09 0.261689373 2013-11-19 0.425498657 2013-11-29 0.89588999 2013-12-09 0.726965081 2013-12-19 0.584476987 2013-12-29 0.612671668 2014-01-08 0.701828096 2014-01-18 0.674091262 2014-01-28 0.666618705 2014-02-07 0.55693024 2014-02-17 0.471182714 2014-02-27 0.433088022 2014-03-09 0.473193342 2014-03-19 0.453869084 2014-03-29 0.381187186 2014-04-08 0.344204185 2014-04-18 0.369746398 2014-04-28 0.336484712 2014-05-08 0.338154413 2014-05-18 0.343934109 2014-05-28 0.456166106 2014-06-07 0.521292239 2014-06-17 0.477581209 2014-06-27 0.455542077 2014-07-07 0.469418914 2014-07-17 0.472863996 2014-07-27 0.453495519 2014-08-06 0.446192716 2014-08-16 0.398489843 2014-08-26 0.399961038 2014-09-05 0.379601818 2014-09-15 0.382101175 2014-09-25 0.337024256 2014-10-05 0.26883914 2014-10-15 0.317316147 2014-10-25 0.282058975 2014-11-04 0.283100906 2014-11-14 0.335711387 2014-11-24 0.315266417 2014-12-04 0.306090272 2014-12-14 0.287751218 2014-12-24 0.274847888 2015-01-03 0.237000001 2015-01-13 0.182987105 2015-01-23 0.180163239 2015-02-02 0.186670595 2015-02-12 0.181758882 2015-02-22 0.195929094 2015-03-04 0.227462949 2015-03-14 0.244564477 2015-03-24 0.206087951 2015-04-03 0.211776169 2015-04-13 0.187265068 2015-04-23 0.197975553 2015-05-03 0.204647085 2015-05-13 0.194006069 2015-05-23 0.198349236 2015-06-02 0.189098902 2015-06-12 0.195098393 2015-06-22 0.208659302 2015-07-02 0.219614792 2015-07-12 0.268521221 2015-07-22 0.254005844 2015-08-01 0.257193357 2015-08-11 0.244118808 2015-08-21 0.20055968 2015-08-31 0.203301524 2015-09-10 0.214940969 2015-09-20 0.203156147 2015-09-30 0.211618106 2015-10-10 0.211831691 2015-10-20 0.228746191 2015-10-30 0.287354371 2015-11-09 0.349533027 2015-11-19 0.302550081 2015-11-29 0.35153761 2015-12-09 0.387493502 2015-12-19 0.433616594 2015-12-29 0.401840373 2016-01-08 0.41285297 2016-01-18 0.354711864 2016-01-28 0.340882942 2016-02-07 0.325289324 2016-02-17 0.343755263 2016-02-27 0.354581895 2016-03-08 0.32800253 2016-03-18 0.326645389 2016-03-28 0.347758816 2016-04-07 0.341971373 2016-04-17 0.3466053 2016-04-27 0.355977449 2016-05-07 0.354656974 2016-05-17 0.355573583 2016-05-27 0.390067532 2016-06-06 0.470461995 2016-06-16 0.591241415 2016-06-26 0.476793185 2016-07-06 0.496249529 2016-07-16 0.498128179 2016-07-26 0.493514061 2016-08-05 0.430292591 2016-08-15 0.42321866 2016-08-25 0.437664569 2016-09-04 0.46035397 2016-09-14 0.46211428 2016-09-24 0.450661847 2016-10-04 0.481879457 2016-10-14 0.511035036 2016-10-24 0.518035647 2016-11-03 0.528914849 2016-11-13 0.554745955 2016-11-23 0.626182835 2016-12-03 0.656246315 2016-12-13 0.674812884 2016-12-23 0.814545445 2017-01-02 0.888478261 2017-01-12 0.671310341 2017-01-22 0.767809463 2017-02-01 0.820357523 2017-02-11 0.813715159 2017-02-21 0.901252565 2017-03-03 1.040383509 2017-03-13 1.024550914 2017-03-23 0.832937642 2017-04-02 0.883644673 2017-04-12 0.941245157 2017-04-22 0.956742223 2017-05-02 1.157533244 2017-05-12 1.406165437 2017-05-22 1.723962867 2017-06-01 1.900457682 2017-06-11 2.331974858 2017-06-21 2.162699087 2017-07-01 1.962239175 2017-07-11 1.926326702 2017-07-21 2.126891418 2017-07-31 2.270124857 2017-08-10 2.634011185 2017-08-20 3.179326489 2017-08-30 3.490023614 2017-09-09 3.139717726 2017-09-19 3.004876832 2017-09-29 3.248591357 2017-10-09 3.722905163 2017-10-19 4.435869074 2017-10-29 4.851281118 2017-11-08 5.820607119 2017-11-18 6.011845662 2017-11-28 7.769213087 2017-12-08 13.30661825 2017-12-18 15.14355883 2017-12-28 11.28699504 2018-01-07 12.48019314 2018-01-17 8.36218207 2018-01-27 8.464560818 2018-02-06 5.847221283 2018-02-16 7.562740733 2018-02-26 7.790411494 2018-03-08 7.117970749 2018-03-18 6.271394327 2018-03-28 6.007008212 2018-04-07 5.18889535 2018-04-17 5.865565714 2018-04-27 6.806823807 2018-05-07 7.142973719 2018-05-17 6.283434351 2018-05-27 5.653510273 2018-06-06 5.900840432 2018-06-16 5.138992846 2018-06-26 4.849331562 2018-07-06 5.320497282 2018-07-16 5.44523878 2018-07-26 6.489496255 2018-08-05 5.821512325 2018-08-15 5.357554157 2018-08-25 5.606556966 2018-09-04 6.172264993 2018-09-14 5.449966495 2018-09-24 5.49938288 2018-10-04 5.493393092 2018-10-14 5.164543389 2018-10-24 5.290633316 2018-11-03 5.16797436 2018-11-13 5.303110818 2018-11-23 3.560286538 2018-12-03 3.155953304 2018-12-13 2.666514345 2018-12-23 3.189488012 2019-01-02 3.078383625 2019-01-12 2.844612769 2019-01-22 2.810586471 2019-02-01 2.648602967 2019-02-11 2.791454219 2019-02-21 2.987622338 2019-03-03 2.967583854 2019-03-13 2.98792909 2019-03-23 3.077025382 2019-04-02 3.782851108 2019-04-12 3.943544986 2019-04-22 4.239784244 2019-05-02 4.335893442 2019-05-12 5.423016137 2019-05-22 6.03020301 2019-06-01 6.558444081 2019-06-11 5.976865357 2019-06-21 7.265833688 2019-07-01 7.637943816 2019-07-11 8.088486587 2019-07-21 7.437446951 2019-07-31 7.072174534 2019-08-10 7.586545904 2019-08-20 7.153550842 2019-08-30 6.318329262 2019-09-09 6.879892787 2019-09-19 6.851584938 2019-09-29 5.406034073 2019-10-09 5.707283961 2019-10-19 5.367934961 2019-10-29 6.340072293 2019-11-08 6.025375053 2019-11-18 5.649116864 2019-11-28 5.134929016 2019-12-08 5.184254226 2019-12-18 4.941466016 2019-12-28 4.834185492 2020-01-07 5.193849172 2020-01-17 5.728148452 2020-01-27 5.65057018 2020-02-06 6.216728586 2020-02-16 6.276890061 2020-02-26 5.378367354 2020-03-07 5.332747092 2020-03-17 3.426866884 2020-03-27 3.98411124 2020-04-06 4.336184407 2020-04-16 4.136714775 2020-04-26 4.455971678 2020-05-06 5.503361826 2020-05-16 5.34790324 2020-05-26 5.182456875 2020-06-05 5.766336645 2020-06-15 5.493635924 2020-06-25 5.257825098 2020-07-05 5.086290573 2020-07-15 5.074989947 2020-07-25 5.100465415 2020-08-04 5.599586674 2020-08-14 6.075824003 2020-08-24 6.108106034 2020-09-03 5.315053437 2020-09-13 5.327565073 2020-09-23 5.508998542 2020-10-03 5.551694228 2020-10-13 6.050251212 2020-10-23 6.798916437 2020-11-02 7.168053895 2020-11-12 8.691842338 2020-11-22 9.809891163 2020-12-02 10.51711251 2020-12-12 10.22048905 2020-12-22 12.74136377 2021-01-01 15.51642952 2021-01-11 19.22937755 2021-01-21 16.5258663 2021-01-31 17.92581524 2021-02-10 24.40409877 2021-02-20 31.59112399 2021-03-02 27.91471292 2021-03-12 33.3423029 2021-03-22 31.37826159 2021-04-01 34.2286757 2021-04-11 34.53505602 2021-04-21 30.0764874 2021-05-01 32.72112781 2021-05-11 30.88652621 2021-05-21 19.87781338 2021-05-31 19.62305149 2021-06-10 19.37630588 2021-06-20 20.19248622 2021-06-30 19.78813811 2021-07-10 18.51962405 2021-07-20 16.45996314 2021-07-30 23.30108543 2021-08-09 26.90344765 2021-08-19 26.24288249 2021-08-29 26.8797934 2021-09-08 25.73931529 2021-09-18 27.59709764 2021-09-28 23.6401324 2021-10-08 30.7281479 2021-10-18 35.1462355 2021-10-28 33.64905503 2021-11-07 34.86400982 2021-11-17 32.28753987 2021-11-27 30.70356614 2021-12-07 28.44165075 2021-12-17 25.61378383 2021-12-27 28.00753202 2022-01-06 24.1297763 2022-01-16 23.73458789 2022-01-26 20.13887131 2022-02-05 22.93876045 2022-02-15 24.03234955 2022-02-25 20.78675788 2022-03-07 19.08924148 2022-03-17 21.08613327 2022-03-27 23.96380951 2022-04-06 22.5222778 2022-04-16 20.51067222 2022-04-26 20.04704978 2022-05-06 19.15847481 2022-05-16 16.46700743 2022-05-26 15.84238618 2022-06-05 16.20605924 2022-06-15 12.43477069 2022-06-25 11.77242699 2022-07-05 11.45993568 2022-07-15 12.2393843 2022-07-25 12.4268186 2022-08-04 12.65359633 2022-08-14 13.52125782 2022-08-24 12.24111393 2022-09-03 11.5990685 2022-09-13 11.904227 2022-09-23 11.72894797 2022-10-03 11.5916946 2022-10-13 11.60652952 2022-10-23 11.85160982 2022-11-02 12.24980525 2022-11-12 9.512562597 2022-11-22 9.313564446 2022-12-02 9.515373865 2022-12-12 9.663823364 2022-12-22 9.418210295 2023-01-01 9.13616559 2023-01-11 9.567319278 2023-01-21 11.82393309 2023-01-31 11.99237274 2023-02-10 11.62292411 2023-02-20 13.49116937 2023-03-02 12.8036361 2023-03-12 11.90330248 2023-03-22 14.02683214 2023-04-01 14.42916971 2023-04-11 15.08133373 2023-04-21 13.77969697 2023-05-01 14.16333973 2023-05-11 13.40189096 2023-05-21 13.52091112 2023-05-31 13.86000197 2023-06-10 13.17462077 2023-06-20 14.63574698 2023-06-30 15.8644799 2023-07-10 15.79972504 2023-07-20 15.13591164 2023-07-30 14.93333413 2023-08-09 15.43358764 2023-08-19 13.83606671 2023-08-29 14.31830239 2023-09-08 13.50378126 2023-09-18 13.85155643 2023-09-28 14.52458962 2023-10-08 15.26340869 2023-10-18 14.48797683 2023-10-28 17.14249957 2023-11-07 18.02092822 2023-11-17 18.46824992 2023-11-27 18.51782835 2023-12-07 21.32748586 2023-12-17 20.46641164 2023-12-27 20.86692805 2024-01-06 21.53799196 2024-01-16 21.30056531 2024-01-26 20.7342672 2024-02-05 21.05872982 2024-02-15 25.94203852 2024-02-25 25.37684632 2024-03-06 30.74306059 2024-03-16 30.2763249 2024-03-26 32.1694396 2024-04-05 29.16869848 2024-04-15 26.80962449 2024-04-25 27.6769275 2024-05-05 27.85173241 2024-05-15 27.74207458 2024-05-25 29.69601085 2024-06-04 30.3452013 2024-06-14 28.31393005 2024-06-24 25.87013479 2024-07-04 24.14514024 2024-07-14 25.18135583 2024-07-24 27.08827394 2024-08-03 25.01549861 2024-08-13 24.57111428 2024-08-23 25.55188884 2024-09-02 23.70377709 2024-09-12 22.78418502 2024-09-22 24.29432929 2024-10-02 22.90536169 2024-10-12 23.7782289 2024-10-22 24.54682875 2024-11-01 25.37152789 2024-11-11 33.96962547 2024-11-21 36.86416038 2024-12-01 36.61264172 2024-12-11 37.00820449 2024-12-21 36.98585931 2024-12-31 35.53522169 2025-01-10 34.96453872 2025-01-20 37.17401969 2025-01-30 37.10071013 2025-02-09 33.65538734 2025-02-19 33.10118949 2025-03-01 30.32709834 2025-03-11 28.44663865 2025-03-21 27.84548524 2025-03-31 26.43426181 2025-04-10 25.23648005 2025-04-20 25.74252907 2025-04-30 28.50448185 2025-05-10 31.38943791 2025-05-20 32.55527981 2025-05-30 31.62108103 2025-06-09 33.10047668 2025-06-19 30.88214277 2025-06-29 33.10797322 2025-07-09 33.61714923 2025-07-19 35.17446363 2025-07-29 35.48238307 2025-08-08 33.93001752 2025-08-18 34.89279173 2025-08-28 32.7946859 2025-09-07 30.76708145 2025-09-17 31.63357767 2025-09-27 29.05251077 2025-10-07 30.54151281 2025-10-17 25.41058057 2025-10-27 28.51628749 2025-11-06 25.45322534 2025-11-16 23.03969955 2025-11-26 21.73205679 2025-12-06 21.19024355 2025-12-16 20.40747691 `; // -----------------------------------
const genesisTime = new Date('2009-01-03').getTime(); const dayMs = 86400000; const scenarios = { arulbero: { LL: 0, LU: 115, Ix: 6828, S: 0.016238, c: -30 }, gbianchi: { LL: 0, LU: 139, Ix: 7352.34, S: 0.0144487, c: -34.5083 }, plutosky: { LL: 0, LU: 1100, Ix: 10100, S: 0.11, c: -20 }, fillippone: { LL: 0, LU: 2200, Ix: 11400, S: 0.197, c: -20 } }; let chart; let realData = [];
// Funzione sicura per leggere i numeri (converte virgola in punto) function safeParse(id) { const el = document.getElementById(id); if(!el) return 0; let val = el.value; if (typeof val === 'string') { val = val.replace(',', '.'); // Sostituisce virgola con punto } const num = parseFloat(val); return isNaN(num) ? 0 : num; }
function parseInternalData() { const lines = datiStorici.trim().split('\n'); realData = []; lines.forEach(line => { const cleanLine = line.trim(); if (!cleanLine) return; // Sostituisce virgole con punti nel CSV se presenti const parts = cleanLine.replace(/;/g, ' ').split(/\s+/); if (parts.length >= 2) { const dateStr = parts[0].trim(); let valStr = parts.length >= 3 ? parts[2] : parts[1]; // Pulizia virgole valStr = valStr.replace(',', '.').trim(); const d = new Date(dateStr); const v = parseFloat(valStr); if (!isNaN(v) && !isNaN(d.getTime())) { realData.push({x: d, y: v}); } } }); }
async function fetchLiveData() { const inputElem = document.getElementById('realPriceInput'); const loader = document.getElementById('priceLoading'); const sourceLbl = document.getElementById('sourceLabel'); loader.style.display = 'inline-block'; inputElem.style.opacity = '0.5'; sourceLbl.innerText = "Connessione...";
try { const btcReq = fetch('https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT'); const goldReq = fetch('https://api.binance.com/api/v3/ticker/price?symbol=PAXGUSDT');
const [btcRes, goldRes] = await Promise.all([btcReq, goldReq]); if (!btcRes.ok || !goldRes.ok) throw new Error("API Error");
const btcData = await btcRes.json(); const goldData = await goldRes.json();
const btcPrice = parseFloat(btcData.price); const goldPrice = parseFloat(goldData.price);
const ratio = btcPrice / goldPrice; inputElem.value = ratio.toFixed(2); sourceLbl.innerText = `BTC: $${Math.round(btcPrice)} | Gold: $${Math.round(goldPrice)}`; sourceLbl.style.color = "green";
} catch (err) { console.error(err); sourceLbl.innerText = "Inserimento Manuale"; sourceLbl.style.color = "red"; } finally { loader.style.display = 'none'; inputElem.style.opacity = '1'; updateAll(); } }
function computeLogistic(x, LL, LU, Ix, S, c) { const range = LU - LL; if (range === 0) return LL;
if (c < -15) { const gamma = (S * Math.E) / range; const innerExp = Math.exp(gamma * (Ix - x)); if (!isFinite(innerExp)) return LL; return LL + range * Math.exp( -innerExp ); } else { const ec = Math.exp(c); const enc = Math.exp(-c); const K = 1 + enc; const lnBase = Math.log1p(ec); const M = Math.exp(K * lnBase); const gamma = (S * M) / range; const argument = c + gamma * (Ix - x); const expArg = Math.exp(argument); let lnTerm = (expArg === Infinity) ? argument : Math.log1p(expArg); return LL + range * Math.exp(-enc * lnTerm); } }
function setScenario(name, evt) { const p = scenarios[name]; // Inseriamo i valori come stringhe con il punto, ma l'utente può cambiarli con la virgola document.getElementById('LL').value = p.LL; document.getElementById('LU').value = p.LU; document.getElementById('Ix').value = p.Ix; document.getElementById('S').value = p.S; document.getElementById('c').value = p.c; document.querySelectorAll('.btn-preset').forEach(b => b.classList.remove('active')); if (evt && evt.target) { evt.target.classList.add('active'); } else { const btn = document.getElementById('btn-' + name); if(btn) btn.classList.add('active'); }
updateAll(); }
function updateAll() { // Usiamo safeParse per leggere anche le virgole const params = { LL: safeParse('LL'), LU: safeParse('LU'), Ix: safeParse('Ix'), S: safeParse('S'), c: safeParse('c'), realPrice: safeParse('realPriceInput') }; updateDashboard(params); updateChart(params); }
function updateDashboard(p) { const today = new Date(); const daysSinceGenesis = (today.getTime() - genesisTime) / dayMs; const modelPrice = computeLogistic(daysSinceGenesis, p.LL, p.LU, p.Ix, p.S, p.c); // Se c'è un errore matematico, mostriamo 0 invece di NaN const displayPrice = isNaN(modelPrice) ? "Err" : modelPrice.toFixed(2); document.getElementById('modelPriceDisplay').innerText = displayPrice; document.getElementById('currentDateDisplay').innerText = today.toLocaleDateString('it-IT');
if (p.realPrice > 0 && !isNaN(modelPrice)) { const delta = ((p.realPrice - modelPrice) / modelPrice) * 100; const varElem = document.getElementById('varianceDisplay'); const sign = delta > 0 ? "+" : ""; varElem.innerText = sign + delta.toFixed(2) + "%"; varElem.className = 'variance-val ' + (delta >= 0 ? 'var-pos' : 'var-neg'); } else { document.getElementById('varianceDisplay').innerText = "---"; document.getElementById('varianceDisplay').className = 'variance-val'; } }
function updateChart(p) { const dataPoints = []; // Se i parametri sono invalidi, evitiamo loop infiniti if(isNaN(p.S) || isNaN(p.c) || p.LU === 0) return;
for (let t = 1000; t <= 16000; t += 50) { const date = new Date(genesisTime + t * dayMs); const val = computeLogistic(t, p.LL, p.LU, p.Ix, p.S, p.c); if (isFinite(val)) dataPoints.push({ x: date, y: val }); }
const dateIx = new Date(genesisTime + p.Ix * dayMs); const valIx = computeLogistic(p.Ix, p.LL, p.LU, p.Ix, p.S, p.c); const flessoData = [{ x: dateIx, y: valIx }];
if (chart) { chart.data.datasets[0].data = dataPoints; chart.data.datasets[1].data = realData; chart.data.datasets[2].data = flessoData; const maxReal = realData.length ? Math.max(...realData.map(d=>d.y)) : 0; const maxLive = p.realPrice; const ceiling = Math.max(p.LU * 1.1, maxReal, maxLive * 1.1); chart.options.scales.y.suggestedMax = ceiling; chart.update(); } else { initChart(dataPoints, flessoData); } }
function initChart(modelData, flessoData) { const ctx = document.getElementById('myChart').getContext('2d'); chart = new Chart(ctx, { type: 'line', data: { datasets: [ { label: 'Modello Teorico', data: modelData, borderColor: '#27ae60', borderWidth: 2, backgroundColor: 'rgba(39, 174, 96, 0.1)', pointRadius: 0, fill: true, tension: 0.1 }, { label: 'Storico', data: realData, borderColor: '#e74c3c', backgroundColor: '#e74c3c', type: 'scatter', pointRadius: 2 }, { label: 'Flesso (Ix)', data: flessoData, borderColor: '#f1c40f', backgroundColor: '#f1c40f', type: 'scatter', pointRadius: 8, pointStyle: 'rectRot' } ] }, options: { responsive: true, maintainAspectRatio: false, interaction: { mode: 'nearest', axis: 'x', intersect: false }, plugins: { tooltip: { callbacks: { label: function(context) { let label = context.dataset.label || ''; if (label) label += ': '; if (context.parsed.y !== null) label += context.parsed.y.toFixed(2); return label; } } } }, scales: { x: { type: 'time', time: { unit: 'year' } }, y: { title: { display: true, text: 'Rapporto BTC/Gold' } } } } }); }
// --- AVVIO SICURO --- window.onload = function() { try { parseInternalData(); setScenario('arulbero'); fetchLiveData(); } catch(e) { alert("Errore imprevisto: " + e.message); } }; </script>
</body> </html>
|
|
|
|
|
|
|
arulbero
Legendary
Offline
Activity: 2107
Merit: 2422
|
 |
December 23, 2025, 07:57:29 AM |
|
E intanto l'oro continua a salire, oltre 4500 dollari, il prezzo btc - oro al momento è sceso a 19.43 oz.
Siamo tornati come prezzi a gennaio 2021,
lo spike precedente è datato dicembre 2017 e fu di 15.2 oz.
|
|
|
|
|
gbianchi (OP)
Legendary
Offline
Activity: 3668
Merit: 3347
|
 |
December 23, 2025, 08:11:59 AM |
|
...
Quindi la sintesi è che sembra che decimare i dati modifichi abbastanza il target finale (26%).
Dal mio punto di vista il risultato più probabile (a meno di errori nel mio script) è target 115, non target 139/145.
....
Bravo arulbero, ottimo lavoro. tra l'altro si avvicina sempre piu' alla tua previsione iniziale di 100 oz t. Pero' torniamo a quello che pensavo... siamo a una differenza del 21% dal target "ottimale" che avevo trovato io. Tenendo conto che parliamo di 1) il valore a cui dovrebbe tendere btc vs oro fra diversi anni.2) non sara' in ogni caso un valore fisso... nessun asset si piazza ad un valore fisso e non si muove piu' di li' 3) In mezzo ci sono ancora diversi grossi nodi da sciogliere (adozione istituzionale, computer quantistici, guerre, ecc...) direi che accanirsi per ottenere il risultato perfetto dal punto di vista matematico puo' essere divertente ma e' un po'... overkilling  PS: se calcoli il tutto tenendo conto dei dati fino ad oggi, cosa ottieni come target ottimale?
|
|
|
|
|