| Overall Statistics |
|
Total Orders 229 Average Win 3.54% Average Loss -2.29% Compounding Annual Return 129.607% Drawdown 21.700% Expectancy 0.405 Start Equity 100000.0 End Equity 264451.14 Net Profit 164.451% Sharpe Ratio 2.559 Sortino Ratio 3.851 Probabilistic Sharpe Ratio 88.756% Loss Rate 45% Win Rate 55% Profit-Loss Ratio 1.54 Alpha 0.862 Beta 0.06 Annual Standard Deviation 0.341 Annual Variance 0.116 Information Ratio 1.677 Tracking Error 0.418 Treynor Ratio 14.5 Total Fees $0.00 Estimated Strategy Capacity $530000.00 Lowest Capacity Asset BTCUSD 2XR Portfolio Turnover 53.00% |
from AlgorithmImports import *
from QuantConnect.DataSource import *
class BlockchainBitcoinMetadataAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2019, 11, 1) # Set Start Date
self.set_end_date(2020, 12, 31) # Set End Date
self.set_cash(100000)
self.btcusd = self.add_crypto("BTCUSD", Resolution.MINUTE).symbol
### Requesting data
self.bitcoin_metadata_symbol = self.add_data(BitcoinMetadata, self.btcusd).symbol
### Historical data
history = self.history(BitcoinMetadata, self.bitcoin_metadata_symbol, 60, Resolution.DAILY)
self.debug(f"We got {len(history)} items from our history request for {self.btcusd} Blockchain Bitcoin Metadata")
self.last_demand_supply = None
def on_data(self, slice: Slice) -> None:
### Retrieving data
data = slice.Get(BitcoinMetadata)
if self.bitcoin_metadata_symbol in data and data[self.bitcoin_metadata_symbol] != None:
current_demand_supply = data[self.bitcoin_metadata_symbol].numberof_transactions / data[self.bitcoin_metadata_symbol].hash_rate
# comparing the average transaction-to-hash-rate ratio changes, we will buy bitcoin or hold cash
if self.last_demand_supply != None and current_demand_supply > self.last_demand_supply:
self.set_holdings(self.btcusd, 1)
else:
self.set_holdings(self.btcusd, 0)
self.last_demand_supply = current_demand_supply