为什么跨周期代码一个平仓信号都没有啊
我想实现60分钟图层金叉状态时,一分钟图层前根k线金叉就以前根k线 收盘价平仓,按理说这个很好实现啊,但是为什么一个平仓信号都没有啊 Params Numeric MACDFAST(12); //MACD快速EMA周期 Numeric MACDSLOW(26); //MACD慢速EMA周期 Numeric MACDSIGNAL(9); //MACD信号线DEA周期 Numeric InitLots(1800); //初始一次性开空手数 Numeric CloseLots(1); //每次满足条件平仓的手数 String h60Freq("60m"); //跨周期:60分钟K线 Vars //==== 1分钟主图层MACD(图层0,图表周期)==== Series<Numeric> DIF1m; Series<Numeric> DEA1m; //==== 60分钟跨图层MACD(图层1,SubscribeBar自动订阅)==== Series<Numeric> DIF60; Series<Numeric> DEA60; Integer layer60; Series<Bool> LongState60(false); //60分钟多头状态标记:60上根K金叉后=true;60上根K死叉=false Series<Bool> Cross1mFlag(false); //1分钟金叉待平仓标记,捕捉到1分钟金叉置true,平仓后清除 Bool bHasOpen(False); //初始开仓锁,只开一次 Events OnInit() { layer60 = SubscribeBar(Symbol, h60Freq, BeginDateTime); //自动订阅60分钟图层 } OnBar(ArrayRef<Integer> indexs) { //==== 图层1:60分钟周期,计算MACD ==== Range[1:1] { DIF60 = XAverage(Close, MACDFAST) - XAverage(Close, MACDSLOW); DEA60 = XAverage(DIF60, MACDSIGNAL); } //==== 图层0:1分钟主周期,全部交易逻辑在这里 ==== Range[0:0] { //1. 计算1分钟MACD DIF1m = XAverage(Close, MACDFAST) - XAverage(Close, MACDSLOW); DEA1m = XAverage(DIF1m, MACDSIGNAL); //======== 【60分钟多头状态更新】======== //60图层【上一根收盘K】金叉事件:DIF60[2]<=DEA60[2] 并且 DIF60[1]>DEA60[1] Bool Cross60 = (DIF60[2] <= DEA60[2]) And (DIF60[1] > DEA60[1]); //60图层【上一根收盘K】死叉事件 Bool DeadCross60 = (DIF60[2] >= DEA60[2]) And (DIF60[1] < DEA60[1]); //更新60分钟多头状态: If(Cross60) { LongState60 = True; //60分钟上根K金叉,开启多头状态 } If(DeadCross60) { LongState60 = False;//60分钟上根K死叉,关闭多头状态 } //👉 中间无金叉死叉,LongState60保持原有值 //周一60K金叉 → LongState60=true;中间连续多根60K不死叉,标记一直true;直到周五60K死叉才变false //======== 捕获【前一根1分钟K金叉事件】======= Bool PreBarCross1m = (DIF1m[2] <= DEA1m[2]) And (DIF1m[1] > DEA1m[1]); //只有60分钟处于多头状态LongState60=True,才接收1分钟金叉信号,打上待平仓标记 If(PreBarCross1m And LongState60) { Cross1mFlag = True; } //=====初始一次性开空仓,仅执行1次(空头!)===== If(MarketPosition == 0 And bHasOpen == False) { SellShort(InitLots, Close[1]); //开空单,前一根K收盘价 bHasOpen = True; } //=====平仓逻辑:平空单 BuyToCover,镜像范例结构===== //条件:持有空单MarketPosition=-1 并且 存在待平仓标记Cross1mFlag If(MarketPosition == -1 And Cross1mFlag) { BuyToCover(CloseLots, Close[1]); //平空,前一根K收盘价 Cross1mFlag = False; //平仓完成,清除本次金叉标记,等待下一次1分钟金叉 } //====调试日志,和你范例保持一致,方便排查==== Commentary("60DIF[1]=" + Text(DIF60[1]) + " 60DEA[1]=" + Text(DEA60[1])); Commentary("60多头状态=" + IIFString(LongState60,"开启","关闭")); Commentary("1分钟前根金叉=" + IIFString(PreBarCross1m,"是","否")); Commentary("待平仓标记=" + IIFString(Cross1mFlag,"是","否")); Commentary("当前持仓=" + Text(MarketPosition)); } } }