开拓者期货期权程序化系统交易论坛

标题: 通过文件读写函数实现跨周期数据调用! [打印本页]

作者: nopain    时间: 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
复制代码


[attach]1597[/attach]
作者: cfmx2007    时间: 2009-4-4 11:02:49

好啊,这个功能非常好呀,期待很久啦。。。
作者: yml0396    时间: 2009-4-4 17:26:41     标题: 好东西,支持.TB的技术开发真的是一流的:

TB的技术人员辛苦了.非常感谢你们.现在看来国内哪个号称最大的财经软件要追赶你们了.
作者: 滴水成川    时间: 2009-4-4 20:15:05

这是个了不起的创意!
作者: a2510    时间: 2009-4-4 20:22:28

好样的,tb.
作者: bigbear2046    时间: 2009-4-6 08:16:05

为啥这个读写要固定文件,不能像fileappend一样自定义文件?这样不会导致文件大小增长过快导致效率降低么?
作者: nopain    时间: 2009-4-6 10:39:03

读写固定的文件,是让函数用起来更简洁些。数据只要不太多,问题应该不大。
作者: 朴素    时间: 2009-4-6 14:25:27

好贴!给版主致敬
作者: mdjxq    时间: 2009-4-6 18:05:50

"读写固定的文件,是让函数用起来更简洁些。数据只要不太多,问题应该不大。"

随便读写很危险,万一你放毒咋办?
作者: 天行健    时间: 2009-4-6 21:05:24

这个文件肯定会越来越大,因为只有增加没有删除,日积月累。
而且大量TB函数的说明不够清楚,应用上会有困难。
比如Bool SetTBProfileString(String strSection,String strKey,String strValue)中键名、块名的概念。所举示例也太简单不能把公司的特点说清楚,多举几个例子要死人啊?
要让更多的人使用TB,就要减少学习难度,编写说明文档的时候不要把用户当成开发人员一样的水平看待。TB公司老是爱犯这样的错误。
作者: fish0451    时间: 2009-4-7 09:11:59

tsj6 可喜可贺,研究一下!tsj6
作者: bigbear2046    时间: 2009-4-7 09:43:27

版主 做固定文件的限制,随着不同函数对于读写要求的增加,会造成同块名的误用吧
作者: lilei19733    时间: 2009-4-7 14:07:04     标题: 非常好的一个功能

通过文件方式交换不同图表的数据,真是太棒了。
但诚如天行健讲的,请照顾水平一般的同学,多举几个例子,让大家好理解。
先谢谢NO PAIN 老师。
作者: 朴素    时间: 2009-4-9 23:09:34     标题: 照葫芦画瓢写了一个60分钟调用10日线atr值,显示不对!

自己照葫芦画瓢写了一个60分钟调用10日线atr值。
//------------------------------------------------------------------------
// 简称: dayatr
// 名称: dayatr
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
        Numeric length(10);
Vars
        Numeric atr;
        string strkey;
        string strValue;
Begin
        atr= AverageFC(TrueRange,Length);;
        strKey = DateToString(Date);
        strValue = Text(atr);
        SetTBProfileString("Dayatr",strKey,strValue);
        Return atr;
End
//------------------------------------------------------------------------
// 简称: My60MinAtr
// 名称: 60分钟取日线ATR
// 类别: 技术指标
// 类型: 其它类
// 输出:
//------------------------------------------------------------------------
Params
        NumericSeries Currentmaxdate(20090201);
Vars
        NumericSeries dayatrValue;
        StringSeries strKey;
        string strValue;
Begin
        If(Date!=Date[1] and date>Currentmaxdate)
        {
                strKey = DateToString(Date[1]);        
        }Else
        {
                strKey = strKey[1];
        }
        
        strValue = GetTBProfileString("Dayatr",strKey);
        If(strValue != InvalidString)
        {
                dayatrValue = Value(strValue);
        }Else
        {
                dayatrValue = dayatrValue[1];
        }
       PlotNumeric("Dayatr",DayMAValue);
