设为首页收藏本站

 找回密码
 注册
查看: 67782|回复: 29
打印 上一主题 下一主题

关于商品跨周期数据引用的讨论! [复制链接]

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
跳转到指定楼层
1#
发表于 2007-8-23 12:27:25 |显示全部楼层 |倒序浏览
最近准备编写用户函数来实现跨周期数据引用,关于跨周期数据引用,有几种不同的处理方式,我们以在日线上引用周线为例进行讨论。

假定有一个商品日线数据如下:
//-------------------------------------------------------------------------
星期,日期,开盘价,最高价,最低价,收盘价,成交量,持仓量
五,2007/08/10,19805,19945,19755,19880,1902,6080
一,2007/08/13,19890,20120,19890,20105,1832,6106
二,2007/08/14,20000,20105,19960,19985,2238,6464
三,2007/08/15,19890,20010,19500,19580,5932,7584
四,2007/08/16,19590,19690,19110,19285,8476,8136
五,2007/08/17,18630,19100,18620,18750,15808,13010
一,2007/08/20,19000,19100,18950,19020,9252,13770
二,2007/08/21,18990,19120,18870,18890,7398,14000
三,2007/08/22,18850,18945,18710,18880,6540,14446
四,2007/08/23,19100,19160,18940,18960,4870,15280

第一种处理方式:
该周第一天到当前的高开低收进行合并计算,成交量累计,持仓量取最后的。
处理后的叠加周线数据和日线是一一对应的,如下:
//-------------------------------------------------------------------------
星期,日期,开盘价,最高价,最低价,收盘价,成交量,持仓量
五,2007/08/10,19805,19945,19755,19880,1902,6080 // 前面数据没有了,就以该日的数据为周线数据。
一,2007/08/13,19890,20120,19890,20105,1832,6106 // 周一和日线一样。
二,2007/08/14,19890,20120,19890,19985,4070,6464 // 和周一进行合并
三,2007/08/15,19890,20120,19500,19580,10002,7584 // 周一、二、三进行合并
四,2007/08/16,19890,20120,19110,19285,18478,8136 // 周一、二、三、四进行合并
五,2007/08/17,19890,20120,18620,18750,34286,13010 // 周一、二、三、四、五进行合并
一,2007/08/20,19000,19100,18950,19020,9252,13770 // 周一和日线一样
二,2007/08/21,19000,19120,18870,18890,16650,14000
三,2007/08/22,19000,19120,18710,18880,23190,14446
四,2007/08/23,19000,19160,18710,18960,28060,15280

第二种处理方式:
直接取上一周的周线数据,如果没有则设置为无效值。
处理后的叠加周线数据和日线是一一对应的,如下:
//-------------------------------------------------------------------------
五,2007/08/10,N/A,N/A,N/A,N/A,N/A,N/A                     // 该行无效,因为无上周的数据
一,2007/08/13,19805,19945,19755,19880,1902,6080   // 本周都取上周的周线数据,因为上周数据不完整,用周五的代替
二,2007/08/14,19805,19945,19755,19880,1902,6080
三,2007/08/15,19805,19945,19755,19880,1902,6080
四,2007/08/16,19805,19945,19755,19880,1902,6080
五,2007/08/17,19805,19945,19755,19880,1902,6080
一,2007/08/20,19890,20120,18620,18750,34286,13010 // 本周取上周的周线数据
二,2007/08/21,19890,20120,18620,18750,34286,13010
三,2007/08/22,19890,20120,18620,18750,34286,13010
四,2007/08/23,19890,20120,18620,18750,34286,13010

第三种处理方式:
取本周的周线数据,涉及到引用未来数据,周一就取到周五的数据啦。具体数据就不再列出

对于以上三种方式,大家认为那种更有效,或者说会更有实际意义,或者还有其他的算法,都请积极讨论!

[ 本帖最后由 nopain 于 2007-8-26 18:23 编辑 ]

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2007-8-23 13:54:32 |显示全部楼层
好像有问题,您的算法是不是假设每1分钟的K线都存在?
参数N应该传入什么值?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
3#
发表于 2007-8-24 08:27:03 |显示全部楼层
您是采取楼顶的贴中那种方式来获取价格!或者其他的方法,
否则无法讨论您的算法的正确性。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2007-8-25 20:13:05 |显示全部楼层
功能已经实现,只是在实现N天,N周,N月时发现需要增加求两个日期的间隔日期函数,旧版本暂不支持该函数,理论上用户函数也可以写出来,但效率比较低,考虑还是用系统函数实现。下个版本就可以所有的跨周期数据引用啦。

V3.0.6版本已经可以实现N分钟的数据,按1楼的第一种方式实现的,现贴出来!

