Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
193.784%
Drawdown
50.500%
Expectancy
0
Net Profit
75.649%
Sharpe Ratio
2.868
Probabilistic Sharpe Ratio
64.046%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
2.739
Beta
-0.533
Annual Standard Deviation
0.901
Annual Variance
0.811
Information Ratio
2.497
Tracking Error
0.918
Treynor Ratio
-4.843
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
CLXPF.CLXPF 2S
import decimal 

class ImportStock(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 12, 31)
        # self.SetEndDate(2020, 1, 1)
        self.SetCash(1000000)
        self.SetWarmup(200)
        self.SetBenchmark("SPY")

        self.stock = self.AddData(CLXPF, "CLXPF", Resolution.Minute).Symbol
        self.SetSecurityInitializer(lambda x: x.SetMarketPrice(self.GetLastKnownPrice(x)))
        
        # schedule trade execution 30 minutes after the first trading day of each month
        self.Schedule.On(self.DateRules.MonthStart(self.stock), \
                        self.TimeRules.AfterMarketOpen(self.stock, 30), \
                        self.Rebalance)
                        
        
    def OnData(self, data):
        if self.IsWarmingUp:
            return
                

    def Rebalance(self):
        self.Log("Rebalance fired at : {0}".format(self.Time))
        self.SetHoldings(self.stock, (1))
        
        
class CLXPF(PythonData):
    # get data
    def GetSource(self, config, date, isLive):
        source = "https://www.dropbox.com/s/1u82fjrctjual8y/CLXPF_price_volume_daily.csv?dl=1"
        return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile)
    
    #input data into reader method line-by-line    
    def Reader(self, config, line, date, isLive):
        # If line is empty or first character is not digit, pass
        if not (line.strip() and line[0].isdigit()):
            return None
        
        #split line at commas    
        data = line.split(',')
        clxpf = CLXPF()
        clxpf.Symbol = config.Symbol
        clxpf.Time = datetime.strptime(data[0], '%m/%d/%y') + timedelta(hours=20) # Make sure we only get this data AFTER trading day - don't want forward bias.
        clxpf.Value = decimal.Decimal(data[5])
        clxpf.Volume = float(data[6])

        return clxpf