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()