全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1563 14
2022-01-17
悬赏 160 个论坛币 已解决

讲股票每周内每日交易量累计、高低值比较取大小,好像逻辑很简单。但是自己写的的程式跑完结果就是没有累计和比较。。。。。。头大,求高手指教

②另外想希望写个程式串联数据集股东数hold和monthly、weekly和日交易A,实现以下逻辑:

求股票代码+日期,满足:月MACD连续增长2月&周boll上传中轨&当日股东数小于一年前和半年前;如果同一支股票得出一个日期后,后面20个交易日的日期不纳入结果。

得出股票代码和日期后,求其次日的涨幅、交易后一周的涨幅、交易后一月的涨幅;

并将结果生成在新的数据集中。   




问题说明:

1.    附件说明:

数据集:

A.sas7bdat               -几只股票2018.01.01-2022.01.13的基本交易数据

hold.sas7bdat             -几只股票2018.01.01-2022.01.13的股东人数数据

Ymwd.sas7bdat           -想在a上生成日对应的周、月交易数据-本次问题

Weekly.sas7bd            -只剩下每周最后一日交易数据-生产周MACD与周Boll指标

Monthly.sas7bdat          -只剩下每月最后一日交易数据-生产月MACD与月Boll指标

SAS程式:

YMWD.sas                -想在a上生成日对应的周、月交易数据-本次问题

MW-BOLL-MACD.sas     -用数据集a生成的月周BOLL和MACD的程式

     图片:为YMWD.sas运行后得到的Ymwd.sas7bdat数据集问题数据画面

2.    问题:

想每天的数据后面都延申周和月的(周月开盘、周月收盘、周月最高价、周月最低价、周月成交量、以及当日对应周月MACD 周月DIFF、周月DEA、周月BOLL、周月BOLL上轨、周月BOLL下轨)数据。以上对应程式里变量:

数据集A里日交易初始变量:

OPEN-开盘价HIGH-最高价 LOW-最低价close-收盘价 VOLUME-成交量 nclose-前除权后的收盘价

Wnopen WNCLOSE Wvolume WnHigh WnLow

Mnopen MNCLOSE Mvolume MnHigh MnLow

WMACD WDIFF WDEA WBOLL WUPPERWLOWER;

MMACD MDIFF MDEA MBOLL MUPPERMLOWER

红色是目前程式测试失败的:

逻辑如下:排序每周第1交易日的周数据=日数据

Mnopen=nopen MNCLOSE=nclose Wvolume=volume;WnHigh=nHigh;WnLow=nLow;

后面若不为当周第一交易日则Mnopen不变retain下来,MNCLOSE始终=nclose;Wvolume需要上一日Wvolume+当日的volume, WnHigh需要上一交易日的Wnhign与当日nhigh取最大值,WnLow则取最小值;一直到本周最后一个交易日,可以做到每天的Mnopen都为当周第一交易日开盘,MNCLOSE始终为当日收盘价nclose,Wvolume为到当日为止的周交易量,WnHighWnLow为到当日为止的周最高价和最低价。

每个交易日假设为当周最后一天,对应的当天的WNCLOSE再加上之前各周最后一天的周收盘价都可以计算出当天的WMACD WDIFF WDEA WBOLL WUPPER WLOWER;只是要替换Weekly数据集中的当周Wclose即可计算出。需求在a自己的数据集里算出来。

自己写的的YMWD.sas 程式跑Wvolume WnHigh WnLow时结果不对,实际没有相加和比大小。。。。。。头

希望写个程式串联数据集股东数hold和monthly、weekly和日交易A,实现以下逻辑:

求股票代码+日期,满足:月MACD连续增长2月&周boll上传中轨&当日股东数小于一年前和半年前;如果同一支股票得出一个日期后,后面20个交易日的日期不纳入结果。

得出股票代码和日期后,求其次日的涨幅、交易后一周的涨幅、交易后一月的涨幅;

并将结果生成在新的数据集中。      

问题说明.docx
大小:(17.72 KB)

 马上下载

