设为首页收藏本站

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

延时发单时,If(BarStatus == 1) 时也发单,如何解决? [复制链接]

Rank: 3Rank: 3

精华
0
UID
15139
积分
170
帖子
21
主题
8
阅读权限
40
注册时间
2010-8-9
最后登录
2013-5-9
跳转到指定楼层
1#
发表于 2010-9-1 14:58:37 |只看该作者 |倒序浏览
以下是一个延时发单交易指令,我可以肯定,每次都发两个单,一个是我所需要的延时的单,另外一个是If(BarStatus == 1)的单,我不能将BarStatus == 1时的单发出去,同时,我要能看到图表上的信号,请问,如何解决?谢谢
Params
        Numeric Length(2);
        Numeric Lots(1);
Vars
        NumericSeries Ma;
        NumericSeries Ma1;
Begin
        If(Date != Date[1] And High == Low) Return;
        If(BarStatus == 0)        //全局变量初始化
        {
                SetGlobalVar(0,0);        //开仓条件成立时间记录标示
                SetGlobalVar(1,0);        //开仓条件成立时间
        SetGlobalVar(2,0);   //记录交易,MarketPosition只记录图表,控制不住,很不好用!
        }
       
        Ma = Average(Close,Length);        // 均线
        Ma1 = Ma[1];
       
        If(BarStatus == 1)
        {
                If(MarketPosition !=1 And CrossOver(Close[1],Ma1))
                {
                        Buy(Lots,Open);
                }
      
                If(MarketPosition ==1 And CrossOver(Ma1,Close[1]))
                {
                        Sell(Lots,Open);
                }       
        }
        If(BarStatus == 2)
        {      
                If(GetGlobalVar(2)==0 And CrossOver(Close[1],Ma1) And GetGlobalVar(0) == 0)
                {
                        SetGlobalVar(0,1);
                        SetGlobalVar(1,CurrentTime * 1000000 % 100);
                }
                If(GetGlobalVar(2)==0 And CrossOver(Close[1],Ma1) And GetGlobalVar(0) == 1 And  (CurrentTime * 1000000 % 100 - GetGlobalVar(1)== 10))
                {
                        Buy(Lots,Open);
                        SetGlobalVar(0,0);
            SetGlobalVar(2,2);
                }
      
                If(GetGlobalVar(2)==2 And CrossOver(Ma1,Close[1]) And GetGlobalVar(0) == 0)
                {
                        SetGlobalVar(0,-1);
                        SetGlobalVar(1,CurrentTime * 1000000 % 100);
                }
                If(GetGlobalVar(2)==2 And CrossOver(Ma1,Close[1]) And GetGlobalVar(0) == -1 AND (CurrentTime * 1000000 % 100 - GetGlobalVar(1)==5))
                {
                        Sell(Lots,Open);
                        SetGlobalVar(0,0);
            SetGlobalVar(2,0);
                }
        }
End
好人

Rank: 3Rank: 3

精华
0
UID
15139
积分
170
帖子
21
主题
8
阅读权限
40
注册时间
2010-8-9
最后登录
2013-5-9
2#
发表于 2010-9-2 10:57:15 |只看该作者
管理员,版主,怎么还没回复啊?
好人

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
3#
发表于 2010-9-2 11:13:39 |只看该作者
请参考这个帖子上的写法:http://www.tradeblazer.net/forum/thread-5506-1-1.html

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
15139
积分
170
帖子
21
主题
8
阅读权限
40
注册时间
2010-8-9
最后登录
2013-5-9
4#
发表于 2010-9-3 10:49:03 |只看该作者
您好,我看了,无法解决,请问您有什么好办法么??
好人

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
5#
发表于 2010-9-3 14:42:25 |只看该作者
之所以会发两次单,是因为在新bar转成历史数据的时候,他会再重新计算一遍前一根bar的,如果你要避免这种情况,就按照http://www.tradeblazer.net/forum/thread-5506-1-1.html里的写法,将这种情况独立出来处理

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
15139
积分
170
帖子
21
主题
8
阅读权限
40
注册时间
2010-8-9
最后登录
2013-5-9
6#
发表于 2010-9-6 10:37:21 |只看该作者
您好,我试了,行不通,我可否和您直接联系下,这里说不清楚,我的QQ:568246153
好人

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
15139
积分
170
帖子
21
主题
8
阅读权限
40
注册时间
2010-8-9
最后登录
2013-5-9
7#
发表于 2010-9-6 10:55:31 |只看该作者
管理员,您好,您让我参照的帖子,重复发单。
好人

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5439
积分
721
帖子
116
主题
35
阅读权限
60
注册时间
2009-9-12
最后登录
2011-7-4
8#
发表于 2010-9-6 21:32:31 |只看该作者
兄弟,用A函数发单吧。几个月前,本人也是这个问题,试了很多方法,最后只能用A函数来解决。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-15 05:14

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部