IndicatorSetInteger

この関数は、対応する指標プロパティの値を設定します。指標プロパティは int または 型でなければなりません。この関数には 2 つのバージョンがあります。

プロパティ識別子との呼び出し

bool  IndicatorSetInteger(
  int  prop_id,          // 識別子
  int  prop_value        // 設定する値
  );

プロパティ識別子と修飾子との呼び出し

bool  IndicatorSetInteger(
  int  prop_id,          // 識別子
  int  prop_modifier,    // 修飾子
  int  prop_value        // 設定する値
  )

パラメータ

prop_id

[in]  指標プロパティの識別子。値は ENUM_CUSTOMIND_PROPERTY_INTEGER 列挙のいずれかです。

prop_modifier

[in]  指定されたプロパティの修飾子。修飾子はレベルプロパティのみで必要です。

prop_value

[in]  プロパティ値

戻り値

実行成功の場合は true、それ以外の場合は false

注意事項

#property ディレクティブの使用時にはプロパティ( 修飾子)の番号付けは1から始まる一方、関数では番号付けが0から始まります。レベル番号が正しく設定されていない場合、指標の表示目的のものと異なる場合があります。

例えば、最初の水平ラインの厚さを設定するにはゼロインデックスを使用します。

  • IndicatorSetInteger(INDICATOR_LEVELWIDTH, 0, 5) - 最初のレベルの厚さを設定するにはインデックス 0 を使用する

例: 指標水平線の色、スタイルと太さを設定する指標

IndicatorSetInteger() 関数の使用例

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- 3 つの水平レベルを別々の指標ウィンドウに表示
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
//--- 水平レベルの厚さを設定
#property indicator_levelwidth 5
//--- 水平レベルの色を設定
#property indicator_levelcolor clrAliceBlue
//--- 水平レベルのスタイルを設定
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| カスタム指標を初期化する関数                                            |
//+------------------------------------------------------------------+
int OnInit()
 {
//--- 水平レベルの記述を設定
  IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
  IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
  IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)");
//--- 指標の短縮名を設定
  IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetInteger() Demo");
  return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| カスタム指標の反復関数                                                |
//+------------------------------------------------------------------+
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[])
 {
  static int tick_counter=0;
//--- ティックを計算
  tick_counter++;
//--- また、ティックカウンタに応じて、水平レベルの色を計算
  ChangeLevelColor(0,tick_counter,3,6,10); // 最後の3つのパラメータは色を切り替える
  ChangeLevelColor(1,tick_counter,3,6,8);
  ChangeLevelColor(2,tick_counter,4,7,9);
//--- 水平レベルのスタイルを変更
  ChangeLevelStyle(0,tick_counter);
  ChangeLevelStyle(1,tick_counter+5);
  ChangeLevelStyle(2,tick_counter+15);
//--- 幅として5によるティック数の整数除算の余りを取得
  int width=tick_counter%5;
//--- 全ての水平レベルと反復処理して厚さを設定する
  for(int l=0;l<3;l++)
    IndicatorSetInteger(INDICATOR_LEVELWIDTH,l,width+1);
//--- 次の呼び出しのために prev_calculated の値を返す
  return(rates_total);
 }
//+------------------------------------------------------------------+
//| 別の指標ウィンドウにおける水平線の色を設定する                                |
//+------------------------------------------------------------------+
void ChangeLevelColor(int level,     // 水平線の数
                    int tick_number,// 除算の剰余を取得する数
                    int f_trigger, // 色切り替えの最初の除数
                    int s_trigger, // 色切り替えの2 番目の除数
                    int t_trigger) // 色切り替えの3 番目の除数
 {
  static color colors[3]={clrRed,clrBlue,clrGreen};
//--- colors[] 配列の色のインデックス
  int index=-1;
//--- 水平線を描画するのに colors[] 配列の色の数を計算
  if(tick_number%f_trigger==0)
     index=0;   // tick_number が f_trigger で割り切れる場合
  if(tick_number%s_trigger==0)
     index=1;   // tick_number が s_trigger で割り切れる場合
  if(tick_number%t_trigger==0)
     index=2;   // tick_number が t_trigger で割り切れる場合
//--- 色が定義されたら設定する      
  if(index!=-1)
    IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,colors[index]);
//---
 }
//+------------------------------------------------------------------+
//| 別の指標ウィンドウにおける水平線のスタイルを設定する                            |
//+------------------------------------------------------------------+
void ChangeLevelStyle(int level,     // 水平線の数
                    int tick_number// 除算の剰余を取得する数
                     )
 {
//--- スタイルを格納する配列
  static ENUM_LINE_STYLE styles[5]=
    {STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//--- styles[] 配列のスタイルのインデックス
  int index=-1;
//--- styles[] 配列の数を計算して水平線のスタイルを設定
  if(tick_number%50==0)
     index=5;   // tick_number が 50 で割り切れる場合スタイルは STYLE_DASHDOTDOT
  if(tick_number%40==0)
     index=4;   // ... スタイルは STYLE_DASHDOT
  if(tick_number%30==0)
     index=3;   // ... STYLE_DOT
  if(tick_number%20==0)
     index=2;   // ... STYLE_DASH
  if(tick_number%10==0)
     index=1;   // ... STYLE_SOLID
//--- 定義されたスタイルを設定する      
  if(index!=-1)
    IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,styles[index]);
 }

参照

カスタム指標プロパティプログラムのプロパティ(#property) 描画スタイル