| Overall Statistics |
|
Total Trades 493 Average Win 0.25% Average Loss -0.54% Compounding Annual Return -32.577% Drawdown 70.500% Expectancy -0.781 Net Profit -67.754% Sharpe Ratio -0.809 Probabilistic Sharpe Ratio 0.022% Loss Rate 85% Win Rate 15% Profit-Loss Ratio 0.46 Alpha -0.251 Beta 0.07 Annual Standard Deviation 0.3 Annual Variance 0.09 Information Ratio -1.037 Tracking Error 0.358 Treynor Ratio -3.486 Total Fees $493.09 |
import numpy as np
class ResistanceHorizontalGearbox(QCAlgorithm):
#tickers = ["CMB","NB","TRV"]
PortFoliolioMean = -0.000621
PortfolioStd = 0.011284
PortfolioMeanPlusStd = PortFoliolioMean + PortfolioStd
PortfolioMeanMinusStd = PortFoliolioMean - PortfolioStd
closes_day_before = {}
normal_portfolio_return_cum5 = []
def Initialize(self):
self.SetStartDate(2018, 1, 1) # Set Start Date
self.SetCash(10000) # Set Strategy Cash
self.AddEquity("CMB", Resolution.Daily)
self.AddEquity("NB", Resolution.Daily)
self.AddEquity("TRV", Resolution.Daily)
def OnData(self, data):
if len(self.closes_day_before) == 0:
self.closes_day_before['CMB'] = data['CMB'].Close
self.closes_day_before['NB'] = data['NB'].Close
self.closes_day_before['TRV'] = data['TRV'].Close
return
if not('CMB' in data and
'NB' in data and
'TRV' in data):
return
close1 = np.log(data['CMB'].Close) - np.log(self.closes_day_before['CMB'])
close2 = np.log(data['NB'].Close) - np.log(self.closes_day_before['NB'])
close3 = np.log(data['TRV'].Close) - np.log(self.closes_day_before['TRV'])
mean_portfolio_close = np.mean([close1, close2, close3])
normal_portfolio_return = 0
if mean_portfolio_close > self.PortfolioMeanPlusStd:
normal_portfolio_return = mean_portfolio_close - self.PortfolioMeanPlusStd
else:
normal_portfolio_return = mean_portfolio_close - self.PortfolioMeanMinusStd
if len(self.normal_portfolio_return_cum5) < 5:
self.normal_portfolio_return_cum5.append(normal_portfolio_return)
return
else:
self.normal_portfolio_return_cum5.pop(0)
self.normal_portfolio_return_cum5.append(normal_portfolio_return)
normal_portfolio_return_cum5_sum = sum(self.normal_portfolio_return_cum5)
if normal_portfolio_return_cum5_sum > self.PortfolioMeanPlusStd:
self.SetHoldings([PortfolioTarget("CMB", 0.33),
PortfolioTarget("NB", 0.33),
PortfolioTarget("TRV", 0.33)]);
elif normal_portfolio_return_cum5_sum < self.PortfolioMeanMinusStd:
self.SetHoldings([PortfolioTarget("CMB", -0.33),
PortfolioTarget("NB", -0.33),
PortfolioTarget("TRV", -0.33)]);
else:
self.Liquidate()