设为首页收藏本站

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

关于减仓的问题 [复制链接]

Rank: 5Rank: 5

精华
0
UID
117787
积分
680
帖子
44
主题
14
阅读权限
60
注册时间
2013-4-5
最后登录
2020-5-23
跳转到指定楼层
1#
发表于 2015-12-14 16:58:56 |只看该作者 |倒序浏览
编了个减仓模型,代码如下,通过了程序编译,但是加载到行情上,减多单策略有效(出信号了且与思路一致),减空单却无效(无信号),不知道是怎么回事?请老师帮助。

.......

If(MarketPosition==1)                                          
  {
   .......       
               
               if(CurrentEntries==2 And Close<Lowest(Low[1],10) And Close>MA20 And CurrentContracts>=2)      //减多单
                  {
                    Sell(1,Close-Offset * MinMove * PriceScale);
                  }
    .......
}

If(MarketPosition==-1)
{
    ......
                if(CurrentEntries==2 And Close>Highest(High[1],10) And Close<MA20 And CurrentContracts>=2)        //减空单
                  {
                    BuyToCover(1,Close+Offset * MinMove * PriceScale);
                  }  
  ......
}                                                             

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2015-12-15 10:58:12 |只看该作者
本帖最后由 小米 于 2015-12-15 10:59 编辑

持空时,currentcontracts的值是负数。。
公式里需要改为 if(CurrentEntries==2 And Close>Highest(High[1],10) And Close<MA20 And CurrentContracts<=-2)

PS:该公式条件里有使用到close的判断,这样代码的用于实时交易,是可能出现信号消失的问题。需注意

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
117787
积分
680
帖子
44
主题
14
阅读权限
60
注册时间
2013-4-5
最后登录
2020-5-23
3#
发表于 2015-12-16 10:44:50 |只看该作者
小米 发表于 2015-12-15 10:58
持空时,currentcontracts的值是负数。。
公式里需要改为 if(CurrentEntries==2 And Close>Highest(High[1 ...

你好,CurrentEntries这个统计建仓次数的函数,所统计的建仓次数,包括前面已经平仓的那次吗?比如我建仓后,又加仓2次(其中第一次加完仓后,我把所加仓位平掉了,然后再加了次仓),这样这个函数返回的建仓次数是2次还是3次啊?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2015-12-16 13:21:39 |只看该作者
jwieen 发表于 2015-12-16 10:44
你好,CurrentEntries这个统计建仓次数的函数,所统计的建仓次数,包括前面已经平仓的那次吗?比如我建仓 ...

在公式的指定位置加上commentary("currenteentries:"+text(currententries)); 自己测试一下,就可以很清楚地得到答案了

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
117787
积分
680
帖子
44
主题
14
阅读权限
60
注册时间
2013-4-5
最后登录
2020-5-23
5#
发表于 2015-12-16 13:28:37 |只看该作者
小米 发表于 2015-12-16 13:21
在公式的指定位置加上commentary("currenteentries:"+text(currententries)); 自己测试一下,就可以很清 ...

老师,你好!
If(MarketPosition==-1)
   {
     if(CurrentEntries==1 And Close>Highest(High[1],30) And Close<avgp2 And (avgp2-Close)/avgp2<0.03)                                //空单加仓
                  {
                        SecondPrice=Close;
                    SellShort(2,Close-Offset * MinMove * PriceScale);
                  }
编了个程序,收盘价高于前30个BAR(半小时线),时加空,但是出来的信号有问题,请看一下是否这个语句有问题,如图:
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
117787
积分
680
帖子
44
主题
14
阅读权限
60
注册时间
2013-4-5
最后登录
2020-5-23
6#
发表于 2015-12-16 13:30:07 |只看该作者
jwieen 发表于 2015-12-16 13:28
老师,你好!
If(MarketPosition==-1)
   {

第一个2手是开仓,后一个2手是加仓,加仓的信号有问题。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
7#
发表于 2015-12-16 14:17:39 |只看该作者
jwieen 发表于 2015-12-16 13:30
第一个2手是开仓,后一个2手是加仓,加仓的信号有问题。


加仓的信号有问题是指什么问题?请具体说明一下。。
抱歉啊。。光看图,我猜不出来问题呢。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
8#
发表于 2015-12-16 14:21:23 |只看该作者
jwieen 发表于 2015-12-16 13:28
老师,你好!
If(MarketPosition==-1)
   {


是指要收盘价高于前30个bar的最高价后才有加仓,但条件没有满足就加仓了,是吗?
highest是一个序列函数,其赋值运算放条件里,可能因为条件限制而导致取值范围受限,从而导致计算结果出错。。
而这个公式里洽洽是放到条件中了。。
建议你声明一个中间变量,如。my30highest
  1. my30highest =Highest(High[1],30) ;
  2. If(MarketPosition==-1)
  3.    {
  4.      if(CurrentEntries==1 And Close> my30highest And Close<avgp2 And (avgp2-Close)/avgp2<0.03)                                //空单加仓
  5.                   {
  6.                         SecondPrice=Close;
  7.                     SellShort(2,Close-Offset * MinMove * PriceScale);
复制代码

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
117787
积分
680
帖子
44
主题
14
阅读权限
60
注册时间
2013-4-5
最后登录
2020-5-23
9#
发表于 2015-12-16 14:21:53 |只看该作者
小米 发表于 2015-12-16 14:17
加仓的信号有问题是指什么问题?请具体说明一下。。
抱歉啊。。光看图,我猜不出来问题呢。 ...

根据程序,我原意是收盘价高于前30根BAR的最高价是,加空2手,程序也是如此设计的,但你看图上信号,加空2手的信号,不是在高于前30个bar的最高价的地方出现的,图上只是在高于前13个BAR的最高价的地方出信号。还有很多信号都有问题,这只是其中一个,有的高于前9个、11个的最高价也在出信号。不知道是怎么了

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
117787
积分
680
帖子
44
主题
14
阅读权限
60
注册时间
2013-4-5
最后登录
2020-5-23
10#
发表于 2015-12-16 14:32:49 |只看该作者
小米 发表于 2015-12-16 14:21
是指要收盘价高于前30个bar的最高价后才有加仓,但条件没有满足就加仓了,是吗?
highest是一个序列函数 ...

多谢老师,声明中间变量后,问题解决了。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-16 02:57

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部