设为首页收藏本站

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

延迟反手中的这一句 [复制链接]

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
跳转到指定楼层
1#
发表于 2018-5-7 18:40:33 |只看该作者 |正序浏览
延迟反手中的这一句:
                If(MarketPosition==0 || BarStatus!=2)
                {
                        Buy(1,Open);
                }
其中的BarStatus!=2这句有什么意义?是为了什么?请指教。









Params
        Numeric FastLength(5);
        Numeric SlowLength(20);
        Numeric DelayTicks(5);
Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
        Numeric LastBarTime;
        Numeric TickCounter;
Begin
        AvgValue1 = AverageFC(Close,FastLength);
        AvgValue2 = AverageFC(Close,SlowLength);
        
        LastBarTime = GetGlobalVar(0);
        TickCounter = GetGlobalVar(1);
        If(BarStatus==2 && LastBarTime != Time)
        {
                LastBarTime = Time;
                TickCounter = 0;
        }
        
        If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
        {
                If(MarketPosition==0 || BarStatus!=2)
                {
                        Buy(1,Open);
                }Else
                {

                        BuyToCover(1,Open);
                                       
                        If(TickCounter==0)
                        {
                                TickCounter = 1;
                                                               
                        }else If(TickCounter < DelayTicks)
                        {
                                TickCounter = TickCounter + 1;                        
                        }else
                        {
                                Buy(1,Open);
                        }
                }
        }
        
        If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
        {
                If(MarketPosition==0 || BarStatus!=2)
                {
                        SellShort(1,Open);
                }Else
                {
                        Sell(1,Open);
                        If(TickCounter==0)
                        {
                                TickCounter = 1;
                        }else If(TickCounter < DelayTicks)
                        {
                                TickCounter = TickCounter + 1;                        
                        }else
                        {
                                SellShort(1,Open);
                        }
                }
        }
        
        SetGlobalVar(0,LastBarTime);        
        SetGlobalVar(1,TickCounter);
                     
End

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
15#
发表于 2018-5-10 19:56:03 |只看该作者
小米 发表于 2018-5-10 08:35
你也说了行情已经走到第6个K线了,那么此时在第5个K线上的信号是历史信号了,是根本不会发单 到交易所的 ...

根本不会发单 到交易所.....只是为了标识一个历史信号.....
受教了,致敬。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
14#
发表于 2018-5-10 08:35:23 |只看该作者
masterhdd 发表于 2018-5-9 17:21
场景举例:
比如:刚打开超级图表,此时实时行情已经走到底六根BAR了,但当公式初始化并计算到第五根 ...

你也说了行情已经走到第6个K线了,那么此时在第5个K线上的信号是历史信号了,是根本不会发单 到交易所的,执行buy只是为了标识一个历史信号。。。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
13#
发表于 2018-5-9 17:21:07 |只看该作者
小米 发表于 2018-5-9 17:07
恕我愚钝,我真不知道你现在问题是啥?现在你又是 哪里不理解了嘛?
如果对TB的机制还不是那么清楚的情况 ...

场景举例:
比如:刚打开超级图表,此时实时行情已经走到底六根BAR了,但当公式初始化并计算到第五根BAR时,发现MarketPosition <>1 && AvgValue1[1] > AvgValue2[1]的条件,且此时MarketPosition==-1,然后此时满足BarStatus!=2的条件,所以,就Buy(1,Open)。
那么TB的Buy机制是平仓和开仓两个指令会同时发出,但交易所不一定先撮合成交哪个指令,所以才有了这个延迟反手的案例,目的就是要实现先平仓然后再开仓,结果,在此例中,还没进行到后面的延迟处理,半路上就又弄出一个在持有空头仓位的情况下直接发Buy指令的问题,也就是说,若按照这个场景来分析,结果会是一团糟,根本不会解决延迟反手的问题。
另外,我也实在是不好意思追问了,已经浪费了版主很多宝贵的时间了,很抱歉。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
12#
发表于 2018-5-9 17:07:25 |只看该作者
masterhdd 发表于 2018-5-9 16:54
好吧,发出BUY指令后,如有空头持仓,就会先去平空头,再去买多头。那么,问题又回到原点了!平仓延迟反 ...

恕我愚钝,我真不知道你现在问题是啥?现在你又是 哪里不理解了嘛?
如果对TB的机制还不是那么清楚的情况下,就建议先不了搞这个了,多看一下些基础的,也许某一天自己就悟出来了。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
11#
发表于 2018-5-9 16:54:33 |只看该作者
本帖最后由 masterhdd 于 2018-5-9 16:57 编辑
小米 发表于 2018-5-9 16:26
对函数的了解是建立公式应用的基础,麻烦你再看一下F1帮助文档中buy的函数说明。 ...


好吧,发出BUY指令后,如有空头持仓,就会先去平空头,再去买多头。那么,问题又回到原点了!平仓延迟反手的案例讲解的本来就是要解决“平仓和开仓两个指令会同时发出,交易所不一定先撮合成交哪个指令,所以一般使用这种反手交易指令时,要求......希望先执行平仓操作.....”,结果,半路上又陷入了直接发buy指令的问题了,这岂不是一个问题还没解决就又陷入了一个新的问题之中了吗?
恳请版主不厌其烦解除俺的烦恼。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
10#
发表于 2018-5-9 16:26:44 |只看该作者
masterhdd 发表于 2018-5-9 16:23
对,当前场景下,执行的就是这个barstatus!=2条件下的buy?
那么问题又来了,在这种场景下执行的就是这个 ...


对函数的了解是建立公式应用的基础,麻烦你再看一下F1帮助文档中buy的函数说明。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
9#
发表于 2018-5-9 16:23:04 |只看该作者
小米 发表于 2018-5-9 16:07
对,当前场景下,执行的就是这个barstatus!=2条件下的buy

对,当前场景下,执行的就是这个barstatus!=2条件下的buy?
那么问题又来了,在这种场景下执行的就是这个barstatus!=2条件下的buy,那就成了锁仓了,也就是空头仓位没有平掉,就直接又开了一个多头仓位而不是BuyToCover?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
8#
发表于 2018-5-9 16:17:03 |只看该作者
masterhdd 发表于 2018-5-9 16:13
这段代码是没有持仓的情况下,就直接buy开多就好。问题是If(MarketPosition==0 || BarStatus!=2)这句话的 ...

就是你在5楼说的那个场景啊。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
7#
发表于 2018-5-9 16:13:46 |只看该作者
本帖最后由 masterhdd 于 2018-5-9 16:14 编辑
小米 发表于 2018-5-9 16:00
marketposition1有两种情况,没有持仓或是持有空头。
你在3楼复制的这段代码是没有持仓的情况下,就直接b ...


这段代码是没有持仓的情况下,就直接buy开多就好。问题是If(MarketPosition==0 || BarStatus!=2)这句话的意思是在没有持仓的情况下或者BarStatus!=2的情况下,也就是说也可以是If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1]&&BarStatus!=2)  Buy(1,Open); 我不明白的是If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1]&&BarStatus!=2)  Buy(1,Open); 的这种情况。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-6 05:06

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部