input 変数
input変数は、EAの「パラメーターの入力」タブでユーザーが取引の設定値を入力できるようにするためのものです。外部から設定値を入力できるようにするので外部変数になります。
input変数、extern変数は MQL4プログラムの入力パラメーターを決定するものになります。extern変数とは異なり、input変数の値はプログラム操作中に変更することができません。
input変数は OnInit関数で初期化され、入力パラメーターで設定した値になっています。
構成
input int a = 1; // 変数aの初期値
データ型は int以外も使うことができます。
プログラムの最初にプリプロセッサの「#property strict」を付けることで、コメント以下の文字をパラメーターに表示させることができます。
使用例
input 変数を使用した値の変更(エラー有り)
以下のコードは input変数の値を設定後、プログラムコード中で変数の値を変えようとしているのでコンパイルエラーが出ます。
input変数を使った場合は初期値で設定した以降、変更ができませんので他の変数を作ってその変数に代入させて処理するか、extern変数を使って処理をすることで回避することができます。
コード
// input変数を使用した「入力パラメーター」の表示
#property strict
input double a = 1; // 変数aの初期値
void OnInit()
{
a = a + 0.1;
Print("変数a = ",a); // 変数a = 1.0
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
以下のようにコンパイルエラーが発生します。
「constant cannot be modified (定数は変更できません)」
input 変数を使用した値の変更(エラー無し)
以下のコードは input変数の値を決定後、プログラムコード中で変数の値を変えようとしているのでコンパイルエラーが出ないように他の変数を作ってその変数に代入して処理させています。
コード
// input変数を使用した「入力パラメーター」の表示
#property strict
input double a = 1; // 変数aの初期値
void OnInit()
{
double b = a;
b = b + 0.1;
Print("変数b = ",b); // 変数b = 1.1
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
以下のようにコンパイルは成功します。また「パラメーターの入力」の表示も次のようになります。
「#property strict」はコンパイルする時に構文を厳格にチェックをする機能があるので必ず使うようにしてください。
また「#property strict」があることで「パラメーターの入力」の変数名にプログラムの inputがある行のコメント以下で設定した文字が入るようになります。こちらは日本語が使えて「パラメーターの入力」も見やすくなります。「#property strict」の有無による表示の違いについてはこちらを参考にしてください。