| Overall Statistics |
|
Total Trades 26 Average Win 0.02% Average Loss -0.13% Compounding Annual Return -33.280% Drawdown 1.000% Expectancy -0.883 Net Profit -0.750% Sharpe Ratio -0.285 Sortino Ratio -0.292 Probabilistic Sharpe Ratio 45.998% Loss Rate 90% Win Rate 10% Profit-Loss Ratio 0.17 Alpha 0 Beta 0 Annual Standard Deviation 0.106 Annual Variance 0.011 Information Ratio 0.14 Tracking Error 0.106 Treynor Ratio 0 Total Fees $267464.11 Estimated Strategy Capacity $14000000.00 Lowest Capacity Asset XRPUSDT 18N Portfolio Turnover 28.76% |
from AlgorithmImports import *
class CoinAPIDataAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2023, 1, 1)
self.SetEndDate(2023, 1, 5)
self.SetCash("BUSD", 100000)
self.SetCash("BTC", 1000)
# Kraken accepts both Cash and Margin type account.
self.SetBrokerageModel(BrokerageName.Binance, AccountType.Margin)
# Warm up the security with the last known price to avoid conversion error
self.SetSecurityInitializer(lambda security: security.SetMarketPrice(self.GetLastKnownPrice(security)))
self.UniverseSettings.Resolution = Resolution.Daily
# Add universe selection of cryptos based on coarse fundamentals
self.AddUniverse(CryptoCoarseFundamentalUniverse(Market.Binance, self.UniverseSettings, self.UniverseSelectionFilter))
self.AddAlpha(ConstantAlphaModel(InsightType.Price, InsightDirection.Up, timedelta(days=1), 0.025, None))
self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())
def UniverseSelectionFilter(self, crypto_coarse):
return [d.Symbol for d in sorted([x for x in crypto_coarse if x.VolumeInUsd], key=lambda x: x.VolumeInUsd, reverse=True)[:5]]
def OnSecuritiesChanged(self, changes):
for security in changes.AddedSecurities:
# Historical data
history = self.History(security.Symbol, 30, Resolution.Daily)
self.Debug(f"We got {len(history)} items from our history request")
"""
from AlgorithmImports import *
class CryptoCoarseFundamentalUniverseSelectionAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2024, 1, 1)
self.SetEndDate(2024, 1, 5)
self.SetCash(100000)
self.SetBrokerageModel(BrokerageName.Binance, AccountType.Cash)
# Warm up the security with the last known price to avoid conversion error
self.SetSecurityInitializer(lambda security: security.SetMarketPrice(self.GetLastKnownPrice(security)))
self.UniverseSettings.Resolution = Resolution.Daily
# Add universe selection of cryptos based on coarse fundamentals
self.AddUniverse(CryptoCoarseFundamentalUniverse(Market.Binance, self.UniverseSettings, self.UniverseSelectionFilter))
def UniverseSelectionFilter(self, data):
filtered = [datum for datum in data
if datum.Price >= 10 and datum.VolumeInUsd]
sorted_by_volume_in_usd = sorted(filtered, key=lambda datum: datum.VolumeInUsd, reverse=True)[:10]
return [datum.Symbol for datum in sorted_by_volume_in_usd]
def OnData(self, data):
for symbol in self.Securities.Keys:
symbol_value = self.AddCrypto(symbol, Resolution.Daily).Symbol
self.MarketOrder(symbol_value, 0.00001)
def OnSecuritiesChanged(self, changes):
for security in changes.RemovedSecurities:
self.Liquidate(security.Symbol)
"""