全部 TBQuant功能 TBL语言 TB开户 问答专区 其他
海龟系统学习时的问题
tb00000 分享到
2022-05-03 15:46

初学TB问的问题比较初级,请工程师耐心解答,非常感谢

问题如下:

 

//------------------------------------------------------------------------
// 简称: TurtleTrader
// 名称: 海龟交易系统
// 类别: 公式应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
    Numeric nEntries(3);                    
    Numeric RiskRatio(1);                    
    Numeric ATRLength(20);                    
    Numeric boLength(20);                    
    Numeric fsLength(55);                    
    Numeric teLength(10);                    
    Bool LastProfitableTradeFilter(True);    //这个是定义LastProfitableTradeFilter为true的意思?还是不太明白咋用,在整个公式中的作用?
Vars
    Numeric MinPoint;                        
    Series<Numeric> AvgTR;                    
    Numeric N;                                
     Numeric TotalEquity;                    
    Numeric TurtleUnits;                    
    Series<Numeric> DonchianHi;                
    Series<Numeric> DonchianLo;                
    Series<Numeric> fsDonchianHi;            
    Series<Numeric> fsDonchianLo;            
    Numeric ExitHighestPrice;                
    Numeric ExitLowestPrice;    //    Series<Numeric> fsDonchianLo 要定义在series内,    ExitLowestPrice为啥不用?不都是20  50  10 高低点    
    Numeric myEntryPrice;                    
    Numeric myExitPrice;                    
    Bool SendOrderThisBar(False);            
    Series<Numeric> preEntryPrice(0);        
    Series<Bool> PreBreakoutFailure(false);    //还是对bool布尔型不太理解,这一句在这个公式的什么作用?
