跨周期请教

//------------------------------------------------------------------------// 简称: ma510jiaoxue// 名称: 视频ma510跨周期教学20211111// 类别: 公式应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------说明:仿照视频教的抄写下来的跨周期双均线的例子。当中 设立了一个函数 后来主程序 引用了函数 把data1.ma1和ma2都显示在了 1分钟图层上并且根据金叉 死叉产生了信号 。这个机制 还是比较模糊,能不能再给讲解下 其中的道理 或者逻辑 。 对齐的思想已经明白。 在 1分钟上输出 5分钟 和10分钟的 线 这个能实现 代码加粗了。 。斜文输出部分 是交易 用了 跨周期逻辑 总感觉不是很明白 请教 用了2种data1 和data2 写法 。想问下那种 能用 ?第三个问题 是关于 boollong=CrossOver(data0.ma1,data0.ma2); boolshort=CrossUnder(data0.ma1,data0.ma2); 我改成data1的再设计一个条件 是否能行。Params Numeric length1(5); Numeric length2(10); Numeric lots(1);Vars Numeric ma1; Numeric ma2; array<Numeric> myarray1;//ma5存放数组 array<Numeric> myarray2;//ma10存放数组 Numeric price; bool boollong; bool boolshort; Events //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { SubscribeBar(Data0.Symbol,"5m",data0.BeginDateTime); SubscribeBar(Data0.Symbol,"10m",data0.BeginDateTime); } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { Range[1:2] { ma1=Average(Close,length1);//解决信号闪烁的方式之一 Close[1] ma2=Average(Close,length2); PlotNumeric("ma1",ma1); PlotNumeric("ma2",ma2); } data1.seriestoarray(data1.Close,length1,data0.myarray1);//解决了闪烁问题的写法。 data1.seriestoarray(data1.Close,length2,data0.myarray2);//解决了闪烁问题的写法。 data2.seriestoarray(data2.Close,length1,data0.myarray1);//解决了闪烁问题的写法。 data2.seriestoarray(data2.Close,length2,data0.myarray2);//解决了闪烁问题的写法。 //把5个周期的 close 取到 数组 myarray中 以下/*-----*/ 是显示验证代码。/ /*Numeric i; For i=0 To GetArraySize(myarray)-1 { Commentary("myarray["+text(i)+"]="+Text(myarray[i])); } result=AverageArray(myarray); Commentary("result="+Text(result));*/ If(data1.ma1>data1.ma2) //快在慢上,上涨状态。 { data0.myarray1[0]=low; data0.myarray2[0]=low; } If(data1.ma1<data1.ma2) //快在慢下,下跌状态。 { data0.myarray1[0]=high; data0.myarray2[0]=high; } //漏洞当data1.ma1=data1.ma2 时,向前循环回溯 直到找到两边不相等的状态 ma1= AverageArray(myarray1); ma2= AverageArray(myarray2); PlotNumeric("data1.ma1",data1.ma1); PlotNumeric("data1.ma2",data1.ma2); PlotNumeric("data2.ma1",data2.ma1); PlotNumeric("data2.ma2",data2.ma2); boollong=CrossOver(data0.ma1,data0.ma2); boolshort=CrossUnder(data0.ma1,data0.ma2); price=SummationArray(myarray2)-myarray2[0]-2*(SummationArray(myarray1)-myarray1[0]); /*If(MarketPosition<>1 and boollong) { buy(lots,price);//price=Close会出现偷价的现象。 } If(MarketPosition<>-1 and boolshort) { SellShort(lots,price);//Open价格是另外一个难点 。 }*/ If(MarketPosition<>1 and data1.ma1>data1.ma2 ) { If(boollong) buy(lots,price);//price=Close会出现偷价的现象。 } If(MarketPosition<>-1 and data2.ma1<data2.ma2) { If(boolshort) SellShort(lots,price);//Open价格是另外一个难点 。 }//------------------------------------------------------------------------// 编译版本 2025/11/05 190940// 版权所有 ouerruozhi// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------

下午会在线直播答疑,这种问题其实直播的时候解决最好,三点半。

ma1= AverageArray(myarray1);ma2= AverageArray(myarray2); PlotNumeric("data1.ma1",data1.ma1);PlotNumeric("data1.ma2",data1.ma2);PlotNumeric("data2.ma1",data2.ma1);PlotNumeric("data2.ma2",data2.ma2);boollong=CrossOver(data0.ma1,data0.ma2);boolshort=CrossUnder(data0.ma1,data0.ma2);主要不清晰的 是这个不分

回复:boollong=CrossOver(data0.ma1,data0.ma2); boolshort=CrossUnder(data0.ma1,data0.ma2);//这种没有问题 我听懂了 bool_long=CrossOver(data0.ma1,data1.ma2); bool_short=CrossUnder(data0.ma2,data1.ma1); //这种能否运行 ?? 我不清晰

回复:ma1= AverageArray(myarray1); 等效于 data0.ma1= data0.AverageArray(data0.myarray1); PlotNumeric("data1.ma1",data1.ma1); 等效于 data0.PlotNumeric("data1.ma1",data1.ma1);