Overall Statistics |
Total Trades 657 Average Win 0.70% Average Loss -0.50% Compounding Annual Return 16.411% Drawdown 12.800% Expectancy 0.072 Net Profit 16.411% Sharpe Ratio 0.742 Probabilistic Sharpe Ratio 38.619% Loss Rate 56% Win Rate 44% Profit-Loss Ratio 1.41 Alpha 0.144 Beta 0.006 Annual Standard Deviation 0.194 Annual Variance 0.038 Information Ratio 0.774 Tracking Error 0.245 Treynor Ratio 24.664 Total Fees $5828.06 |
from Alphas.PearsonCorrelationPairsTradingAlphaModel import PearsonCorrelationPairsTradingAlphaModel from Execution.ImmediateExecutionModel import ImmediateExecutionModel from Portfolio.EqualWeightingPortfolioConstructionModel import EqualWeightingPortfolioConstructionModel from sklearn import linear_model import numpy as np import pandas as pd from scipy import stats from math import floor from datetime import timedelta import itertools import math from random import shuffle class PairsTradingAlgorithm(QCAlgorithm): def Initialize(self): self.stock_grouping = {0: ['NKE', 'AAP', 'QSR', 'GM', 'TJX', 'DHI', 'MGM', 'CBS']} self.pairs_list = [] for stocks in self.stock_grouping.values(): result = itertools.combinations(stocks, 2) list_of_lists = [list(elem) for elem in list(result)] self.pairs_list += list_of_lists self.stock_to_grouping = {} for k,v in self.stock_grouping.items(): for x in v: self.stock_to_grouping.setdefault(x,[]).append(k) for sector in self.stock_grouping.keys(): self.Debug('waaaat') self.SetCash(100000) # Set Strategy Cash self.AddAlpha(PearsonCorrelationPairsTradingAlphaModel(252, Resolution.Daily)) self.SetExecution(ImmediateExecutionModel()) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel()) symbols = [ Symbol.Create("NASDAQ", SecurityType.Equity, Market.USA) ] self.AddUniverseSelection(ManualUniverseSelectionModel(symbols)) self.SetStartDate(2015,2,20) self.SetEndDate(2016,2,19) self.numdays = 60# set the length of training period stocks = self.stock_grouping.values() tickers = [] for list_element in stocks: for tick in list_element: tickers += [tick] tickers = list(set(tickers)) self.symbols = [] self.tick_2_sym_dict = dict() for i in tickers: self.symbols.append(self.AddEquity(i,Resolution.Minute).Symbol) self.lastSlice = None def OnData(self, data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data''' self.lastSlice = data