End
1)输出不对,请老师看看那里有问题?谢谢
2)如果自动交易断线后,再连网,自动交易如果不用手工补有别的办法吗?
作者: 孤舟骑浪    时间: 2009-4-10 10:11:51

  1. // 简称: atrs
  2. // 名称: ATR指标
  3. // 类别: 技术指标
  4. // 类型: 其它类
  5. // 输出:
  6. //------------------------------------------------------------------------
  7. Params
  8.         Numeric length(10);
  9. Vars
  10.         Numeric atr;
  11.         string strkey;
  12.         string strValue;
  13. Begin
  14.         atr= AverageFC(TrueRange,Length);;
  15.         strKey = DateToString(Date);
  16.         strValue = Text(atr);
  17.         SetTBProfileString("Dayatr",strKey,strValue);
  18.         PlotNumeric("atr",atr);
  19. End
复制代码
  1. // 简称: atrmin
  2. // 名称: ATR分钟指标
  3. // 类别: 技术指标
  4. // 类型: 其它类
  5. // 输出:
  6. //------------------------------------------------------------------------
  7. Params
  8.         Numeric Currentmaxdate(20090201);
  9. Vars
  10.         NumericSeries dayatrValue;
  11.         StringSeries strKey;
  12.         string strValue;
  13. Begin
  14.         If(Date!=Date[1])
  15.         {
  16.                 strKey = DateToString(Date[1]);        
  17.         }Else
  18.         {
  19.                 strKey = strKey[1];
  20.         }
  21.         
  22.         strValue = GetTBProfileString("Dayatr",strKey);
  23.         If(strValue != InvalidString)
  24.         {
  25.                 dayatrValue = Value(strValue);
  26.         }Else
  27.         {
  28.                 dayatrValue = dayatrValue[1];
  29.         }
  30. if(date>=Currentmaxdate)
  31. {
  32.         PlotNumeric("Dayatr",DayatrValue);
  33. }
  34. End
复制代码

作者: 朴素    时间: 2009-4-10 11:27:52     标题: 问题解决了

用户函数不能关联图表。
不能在用户函数调用,只能在技术指标和交易指令
作者: 人生如梦    时间: 2009-4-13 01:02:22     标题: 如何在1分钟图调用5分钟的指标呢

我想在1分钟的图中调用5分钟的指标,这样的指标该怎样写呢?
作者: 滴水成川    时间: 2009-4-13 15:59:10

经测试发现,如果有多个公式都要使用这一功能,要使用不同的strSection,否则数据会混淆。
建议可以让用户自定文件名,既可解决文件增长太快的问题,又增加了用户的灵活性,并可方便地解决数据混淆的问题。
作者: 人生如梦    时间: 2009-4-13 17:04:42

如何在1分钟图调用5分钟的指标呢


我想在1分钟的图中调用5分钟的指标,这样的指标该怎样写呢?
作者: jvya    时间: 2009-4-18 12:38:07

支持一下
用这个函数,可以做出代码:根据前几次的成功率或赢利率随情况改变开仓资金比例。
以前只能近似实现此想法,并且很麻烦。
作者: yml0396    时间: 2009-5-6 22:16:16     标题: nopain先生.

给个在15分钟上取60分钟的用读写函数实现跨周期数据调用的例子,自己试着写可写不成功.希望你有时间帮助我们.先谢谢你了.
作者: yml0396    时间: 2009-5-7 17:18:12     标题: 问题在什么地方?

插入小时周期图表的技术指标:

Params
        Numeric N(25);
        Numeric M1(4);
        Numeric M2(3);
        Numeric M3(3);
Vars
        NumericSeries RSV;
        NumericSeries FASTK;
        
        NumericSeries MA;
                NumericSeries MA1;
        string strkey;
        string strValue;
                string strValue1;
