Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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))
Beispiel #5
0
def Age(s):
    #Request data
    s = YahooGrabber(s)
    #Output age
    return len(s['Adj Close'])
Beispiel #6
0
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
Beispiel #7
0
#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:]
Beispiel #10
0
@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)
Beispiel #11
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'):
Beispiel #12
0
#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)
Beispiel #15
0
#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')
Beispiel #18
0
"""

#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,