双均线系统过滤假金叉

代码最后一个语句是过滤假金叉,即如果前一个bar盘中金叉,收盘未金叉,当根bar平仓,但是复盘的K线显示未平掉,不知道什么原因,该怎么修改?

很难实现

回复:历史bar只运行一次并不再触发你说的在restart 前无法实现

回复:我再想想

回复:实时状态应该能做到只不过和回溯有差异

回复:if 最后一次买入bar序列号=上一个bar{ if mafast <maslow 平仓}

假死叉也没体现

https://bbs.tbquant.net/thread/20241205162315158864 代写和诊断现在有付费服务

A处假金叉,B处应平掉

//------------------------------------------------------------------------ // 简称: Test333 // 入场: 1、以5、10周期均线金叉为入场点,点位为逆解点值和开盘价的较大的点位; // 2、如果前一根K线盘中死叉,但收盘未死叉,出现假死叉,则开盘补回仓位; // 3、如果前一根K线均线空头排列,当根K线成交量大于5周期均量,且价格向上突破前一根K线10周期均线价格时,盘中开仓。 // 出场: 1、以近20周期最低点*0.998为止损; // 2、如果死叉点小于等于开仓点位*1.002,需5、10周期均量线金叉,可平仓; // 3、如果死叉点大于开仓点位*1.002,平仓; // 4、如果出现前一根K线盘中金叉、收盘未金叉,开盘平仓。 // 5、如果前一根K线均线多头排列,当根K线成交量大于5周期均量,且价格向下突破前一根K线10周期均线价格时,盘中平仓。 //------------------------------------------------------------------------// Params Numeric EFast(5); //短均线周期参数 Numeric ESlow(10); //长均线周期参数 Numeric StopLength(20); //止损统计周期数 Numeric PostionLots(1);//头寸 Vars Series<Numeric> MAEFast; //短均线 Series<Numeric> MAESlow; //长均线 Series<Numeric> MAVOLEFast; //短均量 Series<Numeric> MAVOLESlow; //长均量 Series<Numeric> Opint1; // 逆解交叉点值 Series<Numeric> AvgTR; Series<Numeric> ProtectStopPrice; //保护性止损价 Series<Numeric> TrailStopPrice; //跟踪性止损价 Series<Numeric> PreMyEntryPrice; // 开仓价格初赋值 Series<Numeric> MyEntryPrice; // 开仓价格 Events OnBar(ArrayRef<Integer> indexs) { MAEFast = Average(Close, EFast); //短均线 MAESlow = Average(Close, ESlow); //长均线 MAVOLEFast = Average(Vol,EFast); //短均量 MAVOLESlow = Average(Vol,ESlow);//长均量 Opint1 = ((ESlow - 1) * Average(Close[1], ESlow - 1) * EFast - (EFast - 1) * Average(Close[1], EFast - 1) * ESlow) / (ESlow - EFast); //逆解交叉点值 ProtectStopPrice = Lowest(Low[1],StopLength) * 0.998; TrailStopPrice = Highest(High[1],StopLength) * 1.002; PreMyEntryPrice = Max(Open,opint1); Range[0:DataSourceSize() - 1] { PlotNumeric("MAEFast", MAEFast); PlotNumeric("MAESlow", MAESlow); } If(MarketPosition <> 1 And MAEFast[1]<MAESlow[1] And High>=MAEFast[1] And High>=MAESlow[1] And Vol>=MAVOLEFast) { Buy(PostionLots, MAESlow[1]); } If(MarketPosition <> 1 and MAEFast[1]<MAESlow[1] and High >= Opint1) //金叉 { Buy(PostionLots, Max(Open, Opint1)); //金叉开多单 MyEntryPrice = PreMyEntryPrice; } If(MarketPosition <> 1 And Low[1] <= Opint1[1] And Close[1] >= Opint1[1] And High >= Opint1) //过滤假死叉(考虑收盘价最低的情况) { Buy(PostionLots, Max(Open, Opint1)); MyEntryPrice = PreMyEntryPrice; } If(MarketPosition == 1 And BarsSinceEntry > 0) { If(Low <= ProtectStopPrice) { Sell(PostionLots, ProtectStopPrice); //止损 } If(MAEFast[1]>MAESlow[1] And Low<=MAEFast[1] And Low<=MAESlow[1] And Vol>=MAVOLEFast) { Sell(PostionLots, MAESlow[1]); } If(Low > ProtectStopPrice And MAEFast[1] > MAESlow[1] And Low < Opint1) //死叉 { If(Opint1 <= MyEntryPrice * 1.002 And MAVOLEFast > MAVOLESlow) { Sell(PostionLots, Min(Open, Opint1)); } If(Opint1 > MyEntryPrice * 1.002) { Sell(PostionLots, Min(Open, Opint1)); } } If(High[1] >= Opint1[1] And Close[1] < Opint1[1] And Low <= Opint1) //过滤假金叉 { Sell(PostionLots, Min(Open, opint1)); } } } //------------------------------------------------------------------------ // 编译版本 2025/3/28 202727 // 版权所有 winter110 // 更改声明 TradeBlazer Software保留对TradeBlazer平台