//------------------------------------------------------------------------
// 简称: 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);