投资者咨询:
关于BarStatus函数 (文华财经wh9)来源:文华财经 日期:2018-5-15 20:10
我在mq中使用BarStatus函数的时候发现了一个不能理解的问题,
我想在每根k线下显示当根k的收盘价,
代码如下:
Begin
if( BarStatus == 2 )
{
For i = 0 To CurrentBar
{
PlotString("i",text(ref(Close,currentbar-i)),low,white,currentbar-i);
}
}
For i = 0 To CurrentBar
{
PlotString("i",text(ref(Close,currentbar-i)),low,white,currentbar-i);
但是问题来了,如果不加BarStatus == 2,是不是在计算过程中,历史每根k都要从0到currentbar计算一遍,重复计算 加了BarStatus == 2,意味着只在最新一根k线从0到currentbar计算一遍,但实际上这样并不能显示出来,只能显示出最后一根上有文字 望解答,谢谢!
BarStatus == 2 等价于 WH8的ISLASTBAR ,只有最新k线才是满足的
投资者咨询:
关于BarStatus函数 (文华财经wh9)来源:文华财经 日期:2018-5-15 20:10
PlotString("i",text(ref(Close,currentbar-i)),low,white,currentbar-i); 这句话是在currentbar-i这个k线上写东西,我就是想只在最新k线上才开始计算,并在历史k线上画东西,这应该不矛盾。 但事实上历史k线显示不出来画的东西
明日核实后给您回复
投资者咨询:
关于BarStatus函数 (文华财经wh9)来源:文华财经 日期:2018-5-15 20:10
谢谢

经分析,是您写法复杂了,不太了解我们的函数计算机制PlotString 就是基于最新k线计算的VARS
Numeric i;
Begin
PlotString("i",text(Close),low,white,0);
另外您可以具体说下您的需要,我们具体分析下
投资者咨询:
关于BarStatus函数 (文华财经wh9)来源:文华财经 日期:2018-5-15 20:10
嗯,您的回答我是明白的我的意思是我只想在BarStatus == 2的情况下才进行代码执行,也就是最后一根k上才执行,原因在于如果从头每根k线都算,会影响效率,因为我的执行代码有点复杂。
所以我的前提是if(BarStatus == 2),才执行以下代码
但是在具体执行的时候发现,我想用for循环,把计算好的东西plot显示在历史的k线上,只能显示最后一次一个值。 Begin
if( BarStatus == 2 )
{
For i = 0 To CurrentBar
{
PlotString("i",text(ref(Close,currentbar-i)),low,white,currentbar-i);
如上述代码,大前提是在
if(BarStatus == 2)的情况下计算,但是结果只得到了一根k上有字,而不是每根k线都有其对应的值。 我用变量检查过循环,的确循环了CurrentBar+1次,我也试过把循环改成简单的PlotString("i",text(1),low,white,5),可以输出到往前数第五根k上 实在想不通问题出在哪里,谢谢!
MQ是代码是编译计算的,计算速度很快的,您不用担心,计算量过多的问题vars
Numeric i;
Begin
if( BarStatus == 1 )
{
For i = 0 To CurrentBar
{
PlotString("i",text(ref(Close,currentbar-i)),low,white,currentbar-i);
}
}
还有问题您具体说下完整思路,给您直接编制以下