跨周期请教

//------------------------------------------------------------------------

// 简称: 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公式修改和重写的权利

//------------------------------------------------------------------------

请教跨周期数据回溯问题
请教TB跨周期问题
请教跨周期订阅中的周期设置问题
跨周期函数
请教跨周期引用方法
跨周期
跨周期
关于跨周期引用大周期数据问题请教
请教!关于多品种,跨周期,多图层
请教老师,如何获取跨周期对应时点的数据(续)

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

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);