在什么情况下buy()函数sell()函数 返回false?
看海龟交易代码的时候发现了这样的情况,满足条件触发了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")); }