ChartWindowFind

この関数は指標が描画されるサブウィンドウの数を返します。この関数には 2 つのバージョンがあります。

1. 指標の指定された「短縮名」(短縮名はサブウィンドウの左側上部に表示されています)を検索し、成功した場合にはサブウィンドウ番号を返します。

int  ChartWindowFind(
  long    chart_id,                  // チャート識別子
  string  indicator_shortname       // 短縮名 INDICATOR_SHORTNAMEを参照

2. この関数はカスタム指標から呼び出される必要があります。指標が位置するサブウィンドウ番号が返されます。

int  ChartWindowFind();

パラメータ

chart_id

[in]  チャート識別子。( 0 は現在のチャート)

indicator_shortname

[in]  指標の短縮名

戻り値

サブウィンドウ番号(失敗の場合は -1 )

注意事項

関数の2 つ目のバージョン(パラメータなし)がスクリプトまたはエキスパートアドバイザーから呼び出された場合、関数は-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
    {
    //--- 関数がエキスパートアドバイザーやスクリプトから呼び出されている
     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()