设为首页收藏本站

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

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

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: 2

精华
0
UID
105
积分
113
帖子
25
主题
6
阅读权限
30
注册时间
2007-8-13
最后登录
2007-12-1
2#
发表于 2007-8-23 13:05:24 |只看该作者

在1分钟K线上,引用3分钟的开盘价、收盘价和成交量

请斑竹指教在1分钟线上引用3分钟数据的函数是否正确:
//------------------------------------------------------------------------
// 简称: Close3
// 名称:
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        Numeric N(0);
Vars
        Numeric Close3min;
        Numeric Tmp;
        Numeric Tmp1;
        Numeric Tmp2;
        Numeric Tmp3;
Begin
        If (N==0)
        Close3min=Close;
        Else
        {
        If (Time>=0.090000 And Time<=0.145900)
        {
        Tmp1=RoundDown(Time,2);
        Tmp2=RoundDown(Time,4);
        Tmp3=(Tmp1-0.090000)*6000+(Tmp2-Tmp1)*10000;
        Tmp=Mod(Tmp3,3);
        Close3min=Close[(N-1)*3+Tmp+1];
        }
        Else Return InvalidNumeric;
        }
        Return Close3min;
End

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2007/08/22 22:26
// 版权所有        zw4578
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
已有 1 人评分威望 收起 理由
fxl583918 -2 神马都是浮云

总评分: 威望 -2   查看全部评分

使用道具 举报

Rank: 2

精华
0
UID
105
积分
113
帖子
25
主题
6
阅读权限
30
注册时间
2007-8-13
最后登录
2007-12-1
3#
发表于 2007-8-23 13:06:16 |只看该作者

在1分钟K线上,引用3分钟的开盘价、收盘价和成交量

//------------------------------------------------------------------------
// 简称: Open3
// 名称: 3分钟开盘价
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        Numeric N(0);
Vars
        Numeric Open3min;
        Numeric Tmp;
        Numeric Tmp1;
        Numeric Tmp2;
        Numeric Tmp3;
Begin

        If (Time>=0.090000 And Time<=0.145900)
        {
        Tmp1=RoundDown(Time,2);
        Tmp2=RoundDown(Time,4);
        Tmp3=(Tmp1-0.090000)*6000+(Tmp2-Tmp1)*10000;
        Tmp=Mod(Tmp3,3);

                Open3min=Open[N*3+Tmp];
               
        }
        Else Return InvalidNumeric;
       
        Return Open3min;
End

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2007/08/22 23:14
// 版权所有        zw4578
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

Rank: 2

精华
0
UID
105
积分
113
帖子
25
主题
6
阅读权限
30
注册时间
2007-8-13
最后登录
2007-12-1
4#
发表于 2007-8-23 13:07:38 |只看该作者

Vol

//------------------------------------------------------------------------
// 简称: Vol3
// 名称: 三分钟成交量
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        Numeric N(0);
Vars
        Numeric Vol3min;
        Numeric Tmp;
        Numeric Tmp1;
        Numeric Tmp2;
        Numeric Tmp3;
Begin

        If (Time>=0.090000 And Time<=0.145900)
        {
        Tmp1=RoundDown(Time,2);
        Tmp2=RoundDown(Time,4);
        Tmp3=(Tmp1-0.090000)*6000+(Tmp2-Tmp1)*10000;
        Tmp=Mod(Tmp3,3);
                If (N==0)
                {
                If (Tmp==0)
                Vol3min=Vol;
                Else If (Tmp==1)
                Vol3min=Vol[1]+Vol;
                Else If (Tmp==2)
                Vol3min=Vol[2]+Vol[1]+Vol;
                }
                Else
                {
                Vol3min=Summation(Vol[(N-1)*3+Tmp],3);
                }
        }
        Else Return InvalidNumeric;
       
        Return Vol3min;
End

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2007/08/23 00:03
// 版权所有        zw4578
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

使用道具 举报

Rank: 2

精华
0
UID
105
积分
113
帖子
25
主题
6
阅读权限
30
注册时间
2007-8-13
最后登录
2007-12-1
6#
发表于 2007-8-23 17:19:56 |只看该作者

假设在1分钟K线上

参数N为由目前往前推算N个3分钟线的OPEN或CLOSE

使用道具 举报

Rank: 2

精华
0
UID
105
积分
113
帖子
25
主题
6
阅读权限
30
注册时间
2007-8-13
最后登录
2007-12-1
7#
发表于 2007-8-23 18:29:29 |只看该作者

发现用TIME计算出的K线数量在9:00-10:00之间不正确

经过测试发现,用TIME函数计算出的分钟K线数,在分钟<60时不正确,而>60分钟后正确。
为什么?
请斑竹回复
谢谢

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

使用道具 举报

Rank: 2

精华
0
UID
105
积分
113
帖子
25
主题
6
阅读权限
30
注册时间
2007-8-13
最后登录
2007-12-1
9#
发表于 2007-8-24 15:32:44 |只看该作者

楼顶的方式?

我不用时间函数了,不可靠。我改成BarsSinceToday

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
20
积分
810
帖子
153
主题
19
阅读权限
60
注册时间
2007-7-22
最后登录
2013-7-9
10#
发表于 2007-8-25 13:30:01 |只看该作者
要在TB上实现这个功能可能没有在文华上方便,原因有2.
1.序列变量不支持前向赋值,如LClose [ i ]
= Close;若用PlotNumeric又不支持用户函数.
2.只能向后引用1根K线的数据.
请问版主有其他方法吗?


[ 本帖最后由 轮回 于 2007-8-25 22:10 编辑 ]
天生我才必有用
不拘一格交英才

使用道具 举报

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

bottom

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

GMT+8, 2024-4-24 03:21

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部