Regression analysis shows that there's a strong relationship (R^2 = -0.81) between annualized cumulative real return of HK property (40 months ahead) and the difference between US 10-year treasury yield and property rental yield. Basically, the more rental yield exceeds US 10-year treasury yield, a better buy a property is.
The regression result aligns with general investment valuation; as generated cash flows exceed risk-free rate further, valuation goes up.
Let's use a new development project, Heya Delight, as an example to see how the difference changes as the rent per sq. ft. changes:
US has been rumored to increase interest rate for quite a while, but it's been delayed and delayed again. Let's assume interest rate remains relatively stable in the next 40 months.
The rent per square foot around the area of comparable quality gets as high as $35 / sq ft per month. Each line above shows different rental income.
It looks like a very good buy for the unit with the lowest price per sq ft at $9,790. Even for the unit with the highest price per sq ft, it's still okay if you can get a high enough rent.
I guess many people share the same views. (Well, it doesn't hurt to price the unit at "up to 40 per cent lower than a nearby project.") There are 130 units available for that project with more than 4000 applications submitted for ballot.
Unluckily for me, I didn't get a good draw... I'm 3374th person out of 4127 to get to pick an unit. (-_-")
Friday, December 5, 2014
Saturday, November 22, 2014
1+2+3+4+5+6+...= -1/12 ?!!!
1 + 2 + 3 + 4 + 5 + 6 + ... = ?
gotta be infinity, right?
let
S = 1 + 2 + 3 + 4 + 5 + 6 + ...
S1 = 1 - 1 + 1 - 1 + 1 - 1 + ...
S2 = 1 - 2 + 3 - 4 + 5 - 6 + ...
add S1 to S1:
S1 *2 = 1 - 1 + 1 - 1 + 1 - 1 + ...
+ 1 - 1 + 1 - 1 + 1 - 1 + ...
= 1
so, S1 = 1/2
add S2 to S2:
S2 *2 = 1 - 2 + 3 - 4 + 5 - 6 + ...
+ 1 - 2 + 3 - 4 + 5 - 6 + ...
= 1 - 1 + 1 - 1 + 1 - 1 + ...
= S1
= 1/2
so, S2 = 1/4
subtract S2 from S
S - S2 = 1 + 2 + 3 + 4 + 5 + 6 + ...
-[1 - 2 + 3 - 4 + 5 - 6 + ...]
= 0 + 4 + 0 + 8 + 0 + 12 + ...
= 4 *(1 + 2 + 3 + 4 + 5 + 6 + ...)
= 4 * S
S - 1/4 = 4 * S
-1/4 = 3S
so, S = -1/12
this is nuts...
Here are the professors explaining it:
gotta be infinity, right?
let
S = 1 + 2 + 3 + 4 + 5 + 6 + ...
S1 = 1 - 1 + 1 - 1 + 1 - 1 + ...
S2 = 1 - 2 + 3 - 4 + 5 - 6 + ...
add S1 to S1:
S1 *2 = 1 - 1 + 1 - 1 + 1 - 1 + ...
+ 1 - 1 + 1 - 1 + 1 - 1 + ...
= 1
so, S1 = 1/2
add S2 to S2:
S2 *2 = 1 - 2 + 3 - 4 + 5 - 6 + ...
+ 1 - 2 + 3 - 4 + 5 - 6 + ...
= 1 - 1 + 1 - 1 + 1 - 1 + ...
= S1
= 1/2
so, S2 = 1/4
subtract S2 from S
S - S2 = 1 + 2 + 3 + 4 + 5 + 6 + ...
-[1 - 2 + 3 - 4 + 5 - 6 + ...]
= 0 + 4 + 0 + 8 + 0 + 12 + ...
= 4 *(1 + 2 + 3 + 4 + 5 + 6 + ...)
= 4 * S
S - 1/4 = 4 * S
-1/4 = 3S
so, S = -1/12
this is nuts...
Here are the professors explaining it:
Monday, September 15, 2014
Monday, September 1, 2014
R 3D plot
suppressMessages(library("plot3D"))
xSeq <- seq(range(df$xSeq)[1], range(df$xSeq)[2], length.out = 30)
ySeq <- seq(range(df$ySeq)[1], range(df$ySeq)[2], length.out = 30)
## persp requires a matrix for z
zSeq <- outer(xSeq, ySeq, function(a,b) predict(glm.fit, newdata=data.frame(xSeq=a, ySeq=b), type="response"))
persp(x=xSeq, y=ySeq, z=zSeq, ticktype="detailed", theta=40, phi=15)
persp(x=xSeq, y=ySeq, z=zSeq, ticktype="detailed", theta=0, phi=0)
persp(x=xSeq, y=ySeq, z=zSeq, ticktype="detailed", theta=90, phi=0)
see http://pj.freefaculty.org/guides/Rcourse/plot-3d/plots-3d.pdf for details.
xSeq <- seq(range(df$xSeq)[1], range(df$xSeq)[2], length.out = 30)
ySeq <- seq(range(df$ySeq)[1], range(df$ySeq)[2], length.out = 30)
## persp requires a matrix for z
zSeq <- outer(xSeq, ySeq, function(a,b) predict(glm.fit, newdata=data.frame(xSeq=a, ySeq=b), type="response"))
persp(x=xSeq, y=ySeq, z=zSeq, ticktype="detailed", theta=40, phi=15)
persp(x=xSeq, y=ySeq, z=zSeq, ticktype="detailed", theta=0, phi=0)
persp(x=xSeq, y=ySeq, z=zSeq, ticktype="detailed", theta=90, phi=0)
see http://pj.freefaculty.org/guides/Rcourse/plot-3d/plots-3d.pdf for details.
Wednesday, August 20, 2014
R: what is the column type?
str(d)
## 'data.frame': 5922 obs. of 610 variables:
## $ Timestamp : POSIXt, format: "2010-01-04 17:30:00" "2010-01-04 17:35:00" ...
## $ Variable142OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable142HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable142LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable142LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable143OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable143HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable143LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable143LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable144OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable144HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable144LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable144LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable145OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable145HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable145LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable145LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable146OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable146HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable146LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable146LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable147OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable147HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable147LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable147LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable148OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable148HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable148LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable148LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable149OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable149HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable149LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable149LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable150OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable150HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable150LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable150LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable151OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable151HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable151LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable151LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable152OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable152HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable152LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable152LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable153OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable153HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable153LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable153LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable154OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable154HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable154LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable154LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable155OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable155HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable155LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable155LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable156OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable156HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable156LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable156LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable157OPEN : num 5.6 5.53 5.52 5.48 5.39 ...
## $ Variable157HIGH : num 5.6 5.55 5.52 5.48 5.42 ...
## $ Variable157LOW : num 5.53 5.51 5.46 5.39 5.39 ...
## $ Variable157LAST : num 5.53 5.52 5.48 5.39 5.42 ...
## $ Variable158OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable158HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable158LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable158LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable159OPEN : num 289 290 290 290 290 ...
## $ Variable159HIGH : num 290 290 290 290 290 ...
## $ Variable159LOW : num 289 290 290 290 289 ...
## $ Variable159LAST : num 290 290 290 290 290 ...
## $ Variable160OPEN : num 289 290 290 290 290 ...
## $ Variable160HIGH : num 290 290 290 290 290 ...
## $ Variable160LOW : num 289 290 290 290 289 ...
## $ Variable160LAST : num 290 290 290 290 290 ...
## $ Variable161OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable161HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable161LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable161LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable162OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable162HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable162LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable162LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable163OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable163HIGH : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable163LOW : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable163LAST : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## $ Variable164OPEN : num 9.56 9.48 9.5 9.54 9.54 ...
## $ Variable164HIGH : num 9.57 9.5 9.54 9.55 9.54 ...
## $ Variable164LOW : num 9.46 9.48 9.5 9.53 9.51 ...
## $ Variable164LAST : num 9.48 9.5 9.54 9.54 9.52 ...
## $ Variable165OPEN : num 9.98 10.02 10.02 9.98 10.04 ...
## $ Variable165HIGH : num 10.1 10.1 10 10 10 ...
## $ Variable165LOW : num 9.97 9.99 9.98 9.98 10.01 ...
## $ Variable165LAST : num 10.02 10.02 9.98 10.04 10.02 ...
## $ TargetVariable : logi TRUE TRUE TRUE TRUE FALSE TRUE ...
## $ Variable167OPEN : num NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
## [list output truncated]
Monday, August 4, 2014
kdb ipc - set remote variable = value of local variable
// opening conn
h: hopen `::5000
// assigning a fixed value to a remote variable is easy
h "rv:10"
// local variable = 12
lv:12
// assigning rv = lv is tricky and needs
h ({rv::x};lv)
h: hopen `::5000
// assigning a fixed value to a remote variable is easy
h "rv:10"
// local variable = 12
lv:12
// assigning rv = lv is tricky and needs
h ({rv::x};lv)
Sunday, August 3, 2014
kdb: how to select the max of 2 columns
with sql, we just simply
select max(col1, col2) from t
with kdb, we will need to something like:
q)select [5] from t
time sym bid ask
-----------------------------
09:30:00.386 IBM 50.12 51.69
09:30:00.754 IBM 50.69 51.02
09:30:00.871 AAPL 50.2 51.4
09:30:01.548 AAPL 50.84 51.28
09:30:01.921 GOOG 50 51.82
q)select [5] from update greater:max each flip (bid; ask) from t
time sym bid ask greater
-------------------------------------
09:30:00.386 IBM 50.12 51.69 51.69
09:30:00.754 IBM 50.69 51.02 51.02
09:30:00.871 AAPL 50.2 51.4 51.4
09:30:01.548 AAPL 50.84 51.28 51.28
09:30:01.921 GOOG 50 51.82 51.82
select max(col1, col2) from t
with kdb, we will need to something like:
q)select [5] from t
time sym bid ask
-----------------------------
09:30:00.386 IBM 50.12 51.69
09:30:00.754 IBM 50.69 51.02
09:30:00.871 AAPL 50.2 51.4
09:30:01.548 AAPL 50.84 51.28
09:30:01.921 GOOG 50 51.82
q)select [5] from update greater:max each flip (bid; ask) from t
time sym bid ask greater
-------------------------------------
09:30:00.386 IBM 50.12 51.69 51.69
09:30:00.754 IBM 50.69 51.02 51.02
09:30:00.871 AAPL 50.2 51.4 51.4
09:30:01.548 AAPL 50.84 51.28 51.28
09:30:01.921 GOOG 50 51.82 51.82
Subscribe to:
Posts (Atom)