Events
    OnBar(ArrayRef<Integer> indexs)
    {
        
        If(BarStatus == 0)
        {
            preEntryPrice = InvalidNumeric;
            PreBreakoutFailure = false;
        }
        MinPoint = MinMove*PriceScale;
        AvgTR = XAverage(TrueRange,ATRLength);
        N = AvgTR[1];
        TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
        TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
        TurtleUnits = IntPart(TurtleUnits); 
        DonchianHi = HighestFC(High[1],boLength);
        DonchianLo = LowestFC(Low[1],boLength);
        fsDonchianHi = HighestFC(High[1],fsLength);
        fsDonchianLo = LowestFC(Low[1],fsLength);
        ExitLowestPrice = LowestFC(Low[1],teLength);
        ExitHighestPrice = HighestFC(High[1],teLength);
        Commentary("N="+Text(N));
        Commentary("preEntryPrice="+Text(preEntryPrice));
        Commentary("PreBreakoutFailure="+IIFString(PreBreakoutFailure,"True","False"));//字符串是啥意思?这三句啥意思?
        // 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作
        If(MarketPosition == 0 && ((!LastProfitableTradeFilter) Or (PreBreakoutFailure)))//这一句啥意思?还有那个写法(!LastProfitableTradeFilter)括号里加个!?
        {                                                                                 // 这应该是个前提条件
            // 突破开仓
            If(High > DonchianHi && TurtleUnits >= 1)
            {
        
                myEntryPrice = min(high,DonchianHi + MinPoint);//为啥要他们两个值的最小值?high突破DonchianHi + MinPoint开仓,开仓价不就是DonchianHi + MinPoint
                myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); 
                preEntryPrice = myEntryPrice;
                Buy(TurtleUnits,myEntryPrice);
                SendOrderThisBar = True;
                PreBreakoutFailure = False;
            }
            If(Low < DonchianLo && TurtleUnits >= 1)
            {
                
                myEntryPrice = max(low,DonchianLo - MinPoint);
                myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); 
                preEntryPrice = myEntryPrice;
                SendOrderThisBar = True;
                SellShort(TurtleUnits,myEntryPrice);
                SendOrderThisBar = True;
                PreBreakoutFailure = False;
            }
        }
        
        If(MarketPosition == 0)
        {
            Commentary("fsDonchianHi="+Text(fsDonchianHi));
            If(High > fsDonchianHi && TurtleUnits >= 1)
            {
                
                myEntryPrice = min(high,fsDonchianHi + MinPoint);
                myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); 
                preEntryPrice = myEntryPrice;
                Buy(TurtleUnits,myEntryPrice);
                SendOrderThisBar = True;
                PreBreakoutFailure = False;
            }
            Commentary("fsDonchianLo="+Text(fsDonchianLo));
            If(Low < fsDonchianLo && TurtleUnits >= 1)
            {
                
                myEntryPrice = max(low,fsDonchianLo - MinPoint);
                myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); /
                preEntryPrice = myEntryPrice;
                SellShort(TurtleUnits,myEntryPrice);
                SendOrderThisBar = True;
                PreBreakoutFailure = False;
            }
        }
        If(MarketPosition == 1) 
        {
            Commentary("ExitLowestPrice="+Text(ExitLowestPrice));
            If(Low < ExitLowestPrice)
            {
                myExitPrice = max(Low,ExitLowestPrice - MinPoint);
                myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); 
                Sell(0,myExitPrice);   
            }Else
            {
                If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
                {
                    If(Open >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) 
                    {
                        myEntryPrice = Open;
                        preEntryPrice = myEntryPrice;
                        Buy(TurtleUnits,myEntryPrice);
                        SendOrderThisBar = True;
                    }
                    while(High >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) //while是同时执行的意思?
                    {
                        myEntryPrice = preEntryPrice + 0.5 * N;
                        preEntryPrice = myEntryPrice;
                        if(False == Buy(TurtleUnits,myEntryPrice))//这个IF语句啥意思?
                        {
                            break;                               //这个break啥意思?
                        }
                        SendOrderThisBar = True;
                    }
                }
                // 止损指令
                If(Low <= preEntryPrice - 2 * N && SendOrderThisBar == false) //SendOrderThisBar == false为啥当前bar有交易不止损?
                {                                                             //  如果刚开仓或者加仓就反向2ATR也应该止损呀
                    myExitPrice = preEntryPrice - 2 * N;
                    myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); 
                    Sell(0,myExitPrice); 
                    PreBreakoutFailure = True;
                }
            }
        }Else If(MarketPosition ==-1) 
        {
            // 求出持空仓时离市的条件比较值
            Commentary("ExitHighestPrice="+Text(ExitHighestPrice));
            If(High > ExitHighestPrice)            
            {
                myExitPrice = Min(High,ExitHighestPrice + MinPoint);
                myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); 
                BuyToCover(0,myExitPrice);    
            }Else
            {
                If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
                {
                    If(Open <= preEntryPrice - 0.5*N && CurrentEntries < nEntries) 
                    {
                        myEntryPrice = Open;
                        preEntryPrice = myEntryPrice;
                        SellShort(TurtleUnits,myEntryPrice);
                        SendOrderThisBar = True;
                    }
                    while(Low <= preEntryPrice - 0.5*N && CurrentEntries < nEntries) 
                    {
                        myEntryPrice = preEntryPrice - 0.5 * N;
                        preEntryPrice = myEntryPrice;
                        if(False == SellShort(TurtleUnits,myEntryPrice))
                        {
                            break;
                        }
                        SendOrderThisBar = True;
                    }
                }
                // 止损指令
                If(High >= preEntryPrice + 2 * N &&SendOrderThisBar==false) 
                {
                    myExitPrice = preEntryPrice + 2 * N;
                    myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); 
                    BuyToCover(0,myExitPrice); 
                    PreBreakoutFailure = True;
                }
            }
        }
        Commentary("CurrentEntries = " + Text(CurrentEntries));
    }
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有    TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
//          台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

wangkaiming

为啥当前bar有交易不止损?  

图表交易一般默认当根BAR不止损 ,因为K线当根内是无法判断先后的

2022-05-05 11:09
wangkaiming

if(False == Buy(TurtleUnits,myEntryPrice))//这个IF语句啥意思? 

如果买失败了 返回了false就要break掉这个while,跳出循环

2022-05-05 10:22
wangkaiming

 myEntryPrice = min(high,DonchianHi + MinPoint);//为啥要他们两个值的最小值?high突破DonchianHi + MinPoint开仓,开仓价不就是DonchianHi + MinPoint  

这种多用于跳空时做判断,取一个更实际的值

2022-05-05 10:21
wangkaiming

序列变量和布尔型等等基础问题 在帮助文档里搜索

2022-05-05 10:11
wangkaiming

LastProfitableTradeFilter 是一个开关 决定是不是启动PreBreakoutFailure

PreBreakoutFailure是突破失败时候的一种处理

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