SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 738|回复: 2
打印 上一主题 下一主题

求移动平均买卖策略解法

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-10-25 09:42:37 | 只看该作者

求移动平均买卖策略解法

买入条件:当日收盘价(close)大于最近(不超过三日)收盘价(close)的5%,即在下一日以收盘价(close)买入;
卖出条件:在买入后,如当日收盘价低于MA5或者当日MA5小于MA10或者当日收盘价低于买入价的3%,即在下一日以收盘价卖出。
求投资收益率,即每次买卖收益率之和。

data temp;
infile datalines;
input date:yymmdd10. close MA5 MA10;
format date yymmdd10.;
datalines;
2007/08/06 12.914 12.432 12.412
2007/08/07 12.784 12.368 12.503
2007/08/08 12.254 12.422 12.52
2007/08/09 12.394 12.47 12.542
2007/08/10 12.044 12.478 12.478
2007/08/13 12.074 12.31 12.371
2007/08/14 12.394 12.232 12.3
2007/08/15 12.914 12.364 12.393
2007/08/16 13.064 12.498 12.484
2007/08/17 12.594 12.608 12.543
2007/08/20 13.054 12.804 12.557
2007/08/21 13.794 13.084 12.658
2007/08/22 14.594 13.42 12.892
2007/08/23 14.874 13.782 13.14
2007/08/24 14.614 14.186 13.397
2007/08/27 15.504 14.676 13.74
2007/08/28 15.764 15.07 14.077
2007/08/29 14.724 15.096 14.258
2007/08/30 16.204 15.362 14.572
2007/08/31 15.904 15.62 14.903
2007/09/03 15.994 15.718 15.197
2007/09/04 15.894 15.744 15.407
2007/09/05 16.194 16.038 15.567
2007/09/06 16.864 16.17 15.766
2007/09/07 17.744 16.538 16.079
2007/09/10 18.554 17.05 16.384
2007/09/11 16.874 17.246 16.495
2007/09/12 17.174 17.442 16.74
2007/09/13 16.864 17.442 16.806
2007/09/14 16.924 17.278 16.908
;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-10-25 13:28:05 | 只看该作者

Re: 求移动平均买卖策略解法

根据楼上的要求,写出以下程序:
data result(drop=close_1-close_3 signal_buy);
set temp;
format Profitability 5.2;
/*求前3天收盘价最大值*/
close_1=lag(close);
close_2=lag2(close);
close_3=lag3(close);
max_close=max(close,close_1,close_2,close_3);
/*根据给定的条件,计算买入信号*/
if close>0.95*max_close then signal_buy=1;
signal_buy_1=lag(signal_buy);
/*根据买入信号,确定买入价*/
retain buy_price;
if signal_buy_1=1 then buy_price=close;
/*根据给定的条件,确定买入价*/
if close<ma5 or ma5<ma10 or close<buy_price*0.97 then sell_price=close;
/*根据条件,前4天,不发生买卖,所以前4天的买卖价应该为空值*/
if _n_<5 then do ;
buy_price=.;
sell_price=.;
end;
/*计算收益率*/
Profitability=(sell_price/buy_price-1)*100;
run;

根据条件中的设计,这里的收益率有很大的模糊。实际情况并不是,发出买入信号后,就有卖出信号,而是连续发出买入信号,请问收益率的买入价如何计算。一个可能解决办法就是,如果发出连续买入信号,买入价以连续买入信号对应的平均价计;同样的情况发生在卖出价上,连续发出卖出信号,卖出价怎么计?
上面的程序中的收益率仅是卖出价对应的前次买入价两者定的。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-10-25 15:14:12 | 只看该作者

程序算法有误

谢谢及时回复,但程序运行出现多处错误,问题继续详述如下:
1、如果连续发出买入信号或者卖出信号,应以第一个买入信号或卖出信号为准,因为不可能反推可能会连续发出买入或者卖出信号。
2、收益率应以实际价格,而不是均价来计算,除非是大型机构,需要分批买入才需要做如此考虑。收益率的买入价以发出买入信号之后的一个交易日的收盘价来计算,如果是实时操作,也须在发出买入信号之后才能操作,卖出信号类同,是以卖出信号后一个交易日的收盘价。
3、考虑到连续操作的情况,须在卖出后才能买入,要剔除其中可能重复的值。
4、买入信号理解有误,如果该交易日收盘价高于前一个交易日收盘价的5%,如果这一条件不满足,则考虑前二个交易日,再不满足,考虑前三个交易日。也就是说当股价上涨5%即是买入信号(这是追涨,而不是买跌,和通常理解有所不同),而且是发生在三个交易日以内,最近交易日发生的优先(信号发生时候越短,显示买入意愿更强烈)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 03:23 , Processed in 0.067936 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表