来自一个 "傻瓜 "的问题 - 页 63

 
masharov:

专家顾问在一个不同的时间框架上使用该指标。在专家顾问的测试中,出现了指标的错误数据。

EA本身在M5上工作,而指标在H4上。在同一时间框架(M5)上调用的指标会返回正确的值。

返回的值与指标值相似,但与指标应用于价格图表窗口时可见的真实值不同。

问题是什么?

指标调用 的代码示例。

可能的原因。

- 前14条的规则没有得到遵守:https://www.mql5.com/ru/articles/15 在指标中。

- 当前和预设TF之间的相关性没有得到遵守(例如,在另一个TF上具有极值要求的柱子的序列号可能与预设的不同,因此,高点、低点等将完全不同)--所有这一切都取决于指标的具体实现;你应该清楚地了解究竟什么需要被关联并通过使用不同时期的比率的公式重新计算。

- 也许,前一个tick的旧指标值会留在缓冲区内,可能需要用空值重新初始化缓冲区。ArrayInitialize(array,EMPTY_VALUE)

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
x100intraday:

可能的原因。

- 没有遵守前14条的规则:https://www.mql5.com/ru/articles/15 在指标中。

- 当前和预设的TF之间的相关性没有被观察到(例如,在另一个TF中具有极值要求的条形的序列号必须与预设的不同,因此高点、低点等也将不同)--所有这些都取决于指标的具体实施。

- 也许,前一个tick的旧值会留在指标中,可能有必要用空值重新初始化缓冲器。ArrayInitialize(array,EMPTY_VALUE)

1.指标绘制在价格图表的所有条形上。

2.这里一切都很好。

3.没有帮助

 

参考文献,日期/时间是允许这样表示的。

D'12:00:00'

我给一个日期 类型的变量分配了一个值。

 datetime start = D'12:00:00'

汇编上弹出了一个警告。

为什么?

 
Urain:
因为没有指定日期,只指定了12:00:00的时间。日期是用句号拼写的,而不是冒号。

该参考资料说,。

日期(年、月、日)或时间(小时、分钟、秒)或全部都可以省略。数值范围 为1970年1月1日至3000年12月31日。

例子。

D'2004.01.01 00:00' // 新年
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //新年 D'1980.07.19 12:00:00'
D'01.01.2004' //等同于D'01.01.2004 00:00:00'
D'12:30:27' //等同于D'[编译日期] 12:30:27'
D'' //相当于D'[编译日期]00:00:00''

...

还是我对这个问题有误解?

 
masharov:

EA本身在M5上运行,指标在H4上运行。在同一时间框架(M5)上调用的指标返回正确的值。

我继续坚持第二点。

你自己写道,在同一个TF上,正确的值被返回。当然,在不同的上,对于当前的TF来说,不被期望的值将被返回。

masharov

返回的值与指标值类似,但它们与指标附加到价格图表窗口时可见的真实值不同。

类似的数值可能不是来自天花板,而是来自不等于M5的某个TF。如果当前的TF是H4,那么这些数值可能来自它,而来自M5的数值则是预期。如果我们把代码从M5重新锐化到H4,很可能在寻找H4上的值时,有可能准确捕捉到H4的正确值(对于其他TF,它们看起来是不正确的)。

如果该指标能够根据一个或另一个TF返回正确的值,但不能,例如,在M5上,显示它在H4上所做的,那么,当与不在同一TF上的专家顾问一起工作时,我们能从返回的值中期待什么?

 
tol64:

该参考资料说,。

日期(年、月、日)或时间(小时、分钟、秒)或全部都可以省略。数值范围 为1970年1月1日至3000年12月31日。

例子。

D'2004.01.01 00:00' // 除夕夜
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //新年 D'1980.07.19 12:00:00'
D'01.01.2004' //等同于D'01.01.2004 00:00:00'
D'12:30:27' //等同于D'[编译日期] 12:30:27'
D'' //相当于D'[编译日期]00:00:00''

...

还是我对这个问题有误解?

是的是的,你说对了,我匆忙中没有注意。

显然,它最初是这样的,后来被取消了,证书也没有得到纠正。

无论如何,问题仍然存在,这是一个帮助不准确的问题还是一个错误?

 

Urain:

...

无论如何,问题仍然存在,这是一个帮助不准确的问题还是一个错误?

一个脚本的例子。

void Set_Start_And_End_TradeSession()
{
 datetime start = D'00:45:00';
 datetime array[];
 int s = 0, e = 0, i = 0;
 long chart_ID = ChartID();
 long count_bars = Bars(Symbol(),0);
 
 CopyTime(Symbol(),0,0,(int)count_bars,array);
 
 ArraySetAsSeries(array,true);
 
 for(s = 0; s < count_bars; s++)
   {
    ObjectCreate(chart_ID,"start_date",OBJ_VLINE,0,array[s],0); ChartRedraw();
    Sleep(50);
    if(array[s]==start) { Comment("Ok!!!"); break; }
    if(i==1441) { Comment("Error!!!"); break; }
    i++;
   }
}
这就是它的作用。我只是不喜欢编译后的警告))。也许其中一个开发者可以发表意见。
 
Urain:

无论怎样,问题仍然存在,这是帮助中的不准确之处,还是一个错误?

编译器警告 还不意味着有错误。打印出来:一切都根据帮助反映。
 
masharov:

专家顾问在一个不同的时间框架上使用该指标。在专家顾问的测试中,出现了指标的错误数据。

EA本身在M5上工作,而指标在H4上。在同一时间框架(M5)上调用的指标会返回正确的值。

返回的值与指标值相似,但与指标应用于价格图表窗口时可见的真实值不同。

问题是什么?

指标调用 的代码示例。

在多维数组和静态数组中不能设置AS_SERIES标志。

尝试

void OnNewBar() // моя функция
{
 double wave[];
 ArraySetAsSeries(wave, true);
 CopyBuffer(W_handle,0,(int)0,2,wave);
 if (wave[1] > 0) Buy(); 
}

或如下

void OnNewBar() // моя функция
{
 double wave[1];
 if(CopyBuffer(W_handle,0,(int)1,1,wave)<1) return;
 if (wave[0] > 0) Buy(); 
}
 
  string Symb="EURUSD";
  for(i=0;i<OrdersTotal()+PositionsTotal();i++)
     {
      if(Symb==PositionGetSymbol(i)) Orders_Total++;
     }
     Alert(Orders_Total);
请告诉我为什么警报显示Orders_Total=1,而实际上只有一个位置和一个订单,即理论上它应该显示2,而不是1。