input記憶域クラスはグローバル変数で宣言します。
input修飾子はデータ型の前に書きます。
input修飾子で宣言された変数は、プログラム内部で変更する事で出来ません。
読み取り専用でアクセスする事は出来ません。
input変数の値は、プログラムのプロパティウインドウからユーザーによって変更する事が出来ます。
input変数はプログラムの入力パラメータを決定します。
"パラメータの入力"タブの"変数"の名称を別の表示に設定する事が出来ます。
この名称は、同じ行の後に書かれたコメントの文字列が使われます。
これでユーザーにとって分かり易い名前を表示させる事が出来ます。
注意
構造体・
クラス・
配列はinput変数として使えません。
input変数の文字列コメントは63文字を超える事は出来ません。
MQL4プログラムでカスタムインジケータを呼び出した時の引数渡し
カスタムインジケータは
iCustom()関数を使用して呼ばれます。
nameの後の値は、カスタムインジケータのinput変数宣言に厳密に従う必要があります。
カスタムインジケータで宣言されたinput変数よりも少ない場合、不足分の値は宣言時に指定した値が使用されます。
カスタムインジケータが
OnCalcutale関数の第1引数(現在の表示バー数)を使用する場合は、
カスタムインジケータを呼び出す時に
ENUM_APPLIED_PRICEの値か、他インジケータのハンドルを使用する必要があります。
input変数に対応する全ての引数の値は、明確に示さなければなりません。
列挙型の入力パラメータ
MQL4が提供している列挙型だけでなく、ユーザー定義の変数をinput変数として使用する事が出来ます。
サンプルソース:
#property strict
enum dow_enum {
Sun = 0,
Mon,
Tue,
Wed,
Thu,
Fri,
SAt
};
input dow_enum dow_input = Sun;
カスタムインジケータのプロパティ:
スクリプト起動時にプロパティウインドウを表示させて値を選択出来るようにする為には、
#property script_show_inputsを使用する必要があります。
列挙で使用出来る値が制限出来ます。
入力値は選択する為にドロップダウンリストが使用されます。
列挙メンバのニーモニック名がリストに表示されます。
コメントがニーモニック名に関連付けられている場合、ニーモニック名では無くコメントの名前が使用されます。
上の例ではWedメンバにコメントが無い為、ニーモニック名がドロップダウンリストに表示されています。
sinput修飾子
input修飾子を持った変数は、プログラムを起動する時に外部パラメータを設定するだけでは無く、
ストラテジーテスターでトレードストラテジーを最適化する際にも必要とされます。
文字列型以外の変数は最適化に使用する事が出来ます。
時々、一部の外部プログラムパラメータを除外する必要が出てきます。
sinput修飾子は、このような場合の為に導入されました。
sinputは静的外部変数の宣言(sinput = static input)です。
サンプルソース:
sinput test1 = 0;
static input test2 = 0;
上記サンプルソースのtest1とtest2の静的外部変数の宣言は同じ意味になります。
sinput修飾子で宣言された変数は、MQL4プログラムの入力パラメータです。
プログラムが起動する時、このパラメータの値は変更する事が出来ます。
しかし、この値は入力パラメータの最適化には使用されません。
言い換えると、最適化パラメータを設定する項目にその値は表示されません。
サンプルソース(EA用):
#property strict
sinput int test_sinput = 0;
static input int test_st_input = 0;
input int test_inpuit = 0;
ストラテジーテスターのエキスパート設定:
上記サンプルソースには3つの外部パラメータがあります。
sinput変数とstatic input変数は、最適化中に変更する事は出来ません。
最適化可能な
input変数は、スタート・ステップ・ストップ項目を入力出来ます。
sinput変数とstatic input変数は項目に入力する事が出来ません。
しかし、この規則には唯一の例外があります。
sinput変数はParameterSetRange()関数を使用して最適化タスクを変更する事が出来ます。
ParameterGetInput()関数は最適化の起動時(OnTesterInit()ハンドラ)にinput変数を受信し、
ステップ値と範囲を再設定する事が出来ます。
(ParameterSetRange()とParameterGetInput()はMQL5の関数です、MQL4では使用出来ません。)
このようにsinput修飾子で動作する2つの関数を組み合わせて、
別の入力パラメータに依存する入力パラメータの最適化間隔を設定させる事が出来ます。