全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1998 2
2016-01-31
在上个帖子里提到动态规划可以用于做用户行为的分析,于是我想对股市的波动做一些分析。虽然结果和开始想的不太一样,但也有一些发现。
1 数据标准化问题。正负号不难选择,关键是增幅(何时大于一),因为连乘时会存在放大和缩小,没有适当的增幅转换就得不到理想的数列。我取了 1%作为1的分界点。
2 变号问题。由于频繁的变向,导致了乘积大小频繁转化(这也算满极端的客户行为了)

*3 股市究竟有多善变? 研究从2015-12-16到2016-1-29的30个交易日,发现共有14个上涨日,16个下跌日。从熵的角度看,几乎是最大的(信息最少)。
另外有20个交易日发生反转(涨跌互换), 65%情况的交易日1天后变向,25%的情况交易日2天后变向,10%的情况交易日3天后变向。
所以最佳策略似乎是持有1到2天卖出/买入。但是,如果看1-26,1-27,1-28三个交易日,分别下跌 6.4%,0.5%,2.9%,如果用这个策略可能就被坑了。所以散户不能轻轻松松赚钱。
可以看看下面的变盘日以及变盘前累计的天数。
1.jpg
总结:
1 由于股票波动变化太频繁,用最大乘积序列不合适。(获取选取到合适的数据转换方式有可能适用)
将来考虑用隐马尔科夫模型或者贝叶斯网络的方法研究这个问题,毕竟股票的指数高低只是一个指标,还有成交量也是必须充分考虑的。
2 用动态规划算法给出了乘积最大值以及序列,总的来说,算法的复杂度是可以接受的。
题外话:
今天新闻人工智能已经击败了围棋欧洲冠军,不同于深蓝的暴力计算,该算法更倾向于考虑特定模型。其实这背后应该也是动态规划的思想。
**************************************以下是sas代码****************************************

/*为简便,只取7*/

%let itv=7;

%let itv2=%eval(&itv+2);

/*导入csv  Table.finance.yahoo.com/table.csv?s=000001.ss */

%imp(E:\file,table,stock)

/*1 取最近30天沪市指数*/

data s30;

set stock;

if _n_ le&itv;

keep date close;

run;

/*2 偏移一天*/

data l30;

set stock;

if 2 le _n_ le (&itv+1) ;

close1=close;

keep date close1;

run;

/*3 横向拼接*/

data sl30;

set s30;

set l30(keep=close1);

run;

/*4 计算涨跌幅*/

data sl30;

set sl30;

rate=(close-close1)/close1;

format rate percent7.1;

run;

/*5 涨跌幅标准化*/

proc means data=sl30 noprint;

var rate;

output out=st std(rate)=srate;

run;

data _null_;

set st;

call symput('srate',srate);

run;

data dsl30;

set sl30;

tval=(rate/&srate)*3;

tval1=round(tval*10)/10;

format tval 6.2;

run;

%sort(dsl30,date)

proc iml;

/*读入数据集数据*/

use dsl30;

read all var{date close rate tval1} into a;

/*取转换后的tval1变量,转置,并在前面附加两个0*/

a1={0 0}||t(a[,4]);

max=j(1,&itv2,0);

min=max;

/*计算序列最大值*/

do i=3 to ncol(a1);

max=max(a1,a1*max[i-1],a1*min[i-1]);

min=min(a1,a1*max[i-1],a1*min[i-1]);

end;

/*取产生最大值的位置*/

mpos=max[,<:>];

mul=1;

/*回溯,获取最大积序列的起点*/

/*需要修改默认的递增规则 - -!*/

do i=mpos to 1 by -1;

mul=mul#a1;

dif=max[mpos]-mul;

if dif < 1e-3 then minpos=i;

end;

res=a1[minpos:mpos]`;

print a1;

print max;

print minpos mpos;

print res;

quit;

        

a1

     
      

0

      

0

      

-3

      

1.2

      

0.7

      

-5.9

      

-0.5

      

-2.7

      

2.9

   

        

max

     
      

0

      

0

      

0

      

1.2

      

0.84

      

14.868

      

2.95

      

20.0718

      

58.20822

   

        

minpos

         

mpos

     
      

3

      

9

   

        

res

     
      

-3

      

1.2

      

0.7

      

-5.9

      

-0.5

      

-2.7

      

2.9

   


二维码

扫码加我 拉你入群

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

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

全部回复
2016-1-31 13:44:48
发帖格式还是有点问题,最下面是行向量,不是列向量
二维码

扫码加我 拉你入群

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

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

2016-2-3 09:52:27
从这几天的股指来看还真的很有意思,一天涨,一天跌
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群