mirror of
https://github.com/andrewkdinh/fund-indicators.git
synced 2024-11-21 14:04:20 -08:00
120 lines
3.8 KiB
Python
120 lines
3.8 KiB
Python
# main.py
|
|
# Andrew Dinh
|
|
# Python 3.6.1
|
|
# Description:
|
|
'''
|
|
Asks users for mutual funds/stocks to compare
|
|
Asks to be compared (expense ratio, turnover, market capitalization, or persistence)
|
|
Asks for time period (Possibly: 1 year, 5 years, 10 years)
|
|
Makes the mutual funds as class Stock
|
|
Gets data from each API
|
|
Compare and contrast dates and end changeOverTime for set time period
|
|
NOTES: Later can worry about getting close values to make a graph or something
|
|
Gives correlation value using equation at the end (from 0 to 1)
|
|
|
|
FIRST TESTING WITH EXPENSE RATIO
|
|
'''
|
|
|
|
from StockData import StockData
|
|
from StockReturn import Return
|
|
|
|
listOfStocksData = []
|
|
listOfStocksReturn = []
|
|
#numberOfStocks = int(input("How many stocks or mutual funds would you like to analyze? ")) # CHANGE BACK LATER
|
|
numberOfStocks = 1
|
|
for i in range(0, numberOfStocks, 1):
|
|
print("Stock", i+1, ": ", end='')
|
|
stockName = str(input())
|
|
listOfStocksData.append(i)
|
|
listOfStocksData[i] = StockData()
|
|
listOfStocksData[i].setName(stockName)
|
|
# print(listOfStocksData[i].name)
|
|
|
|
#listOfStocksReturn.append(i)
|
|
#listOfStocksReturn[i] = StockReturn()
|
|
|
|
|
|
# Decide on a benchmark
|
|
benchmarkTicker = ''
|
|
while benchmarkTicker == '':
|
|
listOfBenchmarks = ['S&P500', 'DJIA', 'Russell 3000', 'MSCI EAFE']
|
|
listOfBenchmarksTicker = ['SPY', 'DJIA', 'VTHR', 'EFT']
|
|
print('\nList of benchmarks:', listOfBenchmarks)
|
|
#benchmark = str(input('Benchmark to compare to: '))
|
|
benchmark = 'S&P500'
|
|
|
|
for i in range(0,len(listOfBenchmarks), 1):
|
|
if benchmark == listOfBenchmarks[i]:
|
|
benchmarkTicker = listOfBenchmarksTicker[i]
|
|
i = len(listOfBenchmarks)
|
|
|
|
if benchmarkTicker == '':
|
|
print('Benchmark not found. Please type in a benchmark from the list')
|
|
|
|
print('\n', benchmark, ' (', benchmarkTicker, ')', sep='')
|
|
|
|
benchmarkName = str(benchmark)
|
|
benchmark = StockData()
|
|
benchmark.setName(benchmarkName)
|
|
StockData.main(benchmark)
|
|
|
|
benchmarkReturn = Return()
|
|
Return.mainBenchmark(benchmarkReturn, benchmark)
|
|
|
|
timeFrame = Return.returnTimeFrame(benchmarkReturn)
|
|
print('Time Frame [years, months]:', timeFrame)
|
|
|
|
sumOfListLengths = 0
|
|
for i in range(0, numberOfStocks, 1):
|
|
print('\n', listOfStocksData[i].name, sep='')
|
|
StockData.main(listOfStocksData[i])
|
|
# Count how many stocks are available
|
|
sumOfListLengths = sumOfListLengths + len(StockData.returnAllLists(listOfStocksData[i]))
|
|
|
|
if sumOfListLengths == 0:
|
|
print("No sources have data for given stocks")
|
|
exit()
|
|
|
|
# Find return over time using either Jensen's Alpha, Sharpe Ratio, Sortino Ratio, or Treynor Ratio
|
|
for i in range(0, numberOfStocks, 1):
|
|
print('\n', listOfStocksData[i].name, sep='')
|
|
#StockReturn.main(listOfStocksReturn[i])
|
|
|
|
|
|
# Runs correlation or regression study
|
|
# print(listOfStocksData[0].name, listOfStocksData[0].absFirstLastDates, listOfStocksData[0].finalDatesAndClose)
|
|
indicatorFound = False
|
|
while indicatorFound == False:
|
|
print("1. Expense Ratio\n2. Asset Size\n3. Turnover\n4. Persistence\nWhich indicator would you like to look at? ", end='')
|
|
|
|
#indicator = str(input()) # CHANGE BACK TO THIS LATER
|
|
indicator = 'Expense Ratio'
|
|
print(indicator, end='')
|
|
|
|
indicatorFound = True
|
|
print('\n', end='')
|
|
|
|
if indicator == 'Expense Ratio' or indicator == '1' or indicator == 'expense ratio':
|
|
#from ExpenseRatio import ExpenseRatio
|
|
print('\nExpense Ratio')
|
|
|
|
elif indicator == 'Asset Size' or indicator == '2' or indicator == 'asset size':
|
|
print('\nAsset Size')
|
|
|
|
elif indicator == 'Turnover' or indicator == '3' or indicator == 'turnover':
|
|
print('\nTurnover')
|
|
|
|
elif indicator == 'Persistence' or indicator == '4' or indicator == 'persistence':
|
|
print('\nPersistence')
|
|
|
|
else:
|
|
indicatorFound = False
|
|
print('Invalid input, please enter indicator again')
|
|
|
|
'''
|
|
stockName = 'IWV'
|
|
stock1 = Stock(stockName)
|
|
print("Finding available dates and close values for", stock1.name)
|
|
StockData.main(stock1)
|
|
'''
|