请解释一下这个功能可能有什么问题? - 页 4

 
Alexey Viktorov:

弗拉基米尔,这个问题在测试器中并没有出现...怎么会有这样的问题呢?还是因为测试器中只有一个专家顾问?

我还在SD中建议,唯一的变化是将第二个EA放在不同的一对上......

测试器中的整个交易环境是事先准备好的。一切都在一个盘子里。不用担心。真实的交易环境是不同的,在非标准行为的情况下(在别人的时间框架和/或别人的符号上工作),我们不得不担心交易环境的相关性。
 
Karputov Vladimir:
在一个终端中(在M15时间框架上有EA),它在一个符号上不起作用--我99%确定问题在于,当使用别人的时间框架时,你需要一直 "撸 "着历史。我认为通过CopyTime()来做会更好。
CopyRates() 则是对历史的颠覆。在结构上有时间...
 
Karputov Vladimir:

这不是一个错误。你在别人的时间框架内工作。在这种情况下,你必须自己照顾别人的时间框架上的数据,以确保它是最新的。

我个人没有看到任何替代方案。

我们不知道SERIES_LASTBAR_DATE 是如何工作的,这并不是一个事实。可能不需要更新任何东西,因为可以用指定符号的TimeCurrent()计算出最后一个棒的时间。我们需要询问开发商。

但到目前为止,一个明确的不争的事实是,如果两个变量被设置为真,那么一起(当检查&&时)这些变量也会给出真。

 

其他工具/TF缓存脱落的问题确实存在。

检查错误并在循环中等待加载并不总是有帮助。我们一直在与服务台沟通,但MQ没有任何进展,只有一个提示。

Support Team 2016.02.29 11:45

怀疑是历史数据被超时卸载。

有2种解决方案。

1.访问数据的频率超过每3分钟一次

2.将一些非常简单的指标放在数据上。量,例如:。没有计算,只有一个缓冲区在忙。无论访问频率如何,指标的可用性将使历史缓存保持在内存中

第2条建议不起作用,指标一直被调用,但在某些时候,缓存失效,就无法获得数据了。

Andrey Khatimlianskii2016.03.18 13:41

我用这个拐杖解决了问题--我每隔150秒为所有涉及的仪器/FTs调用这个代码。

bool CheckTimeSeries( string symbol, ENUM_TIMEFRAMES period )
{
   double array[];
   if ( CopyClose( symbol, period, 1, 1, array ) <= 0 )
   {
                int err = GetLastError();
                Print( " * Can't refresh timeseries (", symbol, ", ", period, ")! ERROR #", err, "!!!" );
                return(false);
   }
   return(true);
}

工作速度足够快,这次更新后,错误4806似乎消失了。

 

请评论一下另一个误解。

Bars

返回历史上对应周期符号的条数。该函数有2种变体。


只有第二个选项是值得关注的。

要求在一个给定的区间内有多少个柱子
int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

专家顾问文本

/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  datetime dtarr[], date = D'2016.06.22';
  ArraySetAsSeries(dtarr, true);
  CopyTime(_Symbol, PERIOD_D1, 0, 5, dtarr);
  Print(dtarr[0]);
  Print(" ", Bars(_Symbol, PERIOD_D1, date, dtarr[0]));
  Print(" ", Bars(_Symbol, PERIOD_D1, date+1, dtarr[0]));
   
}/*******************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
}/*******************************************************************/

我理解,时间00:00:00属于一天,就像时间00:00:01一样。

但是......。建议的印刷品并不同意这一点。

2016.06.24 22:18:56.450 TestTime (EURUSD,M15)    2
2016.06.24 22:18:56.450 TestTime (EURUSD,M15)    3
2016.06.24 22:18:56.450 TestTime (EURUSD,M15)   2016.06.24 00:00:00

事实证明,在2016.06.22 00:00:00和2016.06.24 00:00:00之间有三个日线,在2016.06.22 00:01和2016.06.24 00:00:00之间只有两个...

或者我有什么误解吗?

附加的文件:
TestTime.mq5  2 kb
 

而如果你在当前条形图的时间上增加一秒

  Print(" ", Bars(_Symbol, PERIOD_D1, date, dtarr[0]+1));
  Print(" ", Bars(_Symbol, PERIOD_D1, date+1, dtarr[0]+1));

你会得到以下结果

2016.06.24 22:26:48.602 TestTime (EURUSD,M15)    3
2016.06.24 22:26:48.602 TestTime (EURUSD,M15)    4
2016.06.24 22:26:48.602 TestTime (EURUSD,M15)   2016.06.24 00:00:00

时间2016.06.24 00:00:01似乎是属于下一栏还是什么?

 
上限时间不包括在确定条数 的时间间隔内。
 
Dmitry Fedoseev:
上限时间不包括在确定条数 的区间内。

迪米特里,这不是很奇怪吗?出现了一个新酒吧,但我们还不会计算它。

听着,难道不是SeriesInfoInteger(_Symbol, PERIOD_D1,SERIES_LASTBAR_DATE)的这种行为的原因?新条形图出现了,可勾选的代码被执行,但时间还没有被考虑进去?

 

嗯,鼓手泄气了......而且他完全被忽略了......?

弗拉基米尔,你至少能回答这个问题吗?

Alexey Viktorov:
CopyRates()是否拉动了故事的发展?在结构上有时间......?
 
Alexey Viktorov:

好吧,这个恶棍已经泄气了......而且他被完全忽略了......

弗拉基米尔,你至少能回答这个问题吗?

你最好告诉我们服务台建议你做什么--你继续与他们交谈,不是吗?