代码如下:
新建用户函数ToMins,返回值为数值型。
  1. Params
  2.         NumericSeries Price(0);                // 数据源
  3.         Numeric nPeriodNums;                        // 目标周期数目,和类型组合成 3Min,5Day,2Week,2Month等值
  4.         String strDataType("close");         // 转换的类型,分为High,Low,Open,Close,Vol,OpenInt六种类型
  5. Vars
  6.         NumericSeries nNext(-1);
  7.         NumericSeries returnValue;
  8.         Numeric nCur;
  9.         String strTmp;
  10. Begin
  11.         strTmp = Lower(strDataType);

  12.         If(BarType == 1 &&  BarInterval > nPeriodNums ) // 当前数据周期是分钟线
  13.                 Return InvalidNumeric;
  14.        
  15.         If(BarType == 0 || BarType == 4 || BarType == 5)
  16.                 Return InvalidNumeric;

  17.         If(nPeriodNums <= 0) Return InvalidNumeric;
  18.        
  19.         If(strTmp != "open" && strTmp != "high" && strTmp != "low" &&
  20.                 strTmp != "close" && strTmp != "vol" && strTmp != "openint")
  21.                 Return InvalidNumeric;

  22.         nCur = (Hour*60+Minute)/nPeriodNums;
  23.         If (BarStatus() == 0 )
  24.         {
  25.                 nNext = nCur + 1;
  26.                 returnValue = Price;
  27.         }Else
  28.         {
  29.                 If(Date == Date[1] && nCur < nNext[1])
  30.                 {
  31.                         nNext = nNext[1];
  32.                         If(strTmp=="open")
  33.                         {
  34.                                 returnValue = returnValue[1];       
  35.                         }Else if(strTmp =="high")
  36.                         {
  37.                                 returnValue = max(returnValue[1],Price);
  38.                         }Else if(strTmp =="low")
  39.                         {
  40.                                 returnValue = min(returnValue[1],Price);
  41.                         }Else if(strTmp =="close" || strTmp== "openInt")
  42.                         {
  43.                                 returnValue = Price;
  44.                         }Else if(strTmp =="vol")
  45.                         {
  46.                                 returnValue = returnValue[1]+Price;
  47.                         }
  48.                 }Else
  49.                 {
  50.                         nNext = nCur + 1;
  51.                         returnValue = Price;
  52.                 }
  53.         }
  54.        
  55.         Return returnValue;
  56. End
复制代码


新建一个技术指标,Demo,输出4条线:
  1. Params
  2.         Numeric N(3);
  3. Begin
  4.         PlotNumeric("Open",ToMins(Open,N,"Open"));
  5.         PlotNumeric("High",ToMins(High,N,"High"));
  6.         PlotNumeric("Low",ToMins(Low,N,"Low"));
  7.         PlotNumeric("Close",ToMins(Close,N,"Close"));
  8. End
复制代码


下图是在1Min图上用指标画3Min数据:


[ 本帖最后由 nopain 于 2007-8-25 20:17 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2007-8-25 21:20:20 |显示全部楼层
原帖由 轮回 于 2007-8-25 20:38 发表
nopain:你好!
上图不太理想,理论上用1分钟K线生成3分种K线,只要相临数据连续,那么3分K线的同一时间的3根(或以下)K线的图形应相同.
还有,缺少非连续时间的判断. ...


那是另外的处理方式,
您先看看一楼的三种方式!您的用法是哪种?或者是其他的方式!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
6#
发表于 2007-8-25 21:40:36 |显示全部楼层
BarCount是固定的,按BarCount循环计算,画指标,执行家公式是整个公式的基础,应该是改不了的.

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
7#
发表于 2007-8-25 22:11:28 |显示全部楼层
第一种方式已经实现了,通过序列变量可以实现,前面贴出来的就是!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
8#
发表于 2007-8-26 09:04:33 |显示全部楼层
您说的是第三种做法,引用了未来数据,即您在11:30分的时候就引用了11:32分的收盘价及高,低,量,仓数据!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
9#
发表于 2007-8-26 12:28:55 |显示全部楼层
原帖由 轮回 于 2007-8-26 11:45 发表
没有引用未来函数,例如在5分钟K图上我们看到11:30--11:34的那根K线的时间是11:30,这并不能说它在11:30分就引用了未来数据.


那您这种相当于引用上一个5分钟的数据,1楼的第二种方式,
只是我们会将10:30-34的数据放在10:30上,10:35-10.39放在10:35上。
只有当这5个Bar的数据都走完了,这个数据才会固定下来。您在仔细想想!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
10#
发表于 2007-8-26 13:16:40 |显示全部楼层
您这样就会引用未来数据,您仔细想想

[ 本帖最后由 nopain 于 2007-8-26 13:17 编辑 ]

使用道具 举报

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

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-3 23:43

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部