Begin
        
                RSV= (CLOSE-Lowest(LOW,N))/(Highest(HIGH,N)-Lowest(LOW,N))*100;
        FASTK=SMA(RSV,M1,1);
        MA=SMA(FASTK,M2,1);
        MA1=SMA(MA,M3,1);
        strKey = timeToString(hour);
        strValue = Text(MA);
                strValue1 = Text(MA1);
        SetTBProfileString("DayMA",strKey,strValue);
                SetTBProfileString("DayMA1",strKey,strValue1);
        PlotNumeric("MA",MA);
                PlotNumeric("MA1",MA1);
End





插入15分钟周期图表的技术指标:
Vars
        NumericSeries DayMAValue;
                NumericSeries DayMAValue1;
        StringSeries strKey;
                StringSeries strKey1;
        string strValue;
                string strValue1;
Begin
        If(hour!=hour[1])
        {
                strKey = timeToString(hour[1]);        
        }Else
        {
                strKey = strKey[1];
        }
        
        strValue = GetTBProfileString("DayMA",strKey);
                strValue1 = GetTBProfileString("DayMA1",strKey1);
        If(strValue != InvalidString)
        {
                DayMAValue = Value(strValue);
                                DayMAValue1 = Value(strValue1);
        }Else
        {
                DayMAValue = DayMAValue[1];
                                DayMAValue1 = DayMAValue1[1];
        }
        PlotNumeric("DayMA",DayMAValue);
                PlotNumeric("DayMA1",DayMAValue1);
End

可放到图表里感觉就不对,请帮我看看问题在什么地方好吗?
作者: yml0396    时间: 2009-5-16 17:52:19     标题: nopain先生.

在15分钟上取60分钟的用读写函数实现跨周期数据调用有方法解决吗?望不吝赐教.
作者: adslhuang    时间: 2009-6-15 18:35:12

哎,限定了只能读取唯一的文件,还是很不方便,这明明是人为的限定,到是能写入任何文件,
作者: nopain    时间: 2009-9-1 15:13:07

V3.2.4版本已经将这两个函数的文件读写升级为数据库读写。
作者: 开拓交易者    时间: 2009-9-5 16:01:48

为什么要这么麻烦的这么做呢?多开几个窗口设置不同的时间不是也可以实现吗?请问这个和多开几个窗口分别设置有什么不同呢?
作者: f600624    时间: 2009-9-22 00:38:03

这个跨周期的实现比以前的好多了,但好象还没文华刚推出的方便。还在仔细研究中
作者: f600624    时间: 2009-9-22 01:40:55

试过了,确实很方便,只是要多开很多窗口,不知道会不会太增加系统负担,呵呵。

另外问一下,一个交易帐号能不能在两台电脑同时使用,若能,打算再买台电脑,现在品种开多了觉得很慢。
作者: dengwen    时间: 2009-9-22 08:10:35

一个交易帐号可以在两台电脑同时使用
放心购买电脑
作者: Nichole    时间: 2009-9-24 18:08:41     标题: 均线:日线调用周线数据 哪理解错了??

老大,RT,求助:
Vars
        NumericSeries WeekMAValue;
        StringSeries strKey;
        string strValue;
Begin
        If(Weekday!=Weekday[1])  
        {
                strKey = DateToString(Date[1]);        
        }Else
        {
                strKey = strKey[1];  // ?
        }
        
        strValue = GetTBProfileString("MAweek",strKey);
        If(strValue != InvalidString)
        {
               WeekMAValue = Value(strValue);
        }Else
        {
                WeekMAValue = WeekMAValue[1];
        }
        PlotNumeric("MAweek",WeekMAValue);
End

[ 本帖最后由 Nichole 于 2009-9-24 18:09 编辑 ]
作者: f600624    时间: 2009-9-25 07:59:24     标题: GetTBProfileString是不是不能用于函数中啊?

