设为首页收藏本站

 找回密码
 注册
楼主: nopain
打印 上一主题 下一主题

通过文件读写函数实现跨周期数据调用! [复制链接]

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
跳转到指定楼层
1#
发表于 2009-4-4 09:01:38 |显示全部楼层 |倒序浏览
TB3.2.2增加了文件读写功能函数,SetTBProfileString和GetTBProfileString,
通过使用这两个函数,可以实现较复杂的应用,比如跨周期数据调用。
SetTBProfileString将数据内容写到用户公式目录tblprofile.ini文件下。

下文以5分钟周期调用日线指标数据举例讲解具体应用。

操作步骤如下:
1、新建一个工作区,包含上下两个图表窗体,上面选择日线周期,下面选择5分钟周期。
2、新建一个技术指标,命名为MyDayMA。编译成功后插入日线图表中。详细代码如下:
  1. Params
  2.         Numeric length(10);
  3. Vars
  4.         Numeric MA;
  5.         string strkey;
  6.         string strValue;
  7. Begin
  8.         MA = AverageFC(Close,length);
  9.         strKey = DateToString(Date);
  10.         strValue = Text(MA);
  11.         SetTBProfileString("DayMA",strKey,strValue);
  12.         PlotNumeric("MA",MA);
  13. End
复制代码


3、新建一个技术指标,My5MinMA。编译成功后插入5分钟图表中,详细代码如下:
  1. Vars
  2.         NumericSeries DayMAValue;
  3.         string strKey;
  4.         string strValue;
  5. Begin
  6.         strKey = DateToString(Date);
  7.         strValue = GetTBProfileString("DayMA",strKey);
  8.         If(strValue != InvalidString)
  9.         {
  10.                 DayMAValue = Value(strValue);
  11.         }Else
  12.         {
  13.                 DayMAValue = DayMAValue[1];
  14.         }
  15.         PlotNumeric("DayMA",DayMAValue);
  16. End
复制代码


4、上面的指标实际使用了未来数据,用来写指标是可以的,但用来做交易指令进行自动交易就会出问题,为了更准确合理的使用跨周期数据,我们应该稍作修改,代码如下:
  1. Vars
  2.         NumericSeries DayMAValue;
  3.         StringSeries strKey;
  4.         string strValue;
  5. Begin
  6.         If(Date!=Date[1])
  7.         {
  8.                 strKey = DateToString(Date[1]);       
  9.         }Else
  10.         {
  11.                 strKey = strKey[1];
  12.         }
  13.        
  14.         strValue = GetTBProfileString("DayMA",strKey);
  15.         If(strValue != InvalidString)
  16.         {
  17.                 DayMAValue = Value(strValue);
  18.         }Else
  19.         {
  20.                 DayMAValue = DayMAValue[1];
  21.         }
  22.         PlotNumeric("DayMA",DayMAValue);
  23. End
复制代码


附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 3 人评分威望 收起 理由
airwaves + 2
gzyesdo + 2
wmt2100 + 8

总评分: 威望 + 12   查看全部评分

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2009-4-6 10:39:03 |显示全部楼层
读写固定的文件,是让函数用起来更简洁些。数据只要不太多,问题应该不大。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
3#
发表于 2009-9-1 15:13:07 |显示全部楼层
V3.2.4版本已经将这两个函数的文件读写升级为数据库读写。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2009-9-25 09:20:50 |显示全部楼层

回复 30# Nichole 的帖子

主要就是段名和Key的处理。您这里不对的情况是什么样子?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2009-9-25 15:26:32 |显示全部楼层

回复 33# Nichole 的帖子

应该是Date!=Date[1];
你怎么改成Weekday了?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
6#
发表于 2009-9-25 17:47:20 |显示全部楼层
你是想要日线调用周线的数据。
首先,写数据的函数的StrKey需要保存为周编号
读数据的函数同样读取这个周编号。
周的编号,你可以这么写。
WeekIndex = IntPart(DateDiff(19700105,Date)/7);
strKey = Text(WeekIndex );

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
7#
发表于 2009-9-26 11:58:23 |显示全部楼层

回复 37# Nichole 的帖子

weekday返回的值是周几。这个值是重复的。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
8#
发表于 2010-5-3 22:00:19 |显示全部楼层

回复 51# thjyqr 的帖子

只能是小周期调用大周期的数据,不能反着来

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
9#
发表于 2011-5-5 17:49:04 |显示全部楼层
回复 62# efrog

没有区别

使用道具 举报

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

bottom

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

GMT+8, 2024-5-4 20:16

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部