| Overall Statistics |
|
Total Trades 430 Average Win 0.09% Average Loss -0.02% Compounding Annual Return 8.040% Drawdown 20.200% Expectancy 5.637 Net Profit 59.097% Sharpe Ratio 0.837 Probabilistic Sharpe Ratio 31.723% Loss Rate 3% Win Rate 97% Profit-Loss Ratio 5.84 Alpha 0.058 Beta 0.193 Annual Standard Deviation 0.103 Annual Variance 0.011 Information Ratio -0.333 Tracking Error 0.177 Treynor Ratio 0.447 Total Fees $3821.80 |
import numpy as np
syms = ['NXN', 'INSI', 'BKT']
static_weights = [0.09424385, 0.21781130, 0.68794489]
class MultidimensionalModulatedRegulators(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2015, 1, 1) # Set Start Date
self.SetCash(1000000) # Set Strategy Cash
self.SetExecution(VolumeWeightedAveragePriceExecutionModel())
self.symbols = []
for i in range(len(syms)):
#if static_weights[i] < 0: syms[i] = neg_syms[i]
self.symbols.append(Symbol.Create(syms[i], SecurityType.Equity, Market.USA))
#static_weights[i] = np.abs(static_weights[i])
self.Debug(syms[i])
self.SetUniverseSelection( ManualUniverseSelectionModel(self.symbols) )
self.UniverseSettings.Resolution = Resolution.Hour
self.AddEquity('SPY', Resolution.Hour)
self.SetBenchmark('SPY')
self.SetBrokerageModel(AlphaStreamsBrokerageModel())
self.constant_weights = np.array([0.09424385, 0.21781130, 0.68794489])
self.constant_weights /= np.sum(np.abs(self.constant_weights))
self.leverage = 1.5
def OnData(self, data):
rebalance = False
if self.Portfolio.TotalHoldingsValue > 0:
total = 0.0
for i, sym in enumerate(self.symbols):
curr = (self.Securities[sym].Holdings.HoldingsValue/self.Portfolio.TotalHoldingsValue)
diff = self.constant_weights[i] - curr
total += np.abs(diff)
if total > 0.01:
rebalance = True
if rebalance or (not self.Portfolio.Invested):
for i, sym in enumerate(self.symbols):
if self.constant_weights[i] != 0:
self.SetHoldings(sym, self.constant_weights[i] * self.leverage)