- 精华
- 0
- 在线时间
- 78 小时
- UID
- 237134
- 积分
- 89
- 帖子
- 59
- 阅读权限
- 30
- 注册时间
- 2016-6-27
- 最后登录
- 2017-7-1
- 精华
- 0
- UID
- 237134
- 积分
- 89
- 帖子
- 59
- 主题
- 20
- 阅读权限
- 30
- 注册时间
- 2016-6-27
- 最后登录
- 2017-7-1
|
本帖最后由 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开多了。
希望管理员解答,我相信我的问题也是大部分初学者的问题 |
|