Hey Jacob,
Historical constituents isn’t really a thing in the crypto space, since you will be getting all of your data directly from the exchange. If they delist a coin, then it’s just gone. My recommendation for that is to not be long only, hopefully you’ve made the same assumption if you’ve paid attention to prices lately!
Are you python savvy? If so then I can point you to my github. I have API-free code to get data directly from Binance for whatever time interval that you want and both future and spot. There’s tons of this out there if you google – and I’m sure someone has a cleaner implementation than mine. Note that the data will populate in the folder where you execute the file from, not necessarily where the file is sitting.
https://github.com/algo-dude/BinanceData