开拓者期货期权程序化系统交易论坛

标题: 关于tick运算问题3 [打印本页]

作者: sswywangyun    时间: 2016-8-4 16:34:35     标题: 关于tick运算问题3

本帖最后由 sswywangyun 于 2016-8-4 17:09 编辑

        aa = AverageFC(Close,5);
        bb = AverageFC(Close,20);
       
       
       
        Timee = GetGlobalVar(0);//取之前的时间
        Tick = GetGlobalVar(1);//取之前的tick
       
       
       
       
       
If(BarStatus == 2 And Timee != Time)//最新BAR第一次生成时,TICK  清0    BAR和Tick是2层
        {
         Timee=Time;
         Tick=0;
         }
       

If(MarketPosition != 1 And aa[1] > bb[2])//当持仓没有多仓的时候,并且金叉    注意条件叠加
    {                       
       
       
           If(MarketPosition == 0 || BarStatus != 2)//判断当前是否是空仓,或者不是最新的BAR上,就开多,因为实时BAR会有闪信号现象所以,要不是最新BAR
           {
       
             Buy(1,Open);
         
            }Else//有空头仓位时,那就先把空头平掉
               {
                 BuyToCover(1,Open);
                       
                     If(Tick == 0)//判断Tick是否是第一次平空,如果是就赋值给Tick=1,除了Tick不是0的情况下就继续累计到TICK5之后开多      
                     {
                       Tick = 1;
                          
                      }Else If(Tick<5)
                               {
                                          Tick = Tick+1;
                                                  
                                                }Else
                                                    {
                                              Buy(1,Open);
                                                     }
                        }
        }                         
               
               
               
        SetGlobalVar(0,Timee);//把当前BAR时间存到0箱子里,再和之后BAR新时间比较              BAR和Tick是2层
        SetGlobalVar(1,Tick);//把TICK计数存1箱子里
               




当有空头仓位的时候,平掉空头仓位,并且给判断If(Tick == 0) Tick=1;如果假设满足这个条件,后面的
Else If(Tick<5){Tick = Tick+1;}Else {Buy(1,Open);}就不会被执行,然后下一个新数据Tick来了,又会执行一次If(MarketPosition != 1 And aa[1] > bb[2]).....If(MarketPosition == 0 || BarStatus != 2)这时候如果我本身只有1手空单,上一次Tick已经平了这个空了,那么就会满足条件买多单,不就不会延迟5个Tick了吗?这个是TB教科书上的例子,让初学者摸不着头脑,是那里的逻辑搞错了。


如何延续5个Tick的?当If(Tick == 0)  Tick = 1;的时候,后面的Else If(Tick<5)是不被执行的,要满足If(Tick <> 0)的时候才会执,那也就是要有一个新Tick来了才行,公式又会重头再计算一次,那个时候我的空单已经在上一个Tick平了,就会不延迟5个Tick开多了。



希望管理员解答,我相信我的问题也是大部分初学者的问题
作者: sswywangyun    时间: 2016-8-4 18:16:40

[attach]34269[/attach]
作者: 小米    时间: 2016-8-5 09:36:32

sswywangyun 发表于 2016-8-4 18:16


http://bbs.tb18.net/thread-22580-1-1.html
您可以看一下这个贴子,或许能帮助理解在开平仓bar上,信号marketposiiton是怎么变化的。
把上述问题理解后,你现在的疑问应该就没了
作者: sswywangyun    时间: 2016-8-5 09:38:01

这个问题我发了2次,怕管理员理解不到我意思
作者: sswywangyun    时间: 2016-8-5 09:38:53

小米 发表于 2016-8-5 09:36
http://bbs.tb18.net/thread-22580-1-1.html
您可以看一下这个贴子,或许能帮助理解在开平仓bar上,信号m ...

谢谢小猫咪
作者: 小米    时间: 2016-8-5 09:45:27

sswywangyun 发表于 2016-8-5 09:38
这个问题我发了2次,怕管理员理解不到我意思

公式用于什么周期上的?
这段代码是程序化交易那本书上提供的,代码本身是可以控制好延迟反手的。
如果确认是使用在10以上的K线周期上,却不能控制反手时间。
可以将整个代码发给我测试一下。
作者: 小米    时间: 2016-8-5 09:47:24

sswywangyun 发表于 2016-8-5 09:38
这个问题我发了2次,怕管理员理解不到我意思

问题无论发多少次,理解不到就是理解不到了。发再多次也起不了良性的效果呢。
且工作人员并不只面对您一位客户,就是发得越多,我们处理的所需的时间周期就更长。。
没法做到一对一的服务,抱歉。
作者: sswywangyun    时间: 2016-8-5 09:52:37

小米 发表于 2016-8-5 09:47
问题无论发多少次,理解不到就是理解不到了。发再多次也起不了良性的效果呢。
且工作人员并不只面对您一 ...

谢谢猫老师
作者: sswywangyun    时间: 2016-8-5 09:54:36

小米 发表于 2016-8-5 09:47
问题无论发多少次,理解不到就是理解不到了。发再多次也起不了良性的效果呢。
且工作人员并不只面对您一 ...

我只是抱歉发了2次
作者: masterhdd    时间: 2018-5-7 14:06:26

本帖最后由 masterhdd 于 2018-5-7 14:11 编辑
sswywangyun 发表于 2016-8-4 18:16


我也是初学者,明白你的疑问,我来回答:

如何延续5个Tick的?当If(Tick == 0) 条件成立时,Tick 会被赋值为1 ,也就是Tick = 1;此时Tick == 0的条件就已经不成立了,此时是满足If(Tick <> 0)条件的,进而会执行后面的 If(Tick<5)语句,直到Tick>=5 才会Buy(1,Open);

你的错误可能在于你把当If(Tick == 0)  Tick = 1;这句整个当成一个条件了,实际是If(Tick == 0),那么就Tick = 1;
而不是你所问的”当If(Tick == 0)  Tick = 1;的时候,后面的Else If(Tick<5)是不被执行的”




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2