{"source":"5-minute bid bars from Dukascopy (dukascopy.com), 2015 onwards, for four FX majors; aggregated by Perfect Indicators.","license":"CC BY 4.0 — these aggregates only. The underlying tick history belongs to Dukascopy and is not ours to relicense.","attribution":"Perfect Indicators — https://perfectindicators.com","built":"2026-09-14","unit":"weekday","what":"How much of the 5-minute archive we actually hold, market by market. The unit is a weekday inside the span each market covers: the feed serves minute data one DAY per file, so a refused request loses a whole day, and a weekday with no bar at all is a file we never received rather than a quiet session.","cause":"Our download, not the feed and not the market. download5m.js was built on the dukascopy-node defaults, under which an HTTP 429 returns an empty answer and no error (run 212).","control":"Each missing day is checked against the hourly archive — a different download of the same underlying ticks. missingTradedPct is the share of missing days the hourly archive shows trading on; heldTradedPct is the same share on the days we do hold, so the two are read against each other rather than against 100%.","markets":{"eurusd":{"from":"2015-01-01","to":"2026-07-22","weekdays":3015,"held":2015,"missing":1000,"heldPct":66.8,"partial":8,"control":{"missingTradedPct":99.3,"heldTradedPct":97.6},"yearShareMin":39,"yearShareMax":95,"years":{"2015":{"weekdays":261,"held":102},"2016":{"weekdays":261,"held":107},"2017":{"weekdays":260,"held":168},"2018":{"weekdays":261,"held":170},"2019":{"weekdays":261,"held":181},"2020":{"weekdays":262,"held":166},"2021":{"weekdays":261,"held":160},"2022":{"weekdays":260,"held":155},"2023":{"weekdays":260,"held":202},"2024":{"weekdays":262,"held":222},"2025":{"weekdays":261,"held":248},"2026":{"weekdays":145,"held":134}}},"gbpusd":{"from":"2015-01-02","to":"2026-07-22","weekdays":3014,"held":1910,"missing":1104,"heldPct":63.4,"partial":4,"control":{"missingTradedPct":89.3,"heldTradedPct":85.3},"yearShareMin":35,"yearShareMax":91,"years":{"2015":{"weekdays":260,"held":90},"2016":{"weekdays":261,"held":159},"2017":{"weekdays":260,"held":177},"2018":{"weekdays":261,"held":145},"2019":{"weekdays":261,"held":139},"2020":{"weekdays":262,"held":228},"2021":{"weekdays":261,"held":130},"2022":{"weekdays":260,"held":107},"2023":{"weekdays":260,"held":202},"2024":{"weekdays":262,"held":184},"2025":{"weekdays":261,"held":217},"2026":{"weekdays":145,"held":132}}},"usdchf":{"from":"2015-01-02","to":"2026-07-22","weekdays":3014,"held":1459,"missing":1555,"heldPct":48.4,"partial":3,"control":{"missingTradedPct":75,"heldTradedPct":86.2},"yearShareMin":13,"yearShareMax":88,"years":{"2015":{"weekdays":260,"held":35},"2016":{"weekdays":261,"held":114},"2017":{"weekdays":260,"held":63},"2018":{"weekdays":261,"held":48},"2019":{"weekdays":261,"held":91},"2020":{"weekdays":262,"held":96},"2021":{"weekdays":261,"held":176},"2022":{"weekdays":260,"held":229},"2023":{"weekdays":260,"held":144},"2024":{"weekdays":262,"held":182},"2025":{"weekdays":261,"held":207},"2026":{"weekdays":145,"held":74}}},"usdjpy":{"from":"2015-01-04","to":"2026-07-22","weekdays":3013,"held":2477,"missing":536,"heldPct":82.2,"partial":4,"control":{"missingTradedPct":80.6,"heldTradedPct":89.1},"yearShareMin":35,"yearShareMax":97,"years":{"2015":{"weekdays":259,"held":91},"2016":{"weekdays":261,"held":123},"2017":{"weekdays":260,"held":253},"2018":{"weekdays":261,"held":248},"2019":{"weekdays":261,"held":252},"2020":{"weekdays":262,"held":247},"2021":{"weekdays":261,"held":248},"2022":{"weekdays":260,"held":235},"2023":{"weekdays":260,"held":231},"2024":{"weekdays":262,"held":212},"2025":{"weekdays":261,"held":209},"2026":{"weekdays":145,"held":128}}}},"totals":{"markets":4,"weekdays":12056,"held":7861,"missing":4195,"heldPct":65.2}}