指標定数

価格定数

テクニカル指標の計算には、価格値及び/または計算が実行されたボリュームの値が必要です。計算に使用する価格ベースを指定するための ENUM_APPLIED_PRICE 列挙には 7 つの事前定義された識別子があります。

ENUM_APPLIED_PRICE

ID

説明

PRICE_CLOSE

終値。

PRICE_OPEN

始値。

PRICE_HIGH

期間の高値。

PRICE_LOW

期間の安値。

PRICE_MEDIAN

中間価格(高 + 低)÷  2 。

PRICE_TYPICAL

典型的価格(高 + 低 + 終)÷  3 。

PRICE_WEIGHTED

平均価格(高 + 低 + 終 + 終)÷  4 。

ボリュームが計算に使用された場合、ENUM_APPLIED_VOLUME 列挙の 2 つの値のいずれかを指定する必要があります。

ENUM_APPLIED_VOLUME

ID

説明

VOLUME_TICK

ティックボリューム。

VOLUME_REAL

取引高。

iStochastic() テクニカル指標の計算法は 2 つあります。

  • 終値のみ
  • 高値と安値

計算に必要なバージョンを選択するには、ENUM_STO_PRICE 列挙体の値のいずれかを指定します。

ENUM_STO_PRICE

ID

説明

STO_LOWHIGH

計算は、低/高価格に基づいています。

STO_CLOSECLOSE

計算は、クローズ(ローソク足の形成が終わった時点での価格)/終値に基づいています。

テクニカル指標が ENUM_APPLIED_PRICE によって設定されている種類の価格データを計算に使用する場合、(端末機に内蔵あるいはユーザに書かれた)指標ハンドルが入力価格シリーズとして使用可能になります。この場合には、指標のゼロバッファの値が計算に使用されます。これは、他の指標の値を使用しての指標値の構築を容易にします。カスタム指標ハンドルは iCustom() 関数の呼び出しで作成されます。

例:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//— 入力パラメータ
input int      RSIperiod=14;         // RSI を計算するための期間
input int      Smooth=8;             // 平滑化期間 RSI
input ENUM_MA_METHOD meth=MODE_SMMA; // 平滑化の方法
//—- RSI をプロットする
#property indicator_label1 “RSI”
#property indicator_type1   DRAW_LINE
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1  1
//—- RSI_Smoothed をプロットする
#property indicator_label2 “RSI_Smoothed”
#property indicator_type2   DRAW_LINE
#property indicator_color2 clrNavy
#property indicator_style2 STYLE_SOLID
#property indicator_width2  1
//— 指標バッファ
double         RSIBuffer[];         // RSI 値を収納
double         RSI_SmoothedBuffer[]; // スムーズにされたRSI 値
int            RSIhandle;           // RSI 指標ハンドル
//+——————————————————————+
//| カスタム指標を初期化する関数                                            |
//+——————————————————————+
void OnInit()
{
//— 指標バッファマッピング
SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
IndicatorSetString(INDICATOR_SHORTNAME,“iRSI”);
IndicatorSetInteger(INDICATOR_DIGITS,2);
//—
RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//—
}
//+——————————————————————+
//| カスタム指標の反復関数                                                |
//+——————————————————————+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[]

{
//—  直近エラーの値をリセットする
ResetLastError();
//— RSIBuffer[] 配列でRSIの指標データを取得する
int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
if(copied<=0)
{
Print(“Unable to copy the values of the indicator RSI. Error = “,
GetLastError(),“,  copied =”,copied);
return(0);
}
//— RSI 値を用いて平均値の指標を作成する
int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
if(copied<=0)
{
Print(“Unable to copy the smoothed indicator of RSI. Error = “,
GetLastError(),“,  copied =”,copied);
return(0);
}
//— 次の呼び出しのために prev_calculated の値を返す
return(rates_total);
}

 

平滑化の方法

多くのテクニカル指標は、様々な価格シリーズ平滑化の方法に基づいています。いくつかの標準的なテクニカル指標は、入力パラメータとして平滑化の方法の指定を要します。使用される平滑化の方法を指定するためは ENUM_MA_METHOD 列挙体にリストされている識別子が使用されます。

