z20211028 14:55, 图标显示开空1手,然后成交了,但信号闪了几下后消失了;晚上21:00看后又显示了出来, 但后台没有统计该手,我关闭TBQ程序后,再重新打开策略页面才正常显示有1手空单。请问这个是什么问题??策略代码在下面,应该不会有信号闪烁的呀。
//------------------------------------------------------------------------
// 简称:Aberration系统空头
// 名称:
// 类别: 公式应用
// 类: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
Numeric NATRstop(5); // N倍ATR硬止损和追踪止损
Numeric money(20000); // 单品种资金配置
Vars
Numeric Scale_in_switch(0); // 是否允许加仓,1允许,0关闭
Numeric Length(80);
Numeric StdDev(1);
Series<Numeric> STD_20 ; // 标准差
Numeric LengthStd;
Series<Numeric> UpperBand;
Series<Numeric> LowerBand;
Series<Numeric> AveMa;
Numeric StdValue;
Numeric MinPoint;
Series<Numeric> ATR; // 本周期ATR
Series<Numeric> ts; // 加仓后,止损调节系数
Numeric MyExitPrice; // 硬止损出场均价,平仓价格
Series<Numeric> yclose(0); // 获得昨日收盘价
Series<Numeric> topen(0); // 获得今日开盘价
Series<Numeric> LowestAfterEntry; // 开仓后出现的最低价
Bool CrossUnderFlag ;
Series<Numeric> lowest_low_2_20; // 20周期高点2
Series<Bool> Scale_in_bo; // 是否有过突破加仓
Series<Bool> stoploss_hard_short ;
Series<Bool> BIAS_R_short ;
Series<Bool> Normal_Trailing_short ;
Series<Bool> TS_Reentry_short ;
Numeric Lots_temp; // 开仓手数
Numeric Lots;
Numeric Margin; // 保证金比例
Events
OnInit()
{
Range[0:DataCount-1]
{
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
}
}
onBar(ArrayRef<Integer> indexs)
{
//If(!CallAuctionFilter()) Return; // 过滤集合竞价
If(date!=date[1] and high==low) Return; // 本bar价格异常
If(close==Q_lowerlimit||close==Q_upperlimit) Return; // 当前公式应用商品的当日跌停板和涨停板价
Margin = MarginRatio();
Lots = Floor(money/(Margin*open*ContractUnit()*BigPointValue()),1);
// 早晨9点,第一根bar,记录一些重要数据
if(Time == 0.090000)
{
yclose = close[1]; // 昨日收盘价格 = 昨日最后一个bar收盘价
topen = open; // 今日开盘价
}
// ===================== 计算指标值 ==========================
MinPoint = MinMove*PriceScale;
ATR = Average(TrueRange,14);
AveMa = Average(Close[1],Length);
StdValue = StandardDev(Close[1],Length);
UpperBand = Avema + StdDev * StdValue;
LowerBand = Avema - StdDev * StdValue;
PlotNumeric("UpperBand",UpperBand);
PlotNumeric("LowerBand",LowerBand);
PlotNumeric("AveMa",AveMa);
lowest_low_2_20 = lowest(low[2],20);
// TS止损后,不允许入场条件(空)
TS_Reentry_short =
Normal_Trailing_short == True
&& close[1] > Lowest_low_2_20
&& BarsSinceExit < 20 ;
// ===================== 以下是开仓 =========================
// 开空仓
CrossUnderFlag = Crossunder(Close[1],LowerBand ) ;
If(MarketPosition == 0
&& !TS_Reentry_short
&& CrossUnderFlag )
{
SellShort(Lots,Open);
Scale_in_bo = False;
Normal_Trailing_short = false;
stoploss_hard_short = false;
}
//
// 正常平仓
If(MarketPosition == -1
&& Close[1] > AveMa )
{
BuyToCover(0,Open);
}
// 完全击穿
If(MarketPosition == -1
&& CrossOver( Close[1],UpperBand ) )
{
BuyToCover(0,Open);
}
Commentary(" stoploss_hard_short ="+IIFString(stoploss_hard_short,"True","False")) ;
Commentary(" Normal_Trailing_short ="+IIFString(Normal_Trailing_short,"True","False")) ;
// ============================= 【追踪止损】 =============================
if ( Scale_in_bo == False )
{
ts = 1 ; // 如果没有任何加仓,原始仓位下,止损位系数=1
}
if ( Scale_in_bo == True )
{
ts = 2 ; // 如果有过1种加仓,止损位系数=2
}
if ( BarsSinceEntry == 0 ) // 开仓后第一个bar,直接等于开仓价
{
LowestAfterEntry = AvgEntryPrice;
}
Else If( BarsSinceEntry > 0 ) // 之后的bar,不断用最高和最低价做比对,赋值给开仓后最高最低价
{
LowestAfterEntry = Min(LowestAfterEntry[1],low[1]);
}
Else // 没有仓位时,保持上次价格信息,没有其他用途
{
LowestAfterEntry = LowestAfterEntry[1];
}
If( MarketPosition == -1 && BarsSinceEntry > 0
&& AvgEntryPrice - LowestAfterEntry > NATRstop*atr[1]/ts ) // 有多仓
{
If( high >= LowestAfterEntry + NATRstop*atr[1]/ts )
{
BuyToCover(0,Max(Open, LowestAfterEntry + NATRstop*atr[1]/ts ) );
Normal_Trailing_short = True ;
PlotString ("TrailingStop","TrailingStop",high*1.01,White);
}
}
// ======================= 【硬止损平仓】=======================
/*
If( MarketPosition == -1 && BarsSinceEntry > 0
&& high >= AvgEntryPrice + NATRstop*atr[1]/ts ) // 空仓情况
{
MyExitPrice = Max (Open,AvgEntryPrice + NATRstop*atr[1]/ts );
BuyToCover(0,MyExitPrice); //空头止损平仓
PlotString ("HardStop","HardStop",high*1.01,White);
stoploss_hard_short = True ;
}
}
是不是这里 If(date!=date[1] and high==low) Return; // 本bar价格异常
因为跌停了,这根Bar的high==low了