楼主: air320322
2472 2

[原创博文] 判断主力合约 [推广有奖]

  • 4关注
  • 0粉丝

讲师

81%

还不是VIP/贵宾

-

威望
0
论坛币
11536 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3829 点
帖子
242
精华
0
在线时间
988 小时
注册时间
2005-5-28
最后登录
2022-3-5

50论坛币
详细数据见附件有excel和sas两种格式,下面是部分数据

dt

stock_code

vol

zlhy

20100507

IF1005

240106

1

20100507

IF1006

15275

20100507

IF1009

422

20100507

IF1012

873

20100510

IF1005

201919

1

20100510

IF1006

14788

20100510

IF1009

388

20100510

IF1012

1112

20100511

IF1005

224626

1

20100511

IF1006

19895

20100511

IF1009

564

20100511

IF1012

1227

20100512

IF1005

273131

1

20100512

IF1006

39181

20100512

IF1009

971

20100512

IF1012

1742

20100513

IF1005

217422

1

20100513

IF1006

35798

20100513

IF1009

644

20100513

IF1012

1289

20100514

IF1005

185453

1

20100514

IF1006

41143

20100514

IF1009

874

20100514

IF1012

1166

20100517

IF1005

117625

1

20100517

IF1006

101412

20100517

IF1009

1163

20100517

IF1012

1641

20100518

IF1005

40298

1

20100518

IF1006

261582

20100518

IF1009

1497

20100518

IF1012

2686

20100519

IF1005

14913

1

20100519

IF1006

340531

20100519

IF1009

2330

20100519

IF1012

4265

20100520

IF1005

7125

 

20100520

IF1006

293133

1

20100520

IF1009

1412

 

20100520

IF1012

3402

 

20100521

IF1005

3765

20100521

IF1006

307325

1

20100521

IF1009

1803

20100521

IF1012

4702



求主力合约


连续三个交易日的VOL最大,则该合约为主力合约(zlhy),

最初两个交易日VOL最大的合约为主力合约——IF1005,
第三个交易日则复合连续三个交易日VOL最大的合约——IF1005

到了20100518,IF1006的VOL已经是最大了,但是不符合连续三个交易日VOL最大的条件,则主力合约依然是之前的IF1005,直到20100520,IF1006的VOL已经复合连续三个交易日VOL最大,则IF1006为主力合约

关键词:Stock EXCEL code xcel 详细数据 excel
沙发
jjtww 发表于 2012-3-14 00:20:52 |只看作者 |坛友微信交流群
可以以周为单位,用week(dt)产生周数或intck(‘week’,最早日期,dt),再用i=遍历,每次产生一周的数据,前两个交易日用sort by date vol就可以了,关键是后三个交易日,分析一周中的星期3,4,5,可用用weekday(dt)-1产生1,2,3,4,5.可以借鉴下面这个例子:
data c;
  input date name $ vol;
  cards;
  1 A 40
  1 B 100
  1 C 50
  1 D 200
  2 A 40
  2 B 80
  2 C 120
  2 D 20
  3 A 40
  3 B 100
  3 C 50
  3 D 200
  4 A 100
  4 B 80
  4 C 50
  4 D 20
  5 A 30
  5 B 10
  5 C 50
  5 D 50
  ;
run;
data d;
  set c;
  vol1=lag(lag(lag(lag(vol))));
  vol2=lag(lag(lag(lag(vol1))));
  if date in(3,4,5) then do;
  vol_sum=vol+vol1+vol2;
  end;
  else vol_sum=vol;
run;
proc sort data=d;
  by date vol_sum;
run;
data e;
  set d;
  by date;
  if last.date;
run;
e便是想要的数据,临时数据产生的较多,你改下覆盖掉。

使用道具

藤椅
air320322 发表于 2012-3-14 09:38:44 |只看作者 |坛友微信交流群
to:jjtww
1、为什么按周为单位呢?

2、你这个算法也没有达到我需要的结果
不明真相的群众

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-13 00:36