在技术指标中测试得好好的,放入函数中编译没问题,但一运行就不显示,只能显示K线图,连K线图上的均线都没有了

[ 本帖最后由 f600624 于 2009-9-25 08:04 编辑 ]
作者: nopain    时间: 2009-9-25 09:20:50     标题: 回复 30# Nichole 的帖子

主要就是段名和Key的处理。您这里不对的情况是什么样子?
作者: Nichole    时间: 2009-9-25 12:11:23

原帖由 nopain 于 2009-9-25 09:20 发表
主要就是段名和Key的处理。您这里不对的情况是什么样子?

[attach]2329[/attach]

回老大,就是日线上引用的周均线数据 在9月14日、21日都和单独使用周均线效果相同、数值一样,但是15日、16日等中间的日期就是锯齿状了
不大会用上传图片。。。
作者: nopain    时间: 2009-9-25 15:26:32     标题: 回复 33# Nichole 的帖子

应该是Date!=Date[1];
你怎么改成Weekday了?
作者: Nichole    时间: 2009-9-25 17:36:25

原帖由 nopain 于 2009-9-25 15:26 发表
应该是Date!=Date[1];
你怎么改成Weekday了?


开始是用的Date!=Date[1];因为出现了上面的情况所以改了,结果还是不行。。。
作者: nopain    时间: 2009-9-25 17:47:20

你是想要日线调用周线的数据。
首先,写数据的函数的StrKey需要保存为周编号
读数据的函数同样读取这个周编号。
周的编号,你可以这么写。
WeekIndex = IntPart(DateDiff(19700105,Date)/7);
strKey = Text(WeekIndex );
作者: Nichole    时间: 2009-9-25 17:55:03

原帖由 nopain 于 2009-9-25 17:47 发表
写数据的函数的StrKey需要保存为周编号
读数据的函数同样读取这个周编号。
...


那再多问一下老大,weekday返回的值不能直接用来做周编号么??
作者: nopain    时间: 2009-9-26 11:58:23     标题: 回复 37# Nichole 的帖子

weekday返回的值是周几。这个值是重复的。
作者: Nichole    时间: 2009-10-9 10:20:30

根据上面的帖子,下面这么写不对?

周线上(写数据)这么写:
        weekMA= AverageFC(Close,Length);
        WeekIndex = IntPart(DateDiff(19700105,Date)/7);

        strKey = Text(WeekIndex );
        
        strValue = Text(weekMA);
日线上(读数据)这么写:
         If(WeekIndex!=WeekIndex[1])//这块还是不大明白。。。      
         {
                 strKey = Text(WeekIndex[1]);         
        }Else
        {
                strKey = strKey[1];
        }
        
        strValue = GetTBProfileString("MAweek",strKey)
老大,您可否给指点一下。。。
作者: Nichole    时间: 2009-10-9 15:36:07

又进一步
作者: wer234hj    时间: 2010-3-7 13:18:51     标题: 交易指令跨周期最好最简单的算法

交易指令跨周期最好最简单的算法


   比如读取CU的5分钟KD指标的K值,写这么一个函数可以实现。
   一、首先判断是否有CU的5分钟图(属性为隐藏的,在mt4中窗口的属性值可为隐藏,最小化,最大化),若无则打开一个CU的5分钟图表,图表的属性值设置为隐藏。
   二、判断该图表中是否插入了KD指标,若无则插入KD指标。
   三、分别读取该5分钟图中复图指标K、D值,并根据用户需要,返回读取的K值D值,这个函数如何写,请各位朋友多多帮忙编写,我估计会用到TB平台未公布的系统函数,那是必然的,具体如何去写,如何把系统函数转换成(移植到)用户函数去实现上面所说的这么一个函数,请版主多多帮忙编写。
  打开的隐藏图表什么时候关闭呢?1、当测试交易指令结束时,2、不启用(停用)智能交易系统时,这时关闭掉所有的隐藏图表,这个功能要在编写软件时加入相关的代码解决实现较好或者我们可以编写一个交易指令去关闭掉这些隐藏图表。
   上面所说的这么一个算法事实上挺简单,在mt4上非常容易实现,不知在现在的TB平台上可否暂时实现这一功能但愿能够实现。

