Overall Statistics |
Total Trades 12 Average Win 0.00% Average Loss 0.00% Compounding Annual Return 181.188% Drawdown 0.100% Expectancy 0.121 Net Profit 1.331% Sharpe Ratio 22.43 Loss Rate 33% Win Rate 67% Profit-Loss Ratio 0.68 Alpha 0.734 Beta 0.127 Annual Standard Deviation 0.037 Annual Variance 0.001 Information Ratio 0.665 Tracking Error 0.067 Treynor Ratio 6.548 Total Fees $12.00 |
#Multi-part algo template import numpy as np from algorithm1 import * class Multialgorithm(QCAlgorithm): def Initialize(self): # Set the cash we'd like to use for our backtest # This is ignored in live trading self.SetCash(100000) # Start and end dates for the backtest. # These are ignored in live trading. self.SetStartDate(2017,1,1) self.SetEndDate(2017,1,5) self.algorithm_list = [] #call algorithms with self so that they get access to the main algorithm self.algorithm1 = Algo1(self) self.algorithm_list.append(self.algorithm1) self.securities = [] #get all the stocks from each algorithm and append it to one security list, if your algorithms trade #the same stocks you will have duplicates, you should add some code to remove duplicates after this step for algorithm in self.algorithm_list: for stock in algorithm.stocks: self.securities.append(stock) # get the data from all the assets from all your algorithms for stock in self.securities: self.Debug(str(stock)) self.AddEquity(stock, Resolution.Minute) def OnData(self, slice): # Simple buy and hold template for algorithm in self.algorithm_list: #compute each of your algorithms. This is a hack-job, you should have some separate code that computes #all of your algorithms in one step and combines the allocations into one master portfolio #in a scheduled function. algorithm.compute_allocation() for stock in self.securities: self.SetHoldings(stock, algorithm.allocation[stock])
class Algo1(object): def __init__(self, data): # __init__ gets called with the "self" from the main algorithm, that data is assigned to a local variable # self.data which gets used whenever variables or history is needed from the main algorithm. example: # Debug("") is not availible to Algo1, it's part of the main QCAlgorithm so it's called with self.data.Debug("") self.data = data self.data.Debug("initialize algo1") # Add assets you'd like to use, these get added in main.py initialize self.stocks = [ "SPY", "QQQ", "TLT", "TIP", "AGG", ] # Set the allocation that can be called from whatever is executing your trades. self.allocation = {} # all local parameters for this algorithm go into __init__ self.parameter = 10 def compute_allocation(self): #self.data.Log("compute_allocation") prices = self.data.History(self.stocks, self.parameter, Resolution.Daily)['close'] for sid in self.stocks: self.allocation[sid] = 1.0/len(self.stocks)