在什么情况下buy()函数sell()函数 返回false?
2021-10-24 17:33

看海龟交易代码的时候发现了这样的情况,满足条件触发了buy()函数,但是没成交,经查看,函数返回值为false。

也不是都不会成交,在过了N根BAR后,又能正常开仓

出现这样情况是什么原因?麻烦老师解答

为了直观,输出了条件是否满足,持仓保证金,等信息,如图

代码如下(可直接复制黏贴,编译看结果):


Params
    Numeric nEntries(3);                    // 最大建仓次数
    Numeric RiskRatio(1);                    // % Risk Per N ( 0 - 100)
    Numeric ATRLength(20);                    // 平均波动周期 ATR Length
    Numeric boLength(20);                    // 短周期 BreakOut Length
    Numeric fsLength(55);                    // 长周期 FailSafe Length
    Numeric teLength(10);                    // 离市周期 Trailing Exit Length
    Bool LastProfitableTradeFilter(True);    // 使用入市过滤条件
Vars
    Numeric MinPoint;                        // 最小变动单位
    Series<Numeric> AvgTR;                    // ATR
    Numeric N;                                // N 值
    Numeric TotalEquity;                    // 按最新收盘价计算出的总资产
    Numeric TurtleUnits;                    // 交易单位
    Series<Numeric> DonchianHi;                // 唐奇安通道上轨,延后1个Bar
    Series<Numeric> DonchianLo;                // 唐奇安通道下轨,延后1个Bar
    Series<Numeric> fsDonchianHi;            // 唐奇安通道上轨,延后1个Bar,长周期
    Series<Numeric> fsDonchianLo;            // 唐奇安通道下轨,延后1个Bar,长周期
    Numeric ExitHighestPrice;                // 离市时判断需要的N周期最高价
    Numeric ExitLowestPrice;                // 离市时判断需要的N周期最低价
    Numeric myEntryPrice;                    // 开仓价格
    Numeric myExitPrice;                    // 平仓价格
    Bool SendOrderThisBar(False);            // 当前Bar有过交易
    Series<Numeric> preEntryPrice(0);        // 前一次开仓的价格
    Series<Bool> PreBreakoutFailure(false);    // 前一次突破是否失败
    Bool info_buy;
    Bool info_sell;
    
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);

        If(MarketPosition == 0)
        {            
            If(High > fsDonchianHi && TurtleUnits >= 1)
            {

                myEntryPrice = min(high,fsDonchianHi + MinPoint);
                myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice);
                preEntryPrice = myEntryPrice;
                info_buy = Buy(TurtleUnits,myEntryPrice);
                SendOrderThisBar = True;
                PreBreakoutFailure = False;
                Commentary("空仓且突破上轨!");
            }
            
            If(Low < fsDonchianLo && TurtleUnits >= 1)
            {            
                myEntryPrice = max(low,fsDonchianLo - MinPoint);
                myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice);
                preEntryPrice = myEntryPrice;
                info_sell = SellShort(TurtleUnits,myEntryPrice);
                SendOrderThisBar = True;
                PreBreakoutFailure = False;
                Commentary("空仓且突破下轨!");
            }
        }
        Commentary("preEntryPrice="+Text(preEntryPrice));
        Commentary("myEntryPrice="+Text(myEntryPrice));
        Commentary("Portfolio_UsedMargin()="+Text(Portfolio_UsedMargin()));
        Commentary("信号info_buy="+IIFString(info_buy,"True","False"));
        Commentary("信号的info_sell="+IIFString(info_sell,"True","False"));
    }

 

 

评论区
qy071006324

好的,谢谢

2021-10-25 10:46
qy071006324

谢谢老师~

2021-10-25 10:46
qy071006324

TB程序是否会自动跳过前N根BAR? 用PlotString输出连线时,也发现前N根是没有画线的,直到第55根BAR

2021-10-24 22:14
顶部