老师好;下面这个代码是我从多头策略直接镜像而成,多头策略能流畅完好运行,图表显示也正确,现在镜像成下面这个代码就完全不对了,所有的买卖信号都显示在一根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是我定义的公式名,这个公式用的就是你发的代码