GoogleCloudPlatform / GoogleCloudPlatform/training-data-analyst

KeyError: "name='B', domain=None, path=None" , Can not run momentum_backtest_losing_money.ipynb

Open
#1,823 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Jupyter Notebook
Stars
8.6k
Forks
6.1k
Avg merge
4h 44m
Merged PRs (30d)
2

Description

The source code privided to run this [sketch](https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/courses/ai-for-finance/solution/momentum_backtest_losing_money.ipynb)

contains error when fetching yahoo data need to apply [this fix](https://github.com/Auquan/auquantoolbox/pull/4/commits/71c0fb900cc3a9085fc32cd8bd8c0a9115607c5e)

To file under path /home/jupyter/.local/lib/python3.7/site-packages/backtester/dataSource/data_source_utils.py, I am not sure where is it taken from but it should be related to [auquantoolbox](https://github.com/Auquan/auquantoolbox)

@charlesschaefer , please check as well

Issue stack trace:
```
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/tmp/ipykernel_21116/1996377170.py in
1 tf = MyTradingFunctions()
2 tsParams = MyTradingParams(tf)
----> 3 tradingSystem = TradingSystem(tsParams)
4 results = tradingSystem.startTrading()

~/.local/lib/python3.7/site-packages/backtester/trading_system.py in __init__(self, tsParams)
33 self.executionSystem = None
34 self.orderPlacer = None
---> 35 self.dataParser = self.tsParams.getDataParser()
36 self.executionSystem = self.tsParams.getExecutionSystem()
37 self.orderPlacer = self.tsParams.getOrderPlacer()

/tmp/ipykernel_21116/1453009385.py in getDataParser(self)
19 instrumentIds = instrumentIds,
20 startDateStr = self.__startDate,
---> 21 endDateStr = self.__endDate,
22 )
23

~/.local/lib/python3.7/site-packages/backtester/dataSource/yahoo_data_source.py in __init__(self, cachedFolderName, dataSetId, instrumentIds, startDateStr, endDateStr, event, adjustPrice, downloadId, liveUpdates, pad)
117 self.event = event
118 if liveUpdates:
--> 119 self._allTimes, self._groupedInstrumentUpdates = self.getGroupedInstrumentUpdates()
120 self.processGroupedInstrumentUpdates()
121 self._bookDataFeatureKeys = self.__bookDataByFeature.keys()

~/.local/lib/python3.7/site-packages/backtester/dataSource/data_source.py in getGroupedInstrumentUpdates(self)
65 print('Processing data for stock: %s' % (instrumentId))
66 fileName = self.getFileName(instrumentId)
---> 67 if not self.downloadAndAdjustData(instrumentId, fileName):
68 continue
69 with open(fileName) as f:

~/.local/lib/python3.7/site-packages/backtester/dataSource/yahoo_data_source.py in downloadAndAdjustData(self, instrumentId, fileName)
131 def downloadAndAdjustData(self, instrumentId, fileName):
132 if not os.path.isfile(fileName):
--> 133 if not downloadFileFromYahoo(self._startDate, self._endDate, instrumentId, fileName):
134 logError('Skipping %s:' % (instrumentId))
135 return False

~/.local/lib/python3.7/site-packages/backtester/dataSource/data_source_utils.py in downloadFileFromYahoo(startDate, endDate, instrumentId, fileName, event)
28 def downloadFileFromYahoo(startDate, endDate, instrumentId, fileName, event='history'):
29 logInfo('Downloading %s' % fileName)
---> 30 cookie, crumb = getCookieForYahoo(instrumentId)
31 start = int(mktime(startDate.timetuple()))
32 end = int(mktime(endDate.timetuple()))

~/.local/lib/python3.7/site-packages/backtester/dataSource/data_source_utils.py in getCookieForYahoo(instrumentId)
15 req = requests.get(url)
16 txt = req.content
---> 17 cookie = req.cookies['B']
18 pattern = re.compile('.*"CrumbStore":\{"crumb":"(?P[^"]+)"\}')
19

/opt/conda/lib/python3.7/site-packages/requests/cookies.py in __getitem__(self, name)
326 .. warning:: operation is O(n), not O(1).
327 """
--> 328 return self._find_no_duplicates(name)
329
330 def __setitem__(self, name, value):

/opt/conda/lib/python3.7/site-packages/requests/cookies.py in _find_no_duplicates(self, name, domain, path)
397 if toReturn:
398 return toReturn
--> 399 raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
400
401 def __getstate__(self):

KeyError: "name='B', domain=None, path=None"
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.