上面说的这种算法在技术指标中也可实现跨周期取值,只要把关闭掉这些隐藏图表的条件加入下面几条,

粗糙的说可行了。一。关闭TB平台时关闭全部隐藏图表。
                二。休市时,即K线不走时关闭掉该商品的全部隐藏图表。
                三。隐藏图表数目>N时,过大时关闭全部隐藏图表。

[ 本帖最后由 wer234hj 于 2010-3-8 10:35 编辑 ]
作者: TBlzx    时间: 2010-3-7 16:03:01     标题: 回复 1# nopain 的帖子

学习了,好东西啊
作者: wer234hj    时间: 2010-3-9 17:32:08

如何使用引用数据类型跨周期,
或者有什么办法将不同周期的指标值数据直接引用过来,非算出来,
不用SetTBProfileString和GetTBProfileString

[ 本帖最后由 wer234hj 于 2010-3-9 17:40 编辑 ]
作者: thjyqr    时间: 2010-4-24 01:04:13

请问:既然是读写方式,我就可以在大周期上引用小周期上的数据吗??
比如我在小时线上调用2分钟数据,能行吗????????
作者: thjyqr    时间: 2010-4-24 01:07:31

理论上应该是行的。那位知道的帮助解释下啦?
作者: lh948    时间: 2010-4-24 21:01:58     标题: 回复 45# thjyqr 的帖子

大周期调用小周期也是可以的
作者: thjyqr    时间: 2010-4-25 22:49:08

对于数据库的一些关于效率的问题我不是太懂。我想问问,较之先前的那种单图标的复杂跨周期引用方式相比,文件读写方式其实更科学一些,应用也更可以多样化和复杂一些。
既然这种方式是那么的合理,为什么还要用那些需要另外自编函数的那种类型的跨周期引用呢?我估计也可能有它复杂的优越性。
1:请介绍下两种方式各有什么优势呢?
  2:单图标节省空间肯定是其中的一种优势,但是文件读写方式的多图标除了占用空间,在编写交易程序的时候会导致那些意外的不稳定和风险吗?
请指教!
作者: thjyqr    时间: 2010-4-25 22:53:11

还有最后一个问题:
比如5分钟图标上的均线数据通过文件读写方式,可以在30分钟线“主图”上显示出来吗?
作者: lybluefox    时间: 2010-4-26 22:55:50

strValue,能不能是几个值
作者: thjyqr    时间: 2010-5-2 16:05:19

nopain,请问把这两段代码要大周期调用小周期该在哪里修改下呢,应该修改那段代码,自己不知道从何下手。麻烦请改一下!
作者: thjyqr    时间: 2010-5-2 16:10:26

还是按照日线调用5分钟线数据举个例吧,要怎样写在交易时才没有影响呢?比如日线有时候不缺数据,但是有时候5分线上有时候会缺数据。在其他周期大小之间总会有这样的事情发生,比如中途休盘时间。
作者: nopain    时间: 2010-5-3 22:00:19     标题: 回复 51# thjyqr 的帖子

只能是小周期调用大周期的数据,不能反着来
作者: thjyqr    时间: 2010-5-4 15:58:05

原帖由 lh948 于 2010-4-24 21:01 发表
大周期调用小周期也是可以的


通过文件读写方式也不行??为什么你们说的不一致呢?究竟行还是不行啊?????
作者: thjyqr    时间: 2010-5-5 13:12:01

请问NOPAIN, 究竟文件读写方式引用小周期行不行?
作者: zhouqian    时间: 2010-8-30 15:42:46

