qiangqiang2046 发表于 2012-11-7 13:23:32

麻烦高手 看下我判断仓位为什么失效???


//------------------------------------------------------------------------
// 简称: bbb
// 名称: bbb
// 类别: 公式应用
// 类型: 用户应用
//------------------------------------------------------------------------

Params
        Numeric Length(120);                       
        Numeric Offset(2);               
        Numeric zhiying(50);
        Numeric zhisun(50);
       
Vars
        Numeric UpLine;                //上轨
        Numeric DownLine;                //下轨
        NumericSeries MidLine;        //中间线
        Numeric Band;
       
       
    Numeric MinPoint;           // 一个最小变动单位,也就是一跳
    Numeric MyEntryPrice;       // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
        Numeric TakeProfitSet(50);  // 止赢设置
      Numeric StopLossSet(50);    // 止损设置
    Numeric MyExitPrice;        // 平仓价格
        Numeric AvgValue1;
       
        //  跟踪止损部分的定义
       Numeric TrailingStart1(50); // 跟踪止损启动设置1
       Numeric TrailingStart2(100); // 跟踪止损启动设置2
       Numeric TrailingStop1(30);    // 跟踪止损设置1
       Numeric TrailingStop2(61);    // 跟踪止损设置2
                                                                        //  Numeric StopLossSet(50);        // 止损设置 重复定义
                                                                        //  Numeric MyExitPrice;                // 平仓价格
       NumericSeries HighestAfterEntry;                // 开仓后出现的最高价
       NumericSeries LowestAfterEntry;                  // 开仓后出现的最低价
        //       
Begin
       TakeProfitSet=zhiying;
         StopLossSet=zhisun;
         

        MidLine =  AverageFC(Close,Length);
        Band = StandardDev(Close,Length,2);
        UpLine = MidLine + Offset * Band;
        DownLine = MidLine - Offset * Band;
          
        PlotNumeric("UpLine",UpLine);
         PlotNumeric("DownLine",DownLine);
             PlotNumeric("MidLine",MidLine);
               
               
                           If (High > UpLine)
                                   {
                                                 if (low< UpLine)
                           {
                                        
                                                                         if (MarketPosition==1)                 //1 先平多仓
                                                                                                                                                                                                                           
                                                                            {
                                              sell(0,UpLine-5.5);
                                                                                }                  
                                             if (MarketPosition==0)                        //无仓情况下触发做空                                               
                                                 {               
                                                                If (A_GetOpenOrderCount()>0)
                                                                                                                                                                {
                                                                                                                                                                                        A_DeleteOrder();    // 2 撤单
                                                                                                                                                                }
                                                                                                 
                                                                                        sellShort(1,UpLine-5);                     //放空  
                                                 }
                                                   }                                                 
                      }
          

              If (Low < DownLine)
                                     {
                                 if (high>DownLine)
                           {
                                                    if  (MarketPosition==-1)
                                                                  {
                                              BuyToCover(0,DownLine+5.5);   //先平仓
                                                                                  }                  
                                                                                  
                                                                                   if (MarketPosition==0)                        //无仓才多                                               
                                                 {       
                                                                If (A_GetOpenOrderCount()>0)
                                                                                                                                                                {
                                                                                                                                                                                        A_DeleteOrder();    //撤单
                                                                                                                                                                }
                                                                                                 
                                                                                                 
                                                                                          
                                                            Buy(1,DownLine+5);                                                    //开空仓
                                                                                     }
                           }               
                       }               
                                               
