分析双均线跨周期策略不出信号的原因
//------------------------------------------------------------------------// 简称: CrossPeriodMA// 名称: 双均线跨周期策略// 类别: 策略应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params //此处添加参数 Numeric FastLength(5); //短均线周期 Numeric SlowLength(20); //长均线周期 Numeric TradeSize(1); //每次交易手数Vars //此处添加变量 NumericSeries maFast; //短均线 NumericSeries maSlow; //长均线Defs //此处添加策略函数Events //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { } //在所有的数据源准备完成后调用 OnReady() { } //基础数据更新事件函数 OnDic(StringRef dicName,StringRef dicSymbol,DicDataRef dicValue) { } //在新bar的第一次执行之前调用一次 OnBarOpen(ArrayRef<Integer> indexs) { } //Bar更新事件函数 OnBar(ArrayRef<Integer> indexs) { //===== 计算双均线 ===== maFast = AverageFC(Close, FastLength); maSlow = AverageFC(Close, SlowLength); } //下一个Bar开始前,重新执行当前bar最后一次 OnBarClose(ArrayRef<Integer> indexs) { //===== 金叉:短均线上穿长均线,做多 ===== If(CrossOver(maFast, maSlow)) { //如果当前持有空仓,先平空再开多 If(MarketPosition == -1) { BuyToCover(CurrentContracts, Close); Buy(TradeSize, Close); } //如果当前无仓位,直接开多 Else If(MarketPosition == 0) { Buy(TradeSize, Close); } } //===== 死叉:短均线下穿长均线,做空 ===== If(CrossUnder(maFast, maSlow)) { //如果当前持有多仓,先平多再开空 If(MarketPosition == 1) { Sell(CurrentContracts, Close); SellShort(TradeSize, Close); } //如果当前无仓位,直接开空 Else If(MarketPosition == 0) { SellShort(TradeSize, Close); } } } //Tick更新事件函数,需要SubscribeTick函数订阅后触发 OnTick(TickRef evtTick) { } //持仓更新事件函数 OnPosition(PositionRef pos) { } //策略账户仓更新事件函数 OnStrategyPosition(PositionRef pos) { } //委托更新事件函数 OnOrder(OrderRef ord) { } //成交更新事件函数 OnFill(FillRef ordFill) { } //定时器更新事件函数 OnTimer(Integer id,Integer intervalMillsecs) { } //通用事件触发函数 OnEvent(StringRef evtName,MapRef<String,String> evtValue) { } //当前策略退出时触发 OnExit() { } //------------------------------------------------------------------------// 编译版本 2026/8/18 214713// 版权所有 tb310309// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer策略修改和重写的权利//------------------------------------------------------------------------