{"id":4,"date":"2026-06-24T10:10:12","date_gmt":"2026-06-24T10:10:12","guid":{"rendered":"https:\/\/hoge.gg\/se\/calculators\/"},"modified":"2026-06-24T10:10:12","modified_gmt":"2026-06-24T10:10:12","slug":"calculators","status":"publish","type":"page","link":"https:\/\/hoge.gg\/se\/calculators\/","title":{"rendered":"Crypto Calculators \u00b7 HOGE"},"content":{"rendered":"    <div style=\"font-family:'Space Grotesk',sans-serif;background:#fcf9f3;padding:32px 22px;border-radius:22px;margin:24px 0;\">\n      <div style=\"display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:6px;\">\n        <h2 style=\"font-weight:700;font-size:26px;color:#1c1712;margin:0;\">Crypto calculators<\/h2>\n        <span style=\"font-family:'IBM Plex Mono',monospace;font-size:11px;color:#14a06a;\">Live rates \u00b7 CoinGecko<\/span>\n      <\/div>\n      <p style=\"color:#5c5749;margin:0 0 22px;font-size:13.5px;\">Five tools traders ask for most. All math runs client-side \u2014 your inputs never leave the page.<\/p>\n\n      <!-- Tabs -->\n      <div id=\"hoge-calc-tabs\" style=\"display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px;\">\n        <button data-tab=\"profit\"   class=\"hoge-tab on\">P&amp;L \u00b7 Profit<\/button>\n        <button data-tab=\"position\" class=\"hoge-tab\">Position size \u00b7 Risk<\/button>\n        <button data-tab=\"apy\"      class=\"hoge-tab\">APY compound \u00b7 Staking<\/button>\n        <button data-tab=\"dca\"      class=\"hoge-tab\">DCA \u00b7 Dollar-cost average<\/button>\n        <button data-tab=\"tax\"      class=\"hoge-tab\">Capital gains tax (EU)<\/button>\n      <\/div>\n\n      <style>\n        .hoge-tab{background:#fff;color:#1c1712;border:1px solid #e8e2d7;border-radius:10px;padding:9px 14px;font-family:'IBM Plex Mono',monospace;font-size:12px;font-weight:500;cursor:pointer;}\n        .hoge-tab.on{background:#1c1712;color:#fff;border-color:#1c1712;}\n        .hoge-calc-pane{display:none;background:#fff;border:1px solid #e8e2d7;border-radius:18px;padding:24px;}\n        .hoge-calc-pane.on{display:block;}\n        .hoge-calc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:18px;}\n        .hoge-calc-field label{display:block;font-size:11px;color:#908a7c;font-weight:500;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.05em;}\n        .hoge-calc-field input, .hoge-calc-field select{width:100%;border:1px solid #e8e2d7;border-radius:10px;padding:11px 13px;font-family:'IBM Plex Mono',monospace;font-size:14px;background:#fcf9f3;}\n        .hoge-calc-result{background:#1c1712;color:#fff;border-radius:14px;padding:18px 22px;display:flex;flex-direction:column;gap:6px;}\n        .hoge-calc-result .label{font-size:11px;color:#cfc6b8;text-transform:uppercase;letter-spacing:0.06em;}\n        .hoge-calc-result .value{font-family:'IBM Plex Mono',monospace;font-size:26px;font-weight:700;color:#fff;}\n        .hoge-calc-result .sub{font-family:'IBM Plex Mono',monospace;font-size:13px;color:#cfc6b8;}\n        .hoge-pos { color:#14a06a !important; }\n        .hoge-neg { color:#e0443f !important; }\n      <\/style>\n\n      <!-- 1. P&L -->\n      <div class=\"hoge-calc-pane on\" id=\"pane-profit\">\n        <div class=\"hoge-calc-grid\">\n          <div class=\"hoge-calc-field\">\n            <label>Asset<\/label>\n            <select id=\"pl-asset\"><option>BTC<\/option><option>ETH<\/option><option>SOL<\/option><option>BNB<\/option><option>XRP<\/option><option>ADA<\/option><option>DOGE<\/option><option>AVAX<\/option><option>LINK<\/option><option>HOGE<\/option><\/select>\n          <\/div>\n          <div class=\"hoge-calc-field\">\n            <label>Amount<\/label>\n            <input id=\"pl-amount\" type=\"number\" step=\"any\" value=\"1\">\n          <\/div>\n          <div class=\"hoge-calc-field\">\n            <label>Entry price (USD)<\/label>\n            <input id=\"pl-entry\" type=\"number\" step=\"any\" value=\"50000\">\n          <\/div>\n          <div class=\"hoge-calc-field\">\n            <label>Exit price (USD, blank = live)<\/label>\n            <input id=\"pl-exit\" type=\"number\" step=\"any\" placeholder=\"live\">\n          <\/div>\n          <div class=\"hoge-calc-field\">\n            <label>Fees % (per side)<\/label>\n            <input id=\"pl-fees\" type=\"number\" step=\"any\" value=\"0.1\">\n          <\/div>\n        <\/div>\n        <div class=\"hoge-calc-result\">\n          <span class=\"label\">Profit \/ Loss<\/span>\n          <span class=\"value\" id=\"pl-result\">\u2014<\/span>\n          <span class=\"sub\" id=\"pl-roi\">ROI: \u2014<\/span>\n        <\/div>\n      <\/div>\n\n      <!-- 2. Position size -->\n      <div class=\"hoge-calc-pane\" id=\"pane-position\">\n        <div class=\"hoge-calc-grid\">\n          <div class=\"hoge-calc-field\"><label>Account size (USD)<\/label><input id=\"ps-account\" type=\"number\" step=\"any\" value=\"10000\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Risk per trade (%)<\/label><input id=\"ps-risk\" type=\"number\" step=\"any\" value=\"1\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Entry price (USD)<\/label><input id=\"ps-entry\" type=\"number\" step=\"any\" value=\"3500\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Stop-loss price (USD)<\/label><input id=\"ps-stop\" type=\"number\" step=\"any\" value=\"3300\"><\/div>\n        <\/div>\n        <div class=\"hoge-calc-result\">\n          <span class=\"label\">Max position<\/span>\n          <span class=\"value\" id=\"ps-result\">\u2014<\/span>\n          <span class=\"sub\" id=\"ps-sub\">Risk: \u2014 \u00b7 Stop distance: \u2014<\/span>\n        <\/div>\n      <\/div>\n\n      <!-- 3. APY compound -->\n      <div class=\"hoge-calc-pane\" id=\"pane-apy\">\n        <div class=\"hoge-calc-grid\">\n          <div class=\"hoge-calc-field\"><label>Principal (USD)<\/label><input id=\"apy-p\" type=\"number\" step=\"any\" value=\"10000\"><\/div>\n          <div class=\"hoge-calc-field\"><label>APY (%)<\/label><input id=\"apy-r\" type=\"number\" step=\"any\" value=\"5\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Days<\/label><input id=\"apy-d\" type=\"number\" step=\"any\" value=\"365\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Compounding<\/label><select id=\"apy-c\"><option value=\"365\">Daily<\/option><option value=\"52\">Weekly<\/option><option value=\"12\">Monthly<\/option><option value=\"4\">Quarterly<\/option><option value=\"1\">Yearly<\/option><option value=\"0\">Continuous<\/option><\/select><\/div>\n        <\/div>\n        <div class=\"hoge-calc-result\">\n          <span class=\"label\">Final value<\/span>\n          <span class=\"value\" id=\"apy-result\">\u2014<\/span>\n          <span class=\"sub\" id=\"apy-sub\">Earned: \u2014<\/span>\n        <\/div>\n      <\/div>\n\n      <!-- 4. DCA -->\n      <div class=\"hoge-calc-pane\" id=\"pane-dca\">\n        <div class=\"hoge-calc-grid\">\n          <div class=\"hoge-calc-field\"><label>Asset<\/label><select id=\"dca-asset\"><option>BTC<\/option><option>ETH<\/option><option>SOL<\/option><option>BNB<\/option><option>XRP<\/option><option>ADA<\/option><option>DOGE<\/option><option>AVAX<\/option><option>LINK<\/option><option>HOGE<\/option><\/select><\/div>\n          <div class=\"hoge-calc-field\"><label>Buy amount per period (USD)<\/label><input id=\"dca-amt\" type=\"number\" step=\"any\" value=\"200\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Frequency<\/label><select id=\"dca-freq\"><option value=\"7\">Weekly<\/option><option value=\"14\">Bi-weekly<\/option><option value=\"30\">Monthly<\/option><\/select><\/div>\n          <div class=\"hoge-calc-field\"><label>Periods<\/label><input id=\"dca-periods\" type=\"number\" value=\"24\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Avg buy price assumption (USD)<\/label><input id=\"dca-avg\" type=\"number\" step=\"any\" value=\"40000\"><\/div>\n        <\/div>\n        <div class=\"hoge-calc-result\">\n          <span class=\"label\">Total invested \u00b7 current value<\/span>\n          <span class=\"value\" id=\"dca-result\">\u2014<\/span>\n          <span class=\"sub\" id=\"dca-sub\">Units: \u2014 \u00b7 P&L: \u2014<\/span>\n        <\/div>\n      <\/div>\n\n      <!-- 5. Tax (EU simplified) -->\n      <div class=\"hoge-calc-pane\" id=\"pane-tax\">\n        <div class=\"hoge-calc-grid\">\n          <div class=\"hoge-calc-field\"><label>Country<\/label><select id=\"tax-country\">\n            <option value=\"DE,0\">\ud83c\udde9\ud83c\uddea Germany (held &gt;1y: 0%, else income tax)<\/option>\n            <option value=\"FR,30\">\ud83c\uddeb\ud83c\uddf7 France (PFU 30%)<\/option>\n            <option value=\"IT,26\">\ud83c\uddee\ud83c\uddf9 Italy (26%)<\/option>\n            <option value=\"ES,21\">\ud83c\uddea\ud83c\uddf8 Spain (avg 21%)<\/option>\n            <option value=\"PT,28\">\ud83c\uddf5\ud83c\uddf9 Portugal (28% short-term, 0% &gt;1y)<\/option>\n            <option value=\"NL,32\">\ud83c\uddf3\ud83c\uddf1 Netherlands (Box 3 ~32% on assumed yield)<\/option>\n          <\/select><\/div>\n          <div class=\"hoge-calc-field\"><label>Realised gain (USD)<\/label><input id=\"tax-gain\" type=\"number\" step=\"any\" value=\"10000\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Holding period (days)<\/label><input id=\"tax-days\" type=\"number\" value=\"180\"><\/div>\n          <div class=\"hoge-calc-field\"><label>Marginal income tax rate %<\/label><input id=\"tax-marginal\" type=\"number\" step=\"any\" value=\"42\"><\/div>\n        <\/div>\n        <div class=\"hoge-calc-result\">\n          <span class=\"label\">Estimated tax<\/span>\n          <span class=\"value\" id=\"tax-result\">\u2014<\/span>\n          <span class=\"sub\" id=\"tax-sub\">Net keep: \u2014 \u00b7 Effective rate: \u2014<\/span>\n        <\/div>\n        <p style=\"margin:14px 0 0;font-size:11px;color:#908a7c;\">Heuristic only \u2014 consult a tax advisor. Rules change.<\/p>\n      <\/div>\n    <\/div>\n\n    <script>\n    (function(){\n      \/\/ Tab switcher\n      var tabs = document.querySelectorAll('.hoge-tab');\n      var panes = document.querySelectorAll('.hoge-calc-pane');\n      tabs.forEach(function(t){\n        t.addEventListener('click', function(){\n          tabs.forEach(function(x){x.classList.remove('on');});\n          panes.forEach(function(p){p.classList.remove('on');});\n          t.classList.add('on');\n          document.getElementById('pane-' + t.getAttribute('data-tab')).classList.add('on');\n        });\n      });\n\n      var prices = {};\n      function loadPrices(cb){\n        fetch('\/wp-json\/hoge\/v1\/prices',{cache:'no-store'}).then(function(r){return r.json();}).then(function(d){prices=d;cb && cb();}).catch(function(){cb && cb();});\n      }\n      function fmtUSD(n){return'$'+(parseFloat(n)||0).toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:2});}\n\n      \/\/ 1. P&L\n      function calcPL(){\n        var asset = document.getElementById('pl-asset').value;\n        var amt = parseFloat(document.getElementById('pl-amount').value)||0;\n        var entry = parseFloat(document.getElementById('pl-entry').value)||0;\n        var exitInp = document.getElementById('pl-exit').value;\n        var feesPct = parseFloat(document.getElementById('pl-fees').value)||0;\n        var exit = exitInp ? parseFloat(exitInp) : (prices[asset] ? prices[asset].price : 0);\n        if (!entry || !exit) { document.getElementById('pl-result').textContent='\u2014'; return; }\n        var gross = amt * (exit - entry);\n        var fees = amt * (entry + exit) * (feesPct\/100);\n        var pl = gross - fees;\n        var roi = (entry > 0) ? (pl \/ (amt*entry) * 100) : 0;\n        var el = document.getElementById('pl-result');\n        el.textContent = (pl>=0?'+':'-') + fmtUSD(Math.abs(pl));\n        el.className = 'value ' + (pl>=0?'hoge-pos':'hoge-neg');\n        document.getElementById('pl-roi').textContent = 'ROI: ' + (roi>=0?'+':'') + roi.toFixed(2) + '% \u00b7 Exit @ ' + fmtUSD(exit);\n      }\n      ['pl-asset','pl-amount','pl-entry','pl-exit','pl-fees'].forEach(function(id){\n        document.getElementById(id).addEventListener('input', calcPL);\n      });\n      document.getElementById('pl-asset').addEventListener('change', calcPL);\n\n      \/\/ 2. Position size\n      function calcPos(){\n        var acct = parseFloat(document.getElementById('ps-account').value)||0;\n        var risk = parseFloat(document.getElementById('ps-risk').value)||0;\n        var entry = parseFloat(document.getElementById('ps-entry').value)||0;\n        var stop = parseFloat(document.getElementById('ps-stop').value)||0;\n        if (!entry || !stop || entry===stop) { document.getElementById('ps-result').textContent='\u2014'; return; }\n        var riskUSD = acct * (risk\/100);\n        var dist = Math.abs(entry - stop);\n        var units = riskUSD \/ dist;\n        var notional = units * entry;\n        document.getElementById('ps-result').textContent = units.toFixed(4) + ' units \u00b7 ' + fmtUSD(notional);\n        document.getElementById('ps-sub').textContent = 'Risk: ' + fmtUSD(riskUSD) + ' \u00b7 Stop distance: ' + fmtUSD(dist) + ' (' + ((dist\/entry)*100).toFixed(2) + '%)';\n      }\n      ['ps-account','ps-risk','ps-entry','ps-stop'].forEach(function(id){\n        document.getElementById(id).addEventListener('input', calcPos);\n      });\n\n      \/\/ 3. APY compound\n      function calcAPY(){\n        var p = parseFloat(document.getElementById('apy-p').value)||0;\n        var r = parseFloat(document.getElementById('apy-r').value)||0;\n        var d = parseFloat(document.getElementById('apy-d').value)||0;\n        var n = parseInt(document.getElementById('apy-c').value);\n        var rate = r\/100;\n        var t = d\/365;\n        var final;\n        if (n===0) final = p * Math.exp(rate*t);\n        else final = p * Math.pow(1 + rate\/n, n*t);\n        document.getElementById('apy-result').textContent = fmtUSD(final);\n        document.getElementById('apy-sub').textContent = 'Earned: ' + fmtUSD(final-p) + ' over ' + d + ' days';\n      }\n      ['apy-p','apy-r','apy-d','apy-c'].forEach(function(id){\n        document.getElementById(id).addEventListener('input', calcAPY);\n        document.getElementById(id).addEventListener('change', calcAPY);\n      });\n\n      \/\/ 4. DCA\n      function calcDCA(){\n        var asset = document.getElementById('dca-asset').value;\n        var amt = parseFloat(document.getElementById('dca-amt').value)||0;\n        var periods = parseInt(document.getElementById('dca-periods').value)||0;\n        var avg = parseFloat(document.getElementById('dca-avg').value)||0;\n        if (!avg) { document.getElementById('dca-result').textContent='\u2014'; return; }\n        var totalInv = amt * periods;\n        var units = totalInv \/ avg;\n        var current = prices[asset] ? prices[asset].price : avg;\n        var value = units * current;\n        var pl = value - totalInv;\n        document.getElementById('dca-result').textContent = fmtUSD(totalInv) + ' \u00b7 ' + fmtUSD(value);\n        var sub = document.getElementById('dca-sub');\n        sub.textContent = 'Units: ' + units.toFixed(6) + ' ' + asset + ' \u00b7 P&L: ' + (pl>=0?'+':'') + fmtUSD(pl) + ' (' + (pl>=0?'+':'') + ((pl\/totalInv)*100).toFixed(2) + '%)';\n        sub.className = 'sub ' + (pl>=0?'hoge-pos':'hoge-neg');\n      }\n      ['dca-asset','dca-amt','dca-freq','dca-periods','dca-avg'].forEach(function(id){\n        document.getElementById(id).addEventListener('input', calcDCA);\n        document.getElementById(id).addEventListener('change', calcDCA);\n      });\n\n      \/\/ 5. Tax (heuristic)\n      function calcTax(){\n        var country = document.getElementById('tax-country').value.split(',');\n        var code = country[0]; var baseRate = parseFloat(country[1])||0;\n        var gain = parseFloat(document.getElementById('tax-gain').value)||0;\n        var days = parseInt(document.getElementById('tax-days').value)||0;\n        var marginal = parseFloat(document.getElementById('tax-marginal').value)||0;\n        var rate;\n        if (code === 'DE') rate = (days >= 365) ? 0 : marginal;\n        else if (code === 'PT') rate = (days >= 365) ? 0 : baseRate;\n        else rate = baseRate;\n        var tax = gain * (rate\/100);\n        document.getElementById('tax-result').textContent = fmtUSD(tax);\n        document.getElementById('tax-sub').textContent = 'Net keep: ' + fmtUSD(gain - tax) + ' \u00b7 Effective rate: ' + rate.toFixed(1) + '%';\n      }\n      ['tax-country','tax-gain','tax-days','tax-marginal'].forEach(function(id){\n        document.getElementById(id).addEventListener('input', calcTax);\n        document.getElementById(id).addEventListener('change', calcTax);\n      });\n\n      loadPrices(function(){\n        calcPL(); calcPos(); calcAPY(); calcDCA(); calcTax();\n      });\n    })();\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/hoge.gg\/se\/wp-json\/wp\/v2\/pages\/4","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hoge.gg\/se\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hoge.gg\/se\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hoge.gg\/se\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hoge.gg\/se\/wp-json\/wp\/v2\/comments?post=4"}],"version-history":[{"count":0,"href":"https:\/\/hoge.gg\/se\/wp-json\/wp\/v2\/pages\/4\/revisions"}],"wp:attachment":[{"href":"https:\/\/hoge.gg\/se\/wp-json\/wp\/v2\/media?parent=4"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}