owned this note
owned this note
Published
Linked with GitHub
---
tags: finance, python
---
# Programming Labs for Python Programming in Finance
:::warning
Welcome to [Python Programming in Finance](https://hackmd.io/@arthurzllu/By0DaDPmu). This course is an inter-disciplinary course in the fields of computer science, finance, and (a lot of) math. These techniques are essential both in **<font color = "red">P</font>** & **<font color = "red">Q</font>** quant.
:::
## Lab 1 Start Your Quant Life
In the first lab, I expect you to accomplish the following steps:
<img src="https://i.imgur.com/JDTfD1j.png" style="float:right" width="300"/>
1. Data acquisition & preprocessing
2. Data visualization
3. Strategy development
4. Backtesting
These 4 steps lead you to a complete quantitative analysis of financial data. Please follow the in-class example and try to beat the buy-and-hold strategy. You may start with the following instructions:
- ++**Change the target asset**++
- For example, you may consider any equity in the Taiwan market by collecting its historical adjusted close prices in the package [ffn](https://pmorissette.github.io/ffn/).
- 本國證券辨識號碼一覽表:[上市證券](https://isin.twse.com.tw/isin/C_public.jsp?strMode=2) and [上櫃證券](https://isin.twse.com.tw/isin/C_public.jsp?strMode=4)
- If you are interested in [興櫃證券](https://isin.twse.com.tw/isin/C_public.jsp?strMode=5), you need to collect the historical data by yourself.
- For example, [Taiwan Economic Journal](https://www.finasia.biz/) (TEJ).
- Even more, you may even consider various markets like oversea equity markets, foreign exchange markets (for example, [BTC-USD](https://finance.yahoo.com/quote/BTC-USD)) or commodity markets (for example, [Gold](https://finance.yahoo.com/quote/GC=F)).
- Try to screen your target: https://www.finviz.com/
<center>
![](https://i.imgur.com/56WKXXe.png =300x)
</center>
- ++**Develop another promising strategy**++
- You could calculate the buy/sell signals by other technical indicators instead of the crossover between SMA5 and SMA10.
- For example, [the Bollinger Bands](https://www.dailyfx.com/education/bollinger-bands/forex-trading.html), [the Moving Average Convergence Divergence (MACD)](https://www.dailyfx.com/education/technical-analysis-tools/macd-indicator.html), [the Stochastic Oscillator (KD)](https://www.dailyfx.com/forex/education/trading_tips/daily_trading_lesson/2014/01/22/How_to_Trade_with_Stochastic_Oscillator.html).
- You can find more technical analysis [here](http://www.mrao.cam.ac.uk/~mph/Technical_Analysis.pdf).
- In addition to the historical prices, you may consider various analyses below:
- the macroeconomical analysis (for example, the fiscal policy and the monetary policy);
- the fundamental analysis (for example, monthly revenue YoY);
- the chip analysis (for example, institutional investors, margin trading).
- ++**Benchmark your performance to convince youself (or your boss)**++
- We have considered the final return and the maximum drawdown (MDD) of the simple crossover strategy in class.
- You may consider [the Sharpe ratio](https://en.wikipedia.org/wiki/Sharpe_ratio) or other indicators to evaluate your performance against competitors.
:::warning
You may start with this notebook [link](https://www.csie.ntu.edu.tw/~d00922011/python/notebooks/pyf_2_lab1_start_your_quant_life.ipynb).
:::
:::danger
The minimal requirement of Lab 1 is to implement at least one of items listed above and your result should be better than the buy-and-hold strategy (or any baseline).
:::
### Lab 1-1 Diversification
:::success
Don't put all your eggs in one basket.
:::
- To diversify the individual risk, you may consider multiple assets in your portfolio. Note that you may apply different strategies to each asset.
- For convenience, modify the program as follows:
- Calculate the buy/sell signal mask for each asset.
- Sum the profit/loss of each strategy.
### References
- Zvi Bodie, Alex Kane, Alan J. Marcus, [Investments](https://www.amazon.com/ISE-Investments/dp/1260571157/), 12/e, 2020
![](https://i.imgur.com/OJ0I6Zf.png =100x)
- 王冠倫,[Python初階配對交易](https://www.csie.ntu.edu.tw/~d06922002/Course/PTS/)
![](https://i.imgur.com/TkhFbyg.png =150x)
- 杜金龍,杜金龍教你技術分析,2005
- Emanuel Derman, [My Life as a Quant: Reflections on Physics and Finance](https://www.amazon.com/My-Life-Quant-Reflections-Physics/dp/0470192739), 2016
![](https://i.imgur.com/mK9w7ly.png =100x)
- AQR Capital Management, LLC, [20 for Twenty: Selected Papers from AQR Capital Management](https://www.aqr.com/insights/research/book/20-for-twenty), 2018
- Igor Tulchinsky, [Finding Alphas: A Quantitative Approach to Building Trading Strategies](https://www.amazon.com/-/zh_TW/dp/1119571219), 2019
![](https://i.imgur.com/9OSTQOB.png =100x)
- Nazário, Silva, Sobreiro, and Kimura, [A literature review of technical analysis on stock markets](https://www.sciencedirect.com/science/article/pii/S1062976917300443), The Quarterly Review of Economics and Finance, 2017
- https://www.quantstart.com/
- http://liang-xin.com/website/w/h?mt=2&mc=3194267&cc=3021364
## Lab 2 Modern Portfolio Theory
Consider one of the classical models shown below and apply the selected model to recent market data.
- Harry Markowitz (1952): *Portfolio Selection* [link](https://www.math.ust.hk/~maykwok/courses/ma362/07F/markowitz_JF.pdf)
- He won 1990 Nobel Memorial Prize in Economic Sciences [link](https://www.nobelprize.org/uploads/2018/06/markowitz-lecture.pdf)
- An interview with Eugen Fama: https://www.youtube.com/watch?v=RVWEhCd819E
:::warning
You may start with this notebook [link](https://www.csie.ntu.edu.tw/~d00922011/python/notebooks/pyf_4_lab2_mean_variance_analysis.ipynb). This notebook demonstrates the procedure of the mean-variance analysis with the [tech giants](https://en.wikipedia.org/wiki/Big_Tech), for example, FAANG (Facebook, Amazon, Apple, Netflix, and Google).
:::
- Sharpe (1964), Lintner (1965), and Mossion (1966): **C**apital **A**sset **P**ricing **M**odel (CAPM)
<center>
![](https://i.imgur.com/Bswq7jP.jpg =600x)
</center>
- Fama and French (2004): *The Capital Asset Pricing Model:
Theory and Evidence* [link](http://mba.tuck.dartmouth.edu/bespeneckbo/default/AFA611-Eckbo%20web%20site/AFA611-S6B-FamaFrench-CAPM-JEP04.pdf)
:::warning
You may start with this notebook [link](https://www.csie.ntu.edu.tw/~d00922011/python/notebooks/pyf_4_lab2_capm.ipynb).
:::
- Ross (1976): **A**rbitrage **P**ricing **T**heory (APT) [link](https://www.sciencedirect.com/science/article/pii/0022053176900466)
- Roll and Ross (1980): *An Empirical Investigation of the Arbitrage Pricing Theory* [link](https://www.jstor.org/stable/2327087)
:::warning
You may start with this notebook [link]().
:::
- Fama and French (1993): *Common risk factors in the returns on stocks and bonds* [link](https://www.sciencedirect.com/science/article/pii/0304405X93900235?via%3Dihub)
- The famous 3-factor model is formulated as $$R_{it} = \alpha_i + \beta_{iM}\,R_{Mt} + \beta_{i\text{SMB}}\,\text{SMB} + \beta_{i\text{HML}}\,\text{HML} + e_{it}, $$ where
- SMB refers to the return of a portfolio of small stocks in excess of the return on a portfolio of large stocks, and
- HML refers to the return of a portfolio of stocks with a high book-to-market ratio in excess of the return on a portfolio of stocks with a high book-to-market ratio.
:::warning
You may start with this notebook [link](https://www.csie.ntu.edu.tw/~d00922011/python/notebooks/pyf_4_lab2_fama_french_3_factor_model.ipynb).
:::
### Lab 2-1 Black-Litterman Model
- Thomas M. Idzorek (2002): *A Step-by-Step Guide to the Black-Litterman Model* [link](https://faculty.fuqua.duke.edu/~charvey/Teaching/BA453_2006/Idzorek_onBL.pdf)
- You may try this web-based [portfolio optimizer](https://www.portfoliovisualizer.com/black-litterman-model).
### Lab 2-2 Barra Risk Factor Analysis
- The Barra Risk Factor Analysis is a multi-factor model, created by Barra Inc., used to measure the overall risk associated with a security relative to the market.
> The multi-factor risk model uses a number of key fundamental factors that represent the features of an investment. Some of these factors include yield, earnings growth, volatility, liquidity, momentum, size, price-earnings ratio, leverage, and growth; factors which are used to describe the risk or returns of a portfolio or asset by moving from quantitative, but unspecified, factors to readily identifiable fundamental characteristics.
- Barr Rosenberg
- Dr. Kempthorne (2013): https://ocw.mit.edu/courses/mathematics/18-s096-topics-in-mathematics-with-applications-in-finance-fall-2013/lecture-notes/MIT18_S096F13_lecnote15.pdf
- Investments & Wealth Institute (2010): *From Concept to Function: Converting Market Theories into Practical Investment Tools, a Discussion with Barr Rosenberg, PhD* [link](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1702396)
### Lab 2-3 Application of APT
- 應用多因子模型在上市900多檔中找出哪50檔股票可以找出0050 EFT的成分股。
- 致敬 Stephen Ross:从 APT 到多因子模型 [link](http://liang-xin.com/website/w/h?mt=2&mc=3194267&cc=3021364&fp=d&c=40584238)
### References
- Kutner, Nachtsheim, Neter, and Li, [Applied Linear Statistical Models: Applied Linear Regression Models](https://www.amazon.com/Applied-Linear-Statistical-Models-Michael/dp/007310874X), 5/e, 2019
![](https://i.imgur.com/m6wwNY4.png =100x)
- Kenneth R. French, [Data Library for Fama-French 3-Factor Model](https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html)
![](https://i.imgur.com/DWAF97d.png =400x)
- 台灣證券交易所,[產業價值鏈資訊平台](https://ic.tpex.org.tw/)
![](https://i.imgur.com/PBqFJaP.png)
- TEJ,[多因子資料庫](https://www.tej.com.tw/webtej/seminar/tv-index.htm)
- Frazzini, Kabiller, and Pedersen (2013): *Buffett's Alpha* [link](https://www.aqr.com/Insights/Research/Journal-Article/Buffetts-Alpha)
- McLean and Pontiff (2015), *Does Academic Research Destroy Stock Return Predictability?* [link](https://onlinelibrary.wiley.com/doi/full/10.1111/jofi.12365)
- Chen and Velikov (2020), *Zeroing in on the Expected Returns of Anomalies* [link](https://www.federalreserve.gov/econres/feds/files/2020039pap.pdf)
- Chen and Velikov (2020), *Open Source Cross-Sectional Asset Pricing* [link](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3604626)
## Lab 3 Time Series Model
- Review of time series model
- Stationaryness
- Unit root test
- ADF test
- Order of integration
- $I(0)$
- $I(1)$: first difference of time series becomes stationary, for example, stock price
- Mean equation
- **A**uto**r**egressive-**M**oving-**A**verage (ARMA) model
- **A**uto**r**egressive-**I**ntegrated-**M**oving-**A**verage (ARIMA) model
Now build an ARMA/ARIMA model for financial time series, for example,
- equity: stock price, traded volume, 三大法人未平倉量, and so on
- 台灣加權指數 (2016 - now):[y9999.xlsx](https://www.csie.ntu.edu.tw/~d00922011/python/data/y9999.xlsx)
- 台指期貨、電子期、金融期之外資未平倉量 (2016 - now):[外資未平倉.xlsx](https://www.csie.ntu.edu.tw/~d00922011/python/data/%e5%a4%96%e8%b3%87%e6%9c%aa%e5%b9%b3%e5%80%89.xlsx)
- foreign exchange
- interest rate: long-term yield rate, short-term yield rate, carry spread
- macroeconomical factors: GDP/GNP, PMI, and so on
:::warning
You may start with this notebook [link](https://www.csie.ntu.edu.tw/~d00922011/python/notebooks/pyf_5_lab3_time_series.ipynb).
:::
### Lab 3-1 Volatility Estimation
- GARCH model
### Lab 3-2 Cointegration
- A short introduction to cointegration could be found here: https://www.csie.ntu.edu.tw/~d00922011/finmath/pairs_trading.pdf
- You may follow the trading algorithm presented in the paper *"Trading in the Presence of Cointegration"* [link](https://www.researchgate.net/publication/228259096_Trading_in_the_Presence_of_Cointegration).
- AEX: https://finance.yahoo.com/quote/%5Eaex
- CAC 40: https://finance.yahoo.com/quote/%5Efchi/
- FTSE 100: https://finance.yahoo.com/quote/%5EFTSE/
- DAX: https://finance.yahoo.com/quote/%5EGDAXI/
- Apply the algorithm to the following assets:
- Futures
- 上市上櫃股票
- 台指50成分股 [link](https://www.moneydj.com/ETF/X/Basic/Basic0007a.xdjhtm?etfid=0050.TW) or 寶島50成分股 [link](https://www.twse.com.tw/downloads/zh/products/indices/IndexS01.pdf)
### Lab 3-3 Granger Causality
### References
- The Organisation for Economic Cooperation and Development (OECD): https://www.oecd-ilibrary.org/
> OECD iLibrary is the online library of the Organisation for Economic Cooperation and Development (OECD) featuring its books, papers and statistics and is the gateway to OECD's analysis and data.
![](https://i.imgur.com/cw4lYKR.png)
## **Lab 4 Options**
<center>
![](https://i.imgur.com/t7Q3x1V.png =600x)
<font size = -1 color = "gray"><a href = "https://tw.stock.yahoo.com/future/">https://tw.stock.yahoo.com/future/</a></font>
</center>
### Lab 4-1 Brownian Motion
- Let $S_t$ be the stock price at time $t$, $\mu$ be the expected return rate, $\sigma$ be the volaility of $S_t$.
- Then the return rate of $S_t$ follows a Brownian motion $$\dfrac{dS_t}{S_t} = r dt + \sigma dW_t, $$ where $W_t$ is a Wiener process.
- To simulate $S_t$, we apply the Ito's lemma to the aforesaid equation so that we have $$S_t = S_0 e^{(r - \sigma^2 / 2) t + \sigma \sqrt{t} W_t}.$$
- For example, assume that $S_0 = 160, r = 0.1, \sigma = 0.3, T = 1.$ With 100 simulation pathes, the plot below shows the trajectories of the asset price.
<center>
![](https://i.imgur.com/dlToLVV.png =500x)
</center>
### Lab 4-2 Option Pricing
- Write a program to calculate the American puts by using ++BOPM++. For example, the price of the American put is n.nnnn with $S_0 = 160, K = 150, r = 0.1, \sigma = 0.3, T = 1.$
### Lab 4-3 Calculation of Implied Volatility
- The European call price $C$ is $$C = f(S_0, K, T, r, \sigma), $$ where $S_0$ is the spot price and $K$ is the strike price.
- Now use the market data from [期交所](https://www.taifex.com.tw/cht/3/optDailyMarketSummary) to calculate the implied volatility by solving the nonlinear equation $$C - f(S_0, K, T, r, \sigma_{\text{imp}}) = 0.$$
- You may apply ++the Newton's method++ or ++the bisection method++ (mentioned in the first lecture) to solve the root-finding problem.
<center>
![](https://i.imgur.com/1t1gj87.png =500x)
</center>
## Lab 5 Risk Management
### Lab 5-1 Value at Risk (VaR) & Expected Shortfall (ES)
### Lab 5-2 Static Hedging vs. Dynamic Hedging
- Write a program to benchmark a static hedging strategy and a dynamic hedging strategy. You may consider the case discussed in class as follows:
- As a market maker, we maintain the market liquidity by ==selling a put/call option==.
- However, I need to avoid loss by hedging the short position by ==buying the underlying asset==.
#### Lab 5-2-1 Sell TXO
### Lab 5-3 Hedging Stock by Futures
## Lab 6 Machine Learning
### Ridge Regression
### LASSO Regression
### Logistic Regression
### Support Vector Machine (SVM)
### K-Means Clustering
### Decision Tree & Random Forest
#### AdaBoost
### Principal Component Analysis
### Reinforcement Learning
### Recurrent Net
#### Long/Short-Term Memory (LSTM)