ENUM_MA_METHOD

ID

説明

MODE_SMA

単純平均。

MODE_EMA

指数移動平均。

MODE_SMMA

平滑平均。

MODE_LWMA

線形加重移動平均。

例:

double ExtJaws[];
double ExtTeeth[];
double ExtLips[];
//—- 平均移動線を取り扱う
int    ExtJawsHandle;
int    ExtTeethHandle;
int    ExtLipsHandle;
//— MA のハンドルを取得する
ExtJawsHandle=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN);
ExtTeethHandle=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN);
ExtLipsHandle=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN);

 

指標線

テクニカル指標のいくつかはチャートに複数のバッファを描画します。指標バッファの番号付けは0から始まります。CopyBuffer() 関数を使用して指標値を double 型の配列に複製する時、指標によっては、番号の代わりに複製されたバッファの識別子を指定することが出来ます。

 

iMACD()、iRVI() 及び iStochastic() の値の複製時に使用出来る指標線の識別子

定数

説明

MAIN_LINE

0

正中線。

SIGNAL_LINE

1

シグナル線。

ADX() 及び ADXW() の値の複製時に使用出来る指標線の識別子

定数

説明

MAIN_LINE

0

正中線。

PLUSDI_LINE

1

線 + DI。

MINUSDI_LINE

2

線 –DI。

iBands() の値の複製時に使用出来る指標線の識別子

定数

説明

BASE_LINE

0

正中線。

UPPER_BAND

1

上限。

LOWER_BAND

2

下限。

iEnvelopes() 及び iFractals() の値の複製時に使用出来る指標線の識別子

定数

説明

UPPER_LINE

0

上部線。

LOWER_LINE

1

下部線。

iGator() の値の複製時に使用出来る指標線の識別子

定数

説明

UPPER_HISTOGRAM

0

上部ヒストグラム。

LOWER_HISTOGRAM

2

下部ヒストグラム。

iAlligator() の値の複製時に使用出来る指標線の識別子

定数

説明

GATORJAW_LINE

0

顎線。

GATORTEETH_LINE

1

歯線。

GATORLIPS_LINE

2

口線。

iIchimoku() の値の複製時に使用出来る指標線の識別子

定数

説明

TENKANSEN_LINE

0

転換線。

KIJUNSEN_LINE

1

基準線。

SENKOUSPANA_LINE

2

先行スパン A 線。

SENKOUSPANB_LINE

3

先行スパン B 線。

CHIKOUSPAN_LINE

4

遅行スパンライン。

描画スタイル

カスタム指標の作成時には、ENUM_DRAW_TYPE列挙体で指定されている(メインチャートウィンドウまたはグラフのサブウィンドウに表示される)18 種類のグラフィックプロットのいずれかを指定することが出来ます。

1 つのカスタム指標でどの指標作成・描画タイプを選ぶことも出来ます各構造タイプは、描画に必要なデータを格納するための1〜5 グローバル配列 の仕様を必要とします。これらのデータ配列は、SetIndexBuffer() 関数を使用して指標バッファと結合する必要があります。各バッファに ENUM_INDEXBUFFER_TYPE からのデータの種類を指定する必要があります。

描画スタイルに応じて、1〜4 の値バッファが必要な場合があります(INDICATOR_DATAとしてマーク)。スタイルが動的な色の塗り替えを含む場合は(指標型 INDICATOR_COLOR_INDEX )もう 1 つのバッファが必要になります(全てのスタイルの名称には COLOR が含まれいます)。色のバッファは、常にスタイルに対応するバッファの後に結合されています。

ENUM_DRAW_TYPE

ID

説明

データバッファ

色バッファ

DRAW_NONE

描かれません。

1

0

DRAW_LINE

線。

1

0

DRAW_SECTION

セクション。

1

0

DRAW_HISTOGRAM

ゼロラインからのヒストグラム。

1

0

DRAW_HISTOGRAM2

2 つの指標バッファのヒストグラム。

2

0

DRAW_ARROW

矢印の描画。

1

0

DRAW_ZIGZAG

ジグザグスタイルは、バーの垂直断面を可能にします。

2

0