请问,如何在30分钟图中,调用5分钟的数据?我按您的方法做了一下,结果似乎不准确,不敢用。
作者: 雷鸟    时间: 2010-11-8 19:23:44

1# nopain

这样的话,实际交易时在分钟图上只能调用前一天的日K线指标(实盘中,当日数据我调用了一下,好像掉不到数据呀),这样会比较滞后,有没有办法在分钟图上调用当日日K线数据呢,麻烦楼主一定回复呀,谢谢了
作者: 雷鸟    时间: 2010-11-8 19:28:02

1# nopain

这样的话,实际交易时在分钟图上只能调用前一天的日K线指标(实盘中,当日数据我调用了一下,好像掉不到数据呀),这样会比较滞后,有没有办法在分钟图上调用当日日K线数据呢,麻烦楼主一定回复呀,谢 ...
雷鸟 发表于 2010-11-8 19:23

原以为在分钟图上当日数据是可以调用的,只是用收盘价MA会不断变化,但实盘测试好像调用的当日日K线指标无效,到底是什么问题呢?
作者: 往往    时间: 2010-12-1 21:32:48

很好,大力支持!
作者: jinyingning    时间: 2011-1-4 21:31:43

经测试发现,如果该公式多次用于不同品种,要使用不同的strSection,否则数据会混淆。

有没有在每次运行该公式时,先清除原有信息块数据的命令呢?
作者: zhaopengtao    时间: 2011-3-1 13:06:25

能不能明确说一下,15分钟可否能引用1分钟数据
作者: efrog    时间: 2011-5-5 16:58:34

TB V4版新增了GetTBProfileString2File和SetTBProfileString2File两个数据库读写函数,可以指定用户自己的数据库,这样可以防止系统的数据库无限制变大。过一段时间交易者可以自行在目录中删除该数据库。
有一个建议,TB应再增加一个删除文件的函数DeleteFile,就更好了,可以在程序初始化过程中删除用户自定义的数据库,确保数据库不会自行膨胀。
GetTBProfileString2File函数说明如下:
说明        读取公式信息文件指定块中的键名对应的字符串。
语法        String GetTBProfileString2File(String strPath,String strSection,String strKey)
参数        strPath 指定文件的路径,请使用全路径表示,并使用\\做路径分割符,否则会执行失败
strSection 指定的信息块的块名
strKey 指定的信息的键名
备注        无
示例        MyStr = GetTBProfileString("c:\\tradelog.log","MySection","MyKey");
作者: efrog    时间: 2011-5-5 17:10:10

回复 1# nopain
1、新建一个工作区,包含上下两个图表窗体,上面选择日线周期,下面选择5分钟周期。

请问版主,如果上下两个图表对换一下(即上图为5分钟周期,下图为日线周期),指标仍跟随对应的周期图表,那运行的结果会怎样?
实际上,我想要了解的是在多个图表的情况下,Tb在Barstatus<=1的情况下的运行机制,也即多个图表Bar的计算顺序。

还请麻烦版主答复:http://www.tradeblazer.net/forum/thread-14157-1-1.html
作者: nopain    时间: 2011-5-5 17:49:04

回复 62# efrog

没有区别
作者: marcokane    时间: 2011-5-6 12:51:55

下面那张图看不到!!!
作者: Amymylove    时间: 2011-9-30 10:36:17

马克留名学习之
作者: 日进    时间: 2011-12-27 20:39:08

在一个工作区建两张图标?还整出这样的函数?这不是多此一举吗?直接在大周期图表上显示大周期的数据就行了吧?要的是只在一张图表上显示大周期的数据才是我们需要的
作者: zyxsir    时间: 2012-5-6 11:36:33

回复 45# thjyqr 的帖子
大周期调用小周期也是可以的
能请管理员写一个例子吗?
作者: 木飘风    时间: 2012-12-11 19:03:50

