设为首页收藏本站

 找回密码
 注册
楼主: nopain

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

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2023-9-25
发表于 2007-8-25 17:38:48 |显示全部楼层
原帖由 轮回 于 2007-8-25 13:30 发表
要在TB上实现这个功能可能没有在文华上方便,原因有2.
1.序列变量不支持前向赋值,如LCose [ i ] = Close;若用PlotNumeric又不支持用户函数.
2.只能向后引用1根K线的数据.
请问版主有其他方法吗? ...


实现这些功能没有问题,代码都已经写差不多了,按第一种方式!
只能向后引用一个数据,NextXXX这样的函数建议只能用来进行成交确认!
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
20
积分
810
帖子
153
主题
19
阅读权限
60
注册时间
2007-7-22
最后登录
2013-7-9
发表于 2007-8-25 19:57:37 |显示全部楼层
任何大周期都可以用最小基本周期来合成,如1分钟周期就可以合成1分钟以上的任何周期,这个不容置疑.因此跨周期当然可以实现(当然正如我上面提到的,得有基本工具--函数/指令支持).
跨周期的主要意义在于用大周期掌握大的方向,小周期确定具体开平仓点位,减小误差,提高精度.
图表显示采用小周期K图作为基本的数据源,没有必要切换到大周期,大周期数据的运算在交易程序内部完成.当然你也可以通过编辑指标将大周期的K图数据显示出来.


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

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
发表于 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: 5Rank: 5

精华
1
UID
20
积分
810
帖子
153
主题
19
阅读权限
60
注册时间
2007-7-22
最后登录
2013-7-9
发表于 2007-8-25 20:38:19 |显示全部楼层
nopain:你好!
上图不太理想,理论上用1分钟K线生成3分种K线,只要相临数据连续,那么3分K线的同一时间的3根(或以下)K线的图形应相同.

还有,缺少非连续时间的判断.

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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


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

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
20
积分
810
帖子
153
主题
19
阅读权限
60
注册时间
2007-7-22
最后登录
2013-7-9
发表于 2007-8-25 21:32:07 |显示全部楼层
最好用可变长度的数组模式,BARCOUNT>LENGTH/*数组长度*/>=MOD(BARCOUNT, nPeriodNums)  .
如果有困难,第1种方式也是不错的选择.
天生我才必有用
不拘一格交英才

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
20
积分
810
帖子
153
主题
19
阅读权限
60
注册时间
2007-7-22
最后登录
2013-7-9
发表于 2007-8-25 22:04:53 |显示全部楼层
采用第1种方式可能需要解决前向赋值问题,不知你准备怎样解决?
如果使如LClose [ i ] = Close;这样的语句合法,那就相当简单了.

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
20
积分
810
帖子
153
主题
19
阅读权限
60
注册时间
2007-7-22
最后登录
2013-7-9
发表于 2007-8-25 22:21:34 |显示全部楼层
那个应该有问题,只有开盘价相等.其他的不相等.例如:实际上我们应该要求11:30--11:32的所有数据均相等才对.即11:30;11:31和11:32看上去就是同一根K线.
天生我才必有用
不拘一格交英才

使用道具 举报

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

bottom

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

GMT+8, 2024-3-29 14:09

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部