设为首页收藏本站

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

按资金量定的开仓手数,但平仓是只平1手?如何解决? [复制链接]

Rank: 1

精华
0
UID
222123
积分
24
帖子
15
主题
9
阅读权限
10
注册时间
2015-10-28
最后登录
2018-2-28
跳转到指定楼层
1#
发表于 2016-6-17 15:10:36 |只看该作者 |倒序浏览
代码如下Params
         Numeric spp(1);//开仓资金占可用资金比率
Numeric bzb(15);//保证金比率
Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
        Numeric moff(0);
   Numeric mylot(0);
       
        NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
   NumericSeries LowestAfterEntry;         // 开仓后出现的最低价   
  
   Numeric MyEntryPrice(0);
   Numeric MyExitPrice(0);
       
       
       
       
       
       
Begin
        AvgValue1 = AverageFC(Close,5);
        AvgValue2 = AverageFC(Close,20);

        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);               
       
        // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        //实际账户

If(BarStatus==2)
{


mylot=IntPart(A_FreeMargin*spp/(close*bzb*0.01*BigPointValue*contractunit));



}
moff=MinMove*PriceScale;//滑点

        //
        If(BarStatus==0)
   {
    SetGlobalVar(0,0);
        }
        //
       
       
       

       
        If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
        {MyExitPrice =AvgValue1[1]+moff;
          If(barstatus==2 )
       {
                 If(GetGlobalVar(0)==0)
                 {
         if(data1.A_SellPosition>0) data1.A_SendOrder(Enum_Buy,Enum_Exit,data1.A_SellPosition,data1.Q_askPrice+moff);
                 if(data1.a_buyposition>0) data1.A_SendOrder(Enum_Sell,Enum_Exit,data1.a_buyposition,data1.Q_BidPrice-moff);
                 SetGlobalVar(0,1);
                 If(A_FreeMargin>0.7*A_CurrentEquity) Buy(mylot,MyExitPrice+moff);
         
         
        
                 }
                }Else
                {       
            Buy(mylot,MyExitPrice+moff);
                HighestAfterEntry = Close;
        LowestAfterEntry = Close;
      
                 SetGlobalVar(0,0);
                 }
        }
       
        If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
        {MyExitPrice =AvgValue1[1]-moff;
          If(barstatus==2 )
       {
                 If(GetGlobalVar(0)==0)
                 {          
          if(data1.A_SellPosition>0) data1.A_SendOrder(Enum_Buy,Enum_Exit,data1.A_SellPosition,data1.Q_askPrice+moff);
                  if(data1.a_buyposition>0) data1.A_SendOrder(Enum_Sell,Enum_Exit,data1.a_buyposition,data1.Q_BidPrice-moff);
          SetGlobalVar(0,1);               
                  If(A_FreeMargin>0.7*A_CurrentEquity) SellShort(mylot,MyExitPrice-moff);
     
   
        
                  }
       }Else
           {       
           SellShort(mylot,MyExitPrice-moff);
          
           HighestAfterEntry = Close;
        LowestAfterEntry = Close;         
          
                SetGlobalVar(0,0);
           }
        }       
        //平仓:
If((MarketPosition>0   And BarsSinceEntry >=10))
{
   If(BarStatus==2 and data1.a_buyposition>0)
                                {
                                data1.A_SendOrder(Enum_Sell,Enum_Exit,data1.a_buyposition,data1.Q_BidPrice-moff);
                                }else
                                {
                                Sell(0,0);
                                }
}
  
If((marketposition<0    And BarsSinceEntry >=10))
{
   If(barstatus==2 and data1.A_SellPosition>0)
                                {
                                data1.A_SendOrder(Enum_Buy,Enum_Exit,data1.A_SellPosition,data1.Q_askPrice+moff);
                                }else
                                {                               
                                BuyToCover(0,0);
                                }
}
//跟踪止损
If(BarsSinceentry == 0)
    {
        HighestAfterEntry = Close;
        LowestAfterEntry = Close;
        If(MarketPosition <> 0)
        {
            HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);   // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
            LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);     // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
        }
    }else
    {
        HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
        LowestAfterEntry = Min(LowestAfterEntry,Low);    // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
    }

   
    MyEntryPrice = EntryPrice;
        //
         If( MarketPosition==1 and BarsSinceEntry>0  ) // 有多仓的情况
    {
        if(HighestAfterEntry >= MyEntryPrice*(1+6.9/100)  )// 第2级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry-2*moff)
            {
               
                    // 如果该Bar开盘价有跳空触发,则用开盘价代替
                                        //
                                       
                        If(BarStatus==2 and data1.a_buyposition>0)
                                {
                                data1.A_SendOrder(Enum_Sell,Enum_Exit,data1.a_buyposition,data1.Q_BidPrice-moff);
                                }else
                                {
                                Sell(0,0);
                                }
                               
                               
            }
        }
