def AverageRollingVolume(s): s = YahooGrabber(s) #Avg rolling volume calculation s['AverageRollingVolume'] = s['Volume'].rolling(center=False, window=252).mean() #Output return s['AverageRollingVolume'].tail(1)
def CoeffVar(s): #Request data s = YahooGrabber(s) #Calculate log returns s['LogRet'] = np.log(s['Adj Close'] / s['Adj Close'].shift(1)) #Calculate average return s['Mean'] = np.mean(s['LogRet']) * 252 #Calculate STDev returns s['SD'] = np.std(s['LogRet']) * np.sqrt(252) #Calculate Coefficient of variation s['CoeffVar'] = s['SD'] / s['Mean'] #Output return s['CoeffVar'].tail(1)
def DividendYield(ticker): #Import modules from YahooGrabber import YahooGrabber from YahooDivGrabber import YahooDivGrabber #Data requests priceInfo = YahooGrabber(ticker) dividendInfo = YahooDivGrabber(ticker) #Get last price lastPrice = priceInfo['Adj Close'][-1] #Get last dividend lastDividend = dividendInfo['Dividends'][-1] #Calculate dividend yield based on last price divYield = lastDividend/lastPrice #Output dividend yield return divYield
@author: Adam Reinhold Von Fisher - https://www.linkedin.com/in/adamrvfisher/ """ #This is a single feature/dimension support vector machine - not dissimilar results from a linear regression #SVR - RBF #Import modules import numpy as np import matplotlib.pyplot as plt from YahooSourceDailyGrabber import YahooSourceDailyGrabber from YahooGrabber import YahooGrabber from sklearn.svm import SVR #Request data ticker = YahooGrabber('UVXY') #Variable assignment trim = 50 #Time series trimmer ticker = ticker[-200:-150] #Dates object dates = np.array(ticker.index) #Format dates = np.reshape(dates, (len(dates), 1)) #Prices object prices = ticker['Adj Close'] #Format prices = np.reshape(prices, (len(prices), 1))
def Age(s): #Request data s = YahooGrabber(s) #Output age return len(s['Adj Close'])
Empty = [] Dataset = pd.DataFrame() Portfolio = pd.DataFrame() Counter = 0 #Start timer Start = t.time() #Assign tickers Ticker1 = 'UVXY' Ticker2 = '^VIX' Ticker3 = '^VIX' Ticker4 = '^VXV' #Request data Asset1 = YahooGrabber(Ticker1) Asset2 = YahooGrabber(Ticker2) Asset3 = YahooGrabber(Ticker3) Asset4 = YahooGrabber(Ticker4) #Time series trimmer trim = abs(len(Asset1) - len(Asset2)) if len(Asset1) == len(Asset2): pass else: if len(Asset1) > len(Asset2): Asset1 = Asset1[trim:] else: Asset2 = Asset2[trim:] #Match lengths
#Empty data structures Empty = [] Dataset = pd.DataFrame() Portfolio = pd.DataFrame() Counter = 0 #Start timer start = t.time() #Input tickers Ticker1 = 'UVXY' Ticker2 = '^VIX' Ticker3 = '^VIX' #Request data Asset1 = YahooGrabber(Ticker1) Asset2 = YahooGrabber(Ticker2) Asset3 = YahooGrabber(Ticker3) #Time series trimmer trim = abs(len(Asset1) - len(Asset2)) if len(Asset1) == len(Asset2): pass else: if len(Asset1) > len(Asset2): Asset1 = Asset1[trim:] else: Asset2 = Asset2[trim:] #Match lengths Asset3 = Asset3[-len(Asset2):]
#Empty data structures Empty = [] Dataset = pd.DataFrame() Portfolio = pd.DataFrame() Start = t.time() Counter = 0 #Price Relative Moving Average Strategy #Input tickers Ticker1 = 'UVXY' Ticker2 = '^VIX' #Request data Asset1 = YahooGrabber(Ticker1) Asset2 = YahooGrabber(Ticker2) #Match time series lengths trim = abs(len(Asset1) - len(Asset2)) if len(Asset1) == len(Asset2): pass else: if len(Asset1) > len(Asset2): Asset1 = Asset1[trim:] else: Asset2 = Asset2[trim:] #Calculate log Returns Asset1['LogRet'] = np.log(Asset1['Adj Close']/Asset1['Adj Close'].shift(1)) Asset1['LogRet'] = Asset1['LogRet'].fillna(0)
#Empty data structures Empty = [] Counter = 0 Counter2 = 0 Dataset = pd.DataFrame() Portfolio = pd.DataFrame() Portfolio2 = pd.DataFrame() #Start timer Start = t.time() #timer #Iterable range iterations = range(0, 20000) #Request data Asset1 = YahooGrabber('UVXY') Asset2 = YahooGrabber('SQQQ') #Calculate log returns Asset1['LogRet'] = np.log(Asset1['Adj Close'] / Asset1['Adj Close'].shift(1)) Asset1['LogRet'] = Asset1['LogRet'].fillna(0) Asset2['LogRet'] = np.log(Asset2['Adj Close'] / Asset2['Adj Close'].shift(1)) Asset2['LogRet'] = Asset2['LogRet'].fillna(0) #Time series trimmer trim = abs(len(Asset1) - len(Asset2)) if len(Asset1) == len(Asset2): pass else: if len(Asset1) > len(Asset2): Asset1 = Asset1[trim:]
@author: Adam Reinhold Von Fisher - https://www.linkedin.com/in/adamrvfisher/ """ #This is a strategy tester #Import modules import pandas as pd import numpy as np from YahooGrabber import YahooGrabber #Input ticker = '^GSPC' #Request data s = YahooGrabber('UVXY') #Variable assignmnet window = 20 #Log return calculation s['LogRet'] = np.log(s['Adj Close'] / s['Adj Close'].shift(1)) s['LogRet'] = s['LogRet'].fillna(0) #ATR calculation s['Method1'] = s['High'] - s['Low'] s['Method2'] = abs((s['High'] - s['Adj Close'].shift(1))) s['Method3'] = abs((s['Low'] - s['Adj Close'].shift(1))) s['Method1'] = s['Method1'].fillna(0) s['Method2'] = s['Method2'].fillna(0) s['Method3'] = s['Method3'].fillna(0)
] #List to array stocks = np.array(listofstocks) #Variable assignment df = pd.DataFrame() ranger = range(0, len(listofstocks)) #For all stocks in universe for i in ranger: try: #x is ticker name x = listofstocks[i] #Request data temp = YahooGrabber(x) #Delete duplicate rows temp = temp[~temp.index.duplicated(keep='first')] #Calculate log returns temp['LogRet'] = np.log(temp['Adj Close'] / temp['Adj Close'].shift(1)) temp[x + 'LogRet'] = temp['LogRet'] temp[x + 'LogRet'] = temp[x + 'LogRet'].fillna(0) #Add log returns to matrix for later calculation df = pd.concat([df, temp[x + 'LogRet']], axis=1) #This is for DatabaseGrabber not YahooGrabber except FileNotFoundError: continue #Make directory for the log returns if not os.path.exists( 'F:\\Users\\AmatVictoriaCuram\\Database\\MiniUniverseLogRet'):
#This is a trading model/single asset strategy tester #R Multiple Finder; Trade Data Tracking #Import libraries import numpy as np #import random as rand import pandas as pd #import time as t #from DatabaseGrabber import DatabaseGrabber from YahooGrabber import YahooGrabber #import matplotlib.pyplot as plt import warnings #Inputs - OHLC data Ticker1 = 'GLD' Asset1 = YahooGrabber(Ticker1) #Tasty OHLC; ***ATTN*** insert path for OHLC data #Asset1 = pd.read_pickle('C:\\Users\\Username\\DirectoryLocation\\WorkingDirectory\\GLD') #Don't display warnings warnings.filterwarnings("ignore", category=RuntimeWarning) pd.options.mode.chained_assignment = None #Declaration/Assignments #Empty list Empty = [] #Empty dataframe Trades = pd.DataFrame() #Define starting equity Equity = 100000
#Import modules import numpy as np import random as rand import pandas as pd import time as t from DatabaseGrabber import DatabaseGrabber from YahooGrabber import YahooGrabber #Assign variables Empty = [] Dataset = pd.DataFrame() start = t.time() #Request data Ticker1 = YahooGrabber('^VIX') #we have these deltas Ticker2 = YahooGrabber('UVXY') #we compute these deltas #Spot price ratios ConversionFactor = Ticker2['Adj Close'][-1] / Ticker1['Adj Close'][-1] #Number of deltas/shares in ticker 1 Ticker1Delta = 1000 #Spot price ticker 1 Ticker1Cost = Ticker1['Adj Close'][-1] #Total position value Ticker1Notional = Ticker1Delta * Ticker1Cost #Portfolio allocation Ticker1Position = .57 Ticker2Position = .43
tempdf = pd.DataFrame() edgelist = [] #Assign ticker ticker1 = 'UVXY' #Variable assignment lag = 15 atrwindow = 20 smawindow = 20 edgedays = 20 #Iterable iterations = range(2, 120) #Request data Asset1 = YahooGrabber(ticker1) #Start timer start = t.time() #Calculate log returns Asset1['LogRet'] = np.log(Asset1['Adj Close'] / Asset1['Adj Close'].shift(1)) Asset1['LogRet'] = Asset1['LogRet'].fillna(0) #Alternative index Asset1['idx'] = range(0, len(Asset1)) #Calculate simple moving average Asset1['SMA'] = Asset1['Adj Close'].rolling(window=smawindow, center=False).mean() #Calculate ATR Asset1['UpMove'] = Asset1['High'] - Asset1['High'].shift(1)
#Import stocks to filter df = read_csv('companylist.csv', sep=',') #Formatting df1 = df.set_index('Symbol') symbols = df.Symbol.values #Define portfolio of stocks to scan port = (symbols) #End portfolio of stocks that pass scan port1 = [] print(symbols) #For all tickers to be scanned for s in port: try: #Data req is faster from local storage than HTML parse q = YahooGrabber(s) #If passes scan if sum(SAdjustedClose(q)) > 5 and SAge(q) > 750 and sum(SGapDown( q)) > .01 and sum(SAverageRollingVolume(q)) > 500000 and sum( DayOverAverageRollingVolume(q)) > 2 and sum( SAverageReturn(q)) < -.01 and sum(STrend(q)) < -0.01: print(s, STrend(q), DayOverAverageRollingVolume(q), SAge(q)) #Add to final list port1.append(s) except OSError: pass print(counter) counter = counter + 1 #List refined portfolio print(port1)
#Empty data structures tempdf = pd.DataFrame() edgelist = [] #Variable assignment ticker = 'UVXY' #For ATR + MFE/MFA atrwindow = 20 #For signal generation lag = 5 #How many days to calculate e-ratio for LengthOfTest = range(2, 120) #(2,3) = 1 day Eratio // assuming fill on close #Request data Asset = YahooGrabber(ticker) #In sample trimmer Asset = Asset[:] #Make column that represents X axis Asset['Index'] = Asset.index #Format for mpl Asset['IndexToNumber'] = Asset['Index'].apply(mdates.date2num) #Format Dataframe to feed candlestick_ohlc() AssetCopy = Asset[[ 'IndexToNumber', 'Open', 'High', 'Low', 'Close', 'Adj Close' ]].copy()
#This is a graphical display tool for candlestick charts + indicators #It has a trading model inside. #Import modules from YahooGrabber import YahooGrabber from YahooSourceDailyGrabber import YahooSourceDailyGrabber import matplotlib.pyplot as plt from matplotlib.finance import candlestick_ohlc import matplotlib.dates as mdates import numpy as np #Assign ticker string = 'STX' #Request data Asset = YahooGrabber(string) #Trimmer Asset = Asset[-100:] #Make column that represents X axis Asset['Index'] = Asset.index #Format for mpl Asset['IndexToNumber'] = Asset['Index'].apply(mdates.date2num) #Format Dataframe to feed candlestick_ohlc() AssetCopy = Asset[[ 'IndexToNumber', 'Open', 'High', 'Low', 'Close', 'Adj Close' ]].copy() #Create axe and define X and Y axis scale figure, axe = plt.subplots(figsize=(10, 5)) #Assign labels plt.ylabel(string + ' Price')
""" #This is a strategy optimizer #Import modules import pandas as pd from YahooGrabber import YahooGrabber import numpy as np import time as t import random as rand #Input ticker ticker = '^GSPC' #Request data - Use YahooGrabber s = YahooGrabber(ticker) #Number of iterations for brute force optimizer iterations = range(0, 800) #Loop counter counter = 0 #Empty assignments empty = [] dataset = pd.DataFrame() #Start timer start = t.time() #Return calculation s['LogRet'] = np.log(s['Adj Close'] / s['Adj Close'].shift(1))
#For all pairs in Brute Force Optimization for m in MajorList: #Iteration tracking print(m) #Read in tickers Ticker1 = m[0] Ticker2 = m[1] #Create two ticker name TAG = m[0] + '/' + m[1] #Empty data structures Dataset = pd.DataFrame() Portfolio = pd.DataFrame() #Request data Asset1 = YahooGrabber(Ticker1) Asset2 = YahooGrabber(Ticker2) #Calculate log returns Asset1['LogRet'] = np.log(Asset1['Adj Close'] / Asset1['Adj Close'].shift(1)) Asset1['LogRet'] = Asset1['LogRet'].fillna(0) Asset2['LogRet'] = np.log(Asset2['Adj Close'] / Asset2['Adj Close'].shift(1)) Asset2['LogRet'] = Asset2['LogRet'].fillna(0) #Time series trimmer trim = abs(len(Asset1) - len(Asset2)) if len(Asset1) == len(Asset2): pass else:
""" #This is a short only, martingale style, volatility trading strategy that takes incrementally larger positions #Import modules import numpy as np import random as rand import pandas as pd import time as t from DatabaseGrabber import DatabaseGrabber from YahooGrabber import YahooGrabber #Ticker assignment Ticker1 = 'UVXY' #Request data Asset1 = YahooGrabber(Ticker1) Asset1 = Asset1[:] #In #Range index Asset1['SubIndex'] = range(1, len(Asset1) + 1) #Assign variable windows ROCWindow = 28 HoldPeriod = 185 ATRWindow = 20 Counter = 0 PositionSize = 3 #PERCENT! UniformMove = .006 PositionScale = .0393 #PERCENT! #Calculate log Returns
@author: Adam Reinhold Von Fisher - https://www.linkedin.com/in/adamrvfisher/ """ #Basic graphing tool for candlestick charts using matplotlib #Import modules from matplotlib.finance import candlestick_ohlc import matplotlib.dates as mdates import pandas as pd import numpy as np import matplotlib.pyplot as plt from YahooGrabber import YahooGrabber #Request data Asset = YahooGrabber('UVXY') backup = YahooGrabber('UVXY') #Trim time series Asset = Asset[-50:] #Add date index Asset['Date'] = Asset.index #Copy for candlesticks AssetCopy = Asset[['Date', 'Open', 'High', 'Low', 'Close']].copy() #Add date index AssetCopy['Date'] = AssetCopy.index #Date formatting AssetCopy['Date'] = AssetCopy['Date'].apply(mdates.date2num) #Graph object fig1, axe = plt.subplots(figsize=(10, 5)) #Graph candlestick object candlestick_ohlc(axe,