DRAW_FILLING

2 レベル間の色の塗りつぶし。

2

0

DRAW_BARS

バーの列として表示。

4

0

DRAW_CANDLES

ローソク足の列として表示。

4

0

DRAW_COLOR_LINE

多色のライン。

1

1

DRAW_COLOR_SECTION

多色のセクション。

1

1

DRAW_COLOR_HISTOGRAM

ゼロラインからの多色ヒストグラム。

1

1

DRAW_COLOR_HISTOGRAM2

2 つの指標バッファの多色ヒストグラム。

2

1

DRAW_COLOR_ARROW

多色の矢印を描画。

1

1

DRAW_COLOR_ZIGZAG

多色のジグザグ。

2

1

DRAW_COLOR_BARS

多色バー。

4

1

DRAW_COLOR_CANDLES

多色ローソク足。

4

1

 

選択された描画の型の表示を改良するために、ENUM_PLOT_PROPERTY に記載されている識別子が使用されます。

PlotIndexSetInteger() 及び PlotIndexGetInteger() 関数には

ENUM_PLOT_PROPERTY_INTEGER

ID

説明

プロパティ型

PLOT_ARROW

DRAW_ARROW スタイルの矢印コード。

uchar

PLOT_ARROW_SHIFT

DRAW_ARROW スタイルの矢印の垂直シフト。

int

PLOT_DRAW_BEGIN

データウィンドウでの描画前の初期のバーの数や値。

int

PLOT_DRAW_TYPE

グラフィック構成のタイプ。

ENUM_DRAW_TYPE

PLOT_SHOW_DATA

データウィンドウでの建設値の表示のサイン。

bool

PLOT_SHIFT

バーでの時間軸に沿っての指標のプロットシフト。

int

PLOT_LINE_STYLE

線の描画スタイル。

ENUM_LINE_STYLE

PLOT_LINE_WIDTH

描画線の太さ。

int

PLOT_COLOR_INDEXES

色の数。

int

PLOT_LINE_COLOR

描画の色を含むバッファのインデックス。

color       modifier = index number of colors

 

PlotIndexSetDouble() 関数

ENUM_PLOT_PROPERTY_DOUBLE

ID

説明

プロパティ型

PLOT_EMPTY_VALUE

プロットに使用される空の値で、何も描画しません。

double

PlotIndexSetString() 関数

ENUM_PLOT_PROPERTY_STRING

ID

説明

プロパティ型

PLOT_LABEL

データウィンドウに表示する指標グラフィカルシリーズの名称。表示のためにいくつかの指標バッファを必要とする複雑なグラフィカルなスタイルで作業する場合、各バッファの名称は「 ; 」セパレータを使用して指定することが出来ます。サンプルコードは DRAW_CANDLESにあります。

string

カスタム指標の線を描画するために 5 つのスタイルを使用することが出来ます。これらは線の太さが 0 または 1 の時のみ有効です。

ENUM_LINE_STYLE

ID

説明

STYLE_SOLID

実線。

STYLE_DASH

途切れ線。

STYLE_DOT

点線。

STYLE_DASHDOT

一点鎖線。

STYLE_DASHDOTDOT

二点鎖線。

 

線の描画スタイルと図面の種類を設定するには PlotIndexSetInteger() 関数が使用されます。フィボナッチの拡張機能では、レベルの厚さと描画スタイルは、ObjectSetInteger() 関数を使用して示すことが出来ます。

例:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//— 指標バッファ
double         MABuffer[];
//+——————————————————————+
//| カスタム指標を初期化する関数                                            |
//+——————————————————————+
void OnInit()
{
//— 配列をインデックス0で指標バッファと結合する
SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
//— 線の描画を設定
PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
//— 線のスタイルを設定
PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_DOT);
//— 線の色を設定
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrRed);
//— 線の太さを設定
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
//— 線のラベルを設定
PlotIndexSetString(0,PLOT_LABEL,“Moving Average”);
//—
}
//+——————————————————————+
//| カスタム指標の反復関数                                                |
//+——————————————————————+
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[])
{
//—
for(int i=prev_calculated;i<rates_total;i++)
{
MABuffer[i]=close[i];
}
//— 次の呼び出しのために prev_calculated の値を返す
return(rates_total);
}

