初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1245

 
Artyom Trishkin:

不是所有的数组都有相同的方向。

我明白了,但我还设置了ArraySetAsSeries(barsBuffer1 ,true); !

嗯,这就是一半的麻烦。但我不知道如何添加一个新的蜡烛

我是这样试的。

.........
   else
   {
      Print("tick_count = ",++tick_count);
      if(tick_count >= 5)
      {
         Print("Добавляем свечу.");
         
         double   O[1], H[1], L[1], C[1];
         O[0]  = newCandles_Open[3];
         H[0]  = newCandles_High[3];
         L[0]  = newCandles_Low[3];
         C[0]  = newCandles_Close[3];
         
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);
         
         ArrayInsert(barsBuffer1,O,0);
         ArrayInsert(barsBuffer2,H,0);
         ArrayInsert(barsBuffer3,L,0);
         ArrayInsert(barsBuffer4,C,0);
         
         tick_count = 0;
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}

不起作用...(((

 
Сергей Таболин:

我明白了,但我还设置了ArraySetAsSeries(barsBuffer1 ,true); !

嗯,这是一半的麻烦。但如何添加一个新的蜡烛--我想不出来。

我是这样试的。

不起作用...(((

我很抱歉,但分配给指示器缓冲区的数组 不能被调整大小--终端的子系统做这个。

   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);

重新考虑一下你的逻辑。我根本就不知道,只能说明明显的错误之处。

 
Artyom Trishkin:

当然,我很抱歉,但分配给指示器缓冲区的数组 不能被调整大小--这是由终端子系统处理的。

重新考虑一下你的逻辑。我根本就不知道,只能说明公然的错误之处。

我也是这样理解的,但是......。

Artem,如果指标缓冲区 是由子系统控制的,这意味着这个子系统也会增加它的大小?换句话说,在新的蜡烛图出现之前,不能在图表中绘制新的指标蜡烛图?

 
Сергей Таболин:

我也是这样理解的,但是......。

Artem,如果指标缓冲区 是由一个子系统管理的,这意味着它也会增加其大小?换句话说,在图表上出现新的蜡烛图之前,图表上也不能画出新的指标蜡烛图?

什么叫 "画出一个新的烛台"?

你可以画它们,但不能添加条形图--它们还没有出现。

是的,终端会照顾到指标阵列的大小。它还提供了关于他们中有多少人在上一次通话中的数据。

 
Artyom Trishkin:

你说的 "画一支新的蜡烛 "是什么意思?

你可以画出各种各样的东西,但你不能添加酒吧--它们还不存在。

是的,终端本身就能照顾到指标阵列的大小。它还提供了关于他们中有多少人在上一次通话中的数据。

谢谢你,现在我明白为什么会失败了。

那么最后一个问题。我知道我们可以在指标中显示另一个时间框架的蜡烛图。如果指标显示H2的蜡烛和H1的蜡烛,这意味着我们应该 一个蜡烛的有效期内画出两个蜡烛。如果缓冲区只是由系统增加,那是怎么发生的?或者给我一个例子的链接,如果不是太麻烦的话。也许我会想出办法 ))))

 
Сергей Таболин:

谢谢你,现在我明白为什么它对我不起作用了。

那么最后一个问题。我知道你可以在指标中显示另一个时间框架的蜡烛图。如果该指标显示来自H1的蜡烛,这意味着我们应该 一个蜡烛周期内画出2根蜡烛。如果缓冲区只是由系统增加,那是怎么发生的?或者给我一个例子的链接,如果不是太麻烦的话。也许我会想出办法)))。

我在最近关于指标的文章中给出了一些例子,但它们是基于图书馆的。

为了了解如何绘制两个蜡烛图而不是一个,请看一下图表。看一下H2上的蜡烛打开的时间,以及H1上相同时间的蜡烛的位置。一切都会变得清晰。

 
Artyom Trishkin:

我在上一篇关于指标的文章中举了一些例子,但它们都是基于图书馆的。

而要了解如何画两根蜡烛而不是一根,请看图表。看看H2上的蜡烛被打开的时间和H1上相同时间的蜡烛的位置。一切都会变得清晰。

Artem,事情是这样的:我不明白!

例如,H2的蜡烛图是在12:00打开的。下一次将在14:00举行。但在H1,下一次将是在13:00。根据这一逻辑,直到蜡烛在更高的TF上打开,指标阵列将不会增加这意味着我将无法在指标中画出第二根蜡烛?还是什么?

解释给我听,不清楚的takomu.....为什么以及如何在一个图表上画两个(或实际上是n个)蜡烛图?为什么如果我在指标缓冲区的 第0个索引中填入新的数值(简单的赋值),指标就不会改变?

也许我应该向开发人员询问这种可能性?我给这个缓冲区添加了一个新的元素--它的绘制是将之前所有的元素向左移动。毕竟,这是我的指标我想怎么写就怎么写!我不想把它与图表上的新条形图的开口绑定在一起!这能有多难?

 

感谢Artem和Vladimir!你的回答和解释让我有了想法,指标就出来了。再次感谢你们。


 

能否请你告诉我什么是错的?

有一个简单的变量声明。

input double   StopLoss=150.0;

在真实数据上进行调试时,StopLoss变量的设定值为 "150"。但如果我启用历史数据的调试,同一代码中的同一变量就有不同的值。这方面的原因可能是什么?那么如何处理这个问题呢?

 
Sayberix:

能否请你告诉我什么是错的?

有一个简单的变量声明。

在真实数据上进行调试时,StopLoss变量的设定值为 "150"。但如果我启用历史数据的调试,同一代码中的同一变量就有不同的值。这方面的原因可能是什么?那么如何处理这个问题呢?

检查策略测试器的 "参数 "标签中的数值。当你在真实数据上启用调试时,专家顾问从输入变量中获取数值,如果你在历史数据上启用调试,数值则从测试器设置中获取。