Spaces:
Running
Running
Commit
·
5df6537
1
Parent(s):
f680f62
technical_analysis: minor bug fixes, return df
Browse files- src/technical_analysis.py +12 -9
src/technical_analysis.py
CHANGED
|
@@ -32,10 +32,6 @@ class TechnicalAnalysis():
|
|
| 32 |
debug : bool, optional, default: False
|
| 33 |
whether run in debug mode, so that logging should be produced at debug level
|
| 34 |
"""
|
| 35 |
-
self.ticker = ticker
|
| 36 |
-
self.fetchperiodinweeks = fetchperiodinweeks
|
| 37 |
-
self.plot_ta = plot_ta
|
| 38 |
-
|
| 39 |
# set up logging
|
| 40 |
if debug:
|
| 41 |
self.logger_level = logging.DEBUG
|
|
@@ -44,6 +40,11 @@ class TechnicalAnalysis():
|
|
| 44 |
self.logger = logging.getLogger(__name__)
|
| 45 |
logging.basicConfig(level=self.logger_level) # filename='TechnicalAnalysis.log',
|
| 46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
def run(
|
| 48 |
self
|
| 49 |
) -> None:
|
|
@@ -69,7 +70,7 @@ class TechnicalAnalysis():
|
|
| 69 |
'Indices': ['RSI', 'StochOsc'],
|
| 70 |
'Trend': ['MACD', 'MACDsig', 'MACDdif']}
|
| 71 |
)
|
| 72 |
-
|
| 73 |
|
| 74 |
def fetch_data(
|
| 75 |
self
|
|
@@ -93,7 +94,7 @@ class TechnicalAnalysis():
|
|
| 93 |
"""
|
| 94 |
|
| 95 |
period_start = dt.datetime.now() - dt.timedelta(weeks=self.fetchperiodinweeks)
|
| 96 |
-
self.logger.info(f'Fetching price data for {ticker}')
|
| 97 |
try:
|
| 98 |
df = yf.download(
|
| 99 |
self.ticker,
|
|
@@ -110,9 +111,9 @@ class TechnicalAnalysis():
|
|
| 110 |
# get rid of the redundant ticker column
|
| 111 |
df.columns = df.columns.droplevel('Ticker')
|
| 112 |
self.logger.debug(df.head(10))
|
| 113 |
-
self.logger.info(f'Fetched {df.shape[0]} rows for {ticker}')
|
| 114 |
else:
|
| 115 |
-
raise Exception(f'Failed to fetch data for {ticker}')
|
| 116 |
|
| 117 |
return df
|
| 118 |
|
|
@@ -213,6 +214,7 @@ class TechnicalAnalysis():
|
|
| 213 |
colstoplot)
|
| 214 |
plt.tight_layout()
|
| 215 |
plt.savefig(os.path.join('plots', f'{self.ticker}.png'))
|
|
|
|
| 216 |
|
| 217 |
def plot_stock_metrics_ax(
|
| 218 |
self,
|
|
@@ -272,6 +274,7 @@ class TechnicalAnalysis():
|
|
| 272 |
|
| 273 |
if __name__ == '__main__':
|
| 274 |
ticker = 'GOOG'
|
| 275 |
-
|
|
|
|
| 276 |
|
| 277 |
|
|
|
|
| 32 |
debug : bool, optional, default: False
|
| 33 |
whether run in debug mode, so that logging should be produced at debug level
|
| 34 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
# set up logging
|
| 36 |
if debug:
|
| 37 |
self.logger_level = logging.DEBUG
|
|
|
|
| 40 |
self.logger = logging.getLogger(__name__)
|
| 41 |
logging.basicConfig(level=self.logger_level) # filename='TechnicalAnalysis.log',
|
| 42 |
|
| 43 |
+
self.ticker = ticker
|
| 44 |
+
self.fetchperiodinweeks = fetchperiodinweeks
|
| 45 |
+
self.plot_ta = plot_ta
|
| 46 |
+
self.logger.info(f'Initialized TechnicalAnalysis object for ticker: {ticker}')
|
| 47 |
+
|
| 48 |
def run(
|
| 49 |
self
|
| 50 |
) -> None:
|
|
|
|
| 70 |
'Indices': ['RSI', 'StochOsc'],
|
| 71 |
'Trend': ['MACD', 'MACDsig', 'MACDdif']}
|
| 72 |
)
|
| 73 |
+
return self.df
|
| 74 |
|
| 75 |
def fetch_data(
|
| 76 |
self
|
|
|
|
| 94 |
"""
|
| 95 |
|
| 96 |
period_start = dt.datetime.now() - dt.timedelta(weeks=self.fetchperiodinweeks)
|
| 97 |
+
self.logger.info(f'Fetching price data for {self.ticker}')
|
| 98 |
try:
|
| 99 |
df = yf.download(
|
| 100 |
self.ticker,
|
|
|
|
| 111 |
# get rid of the redundant ticker column
|
| 112 |
df.columns = df.columns.droplevel('Ticker')
|
| 113 |
self.logger.debug(df.head(10))
|
| 114 |
+
self.logger.info(f'Fetched {df.shape[0]} rows for {self.ticker}')
|
| 115 |
else:
|
| 116 |
+
raise Exception(f'Failed to fetch data for {self.ticker}')
|
| 117 |
|
| 118 |
return df
|
| 119 |
|
|
|
|
| 214 |
colstoplot)
|
| 215 |
plt.tight_layout()
|
| 216 |
plt.savefig(os.path.join('plots', f'{self.ticker}.png'))
|
| 217 |
+
plt.close()
|
| 218 |
|
| 219 |
def plot_stock_metrics_ax(
|
| 220 |
self,
|
|
|
|
| 274 |
|
| 275 |
if __name__ == '__main__':
|
| 276 |
ticker = 'GOOG'
|
| 277 |
+
df = TechnicalAnalysis(ticker, debug=False).run()
|
| 278 |
+
print(f'columns: {df.columns}')
|
| 279 |
|
| 280 |
|