| Overall Statistics |
|
Total Trades 346 Average Win 1.92% Average Loss -1.26% Compounding Annual Return 10.386% Drawdown 15.500% Expectancy 0.457 Net Profit 155.915% Sharpe Ratio 0.725 Loss Rate 42% Win Rate 58% Profit-Loss Ratio 1.52 Alpha 0.076 Beta -0.028 Annual Standard Deviation 0.102 Annual Variance 0.01 Information Ratio -0.082 Tracking Error 0.163 Treynor Ratio -2.677 Total Fees $2198.41 |
from QuantConnect.Data.Custom.PsychSignal import *
class SP500SectorsETFUniverseExampleAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 4, 10)
self.SetCash(100000)
## Set Universe Selection Model
self.SetUniverseSelection(TechnologyETFUniverse())
#self.SetUniverseSelection(SP500SectorsETFUniverse())
## Set Alpha Model
self.SetAlpha(MyAlphaModel())
## Set Portfolio Construction Model
self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())
## Set Execution Model
self.SetExecution(ImmediateExecutionModel())
## Set Risk Management Model
self.SetRiskManagement(NullRiskManagementModel())
class MyAlphaModel:
def __init__(self):
self.timeEntered = datetime(1998, 1, 1)
self.period = timedelta(days=10)
def Update(self, algorithm, data):
insights = []
# Scan our last time traded to prevent churn.
if (algorithm.Time - self.timeEntered) <= self.period:
return insights
# Fetch the PsychSignal data for the active securities and trade on any
for security in algorithm.ActiveSecurities.Values:
if security.Type != SecurityType.Equity:
continue
tweets = security.Data.GetAll(PsychSignalSentiment)
for sentiment in tweets:
if sentiment.BullIntensity > 2.0 and sentiment.BullScoredMessages > 3:
insights.append(Insight.Price(security.Symbol, self.period, InsightDirection.Up, None, None))
self.timeEntered = algorithm.Time + self.period
return insights
def OnSecuritiesChanged(self, algorithm, changes):
for security in changes.AddedSecurities:
if security.Type == SecurityType.Equity:
algorithm.AddData(PsychSignalSentiment, security.Symbol)