全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
跟踪止损
2021-07-06 09:30

 

老师你好,我现在遇到两跟问题,第一.我根据你们tb语言编程案列套用过来的跟踪止损,写好后运用到实际当中与预期的不符,本来是当最高价大于开仓价50点后启动移动止损,当回撤20点时平仓,实际中在开仓的当根k线就把仓给平了,第二.在公式的第67行提示大括号不匹配,经过反复查找也没找到错误,已经琢磨好几天了 实在没办法了 才来求助望老师指教指教 ,多谢!

下面是源码

   

//------------------------------------------------------------------------
// 简称: GZZS888
// 名称: 跟踪止损
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------

Vars
   Numeric zhishunqidong(50);   // 跟踪止损启动
   Numeric zhishunhuiche(20);   // 跟踪止损回撤
   Numeric chushizhishun(50);    // 止损设置
   Numeric kaicangjia;           //开仓价
   Numeric pingcangjia;        // 平仓价格 
   Series<Numeric> zuigaojia;        // 开仓后出现的最高价
   Series<Numeric> zuidijia;        // 开仓后出现的最低价
   Series<Numeric>MA;  //均线

Events
    //计算均线  
    OnBar(ArrayRef<Integer> indexs)  
 {
     MA=AverageFC(Close,60);
     PlotNumeric("MA",MA);
     //判断是否做多
     If(MarketPosition<>1 And Close[2]<MA and Close[1]>MA)
     {
        Buy(1,Open);
     }
     //...
    If(BarsSinceEntry == 0)                // 条件满足:开仓Bar 
    {
       zuigaojia = Close;
        zuidijia = Close;        // 赋初值为当前最新价格
        If(MarketPosition <> 0);            // 有持仓时执行以下代码
        {            
            //开仓Bar,将开仓价和当时的收盘价的较大值保留到zuigaojia 
            zuigaojia = Max(zuigaojia,AvgEntryPrice); 
            // 开仓Bar,将开仓价和当时的收盘价的较小值保留到zuidijia 
           zuidijia = Min(zuidijia,AvgEntryPrice);  
        } 
    }Else      // 非开仓Bar时进行以下运算 
    {        
        // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
       zuigaojia = Max(zuigaojia,High); 
        // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断   
       zuidijia = Min(zuidijia,Low); 
    }
    
   Commentary("最高价 = "+Text(zuigaojia));
   Commentary("最低价= "+Text(zuidijia));
   kaicangjia = AvgEntryPrice;
     
   If(MarketPosition == 1 and BarsSinceEntry >= 1);  //有多仓且非建仓bar 
   {
        // 第二级跟踪止损的条件表达式
        If(zuigaojia[1] >= kaicangjia + zhishunqidong);// 第二级跟踪止损的条件表达式
        {
            If(Low <= zuigaojia[1] - zhishunhuiche);
            {
                pingcangjia = zuigaojia[1] - zhishunhuiche;                             
                // 如果该Bar开盘价即跳空触发,则用开盘价代替                               
               // If(Open < pingcangjia) pingcangjia == Open;                                    
                Sell(1,pingcangjia);                                                          
            }
            
        } Else If(Low <= kaicangjia - chushizhishun);     //可在此写初始止损处理
        {
            pingcangjia = kaicangjia - chushizhishun;
            Sell(1,pingcangjia);
        }
    } 
}       
//------------------------------------------------------------------------
// 编译版本    2021/06/30 124313
// 版权所有    wsq890102
// 更改声明    TradeBlazer Software保留对TradeBlazer平台
//            每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

kyover

 if这行后面是没有分号,写了分号就起不到控制效果了 所以下面的else就没办法识别

你先把这个修正了吧 感觉这个是最大的问题

 

 

2021-07-06 10:03
wsq890102
@kyover

果然是分号作怪,我把所有IF后面的分号都删除,现在问题解决了,多谢老师指点!yes

2021-07-06 13:05
leileiTB

yes

2022-10-02 09:56
您未登录,请先 登录注册 后发表评论
顶部