Overall Statistics
Total Trades
238
Average Win
6.35%
Average Loss
-3.56%
Compounding Annual Return
1146.261%
Drawdown
40.200%
Expectancy
0.746
Net Profit
1488.291%
Sharpe Ratio
8.643
Probabilistic Sharpe Ratio
99.432%
Loss Rate
37%
Win Rate
63%
Profit-Loss Ratio
1.78
Alpha
6.038
Beta
1.288
Annual Standard Deviation
0.733
Annual Variance
0.538
Information Ratio
8.477
Tracking Error
0.72
Treynor Ratio
4.92
Total Fees
$0.00
Estimated Strategy Capacity
$250000.00
Lowest Capacity Asset
ETHUSD E3
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Util;
using QuantConnect.Algorithm;
using QuantConnect.DataSource;

namespace QuantConnect.DataLibrary.Tests
{
    /// <summary>
    /// Example algorithm using NFT Sales data as a source of alpha
    /// </summary>
    public class CryptoSlamNFTSalesAlgorithm : QCAlgorithm
    {
        private Symbol _nftSalesSymbol;
        private Symbol _ethSymbol;
        private decimal? _lastAvgSales = null;

        /// <summary>
        /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
        /// </summary>
        public override void Initialize()
        {
            SetStartDate(2020, 10, 07);  //Set Start Date
            SetCash(10000);
            
            _ethSymbol = AddCrypto("ETHUSD", Resolution.Minute, Market.Bitfinex).Symbol; 
            // Requesting data
            _nftSalesSymbol = AddData<CryptoSlamNFTSales>(_ethSymbol).Symbol;

            // Historical data
            var history = History<CryptoSlamNFTSales>(_nftSalesSymbol, 60, Resolution.Daily);
            Debug($"We got {history.Count()} items from our history request for {_ethSymbol} CryptoSlam NFT Sales data");
        }

        /// <summary>
        /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
        /// </summary>
        /// <param name="slice">Slice object keyed by symbol containing the stock data</param>
        public override void OnData(Slice slice)
        {
            // Retrieving data
            var data = slice.Get<CryptoSlamNFTSales>();
            if (!data.IsNullOrEmpty())
            {
            	Debug(data[_nftSalesSymbol].ToString());
            	
                var currentAvgSales = data[_nftSalesSymbol].TotalPriceUSD / data[_nftSalesSymbol].TotalTransactions;

                // comparing the average sales changes, we will buy ethereum or hold cash
                if (_lastAvgSales != null && currentAvgSales > _lastAvgSales)
                {
                    SetHoldings(_ethSymbol, 1);
                }
                else
                {
                    SetHoldings(_ethSymbol, 0);
                }

                _lastAvgSales = currentAvgSales;
            }
        }
    }
}