Overall Statistics
Total Trades
45
Average Win
3.27%
Average Loss
-2.66%
Compounding Annual Return
8.223%
Drawdown
5.400%
Expectancy
0.147
Net Profit
12.126%
Sharpe Ratio
0.889
Probabilistic Sharpe Ratio
42.154%
Loss Rate
49%
Win Rate
51%
Profit-Loss Ratio
1.23
Alpha
0.058
Beta
0.033
Annual Standard Deviation
0.066
Annual Variance
0.004
Information Ratio
0.245
Tracking Error
0.156
Treynor Ratio
1.767
Total Fees
$81.31
Estimated Strategy Capacity
$1200000.00
Lowest Capacity Asset
SNPS R735QTJ8XC9X
# Pair momentum spread

from AlgorithmImports import *

SYMBOLS = ["CDNS","SNPS"]; MOM = 2;

class WTIBRENTSpread(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2021, 1, 1)
        self.SetCash(100000)
        self.symbols = [self.AddEquity(ticker, Resolution.Minute).Symbol for ticker in SYMBOLS]
        self.mom = {}
        for symbol in self.symbols:
             self.mom[symbol] = self.MOM(symbol, MOM, Resolution.Daily)
        self.SetWarmUp(MOM + 1, Resolution.Daily)  
        
       
    def OnData(self, data):
        if self.Time.time() != time(10, 31): return
        if self.IsWarmingUp: return
        if not (self.mom[self.symbols[0]].IsReady and self.mom[self.symbols[1]].IsReady): return
    
        spread = self.mom[self.symbols[0]].Current.Value - self.mom[self.symbols[1]].Current.Value
        self.Plot("spread", "spread", spread)
        
        if spread > 10:
            self.SetHoldings(self.symbols[0], -0.5)
            self.SetHoldings(self.symbols[1], 0.5)
        elif spread < -10:
            self.SetHoldings(self.symbols[0], 0.5)
            self.SetHoldings(self.symbols[1], -0.5)