从能够运行的空头策略直接镜像成的多头策略,为什么买卖信号在同一根k线上

老师好;下面这个代码是我从多头策略直接镜像而成,多头策略能流畅完好运行,图表显示也正确,现在镜像成下面这个代码就完全不对了,所有的买卖信号都显示在一根K线上,盼老师帮指正,谢谢! // //------------------------------------------------------------------------// 简称: SZQDD// 名称: 双周期多头策略// 类别: 策略应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params// 均线周期参数定义 Numeric Length1(5); Numeric Length2(10); Numeric Length3(20); Numeric Length4(150); // KD指标参数定义 Numeric Length(14); Numeric SlowLength(3); Numeric SmoothLength(2); // 下单及止损参数 Numeric Xds(2); Numeric Zs1(10); Numeric Zs2(15); Vars// 多图层均线 Series<Numeric> Emp5; Series<Numeric> Emp10; Series<Numeric> Emp20; Series<Numeric> Emp150; Series<Numeric> My_Zsj; // KD指标相关变量定义 Series<Numeric> HighestValue; Series<Numeric> LowestValue; Series<Numeric> SumHLValue; Series<Numeric> SumCLValue; Series<Numeric> KValue; Series<Numeric> DValue; Bool Bool_Kcxh_1; Bool Bool_Kcxh_2; Bool Bool_Pcxh_1; Bool Bool_Pcxh_2; //............................................................................ Events OnReady() { Range[0:1] { setPlotOption("Emp5", "begin-bar", Length1); setPlotOption("Emp10", "begin-bar", Length2); setPlotOption("Emp20", "begin-bar", Length3); setPlotOption("Emp150", "begin-bar", Length4); } } //................................................................................. OnInit() { SetConsecEntries(5); subscribebar(symbol,"1h",BeginDateTime); } OnBar(ArrayRef<Integer> indexs) { // 双图层均线绘制 Emp5 = XAverage(Close, Length1); Emp10 = XAverage(Close, Length2); Emp20 = XAverage(Close, Length3); Emp150 = XAverage(Close, Length4); data1.Emp5 = XAverage(data1.Close, Length1); data1.Emp20 = XAverage(data1.Close, Length3); PlotNumeric("MA5", Emp5); PlotNumeric("MA10", Emp10); PlotNumeric("MA150", Emp150); data1.PlotNumeric("1MA5", data1.Emp5); data1.PlotNumeric("1MA20", data1.Emp20); // KD指标计算 HighestValue = HighestFC(High, Length); LowestValue = LowestFC(Low, Length); SumHLValue = SummationFC(HighestValue - LowestValue, SlowLength); SumCLValue = SummationFC(Close - LowestValue, SlowLength); If(SumHLValue <> 0) { KValue = SumCLValue / SumHLValue * 100; } Else { KValue = 0; } DValue = AverageFC(KValue, SmoothLength); //............................................................................................... // 开仓信号设计 - 完全镜像空头策略,只是方向相反 Bool_Kcxh_1 = Emp5 > Emp10[1] && KValue > DValue && DValue > DValue[1] && Emp150 > Emp150[2]; Bool_Kcxh_2 = data1.Emp20 > data1.Emp20[1] && data1.Emp5 > data1.Emp20[1]; // 开仓指令 - 使用与空头完全相同的MarketPosition判断逻辑 If(MarketPosition <> 1 && Bool_Kcxh_1 && Bool_Kcxh_2) { Buy( 5*Xds, Open ); } // 平仓信号设计 - 完全镜像空头策略 My_Zsj = EntryPrice - Low; Bool_Pcxh_1 = Emp5 < Emp10[1]; Bool_Pcxh_2 = data1.Emp5 < data1.Emp5[1]; // 注意:这里用Emp20而不是data1.Emp5 // 平仓,止损指令 If(MarketPosition <> -1 && Bool_Pcxh_1) { Sell( 2*Xds, Close ); } If(MarketPosition <> -1 && Bool_Pcxh_2) { Sell( 0, Close ); } If(MarketPosition <> -1 && My_Zsj > 2*Zs1) { Sell( 2*Xds, Close ); } If(MarketPosition <> -1 && My_Zsj > 2*Zs2) { Sell( 0, Close ); } }

我怎么没看出来什么一根线?

回复:老师,你把图形放大看有信号的K线就能看出来,向上向下的开仓平仓箭头在一根K线上,而空头代码不是这样的显示

