Skip to content

Commit e0a9234

Browse files
authored
Merge pull request mhallsmoore#165 from mhallsmoore/price_handler_returns
Price handler returns
2 parents 53fe7e0 + b3665e4 commit e0a9234

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

qstrader/price_handler/yahoo_daily_csv_bar.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ class YahooDailyCsvBarPriceHandler(AbstractBarPriceHandler):
1717
def __init__(
1818
self, csv_dir, events_queue,
1919
init_tickers=None,
20-
start_date=None, end_date=None
20+
start_date=None, end_date=None,
21+
calc_adj_returns=False
2122
):
2223
"""
2324
Takes the CSV directory, the events queue and a possible
@@ -35,6 +36,9 @@ def __init__(
3536
self.start_date = start_date
3637
self.end_date = end_date
3738
self.bar_stream = self._merge_sort_ticker_data()
39+
self.calc_adj_returns = calc_adj_returns
40+
if self.calc_adj_returns:
41+
self.adj_close_returns = []
3842

3943
def _open_ticker_price_csv(self, ticker):
4044
"""
@@ -126,6 +130,28 @@ def _create_event(self, index, period, ticker, row):
126130
)
127131
return bev
128132

133+
def _store_event(self, event):
134+
"""
135+
Store price event for closing price and adjusted closing price
136+
"""
137+
ticker = event.ticker
138+
# If the calc_adj_returns flag is True, then calculate
139+
# and store the full list of adjusted closing price
140+
# percentage returns in a list
141+
# TODO: Make this faster
142+
if self.calc_adj_returns:
143+
prev_adj_close = self.tickers[ticker][
144+
"adj_close"
145+
] / PriceParser.PRICE_MULTIPLIER
146+
cur_adj_close = event.adj_close_price / PriceParser.PRICE_MULTIPLIER
147+
self.tickers[ticker][
148+
"adj_close_ret"
149+
] = cur_adj_close / prev_adj_close - 1.0
150+
self.adj_close_returns.append(self.tickers[ticker]["adj_close_ret"])
151+
self.tickers[ticker]["close"] = event.close_price
152+
self.tickers[ticker]["adj_close"] = event.adj_close_price
153+
self.tickers[ticker]["timestamp"] = event.time
154+
129155
def stream_next(self):
130156
"""
131157
Place the next BarEvent onto the event queue.

0 commit comments

Comments
 (0)