Bitcoin Forum
December 26, 2025, 12:31:40 AM *
News: Latest Bitcoin Core release: 30.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [32] 33 »
  Print  
Author Topic: Un modello logistico del prezzo di Bitcoin  (Read 9735 times)
This is a self-moderated topic. If you do not want to be moderated by the person who started this topic, create a new topic.
arulbero
Legendary
*
Offline Offline

Activity: 2107
Merit: 2422


View Profile
December 07, 2025, 06:54:07 PM
Last edit: December 08, 2025, 03:56:57 PM by arulbero
Merited by gbianchi (5)
 #621

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.

Code:
<!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 Offline

Activity: 2107
Merit: 2422


View Profile
December 07, 2025, 09:45:32 PM
Last edit: December 07, 2025, 10:18:33 PM by arulbero
 #622

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  Smiley):


arulbero
Legendary
*
Offline Offline

Activity: 2107
Merit: 2422


View Profile
December 08, 2025, 08:37:41 AM
Last edit: December 08, 2025, 07:47:34 PM by arulbero
Merited by Plutosky (6)
 #623

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.html

Se volete invece un link diretto alla logistica senza dover scaricare nulla:  https://www.desmos.com/calculator/sgfj97tlhh
Plutosky
Legendary
*
Offline Offline

Activity: 2842
Merit: 4997


View Profile
December 08, 2025, 10:14:19 AM
 #624

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 Offline

Activity: 2107
Merit: 2422


View Profile
December 08, 2025, 10:29:37 AM
Last edit: December 08, 2025, 01:23:26 PM by arulbero
 #625

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:
Quote
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 Offline

Activity: 2107
Merit: 2422


View Profile
December 09, 2025, 08:07:00 PM
Last edit: December 10, 2025, 05:27:17 AM by arulbero
 #626


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)

Quote
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 Offline

Activity: 2842
Merit: 4997


View Profile
December 10, 2025, 08:28:00 AM
 #627


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 Grin



"Diversification is protection against ignorance. It makes little sense if you know what you are doing" WB
babo
Legendary
*
Offline Offline

Activity: 4200
Merit: 5452


si vis pacem, para bellum


View Profile WWW
December 10, 2025, 09:10:22 AM
 #628


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 Grin





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 Offline

Activity: 3668
Merit: 3347



View Profile
December 19, 2025, 08:27:43 AM
Merited by babo (1)
 #629

Ieri btc/gold e' sceso sotto i 20, a 19,85




GUIDA PER NUOVI UTENTI https://bitcointalk.org/index.php?topic=1241459.0
DO NOT HOLD YOUR BTC ON THIRD PARTY EXCHANGES – BE YOUR OWN BANK https://bitcointalk.org/index.php?topic=945881.0
BITCOIN... WHAT IS IT ? https://bitcointalk.org/index.php?topic=2107660.0
arulbero
Legendary
*
Offline Offline

Activity: 2107
Merit: 2422


View Profile
December 19, 2025, 08:50:55 AM
 #630

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 Offline

Activity: 3668
Merit: 3347



View Profile
December 19, 2025, 09:27:26 AM
 #631

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.






GUIDA PER NUOVI UTENTI https://bitcointalk.org/index.php?topic=1241459.0
DO NOT HOLD YOUR BTC ON THIRD PARTY EXCHANGES – BE YOUR OWN BANK https://bitcointalk.org/index.php?topic=945881.0
BITCOIN... WHAT IS IT ? https://bitcointalk.org/index.php?topic=2107660.0
arulbero
Legendary
*
Offline Offline

Activity: 2107
Merit: 2422


View Profile
December 19, 2025, 10:18:13 AM
Merited by babo (1)
 #632

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 Offline

Activity: 3668
Merit: 3347



View Profile
December 19, 2025, 12:13:12 PM
Last edit: December 19, 2025, 01:01:19 PM by gbianchi
 #633



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 Smiley



GUIDA PER NUOVI UTENTI https://bitcointalk.org/index.php?topic=1241459.0
DO NOT HOLD YOUR BTC ON THIRD PARTY EXCHANGES – BE YOUR OWN BANK https://bitcointalk.org/index.php?topic=945881.0
BITCOIN... WHAT IS IT ? https://bitcointalk.org/index.php?topic=2107660.0
Plutosky
Legendary
*
Offline Offline

Activity: 2842
Merit: 4997


View Profile
December 20, 2025, 09:20:42 AM
 #634

Per la serie "mai una gioia"  Grin 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?  Grin



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 Offline

Activity: 2107
Merit: 2422


View Profile
December 20, 2025, 11:47:54 AM
 #635



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 Offline

Activity: 2107
Merit: 2422


View Profile
December 21, 2025, 09:53:09 PM
 #636

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/2024



Mi 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.34


Code:
Inizio 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.17


Code:
Inizio 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.95


Code:
Inizio 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


Code:
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.48


Code:
Inizio 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 Offline

Activity: 2107
Merit: 2422


View Profile
December 22, 2025, 01:59:47 PM
Last edit: December 22, 2025, 10:15:31 PM by arulbero
Merited by gbianchi (5), babo (2)
 #637

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
Code:
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
Code:
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:
Code:
<!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>
gbianchi (OP)
Legendary
*
Offline Offline

Activity: 3668
Merit: 3347



View Profile
December 22, 2025, 10:16:27 PM
 #638

Strategy ha incrementato le sue riserve in USD da 1.44 a 2.19 miliardi di dollari.

Si preparano per resistere in caso di tempi brutti.

https://www.strategy.com/press/strategy-increases-usd-reserve-to-2-point-19-billion_12-22-2025





GUIDA PER NUOVI UTENTI https://bitcointalk.org/index.php?topic=1241459.0
DO NOT HOLD YOUR BTC ON THIRD PARTY EXCHANGES – BE YOUR OWN BANK https://bitcointalk.org/index.php?topic=945881.0
BITCOIN... WHAT IS IT ? https://bitcointalk.org/index.php?topic=2107660.0
arulbero
Legendary
*
Offline Offline

Activity: 2107
Merit: 2422


View Profile
December 23, 2025, 07:57:29 AM
 #639

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 Offline

Activity: 3668
Merit: 3347



View Profile
December 23, 2025, 08:11:59 AM
 #640


...

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 Smiley

PS: se calcoli il tutto tenendo conto dei dati fino ad oggi, cosa ottieni come target ottimale?

GUIDA PER NUOVI UTENTI https://bitcointalk.org/index.php?topic=1241459.0
DO NOT HOLD YOUR BTC ON THIRD PARTY EXCHANGES – BE YOUR OWN BANK https://bitcointalk.org/index.php?topic=945881.0
BITCOIN... WHAT IS IT ? https://bitcointalk.org/index.php?topic=2107660.0
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [32] 33 »
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!