从能够运行的空头策略直接镜像成的多头策略,为什么买卖信号在同一根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线上运行策略?
如何在同一根K线上既开仓又止损?
A函数策略空头运行有错误
同一个图层K线上面加载多个公式重复运行
如何解决在同一根K线平仓后在开仓的手数问题
k线上有发单信号,但策略单元种没有
A函数多单策略 信号出现空头头寸
TBQ3中有没有策略指标应用的完全镜像功能?
同一根K线信号闪烁的问题

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

老师,你把图形放大看有信号的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是我定义的公式名,这个公式用的就是你发的代码