Overall Statistics
Total Trades
63
Average Win
0.11%
Average Loss
-0.05%
Compounding Annual Return
21.133%
Drawdown
0.400%
Expectancy
0.507
Net Profit
1.624%
Sharpe Ratio
5.308
Probabilistic Sharpe Ratio
88.932%
Loss Rate
52%
Win Rate
48%
Profit-Loss Ratio
2.11
Alpha
0.142
Beta
0.115
Annual Standard Deviation
0.038
Annual Variance
0.001
Information Ratio
-2.863
Tracking Error
0.116
Treynor Ratio
1.765
Total Fees
$206.03
class OptimizedCalibratedFlange(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2013,10,1)   # Set Start Date
        self.SetEndDate(2013,10,31)    # Set End Date
        self.security = self.AddEquity("SPY", Resolution.Hour)
        self.spy = self.security.Symbol
        # set models
        self.SetSecurityInitializer(self.CustomSecurityInitializer)

    def OnData(self, data):
        open_orders = self.Transactions.GetOpenOrders(self.spy)
        if len(open_orders) != 0: return

        if self.Time.day > 10 and self.security.Holdings.Quantity <= 0:
            quantity = self.CalculateOrderQuantity(self.spy, .5)
            # self.Log("MarketOrder: " + str(quantity))
            self.MarketOrder(self.spy, quantity, True)   # async needed for partial fill market orders
        
        elif self.Time.day > 20 and self.security.Holdings.Quantity >= 0:
            quantity = self.CalculateOrderQuantity(self.spy, -.5)
            # self.Log("MarketOrder: " + str(quantity))
            self.MarketOrder(self.spy, quantity, True)   # async needed for partial fill market orders

    def CustomSecurityInitializer(self, security):
        self.Debug("CustomSecurityInitializer called")
        '''Initialize the security with raw prices'''
        security.SetSlippageModel(CustomSlippageModel(self))
        security.SetFeeModel(CustomFeeModel(self))
        
class CustomFeeModel:
    def __init__(self, algorithm):
        self.algorithm = algorithm

    def GetOrderFee(self, security, order):
        self.Debug("GetOrderFee called")
        # custom fee math
        fee = max(1, security.Price * order.AbsoluteQuantity * d.Decimal(0.00001))
        self.algorithm.Log("CustomFeeModel: " + str(fee))
        # return fee
        return 0
        
class CustomSlippageModel:
    def __init__(self, algorithm):
        self.algorithm = algorithm
        
    def GetSlippageApproximation(self, asset, order):
        # custom slippage math
        slippage = asset.Price * d.Decimal(0.0001 * np.log10(2*float(order.AbsoluteQuantity)))
        self.algorithm.Log("CustomSlippageModel: " + str(slippage))
        return slippage