//以下是跟踪止盈部分代码


                                               
                                                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的跟踪止损判断
       }
       Commentary("HighestAfterEntry="+Text(HighestAfterEntry));
       Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
       MinPoint = MinMove*PriceScale;
       MyEntryPrice = AvgEntryPrice;
       If(MarketPosition==1) // 有多仓的情况
       {
               If(HighestAfterEntry >= MyEntryPrice + TrailingStart2*MinPoint)      //  最高价触发多单第二级跟踪止损生效   的条件表达式
               {
                       If(Low <= HighestAfterEntry - TrailingStop2*MinPoint)        // 如果最低价比最高价回调指定幅度 则 触发 离场信号
                       {
                                MyExitPrice = HighestAfterEntry - TrailingStop2*MinPoint;
                                If(Open < MyExitPrice) MyExitPrice = Open;            // 如果该Bar开盘价有跳空 触发,则用开盘价代替
                                Sell(0,MyExitPrice);
                       }
               }else if(HighestAfterEntry >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止 损的条件表达式
               {
                       If(Low <= HighestAfterEntry - TrailingStop1*MinPoint)
                       {
                                MyExitPrice = HighestAfterEntry - TrailingStop1*MinPoint;
                                If(Open < MyExitPrice) MyExitPrice = Open;            // 如果该Bar开盘价有跳空 触发,则用开盘价代替
                                Sell(0,MyExitPrice);
                                                               
                                                                }
               }else if(Low <= MyEntryPrice - StopLossSet*MinPoint)//可以在这里写上初始的止损处理
               {
                       MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
                       If(Open < MyExitPrice) MyExitPrice = Open;            //  如果该Bar开盘价有跳空触发,则用开盘价代替
                       Sell(0,MyExitPrice);
               }
       }else if(MarketPosition==-1) // 有空仓的情况
       {
               If(LowestAfterEntry <= MyEntryPrice - TrailingStart2*MinPoint)      // 第二级跟踪止损的条件表达式
               {
                       If(High >= LowestAfterEntry + TrailingStop2*MinPoint)
                       {
                                MyExitPrice = LowestAfterEntry + TrailingStop2*MinPoint;
                                If(Open > MyExitPrice) MyExitPrice = Open;            // 如果该Bar开盘价有跳空触发,则用开盘价代替
                                BuyToCover(0,MyExitPrice);
                       }
               }else if(LowestAfterEntry <= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
               {
                       If(High >= LowestAfterEntry + TrailingStop1*MinPoint)
                       {
                                MyExitPrice = LowestAfterEntry - TrailingStop1*MinPoint;
                                If(Open > MyExitPrice) MyExitPrice = Open;            // 如果该Bar开盘价有跳空 触发,则用开盘价代替
                                BuyToCover(0,MyExitPrice);
                       }
               }else If(High >= MyEntryPrice + StopLossSet*MinPoint)   //可以在这里写上初始的 止损处理

{
                       MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;
                       If(Open > MyExitPrice) MyExitPrice = Open;            //  如果该Bar开盘价有跳空触发, 则用开盘价代替
                       BuyToCover(0,MyExitPrice);
               }
       }
End
          
程序运行后会不断触发 开仓做多和做空 判断仓位语句没有起作用,请高手帮忙看看是为什么???

不胜感激!!!!

flyfish 发表于 2012-11-7 14:14:14

用buy sell开仓不能用A函数判断仓位吧

qiangqiang2046 发表于 2012-11-7 15:27:00

哦   谢谢 flyfish  请问要用什么函数判断?

qiangqiang2046 发表于 2012-11-7 16:08:41

    if (MarketPosition==0)                        //无仓情况下触发做空                                    

请问这句判断仓位有问题吗?

lh948 发表于 2012-11-7 16:17:14

qiangqiang2046 发表于 2012-11-7 15:27 static/image/common/back.gif
哦   谢谢 flyfish  请问要用什么函数判断?

buy、sell等普通发单函数 用MarketPosition来判断持仓,该函数用法请参考F1帮助文档

qiangqiang2046 发表于 2012-11-7 21:02:38

lh948 我是用了那个函数的啊  

  if (MarketPosition==0)                        //无仓情况下触发做空                                    

请问这句判断仓位是否为0有问题吗?

flyfish 发表于 2012-11-8 10:28:19

     if (MarketPosition==0)                        //无仓才多
{        
    If (A_GetOpenOrderCount()>0)

已经用了marketposition了,里面就不要再用A函数了
                                                                                                                                                   

moneytao870929 发表于 2020-7-24 23:28:40

我的问题类似,不知道那么多年过去解决了么
页: [1]
查看完整版本: 麻烦高手 看下我判断仓位为什么失效???