指標スタイルの例
MetaTrader 5 クライアント端末は適切な関数を使用して MQL5 プログラムで使用出来る 38 のテクニカル指標を含みます。しかし、MQL5 言語の主な利点は、エキスパートアドバイザーで使用するか、単に技術的な分析のために価格チャートに適用出来るカスタム指標を作成することです。
指標のセット全体はプロットとして知られるいくつかの基本的な描画スタイルから派生出来ます。プロットとは、指標が計算、保存、またリクエストに応じて提供するデータの表示の方法です。基礎的なプロットには 7 種類あります。
- 線
- セクション(セグメント)
- ヒストグラム
- 矢印(シンボル)
- 塗りつぶされた領域(チャンネル)
- バー
- 日本製のローソク足
プロットは指標値を格納する1〜 5 のdouble 型の 配列を必要とします。便宜のために、これらの配列は、指標バッファに関連しています。指標内のバッファの数は、コンパイラディレクティブを使用して事前に宣言される必要があります。例として
#property indicator_buffers 3 // バッファの数 |
指標内のバッファ数は、常に指標におけるプロットの数以上です。
それぞれの基本プロットタイプはカラーバリエーションや建設仕様を持つことが出来るので、MQL5 での実際のプロットの種類の数は18です。
Plotting |
説明 |
値バッファ |
色バッファ |
DRAW_NONE |
チャートには非表示ですが、対応するバッファの値は、データウィンドウに表示することが出来ます。 |
1 |
– |
DRAW_LINE |
線は対応するバッファの値をプロットしています(バッファ内の空の値は望ましくありません)。 |
1 |
– |
DRAW_SECTION |
対応するバッファの値の間の線分として描画されます(通常は空の値をたくさん持っています)。 |
1 |
– |
DRAW_HISTOGRAM |
対応するバッファの値にゼロラインからヒストグラムとして描画されます(空の値を有していてもよいです)。 |
1 |
– |
DRAW_HISTOGRAM2 |
2 つの指標バッファに基づいてヒストグラムとして描画されています(空の値を有していてもよいです)。 |
2 |
– |
DRAW_ARROW |
シンボルとして描画されています(空の値を有していてもよいです)。 |
1 |
– |
DRAW_ZIGZAG |
DRAW_SECTION スタイルと似ていますが、 1 つのバーに垂直なセグメントをプロット出来ます。 |
2 |
– |
DRAW_FILLING |
日本製の線の間を塗りつぶします。対応する 2 つのバッファの値は、データウィンドウに表示されます。 |
2 |
– |
DRAW_BARS |
バーとして描画されます。対応する4つのバッファの値は、データウィンドウに表示されます。 |
4 |
– |
DRAW_CANDLES |
日本製のローソク足として描画されます。対応する4つのバッファの値は、データウィンドウに表示されます。 |
4 |
– |
DRAW_COLOR_LINE |
それぞれのバーに違う色を利用したり、任意の時点で色を変更出来ます。 |
1 |
1 |
DRAW_COLOR_SECTION |
DRAW_SECTION スタイルと似ていますが、セクションの色はそれぞれ設定でき、動的に設定することも出来ます。 |
1 |
1 |
DRAW_COLOR_HISTOGRAM |
DRAW_HISTOGRAM スタイルと似ていますが、ストリップの色はそれぞれ設定でき、動的に設定することも出来ます。 |
1 |
1 |
DRAW_COLOR_HISTOGRAM2 |
DRAW_HISTOGRAM2 スタイルと似ていますが、ストリップの色はそれぞれ設定でき、動的に設定することも出来ます。 |
2 |
1 |
DRAW_COLOR_ARROW |
DRAW_ARROW スタイルと似ていますが、各シンボルの色をそれぞれ設定出来ます色は動的に設定することが出来ます。 |
1 |
1 |
DRAW_COLOR_ZIGZAG |
セクションの個別な色の選択と動的な色の設定が可能なDRAW_ZIGZAG スタイル。 |
2 |
1 |
DRAW_COLOR_BARS |
バーの個別な色の選択と動的な色の設定が可能な DRAW_BARS スタイル。 |
4 |
1 |
DRAW_COLOR_CANDLES |
ローソク足の個別な色の選択と動的な色の設定が可能な DRAW_CANDLES スタイル。 |
4 |
1 |
指標バッファと配列の違い
指標のグローバルレベルでは double 型の配列を宣言し、SetIndexBuffer() 関数を使用して指標バッファとして使用するべきです。指標プロットを描画するには、指標バッファの値のみが使用可能で一般の配列は使用出来ません。加えて、バッファ値はデータウィンドウに表示されます。
指標バッファは動的でサイズの指定を必要としません。指標バッファとして使用される配列のサイズは、自動的に端末の実行サブシステムによって設定されます。
配列が指標バッファと関係づけられた後、索引付けの方向がデフォルトでは通常の配列の様に設定されますが ArraySetAsSeries() 関数を使用して配列要素のアクセス方法を変更することが出来ます。デフォルトでは、指標バッファはプロットに使用されるデータ(INDICATOR_DATA)を格納します。
指標値の計算に中間計算の保持が必要、また各足に追加の値を格納する必要がある場合は、指標バッファは結合時に計算用バッファとして宣言することが出来ます(INDICATOR_CALCULATIONS)。中間値には普通の配列も使用することが出来ますが、この場合には、プログラマは、配列のサイズを管理しなければなりません。
プロットによっては、各足の色を個別に設定することが可能です。色に関する情報を格納するには、カラーバッファが使用されます(INDICATOR_COLOR_INDEX)。色は整数型の color ですが、指標バッファは double 型でなければなりません。色及び補助(INDICATOR_CALCULATIONS)バッファの値は CopyBuffer() で得ることが出来ません。
指標バッファの数はコンパイラディレクティブ #property indicator_buffers バッファ数 で指定されなければなりません。
#property indicator_buffers 3 // 指標には 3 つのバッファがある |
1 つの指標のバッファの最大許容数は 512 です。
指標バッファとプロットの関連性
各プロットは、1つ以上の指標バッファに基づいています。単純なローソク足を表示するためには、始値、高値、安値、終値の 4 つの値が必要とされています。従って、指標をローソク足として表示するには、4 つの指標バッファとそのための 4 つの double 型の配列を宣言することが必要です。例えば、
//— 指標は4つの指標のバッファを持つ |
グラフィックプロットは自動的にプロット数に応じて指標バッファを使用します。プロット番号は1から始まり、バッファ番号はゼロから始まります。最初のプロットが 4 つの指標バッファを必要とする場合、最初の 4 つの指標バッファはそれを描画するために使用されます。これらの 4 つのバッファは、SetIndexBuffer() 関数を使用して、正しいインデックス作成と適切な配列と関連付けられる必要があります。
//— 配列と指標バッファを関連付ける |
「ローソク足」のプロットは、最初の番号の下で発表されたため、指標は、単に最初の 4 つのバッファを使用します。
例を変えて、簡単な線のプロットを加えましょう(DRAW_LINE)。仮に、線が 1 と番号付けされて、ローソク足が 2 だとします。バッファ数とプロット数が増加しました。
//— 指標は 5 つの指標のバッファを持つ |
プロットの順序が変更され、線が初めで日本製のローソク足が続きます。そのため、バッファの順序は適切です。線のためバッファをゼロインデックスで宣言し、ローソク足のための 4 つのバッファを宣言します。
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA); // インデックス0にあたる1 番目のバッファ |
バッファ数とプロット数はコンパイラディレクティブを使用してのみ設定することができ、これらのプロパティを関数で動的に変更することは不可能です。
スタイルのカラーバージョン
表から分かるように、スタイルは、2 つのグループに分割されます。最初のグループでは、名称に COLOR が付きません。これらは基本スタイルと呼ばれます。
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
2 つ目のグループでは、名称に COLOR が付きます。これらを、カラーバージョンと呼びます。
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
スタイルのカラーバージョンは、プロットの各部分の色の指定を可能にし、基本スタイルとは異なります。プロットの最小部分はバーなので、カラーバージョンは、各足の色の設定を可能にすると言うことが出来ます。
例外はカラーバージョンを持たない DRAW_NONE 及び DRAW_FILLING スタイルです。
各足のプロットの色を設定するために、カラーバージョンに、カラーインデックスを格納するためのバッファが追加されました。これらのインデックスは、前もって定義された色のセットが含まれている特殊な配列内の色番号を示します。色の配列のサイズは64です。これはスタイルの各カラーバージョンが64の異なる色のプロットを描画出来ることを意味します。
セットや色の特殊な配列内の色のセットと数は、コンパイラディレクティブ #property indicator_color でコンマで区切って、必要な全てのものを指定することが出来ます。指標のエントリの例として
//— ローソク足を塗るために(特殊な配列に格納されている)8 色を定義する |
これは、1をプロットするために、8 色が設定され、これらが特殊な配列に配置されることを述べています。ここからはプログラムの中で、プロットの色の代わりにインデックスを指定します。バー番号 K に赤を指定されたい場合、配列での赤のインデックス値が指標のカラーバッファに設定される必要があります。赤は最初のディレクティブで指定されており、インデックス番号 0 に対応しています。
//— ローソク足の色を clrRed に設定 |
色のセットは不変ではなく、PlotIndexSetInteger() を使用して動的に変更することが出来ます。例:
//— 各インデックスの色をPLOT_LINE_COLOR として設定する |
指標プロパティとプロット
指標のプロットでは、プロパティはコンパイラディレクティブまたは適切な関数を使用して設定出来ます。詳しくは指標プロパティと関数との関係をご参照ください。特別な関数を使用しての指標プロパティの動的な変更は、より柔軟なカスタム指標作成を可能にします。
チャート上での指標描画の開始
多くの例では、アルゴリズムの条件に応じて、最小限の履歴バーを提供する必要があるため、現在足のみを使用してすぐに指標値の計算を開始することは不可能です。例えば、平滑化の多くの種類は、以前の N バーの価格配列の使用を暗示し、これらの値に基づいて、現在足の指標値を算出します。
このような場合には、最初の N バーの指標値を計算する方法がないか、これらの値は計算のみに使用されるものでチャート上での表示は意図外です。履歴中の最初の N 個のバーでの指標のプロットを回避するためには、プロットのN を PLOT_DRAW_BEGIN プロパティに設定します。
//— ローソク足のために配列と指標バッファを関連付ける |
ここで
- number_of_plot – ゼロから indicator_plots-1 までの値(プロット番号はゼロから始まる)
- N – 指標がチャート上に表示されるべきではない履歴中の最初のバーの数
指標プロパティと対応した関数との関係
カスタム指標にはたくさんのプロパティがあります。そのうちのいくつかは必須で、常に記述の先頭に配置されます。下記が必須プロパティです。
- 指標プロットに使用されるウィンドウの表示 – indicator_separate_window または indicator_chart_window
- 指標バッファの数 – indicator_buffers
- 指標のプロット数 – indicator_plots
プリプロセッサ ディレクティブとカスタム指標作成に意図された関数を通じて設定出来るプロパティもあります。これらのプロパティと対応する機能を以下の表に記載されています。
指標サブウィンドウのプロパティに関する指令 |
IndicatorSet…() 型の関数 |
調整されたサブウィンドウプロパティの説明 |
indicator_height |
IndicatorSetInteger(INDICATOR_INDICATOR_HEIGHT, nHeight) |
サブウィンドウの高さの固定値 |
indicator_minimum |
IndicatorSetDouble(INDICATOR_MINIMUM, dMaxValue) |
縦軸の最小値 |
indicator_maximum |
IndicatorSetDouble(INDICATOR_MAXIMUM, dMinValue) |
縦軸の最大値 |
indicator_levelN |
IndicatorSetDouble(INDICATOR_LEVELVALUE, N-1, nLevelValue) |
N レベルの縦軸の値 |
プリプロセッサディレクティブなし |
IndicatorSetString(INDICATOR_LEVELTEXT, N-1, sLevelName) |
表示されたレベルの名称 |
indicator_levelcolor |
IndicatorSetInteger(INDICATOR_LEVELCOLOR, N-1, nLevelColor) |
N レベルの色 |
indicator_levelwidth |
IndicatorSetInteger(INDICATOR_LEVELWIDTH, N-1, nLevelWidth) |
N レベルの線の幅 |
indicator_levelstyle |
IndicatorSetInteger(INDICATOR_LEVELSTYLE, N-1, nLevelStyle) |
N レベルの線のスタイル |
プロットプロパティに関する指令 |
PlotIndexSet…() 型の関数 |
調整されたプロットプロパティの説明 |
indicator_labelN |
PlotIndexSetString(N-1,PLOT_LABEL,sLabel) |
N 番目のプロットの短縮名(データウィンドウ、及び、マウスカーソルのホーバー時にポップアップツールヒントで表示) |
indicator_colorN |
PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor) |
N 番目のプロットの線の色 |
indicator_styleN |
PlotIndexSetInteger(N-1, PLOT_LINE_STYLE, nType) |
N 番目のプロットの線のスタイル |
indicator_typeN |
PlotIndexSetInteger(N-1, PLOT_DRAW_TYPE, nType) |
N 番目のプロットの線の種類 |
indicator_widthN |
PlotIndexSetInteger(N-1, PLOT_LINE_WIDTH, nWidth) |
N 番目のプロットの線の幅 |
指標の共通プロパティ |
IndicatorSet…() 型の関数 |
説明 |
プリプロセッサディレクティブなし |
IndicatorSetString(INDICATOR_SHORTNAME, sShortName) |
端末でCtrl+Iを押すことによって表示される指標リストでの指標の短縮名を設定します。 |
プリプロセッサディレクティブなし |
IndicatorSetInteger(INDICATOR_DIGITS, nDigits) |
小数の桁数として、指標値の表示に必要な精度を設定します。 |
プリプロセッサディレクティブなし |
IndicatorSetInteger(INDICATOR_LEVELS, nLevels) |
指標ウィンドウのレベルの数を設定します。 |
indicator_applied_price |
このプロパティはプリプロセッサディレクティブのみで設定可能で関数はありません。 |
指標計算に使用されるデフォルトの価格型。OnCalculate() の1 番目の種類が使用された時のみ、必要に応じて指定されます。 プロパティ値は指標プロパティダイアログの「パラメータ」タブの「適用価格」で設定します。 |
プリプロセッサではレベルやプロットの番号付けが1から始まる一方、関数で同じプロパティを使用する場合番号付けが0から始まることには留意されるべきです。
対応する関数のないディレクティブはいくつかあります。
ディレクティブ |
説明 |
indicator_chart_window |
メインウィンドウでの指標の表示 |
indicator_separate_window |
別のサブウィンドウでの指標の表示 |
indicator_buffers |
必要な指標バッファの数 |
indicator_plots |
指標でのプロットの数 |
SetIndexBuffer
この関数は、指定された指標バッファとdouble 型の1次元動的配列を関連付けます。
bool SetIndexBuffer( |
パラメータ
index
[in] 指標バッファの数番号付けは0から始まります。数は #property indicator_buffers で宣言された数より少なければなりません。
buffer[]
[in] カスタム指標プログラムで宣言された配列
data_type
[in] 指標配列に格納されたデータの型。デフォルトでは INDICATOR_DATA(カスタム指標値)。値は INDICATOR_COLOR_INDEX でも可能で、その場合、このバッファは前の指標バッファのカラーインデックスを格納します。#property indicator_colorN 行では 64 までの色の指定が可能です。 INDICATOR_CALCULATIONS 値はバッファが指標の中間計算に使用されて、描画の意図外であることを示します。
戻り値
成功の場合 true、それ以外の場合は false
注意事項
結合後、buffer[] 動的配列は、結合された配列が時系列式のインデックスを持っていても、通常の配列のように索引付けされます。指標配列の要素アクセスの順序を変えたい場合は、SetIndexBuffer() 関数で配列が結合された後でArraySetAsSeries() 関数を使用します。 指標バッファをして使用されている動的配列のサイズは SetIndexBuffer() 関数では変更出来ないのでご注意下さい。指標バッファサイズ変更の操作は、全て端末の実行サブシステムによって実行されます。
例:
//+——————————————————————+ #property indicator_separate_window //— 指標バッファの要素アクセスの順番を変更する IndicatorSetString(INDICATOR_SHORTNAME,“MA(“+period+“)”+AsSeries); Print(“MABuffer[0] = “,MABuffer[0]);// AsSeries の値による //— 次の呼び出しのために prev_calculated の値を返す |
参照
カスタム指標プロパティ、時系列と指標へのアクセス
IndicatorSetDouble
この関数は、対応する指標プロパティの値を設定します。指標プロパティは double 型でなければなりません。この関数には 2 つのバージョンがあります。
プロパティ識別子との呼び出し
bool IndicatorSetDouble( |
プロパティ識別子と修飾子との呼び出し
bool IndicatorSetDouble( |
パラメータ
prop_id
[in] 指標プロパティの識別子。値は ENUM_CUSTOMIND_PROPERTY_DOUBLE 列挙のいずれかです。
prop_modifier
[in] 指定されたプロパティの修飾子。修飾子はレベルプロパティのみで必要です。レベルの番号付けは0から始まります。なので、レベル2のプロパティを設定するには1を指定する必要があります(コンパイラディレクティブ使用時より 1 つ下)。
prop_value
[in] プロパティ値
戻り値
実行成功の場合は true、それ以外の場合は false
注意事項
#property ディレクティブの使用時にはプロパティ( 修飾子)の番号付けは1から始まる一方、関数では番号付けが0から始まります。レベル番号が正しく設定されていない場合、指標の表示目的のものと異なる場合があります。
例えば、別々のサブウィンドウでの指標の最初のレベル値は、次の 2 つの方法で設定出来ます。
- property indicator_level1 50 – レベル番号は1で指定
- IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, 50) – レベル1を指定するのに 0 を使用
例: 指標ウィンドウの最大値と最小値及び水平線が配置されているレベル値を逆転する指標
#property indicator_separate_window |
参照
指標スタイルの例、指標プロパティと関数との関係、描画スタイル
IndicatorSetInteger
この関数は、対応する指標プロパティの値を設定します。指標プロパティは int または 型でなければなりません。この関数には 2 つのバージョンがあります。
プロパティ識別子との呼び出し
bool IndicatorSetInteger( |
プロパティ識別子と修飾子との呼び出し
bool IndicatorSetInteger( |
パラメータ
prop_id
[in] 指標プロパティの識別子。値は ENUM_CUSTOMIND_PROPERTY_INTEGER 列挙のいずれかです。
prop_modifier
[in] 指定されたプロパティの修飾子。修飾子はレベルプロパティのみで必要です。
prop_value
[in] プロパティ値
戻り値
実行成功の場合は true、それ以外の場合は false
注意事項
#property ディレクティブの使用時にはプロパティ( 修飾子)の番号付けは1から始まる一方、関数では番号付けが0から始まります。レベル番号が正しく設定されていない場合、指標の表示目的のものと異なる場合があります。
例えば、最初の水平ラインの厚さを設定するにはゼロインデックスを使用します。
- IndicatorSetInteger(INDICATOR_LEVELWIDTH, 0, 5) – 最初のレベルの厚さを設定するにはインデックス 0 を使用する
例: 指標水平線の色、スタイルと太さを設定する指標
#property indicator_separate_window |
参照
カスタム指標プロパティ、プログラムのプロパティ(#property)、 描画スタイル
IndicatorSetString
この関数は、対応する指標プロパティの値を設定します。指標プロパティは string 型でなければなりません。この関数には 2 つのバージョンがあります。
プロパティ識別子との呼び出し
bool IndicatorSetString( |
プロパティ識別子と修飾子との呼び出し
bool IndicatorSetString( |
パラメータ
prop_id
[in] 指標プロパティの識別子。値は ENUM_CUSTOMIND_PROPERTY_STRING 列挙のいずれかです。
prop_modifier
[in] 指定されたプロパティの修飾子。修飾子はレベルプロパティのみで必要です。
prop_value
[in] プロパティ値
戻り値
実行成功の場合は true、それ以外の場合は false
注意事項
#property ディレクティブの使用時にはプロパティ( 修飾子)の番号付けは1から始まる一方、関数では番号付けが0から始まります。レベル番号が正しく設定されていない場合、指標の表示目的のものと異なる場合があります。
例えば、最初の水平ラインの記述を設定するにはゼロインデックスを使用します。
- IndicatorSetString(INDICATOR_LEVELTEXT, 0, “First Level”) – 最初のレベルの記述を設定するにはインデックス 0 を使用する
例: 指標水平線にラベルを設定する指標
#property indicator_separate_window //— 次の呼び出しのために prev_calculated の値を返す |
参照
カスタム指標プロパティ、プログラムのプロパティ(#property)
PlotIndexSetDouble
この関数は、対応する指示線の対応するプロパティの値を設定します。指標プロパティは double 型でなければなりません。
bool PlotIndexSetDouble( |
パラメータ
plot_index
[in] グラフィックプロットのインデックス
prop_id
[in] 値は ENUM_PLOT_PROPERTY_DOUBLE 列挙のいずれかの値
prop_value
[in] プロパティ値
戻り値
成功の場合は true、それ以外の場合は false
PlotIndexSetInteger
この関数は、対応する指示線の対応するプロパティの値を設定します。指標プロパティは int、char、bool または color 型でなければなりません。この関数には 2 つのバージョンがあります。
プロパティの識別子を示す呼び出し
bool PlotIndexSetInteger( |
プロパティの識別子と修飾子を示す呼び出し
bool PlotIndexSetInteger( |
パラメータ
plot_index
[in] グラフィックプロットのインデックス
prop_id
[in] 値は ENUM_PLOT_PROPERTY_INTEGER 列挙のいずれかです。
prop_modifier
[in] 指定されたプロパティの修飾子。修飾子は色インデックスプロパティのみで必要です。
prop_value
[in] プロパティ値
戻り値
成功の場合は true、それ以外の場合は false
例: 3 色の線を描画する指標色は 5 ティックごとに変わります。
#property indicator_chart_window ticks++;// ティックを数える |
PlotIndexSetString
この関数は、対応する指示線の対応するプロパティの値を設定します。指標プロパティは string 型でなければなりません。
bool PlotIndexSetString( |
パラメータ
plot_index
[in] グラフィックプロットのインデックス
prop_id
[in] 値は ENUM_PLOT_PROPERTY_STRING 列挙のいずれかの値
prop_value
[in] プロパティ値
戻り値
成功の場合は true、それ以外の場合は false
PlotIndexGetInteger
この関数は、対応する指示線の対応するプロパティの値を設定します。指標プロパティは int、color、bool または char 型でなければなりません。この関数には 2 つのバージョンがあります。
プロパティの識別子を示す呼び出し
int PlotIndexGetInteger( |
プロパティの識別子と修飾子を示す呼び出し
int PlotIndexGetInteger( |
パラメータ
plot_index
[in] グラフィックプロットのインデックス
prop_id
[in] 値は ENUM_PLOT_PROPERTY_INTEGER 列挙のいずれかです。
prop_modifier
[in] 指定されたプロパティの修飾子。修飾子は色インデックスプロパティのみで必要です。
注意事項
この関数は、適切な指標線の描画の設定を抽出するように設計されています。この関数は線の描画プロパティを別の線に複製する PlotIndexSetInteger 関数と連結して機能します。
例: 曜日に応じてローソク足を塗る指標。曜日ごとの色はプログラムで設定されます。
#property indicator_separate_window |
Originally posted 2019-07-30 09:34:09.