问题说明.rar
大小:(2.43 MB)

 马上下载

本附件包括:

  • ask.jpg
  • ask-simple.jpg
  • hold.sas7bdat
  • monthly.sas7bdat
  • MW-BOLL-MACD.sas
  • weekly.sas7bdat
  • YMWD.sas
  • ymwd.sas7bdat
  • 问题说明.docx
  • a.sas7bdat

ask-simple.jpg ask.jpg    


最佳答案

HXAI102230 查看完整内容

data sorta; set raw.a; by stockcode year month wk date; retain Mvolume Mnhigh Mnlow Wvolume Wnhigh Wnlow; /*Stats by Year-Month*/ if first.month then do; Mvolume=0; Mnhigh=.; Mnlow=.; end; Mvolume+volume; if ^missing(nhigh) then Mnhigh=max(Mnhigh,nhigh); if ^missing(nlow) then Mnlow=min(Mnlow,nlow); /*Stats by Wk*/ if first.wk then do; Wvolume=0; Wnhigh=.; Wnlo ...
二维码

扫码加我 拉你入群

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

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

全部回复
2022-1-17 23:21:20
data sorta;
  set raw.a;
        by stockcode year month wk date;
        retain Mvolume Mnhigh Mnlow Wvolume Wnhigh Wnlow;
        /*Stats by Year-Month*/
        if first.month then do;
    Mvolume=0;  Mnhigh=.;        Mnlow=.;
        end;
        Mvolume+volume;
        if ^missing(nhigh) then Mnhigh=max(Mnhigh,nhigh);
        if ^missing(nlow) then Mnlow=min(Mnlow,nlow);
        /*Stats by Wk*/
  if first.wk then do;
    Wvolume=0;  Wnhigh=.;        Wnlow=.;
        end;
        Wvolume+volume;
        if ^missing(nhigh) then Wnhigh=max(Wnhigh,nhigh);
        if ^missing(nlow) then Wnlow=min(Wnlow,nlow);
run;
二维码

扫码加我 拉你入群

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

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

2022-1-18 11:25:57
proc sort data=raw.a out=sorta;
  by stockcode year month wk date;
run;

proc sql;
  /*Stats by Year-Month*/
  create table montha as
  select distinct stockcode,year,month,
         sum(volume)as Mvolume,
         max(nhigh)as Mnhigh,
         min(nlow) as Mnlow
        from sorta
        group by stockcode,year,month;
        /*Stats by WK*/
  create table wka as
  select distinct stockcode,wk,
         sum(volume)as Wvolume,
         max(nhigh)as Wnhigh,
         min(nlow) as Wnlow
        from sorta
        group by stockcode,wk;
/*remerging*/
  create table YMWD as
        select a.*, b.Mvolume,b.Mnhigh,b.Mnlow,c.Wvolume,c.Wnhigh,c.Wnlow
  from sorta as a
       left join montha as b
       on (a.stockcode=b.stockcode) and (a.year=b.year) and (a.month=b.month)
       left join wka as c
       on (a.stockcode=c.stockcode) and (a.wk=c.wk);
quit;
二维码

扫码加我 拉你入群

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

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

2022-1-18 11:27:03
第一个问题的程序,第二个问题还没有搞清楚
二维码

扫码加我 拉你入群

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

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

2022-1-18 18:29:16
HXAI102230 发表于 2022-1-18 11:27
第一个问题的程序,第二个问题还没有搞清楚
非常感谢,太厉害了,我还没看懂你的程式。
不过用你的程式跑出来的结果是整月和整周的数据相同,如下图。我其实是想当时每一天都是最后一天来对待,即每天的月周数据生成后,不随后面日期更新作update。即每天的数据都是对当天来的。
只有周最后交易日数据才是完全与整周数据吻合。


