FINM8006 Advanced Investment

69 阅读4分钟

FINM8006 Advanced Investment Assignment
Due 11/10/2024
1 Chinese A-Share Market
Stock market in China is often said to be heavily inffuenced by individual traders.
Size and liquidity therefore are long suspected to play important roles in Chinese
A-share market. Mutual fund industry has been developing in the recent years,
especially after 2016. In this exercise, we will analyze the Chinese market from
2012 to 2022.
1.1 Data Description
The data folder contains two zipped (.gz) csv ffles.
• monthly_returns_cn.csv.gz contains monthly stock and market returns
for stocks on Chinese market from 2010 to 2022.
– stkcd: stock code
– month: date of monthly end date
– ret: stock return
– mktret: market return
– rf: risk free rate
• monthly_characteristics_cn.csv.gz contains ffrm characteristics of
the shares traded each month from the market and earnings announcements.

stkcd: stock code
– priormonth: end of the month date when characteristics information
is known
– market_value: market cap (value) of stock in the month
– ep: EP ratio calculated as earnings divided by market cap
– amihud: average Amihud measure in a month. Amihud measure is a
measure of stock illiquidity, calculated as stock price change divided
by trading volume. The higher the value the lower a stock’s liquidity.
1.2 Your Tasks
11.2.1 Mean Variance
Suppose you inherited an amount of money (M) at the end of year 2020 and want
to invest it in a basket of stocks and risk free asset at the beginning of 2021.
stkcds of the stocks in your basket are ['600519', '002594', '002415',
'000333'] and the risk free rate is known at the beginning of 2021. You have
CRRA utility function of risk aversion    = 3. You estimate the return characteristics
using data in the last 3 years prior to 2021.

  1. What is your optimal share of M to invest in the stock basket?
  2. What is the optimal share of M to invest in each stock if you decide to do
    mean-variance investing?
  3. What are the returns you expected to get and you will actually get (from
    M, consider only the stock returns) in January 2021?
  4. If you compose your stocks in the basket based on their relative market
    caps at the end of 2020, what return (from M, consider only the stock
    returns) in January 2021 will you get?
    1.2.2 CAPM BETA
    For each stock and month starting from January 2012, use the prior 24 month
    to estimate CAPM   . You will require a ffrm-month to have at least 12 months
    of prior data to estimate, otherwise the ffrm-month will be dropped from the
    portfolio. From now on, your data will be ffrms with legitimate beta and other
    characteristics information.
    For each month starting from 2012, form 10 portfolios according to their CAPM
    , then plot the average realized monthly excess return against the average   
    for the 10 portfolios. Add the CAPM line also to your graph. Please comment
    on the graph you produce, what kind of the stocks are likely to be overvalued
    or undervalued.
    1.2.3 Size and EP Ratio
    For each month starting from 2012, form 25 (5x5) portfolios by sorting stocks
    according to size (proxied by market value) and EP ratio. Stock characteristics
    in a month is its characteristics in the prior month. Calculate the value-weighted
    returns and betas. Produce a within-size plot and a within-PE plot for the 25
    portfolios by plotting mean excess return against CAPM as in the lecture notes.
    Comment on your graphs.
    1.2.3.1 Size and EP factors
    You will divide your stocks代 写FINM8006 Advanced Investment into 6 (2X3) portfolios according to size and EP.
    Returns in the portfolios are value-weighted. Then you will form your SMB
    (size) factor by longing the equally-weighted portfolios of small stock portfolios
    2and shorting the equally-weighted portfolios of big stock portfolios, form your
    HML (EP) factor by longing the equally-weighted portfolios of high EP stock
    portfolios and shorting the equally-weighted portfolios of low EP stock portfolios.
    Plot the cumulative factor returns along with the cumulative market excess
    return.
    Run multi-factor models of market excess return, SMB and HML for each of the
    25 portfolios you formed earlier, and get the factor loading. Produce within-size
    and with-EP plots by plotting average portfolio excess returns against average
    model predicted excess returns. You get model predicted excess returns from
    factor loading and mean factor returns. Has the multi-factor loading improved
    the model prediction?
    1.2.4 Liquidity Premium
    Is there liquidity premium and What is its dynamics? Let’s examine. In addition
    to the 2X3 sorting, we also sort independently into 5 portfolios according
    to amihud. That is, we sort stockings into 2X3X5 portfolios of size, EP and
    liquidity. Again, portfolio returns are value weighted. Finally, we form liquidity
    premium by longing the equally-weighted portfolios of high illiquidity
    stock portfolios and shorting the equally-weighted portfolios of low illiquidity
    stock portfolios. Calculate the time-series of liquidity premium, and plot the
    cumulative returns of the premium. Comment on the graph you get.
    1.3 Python Notes
    You can use pandas to read zipped csv ffles. Notice that stkcd is a str, and
    month is a date, they need to be speciffed in reading to have the correct data
    type, such as the following:
    monthly_returns = pd.read_csv('monthly_returns_cn.csv.gz',
    parse_dates=['month'], dtype={'stkcd':'str'})
    You will need statsmodels for regression. For rolling regression, you can use
    a for loop as the backtesting workshop, or use RollingOLS in statsmodels.
    To calculate things by group, the groupby method of pandas will be useful.
    You can use apply following groupby to get results in a new data frame, or use
    transform to add the results to the existing dataframe. Please see lecture notes
    and pandas documentation online for details.
    qcut method of pandas is handy for ffnding the cutoff and sorting dataframe
    into groups. The following lambda function, when applied to x, put 10 group
    labels, size0…size9 according to x.
    lambda x: pd.qcut(x, 10, labels=['size'+str(x) for x in range(10)], retbins=False)
    WX:codinghelp