カスタム指標プロパティ

カスタム指標で使用出来る指標バッファの数に制限はありません。しかし SetIndexBuffer() 関数を使用して、指標バッファとして指定される配列のそれぞれに格納されるデータ型を指定する必要があります。値は ENUM_INDEXBUFFER_TYPE 列挙体の値のうちのいずれかです。

ENUM_INDEXBUFFER_TYPE

ID

説明

INDICATOR_DATA

描画するデータ。

INDICATOR_COLOR_INDEX

色。

INDICATOR_CALCULATIONS

中間計算のための補助バッファ

カスタム指標には表示に活用できる多数の設定があります。これらの設定は、IndicatorSetDouble()、IndicatorSetInteger() 及び IndicatorSetString() 関数を使用して対応する指標のプロパティに行われます。指標のプロパティの識別子は ENUM_CUSTOMIND_PROPERTY 列挙にリストされています。

ENUM_CUSTOMIND_PROPERTY_INTEGER

ID

説明

プロパティ型

INDICATOR_DIGITS

指標値描画の精度。

int

INDICATOR_HEIGHT

指標ウィンドウの固定された高さ(プリプロセッサコマンド #property indicator_height)。

int

INDICATOR_LEVELS

指標ウィンドウのレベル数。

int

INDICATOR_LEVELCOLOR

レベルの線の色。

color                      modifier = level number

INDICATOR_LEVELSTYLE

レベルの線のスタイル。

ENUM_LINE_STYLE  modifier = level number

INDICATOR_LEVELWIDTH

レベルの線の太さ。

int                        修飾子 = レベル番号

ENUM_CUSTOMIND_PROPERTY_DOUBLE

ID

説明

プロパティ型

INDICATOR_MINIMUM

指標ウィンドウの最小サイズ。

double

INDICATOR_MAXIMUM

指標ウィンドウの最大サイズ。

double

INDICATOR_LEVELVALUE

レベル値。

double                    修飾子 = レベル番号

ENUM_CUSTOMIND_PROPERTY_STRING

ID

説明

プロパティ型

INDICATOR_SHORTNAME

指標短縮名。

string

INDICATOR_LEVELTEXT

レベルの説明。

string                    modifier = level number

例:

//— 指標の設定
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_color1 clrLightSeaGreen
#property indicator_color2 clrRed
//— 入力パラメータ
extern int KPeriod=5;
extern int DPeriod=3;
extern int Slowing=3;
//— 指標バッファ
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//+——————————————————————+
//| カスタム指標を初期化する関数                                            |
//+——————————————————————+
void OnInit()
{
//— 指標バッファマッピング
SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);
SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);
SetIndexBuffer(2,HighesBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,LowesBuffer,INDICATOR_CALCULATIONS);
//— 精度を設定
IndicatorSetInteger(INDICATOR_DIGITS,2);
//— レベルを設定
IndicatorSetInteger(INDICATOR_LEVELS,2);
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,80);
//— サブウィンドウの最大値と最小値を設定する
IndicatorSetDouble(INDICATOR_MINIMUM,0);
IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//— インデックスが描画される最初のバーを設定する
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,KPeriod+Slowing-2);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,KPeriod+Slowing+DPeriod);
//— 2 番目の線に STYLE_DOT スタイルを設定する
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);
//— データウィンドウ の名称と指標サブウィンドウラベル
IndicatorSetString(INDICATOR_SHORTNAME,“Stoch(“+KPeriod+“,”+DPeriod+“,”+Slowing+“)”);
PlotIndexSetString(0,PLOT_LABEL,“Main”);
PlotIndexSetString(1,PLOT_LABEL,“Signal”);
//— 線の描画を空の値に設定する
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//— 初期化完了
}

 

テクニカル指標の種類

値にアクセスするために指標ハンドルを作成する方法は 2 つあります。最初の方法は、テクニカル指標のリストから直接関数名を指定することです。2 番目の方法は IndicatorCreate() を使用してENUM_INDICATOR 列挙から識別子を割り当てて、任意の指標ハンドルを作成することです。ハンドル作成の両方法は同等なので、MQL5 でプログラムを書く時に、特定の場合に最も便利なものを使用することが出来ます。