本帖最后由 木飘风 于 2012-12-11 19:10 编辑

大周期调用小周期是可以实现的,但是在大周期上显示就没有什么意义了!但可以实现在大周期上用小周期收盘价 最高价 最低价 做判断 进行交易控制! 可以有效避免采用大周期数据造成的大幅滑点!

比如 在15分钟周期上,采用3分钟 或是5分钟周期Bar 的收盘价close[1]做判断,采用open价成交 ,就可以避免 采用15分钟周期收盘价 做判断的时候,行情在15分钟快速大幅上涨或是下跌时,成交反应过于迟钝的问题!

作者: lanmeng_818    时间: 2013-1-2 18:55:51

木飘风 发表于 2012-12-11 19:03
大周期调用小周期是可以实现的,但是在大周期上显示就没有什么意义了!但可以实现在大周期上用小周期收盘价 ...

说的很对啊,我也很想知道大周期如何调用小周期的数据,有没有模板共享一下啊?谢谢啦!
作者: yhp2012    时间: 2013-1-2 19:14:38

lanmeng_818 发表于 2013-1-2 18:55
说的很对啊,我也很想知道大周期如何调用小周期的数据,有没有模板共享一下啊?谢谢啦! ...

可以去参考追涨杀跌的跨周期贴,可以说他的实现方法,是总结了其他编程大神的精妙思想,非常好用
作者: lanmeng_818    时间: 2013-1-2 19:33:29

yhp2012 发表于 2013-1-2 19:14
可以去参考追涨杀跌的跨周期贴,可以说他的实现方法,是总结了其他编程大神的精妙思想,非常好用 ...

以前看过,比较难懂啊。而且他不也是小周期调用大周期么?能实现大周期调用小周期么?
作者: yhp2012    时间: 2013-1-2 19:44:33

lanmeng_818 发表于 2013-1-2 19:33
以前看过,比较难懂啊。而且他不也是小周期调用大周期么?能实现大周期调用小周期么? ...

追涨杀跌是通过小周期数据计算出大周期数据的,显然不能实现大周期调用小周期。你这种提法我还真没见过,NOPAIN的贴子中的方法应该可以实现你的大周期调用小周期的,不过既然你要五分钟调用一分钟,你直接在一分钟上作交易好了
作者: lanmeng_818    时间: 2013-1-2 19:52:25

yhp2012 发表于 2013-1-2 19:44
追涨杀跌是通过小周期数据计算出大周期数据的,显然不能实现大周期调用小周期。你这种提法我还真没见过, ...

哦,那谢谢了。主要想盘中波段操作,同时跟踪止盈,调用小周期来判断合适的止盈止损点。用大周期K线过大时不能识别最高价和最低价出现的先后顺序。
当然可能实盘交易没有影响,不过在历史K线上就失真了。没办法更好的优化参数。
作者: awsgha    时间: 2013-1-17 14:03:29

请问在5分钟图上调用一小时图的均线,该怎么改公式? 我自己想很久,编程知识实在有限,不知道该怎么处理,求助,谢谢!
作者: 木飘风    时间: 2013-1-26 17:39:33

本帖最后由 木飘风 于 2013-1-26 17:42 编辑
lanmeng_818 发表于 2013-1-2 18:55
说的很对啊,我也很想知道大周期如何调用小周期的数据,有没有模板共享一下啊?谢谢啦! ...


先在小周期上用时间分割,把要调用的数据写到文件——定时写入数据,然后在大周期上用时间分割(需要用到本地时间,要与TB服务器时间保持一致)调用文件数据——定时读取文件数据。
作者: lanmeng_818    时间: 2013-1-28 20:39:16

