为什么平仓会有信号闪烁

//------------------------------------------------------------------------// 简称: trend_HL2// 名称: 趋势策略2(跨周期)// 类别: 公式应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params Numeric Length(20); //计算高低点周期 Numeric MaxLots(10); //最大连续浮亏开仓次数Vars Series<Numeric> HH; Series<Numeric> LL; Series<Numeric> HH1; Series<Numeric> LL1; Series<Numeric> EntryPrice1; Series<Numeric> jincha; Series<Numeric> sicha; Series<Numeric> sProfit; Series<Numeric> lProfit; Global Numeric lots_sum(1); Global Numeric DKG; Global Numeric KKG;Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作 OnInit() { //=========跨周期数据计算============== { SubscribeBar(Data0.Symbol,"5s",Data0.BeginDateTime); } } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Range[0:0] { HH = Highest(High,Length); LL = Lowest(Low,Length); HH1 = nthcon(HH>HH[1],1); LL1 = nthcon(LL<LL[1],1); //Print("HH1=" + Text(HH1)); //Print("LL1=" + Text(LL1)); Commentary("HH1=" + Text(HH1)); Commentary("LL1=" + Text(LL1)); If(HH1 < LL1) { PlotAuto("趋势线",LL,LL,Red,Enum_Line,Enum_Solid); } Else { PlotAuto("趋势线",HH,HH,Green,Enum_Line,Enum_Solid); } If(CrossOver(LL1,HH1)) { jincha=1; sicha=0; } If(CrossUnder(LL1,HH1)) { jincha=0; sicha=1; } } Range[1:1] { //开仓交易 If(MarketPosition == 0) { If(data0.jincha==1) { Buy(lots_sum,Close); EntryPrice1 = LastEntryPrice; DKG=0; }Else If(data0.sicha==1) { SellShort(lots_sum,Close); EntryPrice1 = LastEntryPrice; KKG=0; } } //平仓交易 If(MarketPosition > 0 And data0.sicha==1 And BarsSinceEntry >= 1 And DKG==0) { //平多单 Sell(0,Close); print("data0.sicha=" + Text(data0.sicha)); print("time=" + Text(Time)); lProfit = ExitPrice - EntryPrice1; If((lProfit <= 0) And lots_sum < MaxLots) { lots_sum = lots_sum + 1; Commentary("lots_sum=" + Text(lots_sum)); }Else If (lProfit >0) { lots_sum = 1; } data0.sicha=0; DKG=1; } Else If(MarketPosition < 0 And data0.jincha==1 And BarsSinceEntry >= 1 And KKG==0) { //平空单 BuyToCover(0,Close); print("data0.jincha=" + Text(data0.jincha)); print("time=" + Text(Time)); sProfit = EntryPrice1 - ExitPrice; If((sProfit <= 0) And lots_sum < MaxLots) { lots_sum = lots_sum + 1; }Else If (sProfit >0) { lots_sum = 1; } data0.jincha=0; KKG=1; } Commentary("DKG=" + Text(DKG)); Commentary("KKG=" + Text(KKG)); Commentary("data0.jincha=" + Text(data0.jincha)); Commentary("data0.sicha=" + Text(data0.sicha)); } } //------------------------------------------------------------------------// 编译版本 2024/12/27 105232// 版权所有 wt9821506389// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------

我把全局变量去除,平仓的时候还是有信号闪烁

回复:把KKG定义为序列变量来控制就可以。但关键还是要对运行机制理解透彻。建议完整看下量化零基础视频

你对TB公式机制理解可能有点偏差,BuySell图表信号类策略,是不能这样用全局变量来控制交易条件的。

回复:为什么不能全局变量来控制交易条件?