设为首页收藏本站

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

没有发现交易信号 [复制链接]

Rank: 5Rank: 5

精华
0
UID
37
积分
719
帖子
96
主题
28
阅读权限
60
注册时间
2007-7-24
最后登录
2013-5-23
跳转到指定楼层
1#
发表于 2007-9-19 22:00:46 |只看该作者 |倒序浏览
写了个代码,做测试时发现一个信号都不发出,
交易设置都是默认的。

如果需要修改配置,需要修改那里?

Params
        Numeric FastLength( 12 );
        Numeric SlowLength( 26 );
        Numeric MACDLength( 9 );       
        Numeric SetUpLen(10);
        Numeric BuyLots(1);
Vars   
        NumericSeries MACDValue;
        NumericSeries AvgMACD;
        NumericSeries BuySetup;
        NumericSeries SellSetup;
        NumericSeries BuyPeriod(99);
        NumericSeries SellPeriod(99);

Begin
        MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;       
        AvgMACD = XAverage(MACDValue,MACDLength);
       
        if( CrossOver(MACDValue, AvgMACD) )   //向上交叉时,记录下当前两根线的最高价
        {
                BuySetup = Highest(high,2) + 1;
                BuyPeriod = 0;
        }

        If(MarketPosition == 1)
        {
                BuyPeriod = SetUpLen + 1;
        }Else If(MarketPosition == 0){
                BuyPeriod = BuyPeriod + 1;
        }
       
//Enter Long                
        if(BuyPeriod <= SetUpLen and high > buysetup )  //在 N 根线内,当最高价大于交叉时的最高价+1,则在下一根线开仓
        {
                Buy(BuyLots,buysetup,true);
        }
       

//Exit Long       
        if( CrossUnder(MACDValue, AvgMACD) )  //向下交叉时在下一根线退出
        {
                sell(0,0,true);
        }
               
End

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2007-9-19 22:13:45 |只看该作者
粗略看了一下,发现您的条件可能有冲突。
BuySetup是最近2个Bar的最高价,您又加上了1.
所以,High肯定小于buySetup.所以,不会买入。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
37
积分
719
帖子
96
主题
28
阅读权限
60
注册时间
2007-7-24
最后登录
2013-5-23
3#
发表于 2007-9-19 22:20:03 |只看该作者
请看 SetUpLen,
表示在交叉发生后的10根线内,只要 high > BuySetup 就应该发生信号的

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2007-9-19 22:27:15 |只看该作者
原帖由 fcotrader 于 2007-9-19 22:20 发表
请看 SetUpLen,
表示在交叉发生后的10根线内,只要 high > BuySetup 就应该发生信号的


你如果要表示这个意思,需要用序列变量,并且需要将上一个Bar的值赋值给当前Bar,
在代码Begin下面增加如下:

If(CurrentBar>0)
{
      BuySetup = BuySetup[1];
      .... // 其它三个变量都要这么写。。

}

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
37
积分
719
帖子
96
主题
28
阅读权限
60
注册时间
2007-7-24
最后登录
2013-5-23
5#
发表于 2007-9-19 22:40:53 |只看该作者
改了之后,就出现信号了;
这里那就有点奇怪了,
不用序列变量,它就保存不下来么?
感觉这个变量跟大多数语言有矛盾的哈。
竟然在它的作用范围区域内会失效?

并且,这样的序列数似乎效率不够哦,
等于是一个数组了。不论是空间还是时间都不如变量高效!

[ 本帖最后由 fcotrader 于 2007-9-19 22:42 编辑 ]

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
6#
发表于 2007-9-20 09:06:52 |只看该作者
原帖由 fcotrader 于 2007-9-19 22:40 发表
改了之后,就出现信号了;
这里那就有点奇怪了,
不用序列变量,它就保存不下来么?
感觉这个变量跟大多数语言有矛盾的哈。
竟然在它的作用范围区域内会失效?

并且,这样的序列数似乎效率不够哦,
等于是一个数组了。不论是空间还 ...


序列变量的作用就是数组。主要目的是可以通过[n]来进行向前回溯。
您说的功能是需要记录上一个Bar的值。在TBL里面可以通过上面的形式来实现,但大部分序列变量并不需要这样的功能,因此没有进行默认赋上一个Bar的值。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-1 07:44

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部