jwieen 发表于 2015-12-14 16:58:56

关于减仓的问题

编了个减仓模型,代码如下,通过了程序编译,但是加载到行情上,减多单策略有效(出信号了且与思路一致),减空单却无效(无信号),不知道是怎么回事?请老师帮助。

.......

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

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

小米 发表于 2015-12-15 10:58:12

本帖最后由 小米 于 2015-12-15 10:59 编辑

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

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

jwieen 发表于 2015-12-16 10:44:50

小米 发表于 2015-12-15 10:58 static/image/common/back.gif
持空时,currentcontracts的值是负数。。
公式里需要改为 if(CurrentEntries==2 And Close>Highest(High

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

小米 发表于 2015-12-16 13:21:39

jwieen 发表于 2015-12-16 10:44 static/image/common/back.gif
你好,CurrentEntries这个统计建仓次数的函数,所统计的建仓次数,包括前面已经平仓的那次吗?比如我建仓 ...

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

jwieen 发表于 2015-12-16 13:28:37

小米 发表于 2015-12-16 13:21 static/image/common/back.gif
在公式的指定位置加上commentary("currenteentries:"+text(currententries)); 自己测试一下,就可以很清 ...

老师,你好!
If(MarketPosition==-1)
   {
     if(CurrentEntries==1 And Close>Highest(High,30) And Close<avgp2 And (avgp2-Close)/avgp2<0.03)                                //空单加仓
                  {
                        SecondPrice=Close;
                    SellShort(2,Close-Offset * MinMove * PriceScale);
                  }
编了个程序,收盘价高于前30个BAR(半小时线),时加空,但是出来的信号有问题,请看一下是否这个语句有问题,如图:

jwieen 发表于 2015-12-16 13:30:07

jwieen 发表于 2015-12-16 13:28 static/image/common/back.gif
老师,你好!
If(MarketPosition==-1)
   {


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

小米 发表于 2015-12-16 14:17:39

jwieen 发表于 2015-12-16 13:30 static/image/common/back.gif
第一个2手是开仓,后一个2手是加仓,加仓的信号有问题。

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

小米 发表于 2015-12-16 14:21:23

jwieen 发表于 2015-12-16 13:28 static/image/common/back.gif
老师,你好!
If(MarketPosition==-1)
   {


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

jwieen 发表于 2015-12-16 14:21:53

小米 发表于 2015-12-16 14:17 static/image/common/back.gif
加仓的信号有问题是指什么问题?请具体说明一下。。
抱歉啊。。光看图,我猜不出来问题呢。 ...

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

jwieen 发表于 2015-12-16 14:32:49

小米 发表于 2015-12-16 14:21 static/image/common/back.gif
是指要收盘价高于前30个bar的最高价后才有加仓,但条件没有满足就加仓了,是吗?
highest是一个序列函数 ...

多谢老师,声明中间变量后,问题解决了。:victory:
页: [1] 2
查看完整版本: 关于减仓的问题