老师您好,完整的代码如下,如果周期设置的越短(比如10秒线,越容易出错)Params Numeric Lots0(1); // 商品A的头寸 Numeric Lots1(1); // 商品B的头寸 Numeric Length(20); // 通道的周期数 Numeric StopLen(10); // 止损通道的周期数Vars Series<Numeric> OO; // 价差开盘价 Series<Numeric> HH; // 价差最高价 Series<Numeric> LL; // 价差最低价 Series<Numeric> CC; // 价差收盘价 Numeric Factor0; // A商品计算价差的系数 Numeric Factor1; // B商品计算价差的系数 Series<Numeric> UpperLine; // 通道上轨 Series<Numeric> LowerLine; // 通道下轨 Series<Numeric> StopLine; // 止损位Events OnInit() { Numeric count = Max(Length,StopLen); SetBeginBarMaxCount(count - 1); } OnBar(ArrayRef<Integer> indexs) { // 价差计算系数 Factor0 = Lots0*Data0.ContractUnit*Data0.BigPointValue; Factor1 = Lots1*Data1.ContractUnit*Data1.BigPointValue; // 计算价差并输出价差K线 CC = Data0.Close*Factor0 - Data1.Close*Factor1; OO = Data0.Open*Factor0 - Data1.Open*Factor1; HH = Max(OO,CC); LL = Min(OO,CC); PlotNumeric(\"Open\",OO); PlotNumeric(\"High\",HH); PlotNumeric(\"Low\",LL); PlotNumeric(\"Close\",CC); // 计算价差的周期通道上下轨 UpperLine = Highest(HH[1],Length); LowerLine = Lowest(LL[1],Length); PlotNumeric(\"UpperLine\", UpperLine); PlotNumeric(\"LowerLine\", LowerLine); // 开仓 If(Data0.Marketposition == 0 And CC[1] >= UpperLine[1] And Data0.Vol > 0 And Data1.Vol > 0) { Data0.Buy(Lots0, data0.Open); Data1.SellShort(Lots1, Data1.Open); } // 反向平仓 If(Data0.Marketposition == 1 And CC[1] <= LowerLine[1] And Data0.Vol > 0 And Data1.Vol > 0) { Data0.Sell(0, Data0.Open); Data1.BuyToCover(0, Data1.Open); } // 止损 Stopline = Lowest(LL[1], StopLen); If(Data0.MarketPosition == 1 And Data0.BarsSinceEntry > 0 And Data0.Vol > 0 And Data1.Vol > 0) { If(CC[1] <= StopLine[1]) { Data0.Sell(0,Data0.Open); Data1.BuyToCover(0,Data1.Open); } } }//------------------------------------------------------------------------// 编译版本 GS2014.10.25// 版权所有 TradeBlazer Software 2003-2025// 更改声明 TradeBlazer Software保留对TradeBlazer平// 台每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------