开拓者期货期权程序化系统交易论坛

标题: 跪求热心人帮忙解决二个小环节问题 [打印本页]

作者: haqh810302    时间: 2017-1-30 14:25:17     标题: 跪求热心人帮忙解决二个小环节问题

一个问题是参数N4-6不能实现。二是当根k线达到浮赢回撤平仓条件,没能在当根k实时平仓。
Params
        Numeric Length(20);                       
        Numeric Offset(2);               
    Numeric lots(1);//手数
    Numeric qj(150);//缺口区间
        Numeric tpds(1);//突破点数
    Numeric gdzs(10);//固定止损
        Numeric ylqd(20);//盈利启动
        Numeric bbpcd(5);//保本平仓点
        Numeric zgpc(0);//中轨平仓点
        Numeric xzcs(10);//限制开仓K线数
        Numeric N(6);//收口后4-6参数
Vars
        NumericSeries UpLine;                //上轨
        NumericSeries DownLine;                //下轨
        NumericSeries MidLine;        //中间线
        Numeric Band;
        Numeric MinPoint;                                         //最小变动价位
        NumericSeries myprice;
        Numeric extprice;
        BoolSeries dcon;
        BoolSeries kcon;
        NumericSeries qk;
        numericseries myflag;
        NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
    NumericSeries LowestAfterEntry;         // 开仓后出现的最低价

Begin
    // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        //指标计算
    MinPoint = MinMove*PriceScale;                  //最小变动价位
        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);
        qk=UpLine-DownLine;
        dcon=CrossOver(h,UpLine[1]+tpds*MinPoint);
        kcon=CrossUnder(l,DownLine[1]-tpds*MinPoint);
       
        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));

        If(CurrentBar<=length)myflag=0;
        If(MarketPosition==0 && myflag==0)
        {
           If(qk[n]<qj and dcon)
           {
              myprice=Max(Open,UpLine[1]+tpds*MinPoint);
                  Buy(lots,myprice);
                  myflag =1;
                }
           If(qk[n]<qj and kcon)
           {
              myprice=Min(Open,DownLine[1]-tpds*MinPoint);
                  SellShort(lots,myprice);
                  myflag =1;
                }
     }
         Commentary("myflagg:="+Text(myflag));
         If(MarketPosition==0 && myflag ==1 && BarsSinceExit>=xzcs)
        {
           If(qk[1]<qj and dcon)
           {
              myprice=Max(Open,UpLine[1]+tpds*MinPoint);
                  Buy(lots,myprice);
                 
                }
           If(qk[1]<qj and kcon)
           {
              myprice=Min(Open,DownLine[1]-tpds*MinPoint);
                  SellShort(lots,myprice);
               
                }
     }
         
         If(MarketPosition==1 and BarsSinceEntry>1)
         {
            If(HighestAfterEntry>=myprice+ylqd*MinPoint)
                 {
                     If(l<=myprice+bbpcd*MinPoint)
                         {
                            extprice=Min(Open,myprice+bbpcd*MinPoint);
                            Sell(0,extprice);
                            Commentary("保本平");
                          }
                  }
            If(Low<=myprice-gdzs*MinPoint)
                {
                    extprice=Min(Open,myprice-gdzs*MinPoint);
                        Sell(0,extprice);
                        Commentary("固定止损");
             }
               
                If(L<=MidLine[1]-zgpc*MinPoint)
                {
                     extprice=Min(Open,MidLine[1]-zgpc*MinPoint);
                        Sell(0,extprice);
                        Commentary("中轨平仓");
                }
        }
       
         If(MarketPosition==-1 and BarsSinceEntry>1)
         {
            If(LowestAfterEntry<=myprice-ylqd*MinPoint)
                 {
                     If(h>=myprice-bbpcd*MinPoint)
                         {
                            extprice=Max(Open,myprice-bbpcd*MinPoint);
                            BuyToCover(0,extprice);
                            Commentary("保本平");
                          }
                  }
            If(high>=myprice+gdzs*MinPoint)
                {
                    extprice=Max(Open,myprice+gdzs*MinPoint);
                        BuyToCover(0,extprice);
                        Commentary("固定止损");
             }
               
                If(h>=MidLine[1]+zgpc*MinPoint)
                {
                     extprice=Max(Open,MidLine[1]+zgpc*MinPoint);
                        BuyToCover(0,extprice);
                        Commentary("中轨平仓");
                }
        }
End
作者: haqh810302    时间: 2017-1-30 14:26:02

大神们帮帮忙吧
作者: caobing    时间: 2018-2-10 23:01:49

很久远的帖子了。至少把思路讲明白。注释写清晰
作者: Yuen_Lee    时间: 2018-2-11 15:57:59

试试把qk[n]改成qk[N]




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2