回复:老师;下面这个空头开仓代码运行显示就不是这样,我是直接用下面这个镜像的 // //------------------------------------------------------------------------// 简称: SZQDT// 名称: 双周期多头策略// 类别: 策略应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params// 均线周期参数定义 Numeric Length1(5); Numeric Length2(10); Numeric Length3(20); Numeric Length4(150); // KD指标参数定义 Numeric Length(14); Numeric SlowLength(3); Numeric SmoothLength(2); // 下单及止损参数 Numeric Xds(2); Numeric Zs1(10); Numeric Zs2(15); Vars// 多图层均线 Series<Numeric> Emp5; Series<Numeric> Emp10; Series<Numeric> Emp20; Series<Numeric> Emp150; Series<Numeric> My_Zsj; // KD指标相关变量定义 Series<Numeric> HighestValue; Series<Numeric> LowestValue; Series<Numeric> SumHLValue; Series<Numeric> SumCLValue; Series<Numeric> KValue; Series<Numeric> DValue; Bool Bool_Kcxh_1; Bool Bool_Kcxh_2; Bool Bool_Pcxh_1; Bool Bool_Pcxh_2; //............................................................................ Events OnReady() { Range[0:1] { setPlotOption("Emp5", "begin-bar", Length1); setPlotOption("Emp10", "begin-bar", Length2); setPlotOption("Emp20", "begin-bar", Length3); setPlotOption("Emp150", "begin-bar", Length4); } } //................................................................................. OnInit() { SetConsecEntries(5); subscribebar(symbol,"1h",BeginDateTime); } OnBar(ArrayRef<Integer> indexs) { // 双图层均线绘制 Emp5 = XAverage(Close, Length1); Emp10 = XAverage(Close, Length2); Emp20 = XAverage(Close, Length3); Emp150 = XAverage(Close, Length4); data1.Emp5 = XAverage(data1.Close, Length1); data1.Emp20 = XAverage(data1.Close, Length3); PlotNumeric("MA5", Emp5); PlotNumeric("MA10", Emp10); PlotNumeric("MA150", Emp150); data1.PlotNumeric("1MA5", data1.Emp5); data1.PlotNumeric("1MA20", data1.Emp20); // KD指标计算 HighestValue = HighestFC(High, Length); LowestValue = LowestFC(Low, Length); SumHLValue = SummationFC(HighestValue - LowestValue, SlowLength); SumCLValue = SummationFC(Close - LowestValue, SlowLength); If(SumHLValue <> 0) { KValue = SumCLValue / SumHLValue * 100; } Else { KValue = 0; } DValue = AverageFC(KValue, SmoothLength); //............................................................................................... // 开仓信号设计 - 完全镜像多头策略,只是方向相反 Bool_Kcxh_1 = Emp5 < Emp10[1] && KValue < DValue && DValue < DValue[1] && Emp150 < Emp150[2]; Bool_Kcxh_2 = data1.Emp20 < data1.Emp20[1] && data1.Emp5 < data1.Emp20[1]; // 开仓指令 - 使用与多头完全相同的MarketPosition判断逻辑 If(MarketPosition <> -1 && Bool_Kcxh_1 && Bool_Kcxh_2) { SellShort( 5*Xds, Open ); } // 平仓信号设计 - 完全镜像多头策略 My_Zsj = High - EntryPrice; Bool_Pcxh_1 = Emp5 > Emp10[1]; Bool_Pcxh_2 = data1.Emp5 > data1.Emp5[1]; // 注意:这里用Emp20而不是data1.Emp5 // 平仓,止损指令 If(MarketPosition <> 1 && Bool_Pcxh_1) { BuyToCover( 2*Xds, Close ); } If(MarketPosition <> 1 && Bool_Pcxh_2) { BuyToCover( 0, Close ); } If(MarketPosition <> 1 && My_Zsj > 2*Zs1) { BuyToCover( 2*Xds, Close ); } If(MarketPosition <> 1 && My_Zsj > 2*Zs2) { BuyToCover( 0, Close ); } }

回复:下面这个代码显示的开仓平仓等等位置就是组成的,不在一根K线上

回复:老师,好像是我的主图没有“demo"显示?

回复:不知道这个"demo"是怎么设置,然后图形显示出来?

回复:老师,我的主图显示是下面这样

回复:老师;上面那个做空策略的图表显示就是下面这个正确的显示,都是主图输入策略名称就直接加载出来的,就是不明白为什么相同的条件下加载后,两个显示不一样? //

回复:有不是同一根K线开平的,所以不是系统的问题K线上的信号是根据你的开平条件来的你可以用commentary输出条件看看,是怎么回事 https://video.tbquant.net/video?id=video464

回复:才开始学习TBQ3编写,以前是用简语言编写的代码,现在是改写成TBQ3代码,太难了,谢谢你们多多指点🙏

回复:.....demo是我定义的公式名,这个公式用的就是你发的代码