楼主: caidalangzi
2313 3

[原创博文] 数量技术分析 难道论坛里就没有高手吗?!!! [推广有奖]

  • 0关注
  • 0粉丝

已卖:894份资源

本科生

48%

还不是VIP/贵宾

-

威望
0
论坛币
532 个
通用积分
1.2003
学术水平
5 点
热心指数
11 点
信用等级
3 点
经验
777 点
帖子
95
精华
0
在线时间
73 小时
注册时间
2008-10-26
最后登录
2025-1-22

楼主
caidalangzi 发表于 2010-7-5 00:48:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现有如下的数据集:
obsclose  MA   own   buy  sellmoney
1 99.981000000000100
2 104.391000000000100
3 109.131000000000100
4 114.551000000000100
5 120.25109.66110100
6 125.27114.718100104.1746
7 125.28118.896100104.183
8 126.45122.36100105.1559
9 127.61124.972100106.1206
10 128.84126.69100107.1435
11 130.14127.664100108.2245
12 131.44128.896100109.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,随后的所有观测值均是缺失的。
请问,正确的程序应该是怎样的?
恳请论坛里的高手能帮小弟解决这个问题,谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:技术分析 money Close Sell Lose 交易日 技术 收盘

沙发
bobguy 发表于 2010-7-5 01:48:02
caidalangzi 发表于 2010-7-5 00:48
现有如下类型的数据集:
A     B     C
1     1      100
1     2       200
2     1      200
2     2      400
上面的数据集中,A B都是已知的,现在要分情况生成数据C。C的初始值是已知的,即C的第一个观测值=100,现在要做如下的工作:
1,当B(n)=2时,C(n)=2*C(n-1);
2,当B(n)=1时,C(n)=C(n-1)。
如果进行如下的编程:
data ……;
if obs=1 then c=100;
if obs>1 and b=2 then c=2*lag(c);
if obs>1 and b=1 then c=lag(c);
run;
这样运行的结果是:
A     B      C
1     1      100
1      2     .
2     1      .
2      2     .
请问:正确的程序应该是怎样的?
素闻论坛SAS高手云集,特前来请教,希望能有大侠帮小弟解决这个困惑!谢谢!
Hope this is what you want.
data t;
input A     B     C    ;
clag=lag(c);
if b=1 then c2=clag;
else c2=2*clag;
cards;
1     1      100
1     2       200
2     1      200
2     2      400
;

proc print; run;
**************************************;
  Obs    A    B     C     clag     c2

   1     1    1    100       .      .
   2     1    2    200     100    200
   3     2    1    200     200    200
   4     2    2    400     200    400

藤椅
caidalangzi 发表于 2010-7-5 08:27:39
2# bobguy
谢谢!不过可能你没有看清楚我的说明:
一开始只知道C的第一个观测值,现在要根据B的情况生成新的观测值C,因为C包括了其自身的滞后值,因此这个就是按顺序来生成C的问题。我猜理论上的操作应该是,首先根据C的观测序号(如obs=1),然后根据B的情况来得到C的值,然后再跳到C的下一个观测(obs=2)来生成C,并以此类推。总之,就是要一个一个生成变量C,因为新产生的变量C在某些情况下和其滞后值有关。
谢谢您的关注!

板凳
pobel 在职认证  发表于 2010-7-5 08:38:53
data a;
    c=100;
    do a=1 to 2;
       do b=1 to 2;
              if b=2 then c=2*c;
                  output;
           end;
        end;
run;
和谐拯救危机

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 17:27