ArrayBsearch
昇順にソートされた多次元数値配列内の指定された値を検索します。検索は最初の次元の要素を介して行われます。
double 型の配列の検索には
int ArrayBsearch( |
float 型の配列の検索には
int ArrayBsearch( |
long 型の配列の検索には
int ArrayBsearch( |
int 型の配列の検索には
int ArrayBsearch( |
short 型の配列の検索には
int ArrayBsearch( |
char 型の配列の検索には
int ArrayBsearch( |
パラメータ
array[]
[in] 検索される数値配列
value
[in] 検索される数値
戻り値
この関数は、見つかった要素のインデックスを返します。指定された値を持つ要素が配列に存在しない場合は、検索値の範囲で最も近い値を持つ要素のインデックスが返されます。
注意事項
二分探索ではソートされた配列の処理だけが可能です。数値の配列をソートするには ArraySort() 関数を使用します。
例:
#property description “Script based on RSI indicator data displays” |
ArrayCopy
配列を別の配列に複製します。
int ArrayCopy( |
パラメータ
dst_array[]
[out] 複製先の配列。
src_array[]
[in] ソース配列。
dst_start=0
[in] 複製先の配列の開始インデックス。デフォルトでは、開始インデックスは 0。
src_start=0
[in] ソース配列の開始インデックス。デフォルトでは、開始インデックスは 0。
count=WHOLE_ARRAY
[in] 複製する必要がある要素数。デフォルトでは配列全体(count=WHOLE_ARRAY)。
戻り値
複製された要素の数
注意事項
count<0 や count>src_size-src_start の場合、配列の全ての残り部分が複製されます。配列は、左から右に複製されます。シリーズ配列の場合、開始位置は左から右のコピーのために調整されて、正確に定義されます。
配列のタイプが異なる場合は、複製中に、複製元配列の各要素の複製先の要素タイプへの変換が試みられます。文字列配列は文字列配列のみに複製することが出来ます。初期化を必要とするオブジェクトを含むクラスと構造の配列は複製されません。構造体の配列は同じ型の配列のみに複製することが出来ます。
時系列をインデックスとする動的配列では(もしデータサイズのほうが大きければ)複製先の配列のサイズが自動的に複製されたデータサイズに合わせて増加されます。複製先の配列のサイズは自動的に減少しません。
例:
#property description “The indicator highlights the candlesticks that are local” |
ArrayCompare
この関数は 2 つの同型の配列を比較した結果を返します。基本データ型 または 複合型オブジェクトを使用しないカスタム構造体、つまり文字列型、動的配列、クラスや他の複合オブジェクトで出来た構造体を含まないカスタム構造体です。
int ArrayCompare( |
パラメータ
array1[]
[in] 1番目の配列
array2[]
[in] 2 番目の配列
start1=0
[in] 比較開始点となる、1番目の配列内の要素の初期インデックス。デフォルトの開始インデックスは0です。
start2=0
[in] 比較開始点となる、2 番目の配列内の要素の初期インデックス。デフォルトの開始インデックスは0です。
count=WHOLE_ARRAY
[in] 比較される要素の数デフォルトでは両方の配列の全ての要素が比較されます(count=WHOLE_ARRAY)。
戻り値
- -1( array1[] が array2[] より小さい)
- 0( array1[] とarray2[] が等しい)
- 1( array1[] が array2[] より大きい)
- -2(両配列の型の非互換性や start1、start2 または count 値が配列の範囲外にあることによってエラーが発生)
注意事項
配列のサイズが異なり、いずれかの配列がもう 1 つの配列の忠実なサブセットであって、かつ count= WHOLE_ARRAY である場合、0 が返されず、両配列は等しいとみなされません。この場合、両配列のサイズ比較による戻り値は、array1[] のサイズが array2[] のサイズより小さい場合は -1 でそれ以外は1になります。
ArrayFree
動的配列のバッファを開放し、ゼロ次元のサイズを 0 に設定します。
void ArrayFree( |
パラメータ
array[]
[in] 動的配列
戻り値
なし
注意事項
全ての使用メモリは一度に解放され、また配列の主な作業は指標/バッファへのアクセスを含むことを考えると、ArrayFree() 関数を使用する必要性はあまり頻繁でありません。バッファサイズは自動的に端末のエグゼクティブサブシステムによって管理されています。
手動でアプリケーションの複雑な動的環境でメモリを管理する必要がある場合には ArrayFree() 関数は、ユーザが明示的に、すぐにすでに不要な動的配列によって占有されていたメモリを解放することを可能にします。
例:
#include <ControlsDialog.mqh> public: protected: |
ArrayGetAsSeries
配列の索引付けの方向をチェックします。
bool ArrayGetAsSeries( |
パラメータ
array
[in] チェックされた配列
戻り値
指定された配列にAS_SERIESフラグが設定され、すなわち配列へのアクセスは、時系列のように前後反対に行われる場合 trueを返します。時系列と通常の配列の違いは、時系列のインデックスが後ろから前へ(最新のデータから古いデータへ)つけられていることです。
注意事項
配列が時系列であるかどうかをチェックするには ArrayIsSeries() 関数を使用します。OnCalculate() 関数に入力パラメータとして渡された価格データの配列は時系列と同じインデックス方向を持っていません。必要なインデックス方向は ArraySetAsSeries() 関数を使用して設定出来ます。
例:
#property description “Indicator calculates absolute values of the difference between” |
参照
時系列へのアクセス、ArraySetAsSeries
ArrayInitialize
数値配列の全ての要素に同じ値を設定します。
char 型配列の初期化には
int ArrayInitialize( |
short 型配列の初期化には
int ArrayInitialize( |
int 型配列の初期化には
int ArrayInitialize( |
long 型配列の初期化には
int ArrayInitialize( |
float 型配列の初期化には
int ArrayInitialize( |
double 型配列の初期化には
int ArrayInitialize( |
bool 型配列の初期化には
int ArrayInitialize( |
uint 型配列の初期化には
int ArrayInitialize( |
パラメータ
array[]
[out] 初期化を必要とする数値配列
value
[in] 全ての配列要素に設定する新しい値
戻り値
初期化された要素数
注意事項
ArrayResize() 関数は物理的なメモリの再配置を伴わずに配列のサイズと更なる拡大のための予備を設定することが出来ます。メモリ再配置の操作低速であるために、パフォーマンス向上のために実装されています。
ArrayInitialize(array, init_val) を使用して配列を初期化した場合、予備要素の値はこちらの配列で割り当てられたものとは違います。 ArrayResize() を使用して更に配列が拡大された場合、新しい要素は配列の末尾に追加されます。その値は定義されず通常 init_value とは異なります。
例:
void OnStart() |
ArrayFill
この関数は指定された値で配列を埋めます。
void ArrayFill( |
パラメータ
array[]
[out] 基本データ型( char、uchar、short、ushort、int、uint、long、ulong、bool、color、datetime、float、double)の配列
start
[in] 開始インデックス。 この場合、指定された AS_SERIES フラグは無視されます。
count
[in] 埋められる要素の数
value
[in] 配列を埋める値
戻り値
なし
注意事項
ArrayFill() 関数が呼ばれる時は通常のインデックス方向(左から右)が常に暗黙的に指定されます。 ArraySetAsSeries() 関数を使用しての配列要素へのアクセスの順序の変更は無視されるということです。
ArrayFill() 関数によって処理される時には多次元配列は 1 次元として示されています。例えば array[2][4] は array[8] として処理されます。従って、この配列を操作する時初期要素のインデックスを 5 に等しくなるように指定することが出来ます。ArrayFill(array, 5, 2, 3.14) がarray[2][4] に呼ばれたらならば array[1][1] と array[1][2] が 3.14 で埋められます。
例:
void OnStart() |
ArrayIsDynamic
この関数は配列が動的であるかどうかをチェックします。
bool ArrayIsDynamic( |
パラメータ
array[]
[in] チェックされた配列
戻り値
選ばれた配列が動的の場合は true、それ以外の場合は false
例:
#property description “This indicator does not calculate values. It makes a single attempt to” |
参照
時系列と指標へのアクセス
ArrayIsSeries
この関数は配列が時系列であるかどうかをチェックします。
bool ArrayIsSeries( |
パラメータ
array[]
[in] チェックされた配列
戻り値
チェックされた配列が時系列の場合は true、それ以外の場合は false を返します。OnCalculate() 関数にパラメータとして渡された配列は ArrayGetAsSeries() によって要素アクセスの順序をチェックしれなければいけません。
例:
#property indicator_chart_window |
参照
時系列と指標へのアクセス
ArrayMaximum
多次元数値配列の初次元で最大の要素を検索します。
int ArrayMaximum( |
パラメータ
array[]
[in] 検索対象の数値配列
start=0
[in] チェック開始インデックス
count=WHOLE_ARRAY
[in] 検索される要素数。デフォルトでは配列全体が検索されます( count=WHOLE_ARRAY )。
戻り値
配列の索引付け方向を考慮して見つかった要素のインデックスを返します。失敗した場合は、-1が返されます。
注意事項
最大値を検索している際に AS_SERIES フラグ値が考慮されます。
ArrayMaximum と ArrayMinimum はパラメータとして任意の次元の配列を受け入れます。しかし、検索は常に最初(ゼロ)の次元に適用されます。
例:
#property description “The indicator displays larger timeframe’s candlesticks on the current one.” |
ArrayMinimum
多次元数値配列の初次元で最小の要素を検索します。
int ArrayMinimum( |
パラメータ
array[]
[in] 検索対象の数値配列
start=0
[in] チェック開始インデックス
count=WHOLE_ARRAY
[in] 検索される要素数。デフォルトでは配列全体が検索されます( count=WHOLE_ARRAY )。
戻り値
配列の索引付け方向を考慮して見つかった要素のインデックスを返します。失敗した場合は、-1が返されます。
注意事項
最小値を検索している際にAS_SERIES フラグ値が考慮されます。
ArrayMaximum と ArrayMinimum はパラメータとして任意の次元の配列を受け入れます。しかし、検索は常に最初(ゼロ)の次元に適用されます。
例:
#property description “The indicator displays larger timeframe’s candlesticks on the current one.” |
ArrayPrint
単純型または単純な構造体の配列を操作ログに出力します。
void ArrayPrint( |
パラメータ
array[]
[in] 単純型または単純な構造体の配列。
digits=_Digits
[in] 実数型の小数点以下の桁数。デフォルト値は_Digits.。
separator=NULL
[in] 構造体フィールド値のセパレーター。デフォルト値のNULLは空のラインを意味します。この場合スペースが区切り文字として使用されます。
start=0
[in] 最初に出力された配列要素のインデックス。デフォルトではゼロインデックスから出力されます。
count=WHOLE_ARRAY
[in] 出力される配列要素の数。デフォルトでは配列全体が表示されます(count=WHOLE_ARRAY)。
flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN
[in] 出力モードを設定するフラグの組み合わせ。デフォルトではすべてのフラグが有効です。
- ARRAYPRINT_HEADER – 構造体配列のヘッダを出力します。
- ARRAYPRINT_INDEX – インデックスを左側に出力します。
- ARRAYPRINT_LIMIT – 配列の最初の100および最後の100要素のみを出力します。大きな配列の一部だけを出力したい場合に使用します。
- ARRAYPRINT_ALIGN – 出力された値の位置合わせを可能にします – 数は右、ラインは左整列されます。
- ARRAYPRINT_DATE – datetimeを出力するときはdd.mm.yyyy形式を使います。
- ARRAYPRINT_MINUTES – datetimeを出力するときはHH:MM形式を使います。
- ARRAYPRINT_SECONDS – datetimeを出力するときはHH:MM:SS形式を使います。
戻り値
いいえ
注意事項
ArrayPrint() は構造体配列のフィールドを操作ログに出力するものではありません。配列とオブジェクトポインタフィールドは抜かされます。これらの列は、単により便利なプレゼンテーションのために出力されません。すべての構造体のフィールドを出力する必要がある場合は、希望の書式を使用して独自のマス出力関数を記述する必要があります。
例:
//— 最後の10バーの値を出力する |
参照
FileSave、FileLoad
ArrayRange
この関数は配列の指定された次元の要素数を返します。
int ArrayRange( |
パラメータ
array[]
[in] チェックされた配列
rank_index
[in] 次元のインデックス
戻り値
配列の指定された次元の要素数
注意事項
インデックスは 0 から始まるので、配列の次元の数は最後の次元のインデックスより 1 大きいです。
例:
void OnStart() |
ArrayResize
この関数は最初の次元のサイズを新しく設定します。
int ArrayResize( |
パラメータ
array[]
[out] サイズを変更する配列
new_size
[in] 最初の次元の新しいサイズ
reserve_size=0
[in] 予備を取得するための分散サイズ
戻り値
正常に実行された場合はサイズ変更後の配列に含まれる全ての要素の数を返します。それ以外の場合は、-1を返し、配列のサイズは変更されません。
ArrayResize()が静的配列、時系列または指標バッファに適応された場合、配列サイズは同じままです。これらの配列は再割り当てされません。この場合new_size<=ArraySize(array)であれば、この関数はnew_sizeのみを返します。その他の場合は -1が返されます。
注意事項
この関数は 動的配列のみに使用出来ます。SetIndexBuffer() 関数によって指標バッファとして割り当てられた動的配列のサイズは変更出来ないので注意が必要です。指標バッファについては、サイズ変更の全ての操作は端末のランタイムサブシステムによって実行されます。
配列の要素数の合計は 2,147,483,647を超えることは出来ません。
頻繁なメモリ割り当てをする場合には、物理メモリの割り当て量を減らすために予備を設定する 3 番目のパラメータを使用することをお勧めします。ArrayResize の後続の呼び出しはメモリの物理的な再配分にはつながらず、確保したメモリ内の最初の配列の次元のサイズを変更するだけです。3 番目のパラメータは物理メモリの割り当て時にのみ使用されることを忘れてはいけません。例:
ArrayResize(arr,1000,1000); |
この場合、メモリは2 回再割り当てされます。1 回目は3000要素のループに入る前(配列のサイズを1000に設定されます)で2 回目は i が 2000の時です。3 番目のパラメータを省略した場合は、メモリの物理的な再配分が2000回起こりプログラムの実行がを遅くなります。
例:
//+——————————————————————+ |
参照
ArrayInitialize
ArrayInsert
指定されたインデックスから開始して、指定された数の要素をソース配列からターゲット配列に挿入します。
bool ArrayInsert( |
パラメータ
dst_array[]
[in][out] 追加先の配列
src_array[]
[in] 追加元の配列
dst_start
[in] ソース配列から要素を挿入するためのターゲット側配列内のインデックス
src_start=0
[in] 開始位置からソース配列の要素が挿入のために取得される、ターゲット配列のインデックス。
count
[in] ソース配列から追加される要素数。WHOLE_ARRAYは指定されたインデックスから配列の最後までのすべての要素を意味します。
戻り値
成功の場合はtrue、それ以外の場合はfalse. エラー情報を取得するには、GetLastError() 関数が呼ばれます。可能なエラーは下記です。
- 5052 – ERR_SMALL_ARRAY(startおよび/またはcount パラメータは間違って設定されている、またはsrc_array[]ソース配列が空である)
- 5056 – ERR_SERIES_ARRAY(配列が変更不可能、指標バッファ)
- 4006 – ERR_INVALID_ARRAY(自分自身へのコピーは許可されていない、配列の型が異なる、または、クラスオブジェクトまたはデストラクタ構造体を含む固定サイズの配列がある)
- 4005 – ERR_STRUCT_WITHOBJECTS_ORCLASS(配列にPOD構造体が含まれていないため、シンプルなコピーが不可能)。
- 配列サイズArrayRemove()関数の説明にあるターゲット配列サイズであるdst_array[]を変更するときにエラーが発生しました。
注意事項
この関数が固定サイズの配列に使用されている場合、ターゲット側の dst_array[]配列自体のサイズは変わりません。Starting from the dst_start位置から初めて、ターゲット配列の要素は右にシフトされます。最後のcounts要素は失われ、ソース配列からコピーされた要素がとってかわります。
SetIndexBuffer()関数で指標バッファとして指定された動的配列に要素を挿入することはできません。指標バッファの場合、すべてのサイズ変更操作は端末の実行サブシステムによって実行されます。
ソース配列では、要素はsrc_start指数から始めてコピーされます。ソース配列サイズは変更されません。ターゲット配列に追加される要素は、ソース配列要素へのリンクではありません。つまり、要素が後に2つの配列のいずれかで変更されると、あと一つの配列には反映されません。
例:
//+——————————————————————+ |
参照
ArrayRemove、 ArrayCopy、ArrayResize、 ArrayFree
ArrayRemove
指定されたインデックスから開始して、配列内の指定された数の要素を削除します。
bool ArrayRemove( |
パラメータ
array[]
[in][out] 配列
start
[in] 配列要素の削除を始めるインデックス
count=WHOLE_ARRAY
[in] 削除される要素の数。WHOLE_ARRAYは指定されたインデックスから配列の最後までのすべての要素を意味します。
戻り値
成功の場合はtrue、それ以外の場合はfalse. エラー情報を取得するには、GetLastError() 関数が呼ばれます。可能なエラーは下記です。
- 5052 – ERR_SMALL_ARRAY(start値が大き過ぎる)
- 5056 – ERR_SERIES_ARRAY(配列が変更不可能、指標バッファ)
- 4003 – ERR_INVALID_PARAMETER(count値が大き過ぎる)
- 4005 – ERR_STRUCT_WITHOBJECTS_ORCLASS(デストラクタを持つ複雑なオブジェクトを含む固定サイズの配列)
- 4006 – ERR_INVALID_ARRAY(デストラクタを持つオブジェクトまたはクラスオブジェクトを含む固定サイズの配列)
注意事項
この関数が固定サイズの配列に使用されている場合、配列サイズは変わりません。残りの「tail」が物理的にstartポジションにコピーされます。関数がどのように機能するかを正確に理解するには、以下の例を参照してください。「物理的」コピーとは、コピーされたオブジェクトがコンストラクタまたはコピー演算子の呼び出しによっては作成されないことを意味します。代わりに、オブジェクトのバイナリ表現がコピーされます。このため、デストラクタを使用してArrayRemove()関数をオブジェクトを含む固定サイズの配列に適用することはできません(ERR_INVALID_ARRAYまたはERR_STRUCT_WITHOBJECTS_ORCLASSエラーが発生しています)。このようなオブジェクトを削除するときは、元のオブジェクトとそのコピーに対して、デストラクタを2回呼び出す必要があります。
SetIndexBuffer()関数で指標バッファとして指定された動的配列から要素を削除することはできません。これにより、ERR_SERIES_ARRAYエラーが発生します。指標バッファの場合、すべてのサイズ変更操作は端末の実行サブシステムによって実行されます。
例:
//+——————————————————————+ |
参照
ArrayInsert、 ArrayCopy、ArrayResize、 ArrayFree
ArrayReverse
指定されたインデックスから開始して、配列内の指定された数の要素を反転します。
bool ArrayReverse( |
パラメータ
array[]
[in][out] 配列
start=0
[in] 反転を開始する配列のインデックス
count=WHOLE_ARRAY
[in] 反転される要素の数。WHOLE_ARRAYの場合、指定されたstartインデックスから配列の最後の要素までの位置が反転されます。
戻り値
成功の場合はtrue、それ以外の場合はfalse
注意事項
ArraySetAsSeries()関数は物理的に配列要素を移動するものではありません。代わりに、要素へのアクセスを時系列同様に変更するために、インデックスの方向を逆方向に変更するだけです。ArrayReverse()関数は、配列が「反転」されるように物理的に配列要素を移動します。
例:
//+——————————————————————+ |
参照
ArrayInsert、ArrayRemove、ArrayCopy、 ArrayResize、ArrayFree、 ArrayGetAsSeries、ArraySetAsSeries
ArraySetAsSeries
この関数は選択された 動的配列オブジェクトに AS_SERIES フラグを設定し 時系列のように索引付けをします。
bool ArraySetAsSeries( |
パラメータ
array[]
[in][out] 設定される数値配列
flag
[in] 索引付けの方向
戻り値
成功の場合は true、それ以外の場合は false
注意事項
AS_SERIES フラグは 多次元配列または静的配列(サイズがコンパイル段階ですでに角括弧で定義される配列)には設定することが出来ません。時系列と通常の配列の違いは、時系列のインデックスが後ろから前へ(最新のデータから古いデータへ)つけられていることです。
例:バー番号を表示する指標
#property indicator_chart_window |
参照
時系列へのアクセス、ArrayGetAsSeries
ArraySize
この関数は配列の要素数を返します。
int ArraySize( |
パラメータ
array[]
[in] 任意型の配列
戻り値
int 型の値
注意事項
1次元配列の場合 ArraySize の返す値は ArrayRange(array,0) の返す値と等しいです。
例:
void OnStart() |
ArraySort
多次元数値配列の初次元の値を昇順にソートします。
bool ArraySort( |
パラメータ
array[]
[in][out] ソートする数値配列
戻り値
成功の場合は true、それ以外の場合は false
注意事項
配列は AS_SERIES フラグ値に関係なく昇順にソートされます。
ArraySort と ArrayBSearch 関数はパラメータとして、任意の次元の配列を受け入れます。しかし、検索ソートは常に最初(ゼロ)の次元に適用されます。
例:
#property description “The indicator analyzes data for the last month and draws all candlesticks with small” |
参照
ArrayBsearch
ArraySwap
同じ型の2つの動的配列の内容を交換します。多次元配列の場合、最初の次元を除くすべての次元の要素の数は一致する必要があります。
bool ArraySwap( |
パラメータ
array1[]
[in][out] 数値型配列
array2[]
[in][out] 数値型配列
戻り値
成功の場合はtrue、それ以外の場合はfalse 。この場合、GetLastError()はエラーコードERR_INVALID_ARRAYを返します。
注意事項
この関数は、最初のものを除いて、同じ型および同じ次元の動的配列を受け入れます。整数型の場合、符号は無視されます(char==uchar)。
例:
//+——————————————————————+ |
参照
ArrayCopy、ArrayFill、ArrayRange、ArrayIsDynamic
Originally posted 2019-07-29 23:01:28.