某一指标的唯一ID生成器 - 页 3

 
Ovo: 不确定你是不是指 "教"。我在调试时使用了一些,但对于__DATETIME__,我还没有发现任何用途......你的目标是什么?

对不起,忘了你要找的是同一个指标多个窗口。

我试试想别的办法。

===============================================

啊哈,我想到了。创建一个函数,它可以做一个合适的长度计算。

然后返回函数完成的时间间隔作为你的唯一数字。

 

TimeCurrent()是一个唯一的数字。

你为什么不试着用你附在indi上的时间呢?

 
Ovo:
因为我不试用每一个建议。我只挑选那些有意义的建议。
我建议你 那些试图 帮助你的 节制一下你的 傲慢 。这种态度在这个论坛上是不受欢迎的。
 
angevoyageur:
我建议你 那些试图 帮助你的 节制一下你的 傲慢 。这种态度在这个论坛上是不受欢迎的。

我将努力远离。
 

你怎么能说我的想法是没有意义的呢?

时间电流 是唯一的数字...

试试这个代码......把它附在一个图表上......但输入周期不同

#property strict
#property indicator_separate_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
extern int periode=4;
int OnInit()
  {
//--- indicator buffers mapping
string shortname=StringConcatenate(WindowExpertName(),"_",periode);
IndicatorShortName(shortname);
int wind=WindowFind(shortname);
string name=StringConcatenate("TIME_TAG",wind);
  if (ObjectFind(name)!=wind)
  {  ObjectCreate(name, OBJ_LABEL, wind, 0, 0);
      ObjectSet(name, OBJPROP_CORNER,2);
      ObjectSet(name, OBJPROP_XDISTANCE,2 );
      ObjectSet(name, OBJPROP_YDISTANCE,5); 
      ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0) ,9,"Arial",Yellow);   
  }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
WDholic:

TimeCurrent是唯一的数字。

TimeCurrent()在各种可能的情况下不是唯一的数字,包括以下情况。

* 你正在重新启动一个带有多个现有图表和多个指标的MT4副本。它们将在同一时间被初始化,并看到相同的TimeCurrent()

*你是在流动性不足的时期添加指标的副本。根据你的经纪人的价格反馈的类型,可能会有5-10秒没有新的刻度线的时期,而TimeCurrent()不会改变。如果你在这样的时期添加新的指标,那么它们将获得相同的TimeCurrent()值。

 
string name=StringConcatenate("TIME_TAG",wind);
  if (ObjectFind(name)!=wind)
  {  ObjectCreate(name, OBJ_LABEL, wind, 0, 0);
      ObjectSet(name, OBJPROP_CORNER,2);
      ObjectSet(name, OBJPROP_XDISTANCE,2 );
      ObjectSet(name, OBJPROP_YDISTANCE,5); 
      ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0) ,9,"Arial",Yellow);   
  }

只有在我们找不到TIME TAG标签的情况下才添加时间标签。

所以在删除时不要删除TIME TAG 标签......这样数值就不会改变。

好吧,如果我们担心5秒或10秒内没有刻度,那么我们可以用TimeLocal 代替Time Current。

 
WDholic:

只有在我们找不到TIME TAG标签的情况下才添加时间标签。

所以在删除时不要删除TIME TAG 标签......这样数值就不会改变。

好吧,如果我们担心5秒或10秒内没有刻度,那么我们可以用TimeLocal来代替Time Current。

...还有上面讨论的关于图表对象 的问题 如果你将指标添加到一个图表中,然后创建一个模板,所有从模板中创建的新图表将有相同的TIME_TAG值。而且,使用该对象只允许每个图表有一个指标实例;除非你把所有 可能的参数放到IndicatorShortName中,否则多个指标将得到相同的ID。

 
gchrmt4:

...还有上面讨论的关于图表对象的问题:如果你将指标添加到图表中,然后创建一个模板,所有从模板中创建的新图表将具有相同的TIME_TAG值。而且,使用该对象只允许每个图表有一个指标实例;除非你把所有 可能的参数放到IndicatorShortName中,否则多个指标将得到相同的ID。


请试一下...

如果你把5个指标放在1个模板的不同设置中...。

例如...时间值是11111000

窗口1将显示 111110001
在窗口2将显示 111110002
窗口3将显示 111110003
在窗口4将显示 111110004

在窗口5将显示 111110005

因为我包括了窗口号码

ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0),9,"Arial",Yellow)。


除非你 IndicatorShortName中输入所有 可能的参数,否则 多个指标将获得相同的ID

是的......这将是很好的考虑。

但我认为对于像OVO和你这样的编码高手来说,这很容易。

 
WDholic:

如果你在不同的设置中用一个模板放5个di...

我不知道你使用的是哪个版本的MT4,但在我的电脑上的v616版本,WindowFind()在OnInit()期间返回-1。文档 中一直说 "WindowFind()返回-1,如果自定义指标在init()函数工作时搜索自己。"