针对第2个问题:可能没表达好。
假想从2021年开始所有股票数据开始判断:
1.stockcode第一个,“000002”,2021年1月4日为第一个观测数据(1月4日对应的收盘价即为当周和当月收盘价,计算得当月对应的MACD和BOLL指标,如前面逻辑;而上周上月即2021年之前的都为整周数据),开始判断是否满足以下条件:
   月MACD连续增长2月&周boll上传中轨&当日股东数小于一年前和半年前;
   如果同一支股票得出一个日期后,后面20个交易日的日期不纳入结果。
   即判断是否(202101月MACD>202012月MACD>2020.11月MACD)
      & 当天的收盘价nclose>Boll(202101月周布林中轨)&前面连续两周的收盘价<Boll(对应前面两周各自的布林中轨)
     &当天的股东数stocksum<(前面一年即2020年1月4日,当天由于无开盘,回溯最新的2020年1月3日股东数)2020年1月3日的股东数;
如果以上判断条件都为是,则记录如新表。然后向下跳过20个观测即从2021.02.01日开始继续向面循环判断
如果以上判断有一个条件为否,则计算下一个观测2021年1月5日数据;
2.运行完“000002”,继续运行下一个股票代码数据;同样2021年1月4日为该组第一个观测数据


3运行完把所有符合逻辑的股票代码-日期及附带观测数据输出到新的数据集,然后查找到这些数据日期对应次日股价、7天后第一个交易日后股价,和30天后第一个交易日股价nclose。并用前后的股价得出收益率。




不知道说明白了没有




  







月MACD连续增长2月&周boll上传中轨&当日股东数小于一年前和半年前;如果同一支股票得出一个日期后,后面20个交易日的日期不纳入结果。

得出股票代码和日期后,求其次日的涨幅、交易后一周的涨幅、交易后一月的涨幅;


数据结果.jpg

二维码

扫码加我 拉你入群

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

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

2022-1-18 18:31:16
HXAI102230 发表于 2022-1-18 11:27
第一个问题的程序,第二个问题还没有搞清楚
非常感谢,太厉害了,我还没看懂你的程式。
不过用你的程式跑出来的结果是整月和整周的数据相同,如下图。
我其实是想当时每一天都是最后一天来对待,即每天的月周数据生成后,不随后面日期更新作update。即每天的数据都是对当天来的。
只有周最后交易日数据才是完全与整周数据吻合。


针对第2个问题:可能没表达好。
假想从2021年开始所有股票数据开始判断:
1.stockcode第一个,“000002”,2021年1月4日为第一个观测数据(1月4日对应的收盘价即为当周和当月收盘价,计算得当月对应的MACD和BOLL指标,如前面逻辑;而上周上月即2021年之前的都为整周数据),开始判断是否满足以下条件:
   月MACD连续增长2月&周boll上传中轨&当日股东数小于一年前和半年前;
   如果同一支股票得出一个日期后,后面20个交易日的日期不纳入结果。
   即判断是否(202101月MACD>202012月MACD>2020.11月MACD)
      & 当天的收盘价nclose>Boll(202101月周布林中轨)&前面连续两周的收盘价<Boll(对应前面两周各自的布林中轨)
     &当天的股东数stocksum<(前面一年即2020年1月4日,当天由于无开盘,回溯最新的2020年1月3日股东数)2020年1月3日的股东数;
如果以上判断条件都为是,则记录如新表。然后向下跳过20个观测即从2021.02.01日开始继续向面循环判断
如果以上判断有一个条件为否,则计算下一个观测2021年1月5日数据;
2.运行完“000002”,继续运行下一个股票代码数据;同样2021年1月4日为该组第一个观测数据


3运行完把所有符合逻辑的股票代码-日期及附带观测数据输出到新的数据集,然后查找到这些数据日期对应次日股价、7天后第一个交易日后股价,和30天后第一个交易日股价nclose。并用前后的股价得出收益率。


不知道说明白了没有:)

数据结果.jpg
  
         





月MACD连续增长2月&周boll上传中轨&当日股东数小于一年前和半年前;如果同一支股票得出一个日期后,后面20个交易日的日期不纳入结果。
得出股票代码和日期后,求其次日的涨幅、交易后一周的涨幅、交易后一月的涨幅;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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