IND_CUSTOM 型の指標の作成時には 入力パラメータ MqlParam の最初の要素の type フィールドは ENUM_DATATYPE 列挙の TYPE_STRING 値を持たなければならず、最初の要素の string_value フィールドはカスタム指標の名称を含まなければなりません。

ENUM_INDICATOR

識別子

指標

IND_AC

ACオシレーター。

IND_AD

蓄積/配信(Accumulation/Distribution)。

IND_ADX

平均方向性指数(Average Directional Index)。

IND_ADXW

ウェルズ•ワイルダーのADX。

IND_ALLIGATOR

アリゲーター。

IND_AMA

適応型移動平均(Adaptive Moving Average)。

IND_AO

オーサムオシレーター。

IND_ATR

ATR(Average True Range)。

IND_BANDS

ボリンジャーバンド®(Bollinger Bands®)。

IND_BEARS

ベアパワー(Bears Power)。

IND_BULLS

ブルパワー(Bulls Power)。

IND_BWMFI

マーケットファシリテーションインデックス。

IND_CCI

コモディティチャンネルインデックス(Commodity Channel Index)。

IND_CHAIKIN

チャイキンオシレーター(Chaikin Oscillator)。

IND_CUSTOM

カスタム指標。

IND_DEMA

2 重指数移動平均(Double Exponential Moving Average)。

IND_DEMARKER

デマーカー(DeMarker)。

IND_ENVELOPES

エンベローブ(Envelopes)。

IND_FORCE

勢力指数(Force Index)。

IND_FRACTALS

フラクタル。

IND_FRAMA

フラクタル適応型移動平均(Fractal Adaptive Moving Average)。

IND_GATOR

ゲーターオシレーター。

IND_ICHIMOKU

一目均衡表(Ichimoku Kinko Hyo)。

IND_MA

移動平均(Moving Average)。

IND_MACD

MACD

IND_MFI

マネーフローインデックス(Money Flow Index)。

IND_MOMENTUM

モメンタム(Momentum)。

IND_OBV

オンバランスボリューム(On Balance Volume)。

IND_OSMA

OsMA

IND_RSI

相対力指数(Relative Strength Index)。

IND_RVI

相対活力指数(Relative Vigor Index)。

IND_SAR

パラボリック SAR。

IND_STDDEV

標準偏差(Standard Deviation)。

IND_STOCHASTIC

ストキャスティックス(Stochastic Oscillator)。

IND_TEMA

3 重指数移動平均(Triple Exponential Moving Average)。

IND_TRIX

3 重指数移動平均オシレーター(Triple Exponential Moving Averages Oscillator)。

IND_VIDYA

可変インデックス動的平均(Variable Index Dynamic Average)。

IND_VOLUMES

ボリューム。

IND_WPR

ウィリアムパーセントレンジ(Williams’ Percent Range)。

データ型識別子

IndicatorCreate() 関数を使用して指標ハンドルを作成する際には、最終パラメータとして MqlParam 型の配列が指定されなければなりません。従って、指標を記述する MqlParam 構造体は特別な type フィールドを含みます。このフィールドは配列の特定の要素によって渡されるデータ型(real、integer または string 型)の情報を含みます。この MqlParam 構造体のフィールドの値は ENUM_DATATYPE の値の 1 つです。

ENUM_DATATYPE

識別子

データ型

TYPE_BOOL

bool

TYPE_CHAR

char

TYPE_UCHAR

uchar

TYPE_SHORT

short

TYPE_USHORT

ushort

TYPE_COLOR

color

TYPE_INT

int

TYPE_UINT

uint

TYPE_DATETIME

datetime

TYPE_LONG

long

TYPE_ULONG

ulong

TYPE_FLOAT

float

TYPE_DOUBLE

double

TYPE_STRING

string

配列の各要素は、作成されたテクニカル指標の対応する入力パラメータを記述するので、配列内の要素の型と順序は厳密に記述に従って維持されなければなりません。

 

 

Originally posted 2019-07-29 22:35:45.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">