| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -0.948 Tracking Error 0.117 Treynor Ratio 0 Total Fees $0.00 |
from QuantConnect.Data.Custom.TradingEconomics import *
class CustomDataIndexAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2013, 8, 1) # Set Start Date
self.SetEndDate(2020, 1, 1) # Set End Date
self.SetCash(100000) # Set Strategy Cash
# Add data sources
self.AddData(IRX, "IRX")
self.AddData(TNX, "TNX")
self.AddData(TradingEconomicsCalendar, TradingEconomics.Calendar.UnitedStates.ConsumerConfidence)
self.consumerConfidence = None
# Setup plots
confidencePlot = Chart("Confidence Plot")
confidencePlot.AddSeries(Series('Confidence', SeriesType.Line, 0))
self.AddChart(confidencePlot)
differencePlot = Chart("Difference Plot")
differencePlot.AddSeries(Series('TNX-IRX', SeriesType.Line, 0))
self.AddChart(differencePlot)
def OnData(self, data):
# Get latest consumer confidence
confidence = data.Get(TradingEconomicsCalendar)
for c in confidence.Values:
self.consumerConfidence = c.Actual
# Ensure we have data from all three sources
if (self.consumerConfidence is None or \
not data.ContainsKey("IRX") or \
not data.ContainsKey("TNX")):
return
# Get values for IRX and TNX
irx = data["IRX"].Close
tnx = data["TNX"].Close
# Add to plots
self.Plot("Confidence Plot", "Confidence", self.consumerConfidence)
self.Plot("Difference Plot", "TNX-IRX", tnx-irx)
# Check condition
if tnx - irx < 0 and self.consumerConfidence > 100:
self.Log(f"Do something")
def parse(line, index, config):
"""Helper function to parse custom data sources"""
# If first character is not digit, pass
if not (line.strip() and line[0].isdigit()): return None
try:
data = line.split(',')
if data[1] == 'null': return None
tnx = index()
tnx.Symbol = config.Symbol
tnx.Time = datetime.strptime(data[0], '%Y-%m-%d') + timedelta(hours=20) # Make sure we only get this data AFTER trading day - don't want forward bias.
tnx.Value = float(data[5])
tnx['Open'] = float(data[1])
tnx['High'] = float(data[2])
tnx['Low'] = float(data[3])
tnx['Close'] = float(data[4])
tnx['Adj Close'] = float(data[5])
return tnx
except ValueError:
# Do nothing, possible error in json decoding
return None
class IRX(PythonData):
'''Custom Data Type: IRX data from Yahoo Finance - https://www.dropbox.com/s/qa0rlszexthwa8g/IRX.csv?dl=0'''
def GetSource(self, config, date, isLiveMode):
source = "https://www.dropbox.com/s/qa0rlszexthwa8g/IRX.csv?dl=1"
return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile)
def Reader(self, config, line, date, isLive):
return parse(line, IRX, config)
class TNX(PythonData):
'''Custom Data Type: TNX data from Yahoo Finance - https://www.dropbox.com/s/rgmqyuu400cgsad/TNX.csv?dl=0'''
def GetSource(self, config, date, isLiveMode):
source = "https://www.dropbox.com/s/rgmqyuu400cgsad/TNX.csv?dl=1"
return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile)
def Reader(self, config, line, date, isLive):
return parse(line, TNX, config)