我有以下数据
date price strike
"01apr2010" 1086.2 50
"01apr2010" 1048.6001 100
"01apr2010" 1060.8 100
"01apr2010" 1014.1 100
"01apr2010" 1037.45 100
"01apr2010" 988.4 150
"01apr2010" 919.05 200
"01apr2010" 949.5 200
"01apr2010" 961.1 200
"01apr2010" 938.9 200
"01apr2010" 967 200
"01apr2010" 972.8 200
"01apr2010" 924.75 225
"01apr2010" 914.4 225
"01apr2010" 911.2 250
我想通过price
和date
(strike == (strike+50))
均值的变量
e.g。对于第一行(strike=50)
,这将是date="01apr2010
“和strike=100
(1048+1060+...+1037)/4
的平均价格。
对于第2-5行(strike=100)
,这将是988.4
(第6行中为price
)。
对于第6行(strike=150)
,这将是(919.05+...+972.8)/6
。
日期和点击的平均值仅为egen mean(price), by(date strike)
,但我需要一个变量,其中包含strike
等于(strike+50)
的观察值的平均值。
这也可以,优选地,而不是strike==strike+50
的平均值,strike
+ strike
中的下一个增量。
对于那些想知道或感兴趣的人,我需要这个来计算SP500上看涨期权价格的经验概率密度函数, 可以近似为
for options with prices c1,c2,c3
with strike prices K1=K2-d < K2 < K3=K2+d.
the risk-neutral probability density function of the underlying asset being equal to K2 is
g(S_t = K2) = (c1+c3-2*c2)/d^2
参见Hull(2018)“期权,期货及其他衍生产品”,附录A至chp。 17。
答案 0 :(得分:0)
在Statalist上查看数百次rangestat
(SSC)提及,例如,
clear
input str9 date price strike
"01apr2010" 1086.2 50
"01apr2010" 1048.6001 100
"01apr2010" 1060.8 100
"01apr2010" 1014.1 100
"01apr2010" 1037.45 100
"01apr2010" 988.4 150
"01apr2010" 919.05 200
"01apr2010" 949.5 200
"01apr2010" 961.1 200
"01apr2010" 938.9 200
"01apr2010" 967 200
"01apr2010" 972.8 200
"01apr2010" 924.75 225
"01apr2010" 914.4 225
"01apr2010" 911.2 250
end
rangestat mean1=price, interval(strike 50 50) by(date)
bysort date (strike) : gen group = sum(strike != strike[_n-1])
rangestat mean2=price, interval(group 1 1) by(date)
list, sepby(strike)
+--------------------------------------------------------------+
| date price strike mean1 group mean2 |
|--------------------------------------------------------------|
1. | 01apr2010 1086.2 50 1040.2375 1 1040.2375 |
|--------------------------------------------------------------|
2. | 01apr2010 1048.6 100 988.40002 2 988.40002 |
3. | 01apr2010 1060.8 100 988.40002 2 988.40002 |
4. | 01apr2010 1014.1 100 988.40002 2 988.40002 |
5. | 01apr2010 1037.45 100 988.40002 2 988.40002 |
|--------------------------------------------------------------|
6. | 01apr2010 988.4 150 951.39166 3 951.39166 |
|--------------------------------------------------------------|
7. | 01apr2010 919.05 200 911.20001 4 919.57501 |
8. | 01apr2010 949.5 200 911.20001 4 919.57501 |
9. | 01apr2010 961.1 200 911.20001 4 919.57501 |
10. | 01apr2010 938.9 200 911.20001 4 919.57501 |
11. | 01apr2010 967 200 911.20001 4 919.57501 |
12. | 01apr2010 972.8 200 911.20001 4 919.57501 |
|--------------------------------------------------------------|
13. | 01apr2010 924.75 225 . 5 911.20001 |
14. | 01apr2010 914.4 225 . 5 911.20001 |
|--------------------------------------------------------------|
15. | 01apr2010 911.2 250 . 6 . |
+--------------------------------------------------------------+
此处可以看到琐碎的差异,因为默认情况下,您的数字示例会以float
的形式读入,而rangestat
会生成double
个变量。