需求:本指标订阅了多个图层,现需要获取data1层(60分钟)的数据,获取距今最近一次白色MA1与紫色MA3金叉时,获取对应Bar的收盘价A。同时以A点的价格画出一条水平价格线。并用该价格A与最新的收盘价B计算比值()。
问题:我的代码如下,要求输出的这个A值本来应该是我下图箭头所指的K线的收盘价,但目前这个A值输出为0,没有达到我想要的结果。不知道是哪里写错了,求助。
Params
//此处添加参数
//Numeric millsecs(1000);
Vars
//此处添加变量
//Numeric avg;
//Global Integer timerId;
Series<Numeric> MA1;
Series<Numeric> MA2;
Series<Numeric> MA3;
Series<Numeric> bizhi;
Series<Numeric> A;
Events
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
//与数据源有关
Range[0:DataCount-1]
{
SubscribeBar( Symbol, "1h", BeginDateTime );
}
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
//avg=calcAvg(high,low);
MA1 = Data[1].MA(Data[1].Close,5);
MA3 = Data[1].MA(Data[1].Close,20);
If( Data[1].CrossOver( MA1 , MA3 ) )
{
A = Data[1].Close;
bizhi= Close / Data[1].Close ;
}
PlotNumeric("A",A);//这个A值本来应该是我下图箭头所指的K线的收盘价,但目前这个A值输出为0,没有达到我想要的结果
PlotNumeric("MA1",MA1);
PlotNumeric("MA3",MA3);
}
你这段代码其实等效于
data0.MA1 = Data[1].MA(Data[1].Close,5);
data0.MA3 = Data[1].MA(Data[1].Close,20);
If( Data[1].CrossOver( data1.MA1 , data1.MA3 ) )
自己看看问题在哪里?
感谢帮助,明白了🤝
没弄清图层
你对data0 的MA1和MA3 赋值了
但没有对data1 的MA1和MA3 赋值
但你的条件Data[1].CrossOver( MA1 , MA3 ) 计算的又是data1的金死叉
这个图很清晰,明白了,感谢指导🤝
你说得比较清楚了
王老师 你很久没夸我了
😁