您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

新手请教公式设置 - TradeBlazer公式 [开拓者 TB]

  • 咨询内容: // 自己新学TB,编了个公式却不能实现,请高手们指导,谢谢。


    // 以下为均线交易系统,10日均线上穿20均线为买入,10日均线下穿20均线为卖出
    // 均线买入/卖出时机均为平仓反手
    // 开仓为二手,达到盈利预期值时平仓一手,等回落后加仓一手



    Params      
            Numeric Length1(10);        // 10日均线的参数值
            Numeric Length2(20);        // 20日均线的参数值
            Numeric Lots(2);            // 默认的交易数量  
    Vars        
            NumericSeries MA1;
            NumericSeries MA2;
            Numeric MinPoint; // 一个最小变动单位,也就是一跳
            Numeric AddSet(50); // 加仓设置
            Numeric SubSet(50); // 减仓设置
            NumericSeries FirstPrice; // 第一次开仓价格
            NumericSeries LastPrice; // 最后一次开仓价格
            boolSeries Condition1;
            boolSeries Condition2;
    Begin   
            MA1 = XAverage(Close,Length1);  
            MA2 = XAverage(Close,Length2);
            MinPoint = MinMove*PriceScale();
            Condition1 = CrossOver(MA1,MA2);
            Condition2 = CrossUnder(MA1,MA2);
            If(MarketPosition==0) //空仓状态时
            {
            if(condition1[1])// 当出现10日均线上穿20均线时,下一个bar开盘价买入
            {
            FirstPrice = Open;
            LastPrice = FirstPrice;
            Buy(lots,FirstPrice);
            }else if(condition2[1]) // 当出现10日均线下穿20均线时,下一个bar开盘价卖出
            {
            FirstPrice = Open;
            LastPrice = FirstPrice;
            Sellshort(Lots,Open);  
            }
            }else if(MarketPosition==1) // 有多头持仓的情况
            {
            If(condition2[1]) // 当出现10日均线下穿20均线时,下一个bar开盘价卖出
            {
            Sellshort(Lots,Open);
            }else if(CurrentContracts==2 && High>= LastPrice+SubSet*MinPoint) // 止赢减仓
            {
            Sell(1,LastPrice+SubSet*MinPoint);
            LastPrice =LastPrice + subSet*MinPoint;
            }else if(CurrentContracts==1 && Low <=LastEntryPrice - AddSet*MinPoint) // 逢低加仓
            {
            buy(1,LastPrice- AddSet*MinPoint);
            LastPrice = LastPrice - addSet*MinPoint;
            }
            }else if(MarketPosition==-1);// 有空头持仓的情况
            {
            If(condition1[1]) // 当出现10日均线下穿20均线时,下一个bar开盘价平仓并买入
            {
            Sellshort(Lots,Open);
            }Else if(CurrentContracts==2 &&  Low <= LastEntryPrice - subSet*MinPoint) // 止赢减仓
            {
            BuyToCover(1,LastPrice);
            LastPrice = LastPrice - subSet*MinPoint;
            }else if( CurrentContracts==1 && High >=LastPrice + addSet*MinPoint) // 逢高加仓
            {
            sell(1,LastPrice);
            LastPrice = LastPrice + AddSet*MinPoint;
            }
            }
    End

     

  • TB技术人员: 好像是这样吧


    // 以下为均线交易系统,10日均线上穿20均线为买入,10日均线下穿20均线为卖出
    // 均线买入/卖出时机均为平仓反手
    // 开仓为二手,达到盈利预期值时平仓一手,等回落后加仓一手



    Params      
            Numeric Length1(10);        // 10日均线的参数值
            Numeric Length2(20);        // 20日均线的参数值
            Numeric Lots(2);            // 默认的交易数量  
    Vars        
            NumericSeries MA1;
            NumericSeries MA2;
            Numeric MinPoint; // 一个最小变动单位,也就是一跳
            Numeric AddSet(50); // 加仓设置
            Numeric SubSet(50); // 减仓设置
            NumericSeries FirstPrice; // 第一次开仓价格
            NumericSeries LastPrice; // 最后一次开仓价格
            boolSeries Condition1;
            boolSeries Condition2;
    Begin   
            MA1 = XAverage(Close,Length1);  
            MA2 = XAverage(Close,Length2);
            MinPoint = MinMove*PriceScale();
            Condition1 = CrossOver(MA1,MA2);
            Condition2 = CrossUnder(MA1,MA2);
            If(MarketPosition!=1) //空仓状态时
            {
            if(condition1[1])// 当出现10日均线上穿20均线时,下一个bar开盘价买入
            {
            FirstPrice = Open;
            LastPrice = FirstPrice;
            Buy(lots,FirstPrice);
            }
                    if(MarketPosition!=-1 and condition2[1]) // 当出现10日均线下穿20均线时,下一个bar开盘价卖出
            {
            FirstPrice = Open;
            LastPrice = FirstPrice;
            Sellshort(Lots,Open);  
            }
            }
                    if(MarketPosition==1) // 有多头持仓的情况
            {
            If(condition2[1]) // 当出现10日均线下穿20均线时,下一个bar开盘价卖出
            {
            Sellshort(Lots,Open);
            }else if(CurrentContracts>1  and CurrentContracts<3  && High>= LastPrice+SubSet*MinPoint) // 止赢减仓
            {
            Sell(1,LastPrice+SubSet*MinPoint);
            LastPrice =LastPrice + subSet*MinPoint;
            }else if(CurrentContracts<2 && Low <=LastEntryPrice - AddSet*MinPoint) // 逢低加仓
            {
            buy(1,LastPrice- AddSet*MinPoint);
            LastPrice = LastPrice - addSet*MinPoint;
            }
            }
                    if(MarketPosition==-1);// 有空头持仓的情况
            {
            If(condition1[1]) // 当出现10日均线下穿20均线时,下一个bar开盘价平仓并买入
            {
            Sellshort(Lots,Open);
            }Else if(CurrentContracts>1 and CurrentContracts<3  &&  Low <= LastEntryPrice - subSet*MinPoint) // 止赢减仓
            {
            BuyToCover(1,LastPrice);
            LastPrice = LastPrice - subSet*MinPoint;
            }else if( CurrentContracts<2 && High >=LastPrice + addSet*MinPoint) // 逢高加仓
            {
            sell(1,LastPrice);
            LastPrice = LastPrice + AddSet*MinPoint;
            }
            }
    End

     

  • TB客服: 谢谢,不过好像还是没达到想要的效果

     

  • 网友回复: 回复 3# 青木


    您的效果是想要怎样的?
    您可以将各个条件用commentary输出查看你的条件,一步一步看就知道为什么不是你想要的效果了。
    commentary的各种使用方法请看:http://tradeblazer.net/forum/vie ... B%E4%BD%BF%E7%94%A8
    或者参考帮助文档中相关函数说明

     

  • 网友回复: 回复 4# lh948

    这个建议非常好,谢谢!
    我按照你的方法把公式调整了,效果出来了。不过奇怪的是有多单时符合预期效果,但惟独有空单时不能止赢和补仓,只能平仓反手。
    多单和空单的代码是同理的,为何效果不同捏?
    以下是我修改会的代码,请帮忙看看:

    // 以下为均线交易系统,10日均线上穿20均线为买入,10日均线下穿20均线为买出
    Params      
            Numeric Length1(10);        // 10日均线的参数值
            Numeric Length2(20);        // 20日均线的参数值
            Numeric Lots(2);            // 默认的交易数量  
    Vars        
            NumericSeries MA1;
            NumericSeries MA2;
            Numeric MinPoint(1); // 一个最小变动单位,也就是一跳
            Numeric AddSet(20); // 加仓设置
            Numeric SubSet(20); // 减仓设置
                    NumericSeries myFirstPrice; // 第一次开仓价格
                    NumericSeries myLastPrice; // 最后一次开仓价格
                    boolSeries Condition1;
                    boolSeries Condition2;
    Begin   
            MA1 = XAverage(Close,Length1);  
            MA2 = XAverage(Close,Length2);
            MinPoint = MinMove*PriceScale;
                    Condition1 = CrossOver(MA1,MA2);
            Condition2 = CrossUnder(MA1,MA2);
                    If(MarketPosition==0 )
                    {
                      if(condition1) //空仓状态时出现10日均线上穿20均线,当前bar收盘价买入
                       {
                        myFirstPrice = Close;
                        myLastPrice = myFirstPrice;
                        Buy(lots,myFirstPrice);
                        Commentary("空仓状态下,上穿20均线时,当前bar收盘价买入");
                       }Else if(condition2) // 空仓状态时出现10日均线下穿20均线时,当前bar收盘价卖出
                       {
                        myFirstPrice = Close;
                        myLastPrice = myFirstPrice;
                Sellshort(Lots,myFirstPrice);
                Commentary("空仓状态下,下穿20均线时,当前bar收盘价卖出");               
                       }
                    }Else if(MarketPosition==1 )
                       {
                        If(condition2) // 有多单持仓,出现10日均线下穿20均线时,当前bar收盘价卖出
                       {
                        myLastPrice = Close;
                        Sellshort(Lots,myLastPrice);
                            Commentary("多单平仓并反手");                 
                       }Else if(CurrentContracts==2 && High>= myLastPrice+SubSet*MinPoint) // 止赢减仓
                       {
                Sell(1,myLastPrice+SubSet*MinPoint);
                        Commentary("多单止赢1手");
                        myLastPrice =myLastPrice + subSet*MinPoint;
                       }Else if(CurrentContracts==1 && Low <=MA1) // 逢低加仓
               {
                buy(1,IntPart(MA1));
                        Commentary("多单补仓1手");
                    myLastPrice = IntPart(MA1);
                       }
            }Else If(MarketPosition==-1 )
               {
                        if(condition1)// 有空单持仓,出现10日均线上穿20均线时,当前bar收盘价平仓并买入
                       {
                        myLastPrice = Close;
                        Buy(Lots,myLastPrice);
                        Commentary("空单平仓并反手");
                       }Else if(CurrentContracts==2 && Low<=myLastPrice-SubSet*MinPoint) // 止赢减仓
               {
                        BuyToCover(1,myLastPrice-SubSet*MinPoint);
                        Commentary("空单止赢1手");
                        myLastPrice=myLastPrice-SubSet*MinPoint;
                       }Else if(CurrentContracts==1 && High>=MA1) // 逢高加仓
               {
                        sell(1,IntPart(MA1));
                            Commentary("空单补仓1手");               
                        myLastPrice = IntPart(MA1);
                       }
                       }
    End

【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容