设为首页收藏本站

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

请问怎么控制加仓次数和减仓次数? [复制链接]

Rank: 1

精华
0
UID
188804
积分
9
帖子
6
主题
3
阅读权限
10
注册时间
2014-6-17
最后登录
2018-11-21
跳转到指定楼层
1#
发表于 2015-12-22 16:52:17 |只看该作者 |倒序浏览
我编写了2个函数,一个是get_dir(),一个是get_stploss(),get_dir()返回当前K线的多空状态,get_stploss()返回当前K线该方向下的止损点是多少。相当于我把一个模型给封装到两个函数里了,一个返回方向,一个返回止损点。

我现在想在get_dir()==“多头”的时候以开盘价开1手多单,开仓后,如果在没有改变方向的前提下,最低价达到“止损价+10跳的价格”再加1手多单,加仓后如果没浮盈就get_dir()=="空头"了,就以开盘价全平2手多单,而且以开盘价反手开1手空单,加空道理一样,达到“止损价-10跳的价格”加1手空,如此循环。

减仓的条件是:后来加仓的那1手单子以它自己的开仓价获利30跳直接止盈,而且止盈后不再加仓。


贴上代码:
Params

     Numeric N(3);//传给get_dir和get_stploss的一个参数
     Numeric maxcnt(2);//最大建仓次数
     Numeric plush(10);//加仓阈,价格达到“止损价+plsuh跳”范围内加仓
     Numeric tp(30);//减仓止赢阈,加仓后,加仓的单子获利tp跳直接止盈平仓
     Numeric offset(0);//报单价格偏移
     Numeric kc(1);//开仓数量
     Numeric jc(1);//减仓数量
         
Vars

     Numeric minpoint;//最小跳
     NumericSeries kccnt;//记录开仓加仓次数
     Numeric myentryprice;//开仓价
         Numeric myplusprice;//加仓价
     Numeric myexitprice;//减仓价
     StringSeries dir;//记录get_dir返回的方向
     NumericSeries stploss;//记录get_stploss返回的止损点

Begin

     minpoint=MinMove*PriceScale;//最小跳
         
     dir=get_dir(n);//获取方向
     stploss=get_stploss(n);//获取止损价
         Commentary("方向:"+dir);
         Commentary("止损:"+Text(stploss));
         
//策略开始:

     if(dir=="多头")
     {  
         if(MarketPosition<=0) myentryprice=open;
         Buy(kc,myentryprice);
         kccnt=1;
                 
          }//多头状态下开1手多单


     if(MarketPosition==1)
     {
        myplusprice=stploss+plush*minpoint;
                if(l<myplusprice)
          {
             if(kccnt<maxcnt)
                         {
                            Buy(kc,myplusprice);
                kccnt=kccnt+1;
                         }
                  }
      }//加1手多单


     if(CurrentContracts==2)
     {
         myexitprice=LastEntryPrice+tp*minpoint;
         if(high>myexitprice)
         Sell(jc,myexitprice);
          }//减1手多单

//*********************************************************************************************************

     if(dir=="空头")
         {
         if(MarketPosition>=0) myentryprice=open;
         SellShort(kc,myentryprice);
         kccnt=-1;
                 
          }//空头状态下开1手空单


     if(MarginRatio==-1)
     {
                 myplusprice=stploss-plush*minpoint;
         if(high>myplusprice)
          {
            if(Abs(kccnt)<maxcnt)
                        {
                           SellShort(kc,myplusprice);
                           kccnt=kccnt-1;
                        }
          }
          }//加1手空单

     if(CurrentContracts==-2)
     {
         myexitprice=LastEntryPrice-tp*minpoint;
         if(low<myexitprice)
         BuyToCover(jc,myexitprice);
          }//减1手空单


End

Rank: 1

精华
0
UID
188804
积分
9
帖子
6
主题
3
阅读权限
10
注册时间
2014-6-17
最后登录
2018-11-21
2#
发表于 2015-12-22 22:18:58 |只看该作者
可能我还没有描述清楚,再补充一下:
get_dir和get_stploss函数原理如下:
比如一个K线序列,前100个数据:0,1,2,3,4...99这100个k线,0到26模型所需的数据不够没有方向,从第27个开始有数据,而且是多头,持续到36,这中间的每一个bar上只要调用get_dir就返回“多头”,调用get_stploss就返回止损价(移动止损);第37个变空头,持续到58,这中间的每一个bar,只要调用get_dir就返回"空头",调用get_stploss就返回空头的止损价(也是移动止损);59变多头持续到77,78变空头持续到99;假设目前行情正在运行第100编号的K线,而且未发生反转,当前K线调用get_dir,返回“空头”,直至发生转向,如此多空循环,非多即空。

而我在主函数里想实现的加仓减仓是这样的:每个新的方向序列里,比如上述的27——36编号的多头序列K线里,27第一个变多头的K线直接开盘价开多第一手,之后在不改变方向的前提下(也就是在27到36序列里)逢低再加1手多单,加仓价格是get_stploss+plush*minpoint.每个方向序列里最多只加一次仓,加仓后,如果加仓的这1手获利30跳则直接平仓,只留下最开始的1手拿到改变方向;加仓单如果没机会获利30跳,则两手多单拿到改变方向全平,开始做空和加空减空。
不知道关注我问题的朋友或者老师看明白了吗?

使用道具 举报

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

bottom

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

GMT+8, 2024-5-12 16:08

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部