请高手帮忙。

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
2#
发表于 2016-6-18 06:45:28 |只看该作者
代码注释太少,看不明白。

从逻辑上讲,开仓时可将开仓数量记录下来,平仓时直接填平仓数量,而不要偷懒用Sell(0,0)

使用道具 举报

Rank: 1

精华
0
UID
198726
积分
22
帖子
15
主题
7
阅读权限
10
注册时间
2014-12-9
最后登录
2017-3-19
3#
发表于 2016-6-20 12:37:29 |只看该作者
代码间化了一下,按楼上建改了,但摸测还只平1手。用的5.3版,映射到主力合
//------------------------------------------------------------------------
// 简称: sjx16617
// 名称: sjx
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
         Numeric spp(1);//开仓资金占可用资金比率
Numeric bzb(15);//保证金比率


Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
        Numeric moff(0);
   Numeric mylot(0);
       
        NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
   NumericSeries LowestAfterEntry;         // 开仓后出现的最低价   
  
   Numeric MyEntryPrice(0);
   Numeric MyExitPrice(0);
       
        BoolSeries p1(false);
   BoolSeries p2(false);
       
        Numeric kd(0);//开仓资金占可用资金比率
Numeric kk(0);//保证金比率
       
       
       
Begin
        AvgValue1 = AverageFC(Close,5);
        AvgValue2 = AverageFC(Close,20);

        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);               
       
        // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        //实际账户

If(BarStatus==2)
{


mylot=IntPart(A_FreeMargin*spp/(close*bzb*0.01*BigPointValue*contractunit));



}
moff=MinMove*PriceScale;//滑点

        //
        If(BarStatus==0)
   {
    SetGlobalVar(0,0);  
        }
        //
       
        p1= CrossOver(AvgValue1[1] , AvgValue2[1]);
p2=CrossUnder(AvgValue1[1] , AvgValue2[1]);
       
        If(MarketPosition <>1  and p1)
        {
         
                  Buy(mylot,o);
                  kd=mylot;
     
        }
       
        If(MarketPosition <>-1  and p2)
        {
                        
                   SellShort(mylot,o); kk=mylot;
     
   
        
                 
        }       
        //平仓:
If((MarketPosition>0   And BarsSinceEntry >=10))
{
   
                                {
                                Sell(kd,o);
                                }
}
  
If((marketposition<0    And BarsSinceEntry >=10))
{
  
                                {                               
                                BuyToCover(kk,o);
                                }
}
//跟踪止损

//
End


//------------------------------------------------------------------------
// 编译版本        GS2015.12.25
// 用户版本        2016/06/17 11:15:51
// 版权所有        zxqh106300032
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

Rank: 1

精华
0
UID
198726
积分
22
帖子
15
主题
7
阅读权限
10
注册时间
2014-12-9
最后登录
2017-3-19
4#
发表于 2016-6-20 12:41:56 |只看该作者
Params
          Numeric spp(1);//开仓资金占可用资金比率
Numeric bzb(15);//保证金比率


Vars
         NumericSeries AvgValue1;
         NumericSeries AvgValue2;
         Numeric moff(0);
    Numeric mylot(0);
         
         NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
    NumericSeries LowestAfterEntry;         // 开仓后出现的最低价   
   
    Numeric MyEntryPrice(0);
    Numeric MyExitPrice(0);
         
         BoolSeries p1(false);
    BoolSeries p2(false);
         
         Numeric kd(0);//开仓资金占可用资金比率
Numeric kk(0);//保证金比率
         
         
         
Begin
         AvgValue1 = AverageFC(Close,5);
         AvgValue2 = AverageFC(Close,20);

         PlotNumeric("MA1",AvgValue1);
         PlotNumeric("MA2",AvgValue2);               
         
         // 集合竞价和小节休息过滤
         If(!CallAuctionFilter()) Return;
         
         //实际账户

If(BarStatus==2)
{


mylot=IntPart(A_FreeMargin*spp/(close*bzb*0.01*BigPointValue*contractunit));



}
moff=MinMove*PriceScale;//滑点

                  
         p1= CrossOver(AvgValue1[1] , AvgValue2[1]);
p2=CrossUnder(AvgValue1[1] , AvgValue2[1]);
         
         If(MarketPosition <>1  and p1)
         {
         
                   Buy(mylot,o);
                   kd=mylot;
      
         }
         
         If(MarketPosition <>-1  and p2)
         {
                          
                    SellShort(mylot,o); kk=mylot;
      
     
         
                  
         }        
         //平仓:
If((MarketPosition>0   And BarsSinceEntry >=10))
{
   
                                 {
                                 Sell(kd,o);
                                 }
}
   
If((marketposition<0    And BarsSinceEntry >=10))
{
   
                                 {                                
                                 BuyToCover(kk,o);
                                 }
}


//
End

使用道具 举报

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

bottom

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

GMT+8, 2024-5-14 02:39

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部