全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2432 13
2009-08-27
我在挑选异常价格时,需要:当前纪录的价格要不大于前一个价格的150% 或小于 50% 。看似要求很简单   但是,如下面的序列:

51.5
52
51.5
150
80
51.5
52
51.5



在挑选的时候,如果仅用:
if
price < k*0.5 or price > k*1.5 then delete;

则会 把150 和51.5删掉 而没有删掉明显偏高的80这个交易。


我的替代办法是和报价(bid ask price)比较,以便绕过这个问题,但有没有直接利用这个序列的好办法?

二维码

扫码加我 拉你入群

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

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

全部回复
2009-8-27 10:28:00
不太明白,80/150=0.533>0.5且<1.5,符合你的设定要求,机器干吗要删掉这条记录呢?

price    变化率
  .        .
52.0    100.971
51.5     99.038
   .     291.262
80.0     53.333
51.5     64.375
52.0    100.971
51.5     99.038
二维码

扫码加我 拉你入群

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

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

2009-8-27 11:03:03
程序的真正算法是希望删掉 异常的(例如纪录错误),或尖峰的尤其是序列相关的尖峰的交易价格。

这个例子,正常的价格应该在50左右,而过高或过低的交易价都被认为被操纵,不含有真正的需要的信息。需要把他们剔除。这个例子当中,显然 80 相对50就太高了。如果删掉150,同理似乎也应该删掉80这个数据(相对51.5)。但sas无法再无限参考以前的价格。


这个无限的参考是这个程序的强壮性。

像你所说,一旦sas发现 80/150=0.533>0.5且<1.5 就会保留着条记录。而我希望删掉。我目前是拿这个数据和bid ask 做比,解决纪录错误。但无法解决滤波的问题,(谁有软件滤波器啊)。
二维码

扫码加我 拉你入群

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

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

2009-8-27 11:26:15
那你可以取前后差在某个范围或前后两个价格的均值在某个范围
二维码

扫码加我 拉你入群

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

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

2009-8-27 12:11:57
data good;                                                                                                                                 
retain k 50;                                                                                                                           
input price;                                                                                                                           
if price < k*0.5 or price > k*1.5 then delete;                                                                                          
else do;                                                                                                                                
        output;                                                                                                                        
        k=price;                                                                                                                        
end;                                                                                                                                    
datalines;                                                                                                                              
51.5                                                                                                                                    
52                                                                                                                                      
51.5                                                                                                                                    
150                                                                                                                                    
80                                                                                                                                      
51.5                                                                                                                                    
52                                                                                                                                      
51.5                                                                                                                                    
run;           
结果:
Obs      k     price

1     50.0     51.5
2     51.5     52.0
3     52.0     51.5
4     51.5     51.5
5     51.5     52.0
6     52.0     51.5
二维码

扫码加我 拉你入群

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

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

2009-8-27 12:16:46
贴的时候漏了一个封号";"
data good;                                                                                                                                 
retain k 50;                                                                                                                           
input price;                                                                                                                           
if price < k*0.5 or price > k*1.5 then delete;                                                                                          
else do;                                                                                                                                
        output;                                                                                                                        
        k=price;                                                                                                                        
end;                                                                                                                                    
datalines;                                                                                                                              
51.5                                                                                                                                    
52                                                                                                                                      
51.5                                                                                                                                    
150                                                                                                                                    
80                                                                                                                                      
51.5                                                                                                                                    
52                                                                                                                                      
51.5   
;                                                                                                                                
run;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群