Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
-72.574%
Drawdown
10.500%
Expectancy
0
Net Profit
-6.070%
Sharpe Ratio
-1.158
Probabilistic Sharpe Ratio
24.956%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.17
Beta
0.623
Annual Standard Deviation
0.482
Annual Variance
0.233
Information Ratio
0.213
Tracking Error
0.306
Treynor Ratio
-0.896
Total Fees
$14.75
Estimated Strategy Capacity
$160000.00
Lowest Capacity Asset
QQQ XDR43ZB6073A|QQQ RIWIV7K5Z9LX
from AlgorithmImports import *


class DemoAlgoPortfolioTargetPercentBug(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 3, 15)  
        self.SetEndDate(2020, 4, 1)
        self.SetCash(1_000_000)  
        self.UniverseSettings.DataNormalizationMode = DataNormalizationMode.Raw 
        self.Settings.FreePortfolioValuePercentage = 0 
        self.targetPercent = 0.1 
        self.AddEquity("QQQ", Resolution.Minute)
        self.symbol = Symbol.CreateOption("QQQ", Market.USA, OptionStyle.American, OptionRight.Call, 174, datetime(2020, 4, 17))
        self.AddOptionContract(self.symbol, Resolution.Minute) 


    def OnData(self, data: Slice):
        if not self.Portfolio.Invested:
            if self.symbol in data.QuoteBars:
                target = PortfolioTarget.Percent(self, self.symbol, self.targetPercent) 
                self.MarketOrder(self.symbol, target.Quantity)
    

    def OnOrderEvent(self, orderEvent):
        if orderEvent.Status == OrderStatus.Filled:
            portfolioWeight = self.Portfolio[orderEvent.Symbol].HoldingsCost / self.Portfolio.TotalPortfolioValue 
            self.Debug(f"\nActual portfolio weight of {orderEvent.Symbol.Value} after order fill: {portfolioWeight:.2%}. Target Percent was {self.targetPercent:.2%}.\n")