现有如下的数据集:
| obs | close | MA | own | buy | sell | money |
| 1 | 99.98 | 1000000 | 0 | 0 | 0 | 100 |
| 2 | 104.39 | 1000000 | 0 | 0 | 0 | 100 |
| 3 | 109.13 | 1000000 | 0 | 0 | 0 | 100 |
| 4 | 114.55 | 1000000 | 0 | 0 | 0 | 100 |
| 5 | 120.25 | 109.66 | 1 | 1 | 0 | 100 |
| 6 | 125.27 | 114.718 | 1 | 0 | 0 | 104.1746 |
| 7 | 125.28 | 118.896 | 1 | 0 | 0 | 104.183 |
| 8 | 126.45 | 122.36 | 1 | 0 | 0 | 105.1559 |
| 9 | 127.61 | 124.972 | 1 | 0 | 0 | 106.1206 |
| 10 | 128.84 | 126.69 | 1 | 0 | 0 | 107.1435 |
| 11 | 130.14 | 127.664 | 1 | 0 | 0 | 108.2245 |
| 12 | 131.44 | 128.896 | 1 | 0 | 0 | 109.3056 |
……
本文感兴趣的是:采用移动平均(MA)规则可以战胜市场吗?上述数据集中,own表示该交易日收盘后是否还持有股票,1表示持有,0表示不持有;buy和sell分别表示买入和卖出,1表示行动,0表示不行动。特别要加以说明的是。前四天的均价这里是用1000000来表示。
现在,要生成每一天的资金市值。上例中,是考虑5天的均线。当obs<5时,money=100(初始投资规模);
当obs>=5时,又分为以下几种情况:
1,如果当天买入,则该交易日的资金量等于上一交易日的资金量;
2,如果当日卖出,则该交易日的资金量等于上一交易日的资金量乘以今日和昨日的价格比;
3,如果当日不操作,并且上一交易日收盘时空仓,则今日的资金量等于上一交易日的资金量;
4,如果当日不操作,并且上一交易日收盘时持仓,则今日的资金量等于上一交易日的资金量乘以今日和昨日的价格比。
综上,编程过程如下:
data ……;
if obs<5 then money=100;
if obs>=5 and buy=1 then money=lag(money);
if obs>=5 and sell=1 then money=lag(money)*close/lag(close);
if obs>=5 and buy=0 and sell=0 and lag(own)=1 then money=lag(money)*close/lag(close);
if obs>=5 and buy=0 and sell=0 and lag(own)=0 then money=lag(money);
run;
可是,这样得到的结果却是:money的前四个观测值为100,随后的所有观测值均是缺失的。
请问,正确的程序应该是怎样的?
恳请论坛里的高手能帮小弟解决这个问题,谢谢!