Midterm Flashcards
What are Bollinger Bands?
+/- 2 sigma from the rolling mean. When you see excursions outside of these limits it may be a buy or sell signal. Specifically, when you break through and then come back within that limit. Outside to inside, back toward the moving avg.
What are Daily Returns and how do you calculate it?
One of the most important stats.
( price[t] / price[t-1] ) - 1
It’s a percentage return for each day.
Most revealing when comparing daily returns against multiple stocks.
What are cumulative returns?
Total % change in stock from the beginning to some point in time.
cum_return[t] = (price[t] / price[0]) - 1
(todays price / price at the beginning) - 1
What methods are there to fill in missing data?
- Fill forward. Use the last known value and fill it forward until the next known value. At the beginning, fill backwards. (fill forward first, fill backward second)
- We do this because interpolating would be like peeking into the future.
- So the process is always fill forward first, and then fill backwards.
What type of distribution do stocks typically show?
A gaussian distribution.
What is kurtosis and how is it useful?
It’s a comparison of your distribution of data to a gaussian distribution. A positive value indicates that your tails are ‘fat’, meaning higher than a normal gaussian would look like. Negative kurtosis would indicate fewer excursions at the tails.
Summary:
- Positive value: fat tails
- Negative value: skinny tails
What is alpha and beta (with respect to a linear line fit of scatterplot data)?
Beta - slope - how reactive is the stock?
Alpha - y-intercept. > 0 means stock on Y axis is doing better than stock on X axis, generally.
This is generally compared to SPY, or ‘the market’, but it can be compared against any other stock.
How does the slope (beta) correlate two stocks?
It doesn’t! Slope is just the slope. Correlation is a measure of how tightly the data fits the line (like an R squared value)
How do you calculate your portfolio value?
- Start with DF with rows = days and columns = ticker
- DF = DF / DF[0] -> normalize each column. First row is now 1.0 for each column
- DF = DF * alloc -> multiple each col by it’s allocation. First row is now allocation
- DF = DF * Start value -> This gives the value of each stock on each day, based on the allocation (position values)
- df.sum(axis = 1) - Gives total portfolio value each day
What are the four key stats for a portfolio?
They are based on the daily returns (don’t forget to remove the first row after calc daily returns b/c it’s 0!)
- Cumulative return
- Avg Daily Return
- Std Daily Return
- Sharp Ratio
How do you calculate the avg daily return?
daily returns.mean()
How do you calculate the std daily return?
daily returns.std()
What is and how do you calculate the sharp ratio?
A metric that adjusts return for risk (eg, volatility). All else being equal:
- lower risk is better
- higher return is better
A higher sharpe ratio is better.
Sharp ratio also considers risk free rate of return: interest rate on your money in a risk free asset like bank account or short term treasury bonds.
Expected(Portfolio Return - Risk Free Return) / std(portfolio - risk)
mean(daily_returns - daily_risk_free) / std(daily_returns - daily_risk_free)
B/c the daily_risk_free shortcut evaluates to a constant, you can remove that value from the std and the final equation becomes:
SR_sampled = mean(daily_returns - dail_risk_free) / std(daily_returns)
… Then you finally add in the annual adjustment factor to get:
SR_annual = sqrt(# samples per year) * SR_sampled
Where can you get the values of the Risk Free Rate?
- LIBOR
- 3month T-Bill
- 0% …
Typically the daily risk free rate is calculated as follows:
daily_risk_free = root252(1 + APY) - 1
How many trading days are there for year?
252
Does it matter how frequently you calculate the sharp ratio?
Yes! It ill vary wildly depending on how often you sample. It was envisioned to be calculated annually.
- SR_annualized = K*SR
- K = sqrt(# samples per year)
So:
daily_k = sqrt(252)
weekly_k = sqrt(52)
monthly_k = sqrt(12)
It doesn’t matter how many data points you have! only the sample frequency!
daily, weekly, monthly
What is a basis point?
1/10000
so 10 bps = 0.001
What can you do with an optimizer?
- Find minimum values of functions
- Build parameterized models based on data (eg, find the optimum parameters for a model)
- Refine allocations to stocks in portfolios
What are convex problems?
If you can draw a line between any two points and there is a segment of the function above the line between the points, it’s non-convex.
It’s only convex if all function values between any two points lie below a line between those two points.
For function to be convex, it must have one local minima (eg, global minima). It should also have no flat spots.
Not guaranteed to find the global minima if it’s a non convex problem.
What is instance based vs parametric learning?
Parametric - Finds parameters for a model (linear regression). You don’t need the original data. Training is slow, but prediction is fast.
Instance Based - KNN - you store all the data and consult it for a solution. Training is fast (you just store data), but prediction is slow.
What is backtesting?
You role back time and test your system, provide some training data and then test how your system would trade, knowing what the stock prices actually did. This process repeats over and over.
Usually performance in the real world isn’t as good as what is shown in back testing.
What are the problems with regression?
- Noisy and uncertain
- challenging to estimate confidence
- holding time (how long you should hold), allocation
What is out of sample testing?
You test on data that you did not train on.
How does cross validation work?
Split data into N chunks, then 1 chunk is test and the rest is train. Then swap which chunk is the test chunk. Repeat this until you’ve tested all chunks. Take an average of the results.
This isn’t necessarily a good method for financial data though, because you can be peeking into the future.
What is roll forward cross validation?
This is similar to cross validation, except you make sure your test data is always ahead of your training data. If you have 5 chunks, you may do something like the following:
Train 1:, Test 2
Train 2: Test 3
Train 3: Test 4
Train 4: Test 5
Describe correlation
You’ve got XTest, YTest data. Then you make predictions on this test data. Now you calculate the correlation between the YTest and YPredict to see how well correlated they are.
Values are -1 (inversely correlated) -> +1 where -1 or +1 is strong positive or negative correlation. Closer to 0 is light the shotgun blast. (this is NOT the slope of a line of the data in a scatter plot with YTest vs YPred. More like a tight oval is high correlation and big circle is poor correlation)
Can use np.corrcoef or df.corr(method=’pearson’)
Describe overfitting
When in sample error is decreasing and you start to see out of sample error increasing.
What are ensemble learners?
Train multiple learners on the same data set (may be different types of learners). Feed each learner the X value you want to predict, then average the output (for regression) or do a majority vote for classification.
Describe algorithm bias.
What an algorithm is biased toward. For instance, a linear regression learner is biased toward being linear.
Creating an ensemble learner tends to smooth out the individual biases.
What is bootstrap aggregating?
AKA Bag learning. With your training data, you create m new models, each with a subset of the original data (sample with replacement).
So if you’ve got 100 data points in your training set, new training set also has 100 data points, but there could be repeats from the training data since you sample with replacement.
Then you query each model, collect the outputs and the mean() is the prediction.
What is Boosting (Ada Boost; Adaptive Boosting)?
Adaptive Boost
Starts like bagging. Sample with replacement to create a new data set and train your first learner.
Test your model against your training set and calculate error.
Create next new data set, sampling with replacement, but the probability of choose a sample is now weighted by the error of the previous models results. This means you’re more likely to choose data points that have high error.
Now you test the current ensemble against your training set and calculate the error. Then repeat for the next bag.
So it’s like bagging except that for each new bag, you’re testing on more of the data that you don’t perform well on.
What is the adjusted close vs close?
Close is literally just the close, adjusted close is adjusted for things like splits and dividend payments, etc.
How do you set the index to a date range in pandas?
df = pd.DataFrame(index=pd.date_range(start, end))
where start, end are date strings (YYYY-mm-dd)
How do you compute a rolling metric, such as the mean?
pd. rolling_mean(df[‘col’], window=N)
pd. rolling_std(df[‘col’], window=N)
How do you calculate the daily returns in numpy?
dr = ( (df / df.shift(1) ) - 1) [1:]
You return from the first value onward since your first value will be NaN.
You can also do:
dr[1:] = (df[1:] / df[:-1].values) - 1
df.ix[0, :] = 0
Must use values to make sure it does element wise division and doesn’t try to use index!
How do you fill missing values with pandas?
df. fillna(method=’ffill’)
df. fillna(method=’bfill’)
df. fillna(0)
How do you add horizontal and vertical lines to a plot?
plt. axvline(value, color, linestyle)
plt. axhline(value, color, linestyle)
How do you plot a histogram in pandas?
df[‘col’].hist(bins=20)
How might you use a scatter plot to compare stocks?
Normalize each stock, then plot one stock on each axis. Then you can look at the correlation between the stocks.
How do you do a scatterplot in Pandas?
df.plot(kind=’scatter’, x=’col1’, y=’col2’)