设为首页收藏本站

 找回密码
 注册
查看: 2654|回复: 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: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2018-5-8 08:59:22 |只看该作者
在非最后K线时直接按信号标识开仓信号,是为了与最后K线的是实时处理区别开。必竟历史里不需要反手延迟。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
3#
发表于 2018-5-9 15:33:46 |只看该作者
本帖最后由 masterhdd 于 2018-5-9 15:54 编辑
小米 发表于 2018-5-8 08:59
在非最后K线时直接按信号标识开仓信号,是为了与最后K线的是实时处理区别开。必竟历史里不需要反手延迟。 ...


还是不明白。比如:一直没有持有多头仓位MarketPosition <>1,在第四根BAR出现了AvgValue1 > AvgValue2,然后到了第五根BAR就会满足MarketPosition <>1 && AvgValue1[1] > AvgValue2[1]的条件,然后就会执行下一句If(MarketPosition==0 || BarStatus!=2),此时只要MarketPosition==0就可以执行Buy(1,Open)了。或者在MarketPosition==-1的情况下且BarStatus!=2就Buy(1,Open)开多仓,但显然此时是BarStatus==2的,也就无法执行Buy(1,Open)开多仓,等到了下一根BAR也就是第六根BAR再运行的时候,BarStatus还是等于2的,这.......怎么可能执行Buy(1,Open)开多仓呢?请指出我的理解错在了哪里?看不懂太痛苦了。

我们假设一直持有空头仓位MarketPosition==-1,所以也就满足MarketPosition <>1的条件,在第四根BAR出现了AvgValue1 > AvgValue2,然后到了第五根BAR就会满足MarketPosition <>1 && AvgValue1[1] > AvgValue2[1]的条件,然后就会执行下一句If(MarketPosition==0 || BarStatus!=2),由于MarketPosition==-1所以MarketPosition==0这一项就放弃了,此时就只有依靠BarStatus!=2的条件来Buy(1,Open)了,但面临的每根BAR都是BarStatus==2的,难道还能回头向后运行程序吗?

     If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
        {
                If(MarketPosition==0 || BarStatus!=2)
                {
                        Buy(1,Open);
                }

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2018-5-9 16:00:05 |只看该作者
masterhdd 发表于 2018-5-9 15:33
还是不明白。比如:一直没有持有多头仓位MarketPosition 1,在第四根BAR出现了AvgValue1 > AvgValue2 ...

marketposition<>1有两种情况,没有持仓或是持有空头。
你在3楼复制的这段代码是没有持仓的情况下,就直接buy开多就好。
如果是有空头持仓的情况下且当前barstatus==2,所以自然是执行这段代码后面那个else后的内容啊。干嘛要等到第六根bar.

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
5#
发表于 2018-5-9 16:02:50 |只看该作者
小米 发表于 2018-5-8 08:59
在非最后K线时直接按信号标识开仓信号,是为了与最后K线的是实时处理区别开。必竟历史里不需要反手延迟。 ...

看下面的场景,难道是这个意思?
比如:刚打开超级图表,此时实时行情已经走到底六根BAR了,但当公式初始化并计算到第五根BAR时,发现MarketPosition <>1 && AvgValue1[1] > AvgValue2[1]的条件,且此时MarketPosition==-1,然后此时满足BarStatus!=2的条件,所以,就Buy(1,Open)。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
6#
发表于 2018-5-9 16:07:30 |只看该作者
masterhdd 发表于 2018-5-9 16:02
看下面的场景,难道是这个意思?
比如:刚打开超级图表,此时实时行情已经走到底六根BAR了,但当公式 ...

对,当前场景下,执行的就是这个barstatus!=2条件下的buy

使用道具 举报

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); 的这种情况。

使用道具 举报

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
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
10#
发表于 2018-5-9 16:26:44 |只看该作者
masterhdd 发表于 2018-5-9 16:23
对,当前场景下,执行的就是这个barstatus!=2条件下的buy?
那么问题又来了,在这种场景下执行的就是这个 ...


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

使用道具 举报

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

bottom

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

GMT+8, 2024-4-24 10:24

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部