设为首页收藏本站

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

问题出在哪? [复制链接]

Rank: 2

精华
0
UID
5829
积分
85
帖子
22
主题
12
阅读权限
30
注册时间
2009-11-6
最后登录
2011-10-22
跳转到指定楼层
1#
发表于 2009-11-9 16:23:09 |只看该作者 |倒序浏览
公式temp1用For循环方式
     //------------------------------------------------------------------------
// 简称: temp1
// 名称:
// 类别: 技术指标
// 类型: 振荡类
// 输出:
//------------------------------------------------------------------------
Vars
    NumericSeries  var1;
    Numeric  var2;
    Numeric  i;     
Begin
        var1=AverageFC(TrueRange,2);
        Var2=(H - L[1])/(var1[1]*Sqrt(2));

     For I=3 TO 4
        {                 
                var1=AverageFC(TrueRange,I);
                Var2=MAX((H - L[I-1])/(Var1[1]*Sqrt(I)),Var2);
        }
       
        PlotNumeric("V2", var2);
end
//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2009/11/07 14:51
// 版权所有        telescope
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------


公式Temp不用循环方式

//------------------------------------------------------------------------
// 简称: Temp
// 名称: rrr
// 类别: 技术指标
// 类型: 振荡类
// 输出:
//------------------------------------------------------------------------Vars
Vars
        NumericSeries Var1;
        NumericSeries var2;
        NumericSeries var3;
        NumericSeries var4;
        Numeric TT1;
        Numeric TT2;
        Numeric TT3;
Begin
        var1=AverageFC(TrueRange,2);
        var2=AverageFC(TrueRange,3);
        var3=AverageFC(TrueRange,4);
        Var4=(H - L[1])/(var1[1]*Sqrt(2));
        TT1=(H-L[2])/(var2[1]*Sqrt(3));
        TT2=(H-L[3])/(var3[1]*Sqrt(4));
        TT3=MAX(MAX(Var4,TT1),TT2);
        PlotNumeric("V1", tt3);
End//
------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2009/11/07 14:42
// 版权所有        telescope
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------


两个公式算法和逻辑是一致的,仅仅是写法不同,但两个公式的输出值不同,为何? 问题出在哪?

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25132
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
2#
发表于 2009-11-9 17:35:55 |只看该作者
公式1里的这部分

     For I=3 TO 4
        {                 
                var1=AverageFC(TrueRange,I);
                Var2=MAX((H - L[I-1])/(Var1[1]*Sqrt(I)),Var2);
        }
跟直接I = 4是一个效果。即
               var1=AverageFC(TrueRange,4);
               Var2=MAX((H - L[I-1])/(Var1[1]*Sqrt(4)),Var2);
可以再更详细的了解下循环的意思。
交易开拓者 - 期货程序化与量化系统自动交易领航者

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

使用道具 举报

Rank: 2

精华
0
UID
5829
积分
85
帖子
22
主题
12
阅读权限
30
注册时间
2009-11-6
最后登录
2011-10-22
3#
发表于 2009-11-9 20:47:48 |只看该作者
原帖由 tradeblazer 于 2009-11-9 17:35 发表
公式1里的这部分

     For I=3 TO 4
        {                 
                var1=AverageFC(TrueRange,I);
                Var2=MAX((H - L)/(Var1[1]*Sqrt(I)),Var2);
        }
跟直接I = 4是一个效果。 ...

我查了,var1=AverageFC(TrueRange,I)是对的,问题在Var1[1]上,数字就不对了,请问这里应该如何写,谢谢。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25132
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
4#
发表于 2009-11-10 10:05:43 |只看该作者
原帖由 telescope 于 2009-11-9 20:47 发表

我查了,var1=AverageFC(TrueRange,I)是对的,问题在Var1[1]上,数字就不对了,请问这里应该如何写,谢谢。

Var1[1] 就是 AverageFC(TrueRange,4)的回溯一个BAR的值。
交易开拓者 - 期货程序化与量化系统自动交易领航者

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

使用道具 举报

Rank: 2

精华
0
UID
5829
积分
85
帖子
22
主题
12
阅读权限
30
注册时间
2009-11-6
最后登录
2011-10-22
5#
发表于 2009-11-10 11:21:21 |只看该作者
原帖由 tradeblazer 于 2009-11-10 10:05 发表

Var1[1] 就是 AverageFC(TrueRange,4)的回溯一个BAR的值。



我知道Var1[1] 就是 AverageFC(TrueRange,4)的回溯一个BAR的值。现在的问题是:

这个循环结构应该在I=3和I=4时各执行一次,我理解没错吧?
在I=3时,VAR1=AverageFC(TrueRange,3)的值是正确的,但此时VAR1[1]也就是回溯一个Bar的值有问题。如何解决呢?谢谢!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
6#
发表于 2009-11-10 13:47:06 |只看该作者
这个循环是执行2次的
Var[1]的值哪里有问题?请详细说明一下
还有,循环效果两次都是一样的,不知道你是想要实现什么功能?

使用道具 举报

Rank: 2

精华
0
UID
5829
积分
85
帖子
22
主题
12
阅读权限
30
注册时间
2009-11-6
最后登录
2011-10-22
7#
发表于 2009-11-10 14:47:46 |只看该作者
当I等于3时,Var1[1]得到的值不是VAR1=AverageFC(TrueRange,3)向前回溯1个Bar的值,这是有问题的。
但I等于4时,var[1]得到的是VAR1=AverageFC(TrueRange,4)的值,这是没有这个问题的。

我想实现的功能:请看顶楼的Temp和temp1两个公式。简单的说,就是将temp公式用for循环的方式写出来。请直接给出temp的for循环写法,以供我学习参考。

[ 本帖最后由 telescope 于 2009-11-10 14:49 编辑 ]

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
8#
发表于 2009-11-10 16:04:34 |只看该作者
问题出在序列变量在For,While循环里面的应用。
Var1这个序列变量在编译时,只会产生一个数组。
所以在执行For循环是,I=3时计算好的值,会被I=4时计算的值改掉。
到下个Bar I=3时调用Var1[1],就会出现取值错误。因为取到了I=4的Var1[1]。

解决方法就是序列变量不能用于这种循环语句。转换成其他算法。

使用道具 举报

Rank: 2

精华
0
UID
5829
积分
85
帖子
22
主题
12
阅读权限
30
注册时间
2009-11-6
最后登录
2011-10-22
9#
发表于 2009-11-10 17:54:45 |只看该作者
原帖由 nopain 于 2009-11-10 16:04 发表
问题出在序列变量在For,While循环里面的应用。
Var1这个序列变量在编译时,只会产生一个数组。
所以在执行For循环是,I=3时计算好的值,会被I=4时计算的值改掉。
到下个Bar I=3时调用Var1[1],就会出现取值错误。因为取到了I ...


这样解释我明白了,看来TB的编译器还是不够强壮。谢谢管理员耐心的解答。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-23 01:06

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部