data0没有信号,麻烦看看
Params //此处添加参数 Numeric Length(100); //定义布林周期 Numeric Offset(3); //定义布林宽度 Numeric Lots(1); //定义交易手数 Vars //此处添加变量 Series<Numeric> UpLine; //上轨 Series<Numeric> DownLine; //下轨 Series<Numeric> MidLine; //中间线 Numeric Band; Series<Numeric> DiffP; //价差 Events OnInit() { AddDataFlag(Enum_Data_RolloverBackWard()); AddDataFlag(Enum_Data_RolloverRealPrice()); AddDataFlag(Enum_Data_AutoSwapPosition()); AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); } onBar(ArrayRef<Integer> indexs) { //此处添加代码正文 //过滤集合竞价 //If(!CallAuctionFilter()) return; DiffP = Data1.Close-Data0.Close; //计算两个合约之间价差,合约1-合约0 MidLine = AverageFC(DiffP,Length); //计算价差布林中轨 Band = StandardDev(DiffP,Length,1); //计算价差单位布林轨宽 UpLine = MidLine + Offset * Band; //计算价差布林上轨 DownLine = MidLine - Offset * Band; //计算价差布林下轨 If(Data0.MarketPosition == 0 && Data1.MarketPosition == 0) //如果没有持有两个合约套利 { If ( DiffP[1]>UpLine[1] ) //如果上一期合约之间价差大于布林上轨 { Data0.Buy(Lots,Data0.Open); //以开盘价买入合约0 Data1.SellShort(Lots,Data1.Open); //以开盘价卖出合约1 } If ( DiffP[1]<DownLine[1] ) //如果上一期合约之间价差小于布林下轨 { Data0.SellShort(Lots,Data0.Open); //以开盘价卖出合约0 Data1.Buy(Lots,Data1.Open); //以开盘价买入合约1 } } If ( Data0.MarketPosition>0 && Data1.MarketPosition<0 && DiffP[1]<MidLine[1] ) //如果持有合约套利,合约价差小于布林中轨 { Data0.Sell(Lots,Data0.Open); //以开盘价卖出合约0 Data1.BuyToCover(Lots,Data1.Open); //以开盘价买入合约1 } If ( Data0.MarketPosition<0 && Data1.MarketPosition>0 && DiffP[1]>MidLine[1] ) //如果持有合约套利,合约价差大于布林中轨 { Data0.BuyToCover(Lots,Data0.Open); //以开盘价买入合约0 Data1.Sell(Lots,Data1.Open); //以开盘价卖出合约1 } }