Kelvin Lee asked 9 months ago
cict property yield is 4.65% but distribution yield is 5.58 perct. How is this possible. This also applies to many reits where the property yield is lower than the distribution yield. Pls expalin
1 Answers
Rusmin Ang Staff answered 9 months ago

Hi Kelvin,

REIT is traded like a stock and will be affected by stock market sentiment which tends to be more volatile. The distribution yield can change on the day to day basis. On the other hand, commercial property has its own market where buyer and seller will transact at certain yield expectation, often affected by cost of funding and transaction price of the surrounding properties. So we are dealing with two different markets which may diverge from time to time.

REIT also has built-in leverage (gearing ratio) and enjoy tax saving if they paid out more than 90% of the distributable income. That's the reason why REITs tend to have higher yield than the yield you would get if you buy physical properties. For more details, you can recap the topic below:

https://dividendmachines.com/topic/why-invest-in-reits/

Terence Soh replied 8 months ago

For last 10 years, CICT has +/- 1 SD Price Book Value of 0.645/0.8789 (data from finance.yahoo). Given the current PB ratio at 0.917, it would seem like the REIT is expensive (PB above 1 SD). Would you agree/disagree with this analysis, as I am trying to apply the concepts you taught last Saturday. Thanks

Rusmin Ang Staff replied 8 months ago

How do you get the PB data? Do you manually compile the share price and plot against the yearly NAV? I remember Yahoo! has disabled the share price download…

Terence Soh replied 8 months ago

I used yfinance module to download the bookValue property

def get_stock_price_by_date(ticker, start_date, end_date):

stock = yf.Ticker(ticker)
data = stock.history(start=start_date, end=end_date)

# Extract required data
data[‘Price-to-Book’] = data[‘Close’] / stock.info.get(‘bookValue’, 0) if stock.info.get(‘bookValue’, 0) else None
data[‘Dividend Yield’] = stock.info.get(‘trailingAnnualDividendRate’, 0) / data[‘Close’] if data[‘Close’].notna().all() else None

# Simplify data to include only necessary columns
simplified_data = data[[‘Close’, ‘Price-to-Book’, ‘Dividend Yield’]]

return simplified_data

Rusmin Ang Staff replied 8 months ago

Oh wow… Are you programmer? You know how to connect to the API? Lol!

It seems like you’re using Yahoo!Finance NAV. I’d suggest to collect it yourself since it is more accurate. We tend not to rely on third party platform unless you got it from Bloomberg Terminal, FactSet or CapitalIQ. For Share Price, you can still Yahoo!Finance Close Price as your reference point to calculate the PB.

If we based on last ten years, PB of CICT should be as high as 1.30 and low of 0.80. That should be the correct range.

Terence Soh replied 8 months ago

Thanks Ruskin, it seems like that my data is incorrect, I’ll go through again.

Terence Soh replied 8 months ago

Fixed my code.

25 percentile PB = 0.926
Current PB = 0.917

Hence this is considered inexpensive