设为首页收藏本站

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

麻烦给看下这个写法哪里有问题 [复制链接]

Rank: 1

精华
0
UID
1335224
积分
15
帖子
13
主题
2
阅读权限
10
注册时间
2021-7-16
最后登录
2021-8-22
跳转到指定楼层
1#
发表于 2021-8-2 11:43:58 |只看该作者 |倒序浏览
Vars       
BoolSeries    BL(True);       
Begin
If(BL && BarStatus==2) //
{
  If(Close[1]>Close[2])
   {
        SellShort(1,Open-2);                               
        BL = False;                                                               
   }                               
}
End

1.如果不加BarStatus==2这个条件,则程序正常,只开一次仓,后面不再开仓。
2.如果加上BarStatus==2,程序会不断开仓。而且按照正常来说,开仓后K线图上开仓的标志会留在上面,但是这个在当根k线上会显示开仓符号,当根k线结束后开仓符号随即消失(模拟账户已经开仓),这是为什么呢?
按照我的理解,这段语句加载图形后只能执行一次,为什么会不断重复执行呢?

Rank: 4

精华
0
UID
110114
积分
380
帖子
314
主题
16
阅读权限
50
注册时间
2012-4-20
最后登录
2021-12-29
2#
发表于 2021-8-2 14:10:02 |只看该作者
在第一个IF语句前加一个BL的延续试试:
BL = BL[1];
If(BL && BarStatus==2) //

若还不行,程序开头多加下面一段
If(BarStatus == 0)
    BL = True;

使用道具 举报

Rank: 1

精华
0
UID
1335224
积分
15
帖子
13
主题
2
阅读权限
10
注册时间
2021-7-16
最后登录
2021-8-22
3#
发表于 2021-8-2 15:10:31 |只看该作者
Yuen_Lee 发表于 2021-8-2 14:10
在第一个IF语句前加一个BL的延续试试:
BL = BL[1];
If(BL && BarStatus==2) //

好主意!多谢多谢,夜盘我试一下。

使用道具 举报

Rank: 1

精华
0
UID
1335224
积分
15
帖子
13
主题
2
阅读权限
10
注册时间
2021-7-16
最后登录
2021-8-22
4#
发表于 2021-8-3 09:16:35 |只看该作者
Yuen_Lee 发表于 2021-8-2 14:10
在第一个IF语句前加一个BL的延续试试:
BL = BL[1];
If(BL && BarStatus==2) //

您好,昨天晚上试过您说的方法了,不行,还是老样子,重复开仓,而且信号不固定。看起来是Barstatus这个函数的问题,因为加上这个就不行,不加这个函数一切正常。

使用道具 举报

Rank: 4

精华
0
UID
110114
积分
380
帖子
314
主题
16
阅读权限
50
注册时间
2012-4-20
最后登录
2021-12-29
5#
发表于 2021-8-3 11:10:11 |只看该作者
当根K线的重复开仓BL应该控制不了,因为每次在当根K线的数据更新, BL都会初始化为TRUE。如果想控制,可以用全局变量。
If(BarStatus == 0)
    SetGlobalBar(0, 0)

If(GetGlobalBar(0) == 0 && BarStatus==2) //
{
  If(Close[1]>Close[2])
   {
        SellShort(1,Open-2);                              
        SetGlobalBar(0, 1);                                                               
   }                              
}

使用道具 举报

Rank: 1

精华
0
UID
1335224
积分
15
帖子
13
主题
2
阅读权限
10
注册时间
2021-7-16
最后登录
2021-8-22
6#
发表于 2021-8-3 21:51:32 |只看该作者
Yuen_Lee 发表于 2021-8-3 11:10
当根K线的重复开仓BL应该控制不了,因为每次在当根K线的数据更新, BL都会初始化为TRUE。如果想控制,可以 ...

Params       
Vars       
Begin
    If(BarStatus == 0)
    SetGlobalVar(0, 0);

    If(GetGlobalVar(0) == 0 && BarStatus==2) //
      {
          If(Close[1]>Close[2])
             {
               SellShort(1,Open-2);                              
               SetGlobalVar(0, 1);                                                               
             }                              
      }
End
感谢回复!如上我测试了一下,这样写确实第二个if语句只执行一次,但是有个问题,按照正常的程序运行,开仓后开仓符号应该停留在图表上,可是这样写开仓符号会在当根k线结束的时候消失,这是怎么回事呢?模拟运行的时候,虽然开仓符号消失,但是模拟账户已经开仓。

使用道具 举报

Rank: 1

精华
0
UID
1335224
积分
15
帖子
13
主题
2
阅读权限
10
注册时间
2021-7-16
最后登录
2021-8-22
7#
发表于 2021-8-3 21:58:32 |只看该作者
这个问题貌似还是出现在BarStatus这个函数上,因为我把 && BarStatus==2这个条件去掉,则开仓符号显示完全正常。

使用道具 举报

Rank: 1

精华
0
UID
1335224
积分
15
帖子
13
主题
2
阅读权限
10
注册时间
2021-7-16
最后登录
2021-8-22
8#
发表于 2021-8-3 22:06:34 |只看该作者
----------------------------------------------------------------
当根K线的重复开仓BL应该控制不了,因为每次在当根K线的数据更新, BL都会初始化为TRUE。如果想控制,可以用全局变量。
If(BarStatus == 0)
    SetGlobalBar(0, 0)

If(GetGlobalBar(0) == 0 && BarStatus==2) //
{
  If(Close[1]>Close[2])
   {
        SellShort(1,Open-2);                              
        SetGlobalBar(0, 1);                                                               
   }                              
}
----------------------------------------------------------------
我仔细琢磨了一下,实际上BL我设置的是序列bool变量,按照序列变量的定义,序列变量会传递上个Bar上此变量的值,因此我一楼的那段程序也应该被执行一次。

使用道具 举报

Rank: 4

精华
0
UID
110114
积分
380
帖子
314
主题
16
阅读权限
50
注册时间
2012-4-20
最后登录
2021-12-29
9#
发表于 2021-8-4 10:03:50 |只看该作者
tbmorning 发表于 2021-8-3 22:06
----------------------------------------------------------------
当根K线的重复开仓BL应该控制不了,因 ...

在当前的最新K开仓后,对BL赋值False,这个值只有到当根K线走完才会固定下来。如果当前K线再一次刷新,程序会再运行一次,而此时的BL还是初始化的值TRUE,所以会出现重复开仓。

使用道具 举报

Rank: 1

精华
0
UID
1335224
积分
15
帖子
13
主题
2
阅读权限
10
注册时间
2021-7-16
最后登录
2021-8-22
10#
发表于 2021-8-4 21:41:38 |只看该作者
Yuen_Lee 发表于 2021-8-4 10:03
在当前的最新K开仓后,对BL赋值False,这个值只有到当根K线走完才会固定下来。如果当前K线再一次刷新,程 ...

您好,感谢回复。我修改了一下程序,如下:
Params       
Vars       
Begin
If(MarketPosition == 0 && BarStatus==2)//
{
  If(Close[1]>Close[2])
   {
        Buy(1,Open+2);                                                                                          
   }                              
}
End
这样写依然会重复开仓!并且开仓后当根k线的开仓符号在当根k线结束的时候会消失。我说的重复开仓不是说在一根k线上反复开仓,而是已经开过仓了,但是后面的k线只要满足(Close[1]>Close[2])依然开仓。并且开仓后开仓符号不显示。这是哪里错了呢?

使用道具 举报

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

bottom

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

GMT+8, 2024-5-17 13:49

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部