Hi,
I added weather data as a custom data source (as described here: https://www.quantconnect.com/docs/algorithm-reference/importing-custom-data), but the data is never downloaded. What am I doing wrong?
from Weather import Weather
class WeatherSimple(QCAlgorithm):
# Taking weather into account using a custom data source (I called it simple because it will not be using the Algorithm Framework)
def Initialize(self):
# Set Strategy Cash. In live trading, this is ignored and replaced with the actual cash of the account
self.SetCash(50 * 1000)
# Set start and end date
start_date = datetime(year=2017, month=1, day=1)
self.SetStartDate(start_date)
self.SetEndDate(start_date + timedelta(weeks=12 * 4))
# Set brokerage model
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin)
# Set benchmark - this is the performance that we want to beat if we aim to "beat the market"
self.SetBenchmark("SPY")
# Add securities
resolution = Resolution.Daily
self.tickers = ["AAPL", "IBM", "TSLA", "GOOG"]
for ticker in self.tickers:
# Request the data
symbol = self.AddEquity(ticker, resolution, Market.USA).Symbol
# Set data normalization mode
self.Securities[ticker].SetDataNormalizationMode(DataNormalizationMode.SplitAdjusted)
# SplitAdjusted means that the price is adjusted for splits but dividends are paid directly to my balance
# Add WEATHER DATA - as a custom data source
self.AddData(Weather, self.tickers[0], resolution)
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
'''
# Set Holdings such that each ticker gets the same fraction of our money
num_tickers = len(self.tickers)
fraction_per_ticker = 1. / num_tickers
self.SetHoldings([PortfolioTarget(ticker, fraction_per_ticker) for ticker in self.tickers])
# Get bars for each ticker
trade_bars = data.Bars
for ticker in self.tickers:
# Sometimes, there is no info for some of the symbols
if ticker not in trade_bars:
continue
bar = trade_bars[ticker]
# self.Debug(f"{ticker} price at {self.Time}: {bar}")
# Check if dividends were paid out during the current time slice
for ticker in self.tickers:
if data.Dividends.ContainsKey(ticker):
## Log the dividend distribution
distribution = data.Dividends[ticker].Distribution
self.Debug(f"{ticker} paid a dividend of {distribution}")
class Weather(PythonData):
''' Weather based rebalancing'''
def GetSource(self, config, date, isLive):
source = "https://www.wunderground.com/history/airport/{0}/{1}/1/1/CustomHistory.html?dayend=31&monthend=12&yearend={1}&format=1".format(config.Symbol, date.year);
return SubscriptionDataSource(source, SubscriptionTransportMedium.RemoteFile);
def Reader(self, config, line, date, isLive):
# If first character is not digit, pass
if not (line.strip() and line[0].isdigit()):
return None
data = line.split(',')
weather = Weather()
weather.Symbol = config.Symbol
weather.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.
weather.Value = decimal.Decimal(data[2])
weather["MaxC"] = float(data[1])
weather["MinC"] = float(data[3])
return weather
Thanks!
Rahul Chowdhury
Hi Killian,
The sources for weather data from QCUWeatherBasedRebalancing like
are deprecated. We've opened a GitHub issue to replace the sources for custom weather data on QCUWeatherBasedRebalancing. Once it has been updated, you can use the new historical weather data source for your own algorithm.
Best
Rahul
Kilian Merkelbach
The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
To unlock posting to the community forums please complete at least 30% of Boot Camp.
You can continue your Boot Camp training progress from the terminal. We hope to see you in the community soon!