ChartWindowFind

函数返回画指标的子窗口数。该函数有两个变体。

1. 函数在指定图表中搜索带有指定的指标“缩写名”子窗口(缩写名在子窗口的左上部显示),成功的话返回子窗口数。

int  ChartWindowFind(
   long     chart_id,                  // 图表标识符
   string   indicator_shortname        // 短指标名, 见 INDICATOR_SHORTNAME

2. 函数必须从自定义指标中调用。返回指标工作的子窗口数。

int  ChartWindowFind();

参量

chart_id

[in] 图表 ID. 0 表示当前图表。

indicator_shortname

[in]  指标缩写名。

返回值

成功的话返回子窗口数。失败,函数返回-1。

注释

如果函数第二变体(无参量)是从脚本或者EA交易调用,则返回-1。

不要将指标的缩略名和文件名称弄混,这是使用iCustom()IndicatorCreate()函数创建指标时指定的名称。如果指标的缩略名未明确设置,那么包含指标源代码的文件名称,编译期间会被指明。

正确地形成指标缩略名非常重要,它使用IndicatorSetString()函数记录在INDICATOR_SHORTNAME属性。建议缩略名包含指标输入参数的值,因为ChartIndicatorDelete()函数中从图表删除的指标通过缩略名识别。

示例:

#property script_show_inputs
//--- 输入参量
input string   shortname="MACD(12,26,9)";
//+------------------------------------------------------------------+
//| 返回带有这个指标的图表窗口号                                         |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber(long chartID=0,string short_name="")
  {
   int window=-1;
//--- 
   if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      //--- 函数从指标调用,名称不需要
      window=ChartWindowFind();
     }
   else
     {
      //--- 函数从EA交易或者脚本调用
      window=ChartWindowFind(0,short_name);
      if(window==-1) Print(__FUNCTION__+"(): Error = ",GetLastError());
     }
//---
   return(window);
  }
//+------------------------------------------------------------------+
//| 脚本程序启动函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int window=GetIndicatorSubWindowNumber(0,shortname);
   if(window!=-1)
      Print("Indicator "+shortname+" is in the window #"+(string)window);
   else
      Print("Indicator "+shortname+" is not found. window = "+(string)window);
  }

另见

ObjectCreate()ObjectFind()