木飘风 发表于 2013-1-26 17:39
先在小周期上用时间分割,把要调用的数据写到文件——定时写入数据,然后在大周期上用时间分割(需要用到 ...

谢谢啊,主要我是菜鸟一只,不会写啊,如果能给个类似模板类的东西那就万分感谢啦!
作者: lanmeng_818    时间: 2013-3-12 22:43:55

请问如果被调用的大周期不能被小周期整除,会不会出错?
比如:3分钟调用5分钟数据。
作者: SID    时间: 2013-7-17 20:19:29

nopain 发表于 2010-5-3 22:00
只能是小周期调用大周期的数据,不能反着来

请问楼主,5分钟如何调用一小时数据,用了time函数,怎么调试都不对,time返回都是00:00:00
作者: hrqh100280    时间: 2013-11-8 12:49:13

顶起
作者: dgh2236    时间: 2013-12-15 20:23:50

版主,5分钟调用1小时的怎么写,写了一晚上都没调出来
作者: dgh2236    时间: 2013-12-15 20:28:04

插入一小时
Params
        Numeric length(10);
Vars
        Numeric MA;
        string strkey;
        string strValue;
Begin
        MA = AverageFC(Close,length);
        strKey = timeToString(hour);
        strValue = Text(MA);
        SetTBProfileString("DayMA",strKey,strValue);
        PlotNumeric("MA",MA);
End
插入五分钟的
Vars
        NumericSeries DayMAValue;
        StringSeries strKey;
        string strValue;
Begin
         If(hour!=hour[1])
        {
                strKey = timeToString(hour[1]);        
        }Else
        {
                strKey = strKey[1];
        }
        
        strValue = GetTBProfileString("DayMA",strKey);
        If(strValue != InvalidString)
        {
                DayMAValue = Value(strValue);
        }Else
        {
                DayMAValue = DayMAValue[1];
        }
        PlotNumeric("DayMA",DayMAValue);
End
五分钟只显示直线。
作者: dgh2236    时间: 2013-12-15 21:22:10

哪里写错了不能用
作者: a366755408    时间: 2013-12-23 10:45:15

写数据库的方式 能否实现在5分钟图上取30分钟的指标值(如:SAR)???????
作者: leihbu    时间: 2014-2-27 10:00:15

请问这个函数能够实现回溯吗
作者: zhoukaike    时间: 2016-4-13 22:35:14

这样写的程序能做历史数据测试吗?能优化吗?

作者: mike883    时间: 2016-5-23 01:25:41

TB是想把大家都训练成数学家吗?
内置一个类似飞狐的STKINDI或者REFINDI引用函数会死吗?
作者: rongwengcong    时间: 2016-6-9 18:41:51

mike883 发表于 2016-5-23 01:25
TB是想把大家都训练成数学家吗?
内置一个类似飞狐的STKINDI或者REFINDI引用函数会死吗? ...

说得太对了,TB故意把软件搞复杂,一群猪一样的东西,飞狐的 STKINDI 2000年就有了吧,十几年过去的,tb难到连山寨都不会。
作者: hhyyy99    时间: 2016-6-13 15:22:23

学习ing.

作者: hhyyy99    时间: 2016-6-13 15:22:50

学习ing.

作者: hhyyy99    时间: 2016-6-13 15:25:36

学习ing.

作者: hhyyy99    时间: 2016-6-13 15:26:03

学习ing.

作者: hhyyy99    时间: 2016-6-13 15:29:00

学习ing.

作者: hhyyy99    时间: 2016-6-13 16:27:04

学习ing.

作者: hhyyy99    时间: 2016-6-13 16:27:41

学习ing.

作者: hhyyy99    时间: 2016-6-13 16:28:14

学习ing.

作者: hhyyy99    时间: 2016-6-13 16:28:30

学习ing.

作者: hhyyy99    时间: 2016-6-13 16:28:51

学习ing.

作者: hhyyy99    时间: 2016-6-13 16:29:12

学习ing.

作者: hhyyy99    时间: 2016-6-13 16:29:35

学习ing.

作者: hhyyy99    时间: 2016-6-13 18:28:43

学习ing.





欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2