トップ  >  MQL4リファレンス  >  時系列・インジケータアクセス  >  バッファ・時系列配列のインデックス方向
スポンサーリンク
検索

↑の検索エンジンが表示されない人は、
↓の古い検索エンジンを使用して下さい。
カスタム検索
MQL4リファレンスツリー
バッファ・時系列配列のインデックス方向



全ての配列及びインジケータバッファのインデックス方向(デフォルト)は左から右です。
最初の要素のインデックスは常に0に等しいです。
このように、配列またはインジケータバッファの最初の要素は左端に位置するのがデフォルトで、
最後の要素は右端に位置します。

インジケータバッファはdouble型の動的配列です。
このサイズはクライアントターミナルで管理されます。
その為、常にインジケータで計算されたバー数に対応したサイズになります。

通常double型の動的配列は、 SetIndexBuffer()関数を使用してインジケータバッファを割り当てます。
インジケータバッファはArrayResize()関数を使用したサイズ変更を必要としません、
これはターミナルのシステムによって行われます。

時系列は逆方向インデックスを持った配列です。
つまり時系列配列の最初の要素は右端に位置し、最後の要素は左端に位置します。
時系列は時間情報を含めた価格データのヒストリーデータを格納する為に使用されます。
最も古いデータは左端にあり、最新のデータは時系列の右端に配置されます。

その為、インデックス0の時系列配列の要素は、通貨ペアの最新クォート情報になります。
時系列は日足の時間軸のデータが含まれている場合、インデックス0の要素には現在の未完了の日足データが含まれ、
インデックス1の要素には昨日の日足データが含まれています。



インデックス方向の変更


ArraySetAsSeries()関数は動的配列のアクセスメソッドを変更する事が出来ます。
コンピュータメモリに格納されているデータの物理的な順序は変更されません。

この関数は単純に配列要素のアドレス指定メソッドを変更します。
ArrayCopy()関数を使用して他配列へコピーする時、コピー先の配列はコピー元配列のインデックス方向に依存しません。

インデックスの方向は、静的配列で変更する事は出来ません。
関数の引数に渡しても、関数内でインデックス方向を変更しようとする為、何の効果ももたらしません。

インジケータバッファは、通常の配列のようにインデックス方向は設定する事が出来ます。
また時系列のように逆方向インデックスに設定する事も出来ます。

インジケータバッファのインデックス0への参照は、
最後のインジケータバッファに対応する値への参照を意味します。
これは最新のバーのインジケータ値に対応します。

それでもインジケータバーの物理的な位置は変更されません。



インジケータの価格データ受信


各カスタムインジケータはOnCalculate()関数に含まれている必要があります。
OnCalculate()関数はインジケータバッファ内の値を計算する為に必要な価格データが渡されます。
渡される配列のインデックス方向は、 ArrayGetAsSeries()関数を使用してチェックする事が出来ます。

関数に渡された配列は価格データを反映します。
すなわち、この配列は時系列のサインを持っています、ArrayIsSeries()関数でチェックした場合trueを返します。
しかし、いくつかのケースにおいてArrayGetAsSeries()関数でインデックス方向のみチェックする必要があります。

順序はデフォルト値に依存しません。
ArraySetAsSeries()関数は無条件に呼び出す必要があります。




インジケータ値と価格データの受信

EA・インジケータ・スクリプトの全ての配列のデフォルトのインデックス方向は、左から右です。
必要に応じてMQL4プログラムは任意の通貨ペア・時間軸の時系列データを要求する事が出来ます。


関数名 詳細
CopyRates MqlRates構造体配列に価格のヒストリーデータをコピー
CopyTime datetime配列に時間のデータをコピー
CopyOpen double配列に始値のデータをコピー
CopyHigh double配列に高値のデータをコピー
CopyLow double配列に安値のデータをコピー
CopyClose double配列に終値のデータをコピー
CopyTickVolume long配列に出来高のデータをコピー



上記関数は全て同様の方法で動作します。
CopyOpen()関数を例に、データ取得のメカニズムを検討します。

これは要求されたデータのインデックス方向は、時系列である事が示唆されます。
インデックス0の位置は現在の未完了のバーのデータを格納します。

コピーする時、コピー元配列の開始位置を指定する必要があり、
開始位置からコピー先配列にコピーされます。




成功した場合は、指定した要素数分をコピー元配列(インジケータバッファ)からコピー先配列にコピーされます。





スポンサーリンク
スポンサーリンク


Copyright ©2015 MT4でEA自作しちゃお~ All Rights Reserved.


Top

inserted by FC2 system